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:

ipconfig pokazuje: fe80: 8179: 5576: c6d0: 8b16% 11UserHostAddress pokazuje: fe80 :: 8179: 5576: c6d0: 8b16% 10

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

questionAnswers(4)

yourAnswerToTheQuestion