diff --git a/src/network/utils.rs b/src/network/utils.rs index a77d063..fddc686 100644 --- a/src/network/utils.rs +++ b/src/network/utils.rs @@ -24,29 +24,55 @@ pub fn is_reachable(address: &str) -> bool { #[cfg(target_os = "linux")] { - let output = Command::new("ping") - .args(["-c", "1", "-W", "2", addr]) - .output(); + if addr.parse::().is_ok() { + let output = Command::new("ping") + .args(["-c", "1", "-W", "2", addr]) + .output(); - if let Ok(out) = output { - out.status.success() + if let Ok(out) = output { + out.status.success() + } else { + log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); + false + } } else { - log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); - false + let output = Command::new("curl") + .args(["--head", "--silent", "--fail", addr]) + .output(); + + if let Ok(out) = output { + out.status.success() + } else { + log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); + false + } } } #[cfg(target_os = "windows")] { - let output = Command::new("ping") - .args(["-n", "1", "-w", "2000", addr]) - .output(); + if addr.parse::().is_ok() { + let output = Command::new("ping") + .args(["-n", "1", "-w", "2000", addr]) + .output(); - if let Ok(out) = output { - out.status.success() + if let Ok(out) = output { + out.status.success() + } else { + log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); + false + } } else { - log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); - false + let output = Command::new("powershell") + .args(["-Command", &format!("Invoke-WebRequest -Uri {} -Method HEAD -UseBasicParsing", addr)]) + .output(); + + if let Ok(out) = output { + out.status.success() + } else { + log::log("network_utils", &*format!("Couldn't reach address {}!", addr), LogLevel::Error); + false + } } }