Wie ermitteln Sie die Gleichheit zwischen zwei IPv6-Adressen?
Ich habe eine Anwendung, mit der Administratoren gültige IP-Adressen angeben können, über die Webdienstanforderungen gestellt werden können. Ich nehme einfach die konfigurierten IP-Adressen und vergleiche sie mit der eingehenden Anfrage. Der Vergleich von zwei IPv4-Adressen ist trivial, und ich dachte, der Vergleich von zwei IPv6-Adressen wäre auch sinnvoll.
Meine Netzwerk-Ignoranz zeigte sich jedoch, als ich bemerkte, dass IPv6-Adressen etwas komplexer sind. Ein Problem, das mir aufgefallen ist, ist, dass wenn ich die IP-Adresse auf dem Computer betrachte (wurde angezeigt, auf welcher VMWare-Konsole die IP-Adresse angezeigt wurde), die IP-Adresse aus der Webanforderung (HttpContext.Current.Request.UserHostAddress
Ich habe festgestellt, dass einer von ihnen in% 10 und einer in% 11 geendet hat:
Der einzige Unterschied ist die% 10 und% 11 - was gibt?
Ich habe auch gesehen, dass IPv6-Adressen mit "/" enden, gefolgt von 2 Ziffern. Sollte ich diese letzten 3 Ziffern (falls vorhanden) bei einem Vergleich einfach ignorieren? Wenn ja, nach welchen gültigen alternativen Endungen muss ich suchen?
----------- EDIT -------------
Hier ist meine Lösung basierend auf der Antwort ...
Ich speichere einfach eine "bereinigte" IP-Adresse und vergleiche diese mit einer "bereinigten" IP-Adresse. Wenn ich hier .NET verwende, scrubbe ich eine IP-Adresse. Vom Standpunkt der Leistung aus nicht das Beste, aber es funktioniert. Ich würde lieber nur einen Vergleich derGetAddressBytes()
aber ich benutze eineDictionary
und ich habe mich gegen den zusätzlichen Schritt entschieden, meinen eigenen zu erschaffenByteComparer
.
IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
string scrubbedIpStr = scrubbedIp.ToString()
}