diff options
| author | ache <ache@ache.one> | 2026-08-16 20:55:33 +0200 |
|---|---|---|
| committer | ache <ache@ache.one> | 2026-08-16 20:55:33 +0200 |
| commit | 197f75c7c5d0b4dab1f92a739dc1be0d90f5b27d (patch) | |
| tree | 40cce77ff65e30c2484f8864f12c60003807cab1 /src/main.rs | |
| parent | Resolve DNS target (diff) | |
feat: Add support for default target and implement robust target resolution
Introduces a new `--default-target` argument to allow specifying a default host address.
In case that target isn't defined, as a configuration option.
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/main.rs b/src/main.rs index 99db51b..ee5add6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,29 @@ use print::{print_legende_line, print_ping_line, print_stats}; use state::State; use stats::compute_stats; +fn parse_target(target_str: &str) -> IpAddr { + if let Ok(ip) = parse_ip(target_str) { + ip + } else { + // Try DNS resolution + let dns_str = format!("{}:0", target_str); + match dns_str.to_socket_addrs() { + Ok(mut addrs) => { + if let Some(addr) = addrs.next() { + addr.ip() + } else { + eprintln!("Error: no DNS addresses found"); + std::process::exit(1); + } + } + Err(e) => { + eprintln!("Error: DNS resolution failed: {}", e); + std::process::exit(1); + } + } + } +} + fn main_loop( args: &Args, states: &mut Vec<State>, @@ -109,26 +132,9 @@ async fn main() { let args = Args::parse(); let target: IpAddr = if let Some(target_str) = args.target.clone() { - if let Ok(ip) = parse_ip(&target_str) { - ip - } else { - // Try DNS resolution - let dns_str = format!("{}:0", target_str); - match dns_str.to_socket_addrs() { - Ok(mut addrs) => { - if let Some(addr) = addrs.next() { - addr.ip() - } else { - eprintln!("Error: no DNS addresses found"); - std::process::exit(1); - } - } - Err(e) => { - eprintln!("Error: DNS resolution failed: {}", e); - std::process::exit(1); - } - } - } + parse_target(&target_str) + } else if let Some(default_target_str) = args.default_target.clone() { + parse_target(&default_target_str) } else { eprintln!("Error: target address is required"); std::process::exit(1); |