Problem der Konvertierung von ipv6 zu ipv4
Ich habe einige code in eine asp.net app, needsto Holen Sie sich die ipv4-Adresse des client-Computers (die user sind alle auf unserem eigenen Netzwerk). Vor kurzem haben wir ein Upgrade der server-app läuft auf windows 2008 server. Jetzt die Anfrage.UserHostAddress code gibt die ipv4, wenn der client auf eine ältere OS-und ipv6, wenn Sie auf ein neueres OS (Vista und höher). Also die Funktion, die relys auf dies funktioniert für einige Kunden, und nicht andere.
Fügte ich code, der soll die Umrechnung von ipv6 zu ipv4 zu versuchen, um dieses problem zu beheben. Es ist aus diesem online-tutorial: http://www.4guysfromrolla.com/articles/071807-1.aspx .Ich bin mit dsn.GetHostAddress und dann die Schleife durch die IPs kehrte der Suche nach einem, der "Internetz"
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
Das problem ist, dass dies nicht für mich arbeiten. Die clients, die Verbindung über ipv4 weiter zurück die richtige ipv4-IP die client-computer, aber die clients, die eine Verbindung von Vista und Windows 7 es ist die Rückkehr der ipv4-IP die SERVER Maschine nicht auf dem client-computer.
- Ich habe gesehen, dass dieses Beispiel-code wiederholt sich auf vielen blogs. Ich bin erstaunt, da es so falsch.. Teil 1, bekommen Clients IP-Adresse. Wenn das fehlschlägt, senden Sie das server-IP-Adresse. wtf?!?
- Ja, gerade festgestellt, dass gleiche Beispiel hier: 4guysfromrolla.com/articles/071807-1.aspx. Wenn nichts anderes, mit
ToString()
zu prüfen, für die enum-Gleichheit sieht aus wie es geschrieben wurde, von insgesamt .NET-Neuling.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfache Antwort: Deaktivieren Sie IPV6 auf dem server, oder entfernen Sie die IPV6-Adresse des Servers aus dem DNS-Eintrag.
Es ist nicht eine Magische IPV4<->IPV6-Konverter. Sie sind völlig verschiedene Protokolle und Adressen in einem nicht übersetzen zu den anderen. Wollen Sie zuverlässig abrufen der IPV4-Adresse des Clients, die Sie benötigen, um sicherzustellen, dass der client verbindet sich über IPV4.
Hatte ich auch kopiert die Beispiel-code und ein Kollege wies darauf hin, dass es offensichtlich war buggy.
Diese Linie verwendet die host-Namen des Servers, daher das falsche Ergebnis:
Habe ich korrigiert, den code in meinem Projekt wie folgt:
Den code oben funktioniert ASP.Net 2.0 auf Windows 7/Server 2008.
Hoffe, das hilft.
wenn Sie mit .Net 4.5 Framework dann gibt es eine Methode zum konvertieren von IP6 auf IP4
Finden Sie die details hier