Polecam korzystanie z biblioteki IPNetwork https://github.com/lduchosal/ipnetwork. Od wersji 2 obsługuje również protokoły IPv4 i IPv6.
IPv6
IPNetwork ipnetwork = IPNetwork.Parse("fe80::202:b3ff:fe1e:8329/24");
IPAddress ipaddress = IPAddress.Parse("2001:db8::");
IPAddress ipaddress2 = IPAddress.Parse("fe80::202:b3ff:fe1e:1");
bool contains1 = IPNetwork.Contains(ipnetwork, ipaddress);
bool contains2 = IPNetwork.Contains(ipnetwork, ipaddress2);
Console.WriteLine("{0} contains {1} : {2}", ipnetwork, ipaddress, contains1);
Console.WriteLine("{0} contains {1} : {2}", ipnetwork, ipaddress2, contains2);
Wyjście
fe80::/24 contains 2001:db8:: : False
fe80::/24 contains fe80::202:b3ff:fe1e:1 : True
IPv4
IPNetwork ipnetwork = IPNetwork.Parse("192.168.168.100/24");
IPAddress ipaddress = IPAddress.Parse("192.168.168.200");
IPAddress ipaddress2 = IPAddress.Parse("192.168.0.200");
bool contains1 = IPNetwork.Contains(ipnetwork, ipaddress);
bool contains2 = IPNetwork.Contains(ipnetwork, ipaddress2);
Console.WriteLine("{0} contains {1} : {2}", ipnetwork, ipaddress, contains1);
Console.WriteLine("{0} contains {1} : {2}", ipnetwork, ipaddress2, contains2);
Wyjście
192.168.168.0/24 contains 192.168.168.200 : True
192.168.168.0/24 contains 192.168.0.200 : False
Miłej zabawy!
Czy byłby (a) zainteresowany (a) rozwiązaniem tylko rozwiązanie IPv4? – Tung
Nie. Ipv4 jest całkiem łatwe. Wyzwaniem jest ipv6 lub mieszanie dwóch formatów. Sądząc po braku odpowiedzi, wydaje się, że niewiele osób to obchodzi ... – ahmd0