2687ace
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())
}
}
}