aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs46
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);