static public bool IsSiteLocal(this IPAddress addr)
{
switch (addr.AddressFamily) {
case System.Net.Sockets.AddressFamily.InterNetwork:
var addr_bytes = addr.GetAddressBytes();
return
addr_bytes[0] == 10 ||
addr_bytes[0] == 127 ||
addr_bytes[0] == 169 && addr_bytes[1] == 254 ||
addr_bytes[0] == 172 && (addr_bytes[1]&0xF0) == 16 ||
addr_bytes[0] == 192 && addr_bytes[1] == 168;
case System.Net.Sockets.AddressFamily.InterNetworkV6:
return
addr.IsIPv6LinkLocal ||
addr.IsIPv6SiteLocal ||
addr==IPAddress.IPv6Loopback;
default:
return false;
}
}