Problème de Conversion de l'ipv6 pour ipv4
J'ai un peu de code dans un asp.net application qui needsto obtenir l'adresse ipv4 de l'ordinateur client (les utilisateurs sont tous sur notre propre réseau). Récemment, nous avons mis à niveau le serveur de l'application s'exécute sur windows 2008 server. Maintenant la Demande.UserHostAddress code renvoie ipv4 lorsque le client est sur un ancien OS et ipv6 quand ils sont sur un nouvel OS (Vista et supérieur). Donc la fonction qui relys sur ce qui fonctionne pour certains clients et pas les autres.
J'ai ajouté le code qui est censé pour convertir de l'ipv6 pour ipv4, pour essayer de résoudre ce problème. C'est à partir de ce tutoriel en ligne: http://www.4guysfromrolla.com/articles/071807-1.aspx .Je suis à l'utilisation de la dsn.GetHostAddress et puis en parcourant les IPs retournés à la recherche de celui qui est "Inter"
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;
Le problème est que cela ne fonctionne pas pour moi. Les clients se connectant à partir d'ipv4 continuer à renvoyer la bonne ipv4 IP de l'ordinateur client, mais les clients se connectant à partir de Vista et Windows 7, il est de retour ipv4 IP de la SERVEUR machine pas l'ordinateur client.
Yep, juste trouvé que même l'exemple ici: 4guysfromrolla.com/articles/071807-1.aspx. Si rien d'autre, à l'aide de
ToString()
pour vérifier enum l'égalité dirait qu'il a été écrit par un total .NET débutant.OriginalL'auteur Eden | 2010-01-11
Vous devez vous connecter pour publier un commentaire.
Réponse Simple: Désactiver IPV6 sur le serveur, ou de supprimer l'adresse IPV6 du serveur à partir de l'entrée DNS.
Il n'est pas de la magie IPV4<->IPV6 convertisseur. Ils sont complètement différents protocoles, et des adresses dans un ne pas traduire à l'autre. Si vous voulez récupérer de façon fiable l'adresse IPV4 du client, vous devez vous assurer que le client se connecte sur IPV4.
OriginalL'auteur Jesse Weigert
J'ai aussi copié l'exemple de code et une collègue m'a fait remarquer qu'il était de toute évidence buggy.
Cette ligne utilise le nom d'hôte du serveur, d'où le résultat incorrect:
J'ai corrigé le code dans mon projet comme suit:
Le code ci-dessus fonctionne ASP.Net 2.0 sur Windows 7/Server 2008.
Espérons que cette aide.
OriginalL'auteur Berend Engelbrecht
si vous êtes en utilisant .Net 4.5, il existe une méthode de fournir à convertir IP6 à IP4
Vous pouvez trouver les détails ici
OriginalL'auteur Ravi Shankar