diff --git a/src/address.rs b/src/address.rs index 83e6b0c8..44909041 100644 --- a/src/address.rs +++ b/src/address.rs @@ -70,18 +70,18 @@ pub fn parse_addresses(input: &Opts) -> Vec { } // Finally, craft a list of addresses to be excluded from the scan. - let mut excluded_ips: Vec = Vec::new(); + let mut excluded_ips: BTreeSet = BTreeSet::new(); if let Some(exclude_addresses) = &input.exclude_addresses { for addr in exclude_addresses { excluded_ips.extend(parse_address(addr, &backup_resolver)); } } - ips.into_iter() - .collect::>() - .into_iter() - .filter(|ip| !excluded_ips.contains(ip)) - .collect() + // Remove duplicated/excluded IPs. + let mut seen = BTreeSet::new(); + ips.retain(|ip| seen.insert(*ip) && !excluded_ips.contains(ip)); + + ips } /// Given a string, parse it as a host, IP address, or CIDR.