use std::net::IpAddr; #[must_use] pub fn is_public_ip(ip: &IpAddr) -> bool { match ip { IpAddr::V4(v4) => { !(v4.is_private() || v4.is_loopback() || v4.is_link_local() || v4.is_broadcast() || v4.is_documentation() || v4.is_unspecified() || v4.octets()[0] == 0 || (v4.octets()[0] == 100 && (64..128).contains(&v4.octets()[1])) || v4.octets()[0] >= 224) } IpAddr::V6(v6) => { !(v6.is_loopback() || v6.is_unspecified() || v6.is_unique_local() || v6.is_unicast_link_local() || v6.is_multicast()) } } }