asp.netアプリに、クライアントコンピューターのipv4アドレスを取得する必要のあるコードがあります(ユーザーはすべて独自のネットワーク上にあります)。最近、アプリを実行するサーバーをWindows2008サーバーにアップグレードしました。これで、Request.UserHostAddressコードは、クライアントが古いOSを使用している場合はipv4を返し、新しいOS(Vista以降)を使用している場合はipv6を返します。したがって、これに依存する機能は、一部のクライアントでは機能し、他のクライアントでは機能しません。
この問題を解決するために、ipv6からipv4に変換することになっているコードを追加しました。これは、このオンラインチュートリアルからのものです:http: //www.4guysfromrolla.com/articles/071807-1.aspx。私はdsn.GetHostAddressを使用していて、返されたIPをループして、「InterNetwork」であるものを探しています。
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;
問題は、これがうまくいかないことです。ipv4から接続しているクライアントは、引き続きクライアントコンピューターの正しいipv4 IPを返しますが、VistaおよびWindows 7から接続しているクライアントは、クライアントコンピューターではなくSERVERマシンのipv4IPを返します。