use crate::packets::MAC;
#[cfg(unix)]
pub fn get_devices() -> Vec<String> {
let mut ret_list = Vec::new();
ret_list
}
#[cfg(unix)]
pub fn set_monitor_mode(dev_name: &str) {
std::process::Command::new("ip")
.args(["link", "set", dev_name, "down"])
.output()
.unwrap();
std::process::Command::new("iwconfig")
.args([dev_name, "mode", "monitor"])
.output()
.unwrap();
std::process::Command::new("ip")
.args(["link", "set", dev_name, "up"])
.output()
.unwrap();
}
#[cfg(unix)]
pub fn set_wifi_channel(dev_name: &str, channel: u8) {
std::process::Command::new("iwconfig")
.args([dev_name, "channel", channel.to_string().as_str()])
.output()
.unwrap();
}
#[cfg(unix)]
pub fn get_interface_mode(dev_name: &str) -> String {
let iw_out = String::from_utf8(
std::process::Command::new("iwconfig")
.arg(dev_name)
.output()
.unwrap()
.stdout,
)
.unwrap();
let mut mode = "".to_string();
for part in iw_out.split(" ") {
if part.trim().len() > 0 && part.contains("Mode:") {
mode = part.trim().replace("Mode:", "").to_string();
}
}
mode
}
#[cfg(unix)]
pub fn get_wifi_channel(dev_name: &str) -> u8 {
let out = std::process::Command::new("iwlist")
.args([dev_name, "channel"])
.output()
.unwrap();
let s = String::from_utf8(out.stdout).unwrap();
let mut ch = "0".to_string();
for line in s.split("\n") {
if line.trim().contains("Current Frequency") {
ch = line
.trim()
.replace("Current Frequency:", "")
.split(" ")
.into_iter()
.last()
.unwrap()
.replace(")", "")
}
}
ch.parse().unwrap()
}
#[cfg(unix)]
pub fn get_mac_address(dev_name: &str) -> MAC {
let echo_child = std::process::Command::new("ip")
.args(["-j", "a", "s", dev_name])
.output()
.expect("Failed to run ip command");
let ip_out = String::from_utf8(echo_child.stdout).unwrap();
if ip_out.contains("does not exist.") || ip_out.trim().len() == 0 {
return MAC::new([0; 6]);
}
let mut mac = "";
MAC::try_from(mac).expect("Could not interpret string as valid MAC address")
}
#[cfg(windows)]
pub fn set_monitor_mode(_device: &str) {
tracing::error!("Using unsupported feature in windows!");
}
#[cfg(windows)]
pub fn set_wifi_channel(_device: &str, _channel: u8) {
tracing::error!("Using unsupported feature in windows!");
}
#[cfg(windows)]
pub fn get_devices() -> Vec<String> {
println!("[Get Wifi Devices] Unsupported Feature on Windows!");
Vec::new()
}
#[cfg(windows)]
pub fn get_mac_address(_dev_name: &str) -> MAC {
tracing::error!("Using unsupported feature in windows!");
MAC::BROADCAST
}
#[cfg(windows)]
pub fn get_interface_mode(_dev_name: &str) -> String {
tracing::error!("Using unsupported feature in windows!");
"".to_string()
}
#[cfg(windows)]
pub fn get_wifi_channel(_dev_name: &str) -> u8 {
tracing::error!("Using unsupported feature in windows!");
0
}