Jak określić równość między dwoma adresami IPv6?
Mam aplikację, która umożliwia administratorom określenie prawidłowych adresów IP, z których można składać żądania usługi sieciowej. Po prostu biorę skonfigurowane adresy IP i porównuję je z przychodzącym żądaniem. Porównanie dwóch adresów IPv4 jest banalne i pomyślałem, że porównanie dwóch adresów IPv6 również będzie możliwe.
Jednak moja ignorancja sieciowa zaczęła się ujawniać, gdy zauważyłem, że adresy IPv6 są trochę bardziej złożone. Jedną z kwestii, którą zauważyłem, jest to, że jeśli patrzę na adres IP na maszynie (czy przeglądałem, co ma konsola VMWare pokazywała adres IP), w porównaniu z adresem IP z żądania WWW (HttpContext.Current.Request.UserHostAddress
w .NET) Zauważyłem, że jeden z nich zakończył się w% 10, a drugi w% 11:
Jedyna różnica to% 10 i% 11 - co daje?
Widziałem również adresy IPv6 kończące się na „/”, po których następują 2 cyfry. Czy powinienem po prostu zignorować te 3 ostatnie cyfry (jeśli istnieją) podczas porównywania? Jeśli tak, jakie są ważne alternatywne zakończenia, których muszę szukać?
----------- EDYTOWAĆ -------------
Oto moje rozwiązanie oparte na udzielonej odpowiedzi ...
Po prostu przechowuję „wyszorowany” adres IP i porównuję go z „wymazanym” adresem IP. Korzystając z .NET, opisuję sposób, w jaki skanuję adres IP. Nie najlepiej z punktu widzenia wydajności, ale działa. Wolałbym po prostu porównaćGetAddressBytes()
ale używamDictionary
i zdecydowałem się na dodatkowy krok tworzenia własnegoByteComparer
.
IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
string scrubbedIpStr = scrubbedIp.ToString()
}