use std::process::Command;
pub fn internal_ips() -> String {
let out = Command::new("hostname").arg("-I").output();
match out {
Ok(o) => {
let s = String::from_utf8_lossy(&o.stdout);
let trimmed = s.trim().to_string();
if trimmed.is_empty() {
"N/A".into()
} else {
trimmed
}
}
Err(_) => "N/A".into(),
}
}
pub fn external_ip(container: &str) -> String {
let via_docker = Command::new("docker")
.args(["exec", container, "wget", "-qO-", "ifconfig.me/ip"])
.output();
if let Ok(o) = via_docker {
if o.status.success() {
let s = String::from_utf8_lossy(&o.stdout);
let ip = s.split_whitespace().next().unwrap_or("").to_string();
if !ip.is_empty() {
return ip;
}
}
}
let via_curl = Command::new("curl")
.args(["-sf", "--max-time", "3", "ifconfig.me/ip"])
.output();
if let Ok(o) = via_curl {
if o.status.success() {
let s = String::from_utf8_lossy(&o.stdout);
let ip = s.split_whitespace().next().unwrap_or("").to_string();
if !ip.is_empty() {
return ip;
}
}
}
"N/A".into()
}