我在一个 asp.net 应用程序中有一些代码需要获取客户端计算机的 ipv4 地址(用户都在我们自己的网络上)。最近我们将运行应用程序的服务器升级到 Windows 2008 服务器。现在,当客户端在较旧的操作系统上时,Request.UserHostAddress 代码返回 ipv4,当客户端在较新的操作系统(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机器而不是客户端计算机的 ipv4 IP。