我有一些asp.net应用程序需要获取客户端计算机的ipv4地址(用户都在我们自己的网络上)的代码。最近我们将应用程序运行的服务器升级到了Windows 2008服务器。现在,Request.UserHostAddress代码在客户端处于较旧的操作系统时返回ipv4,而在较新的操作系统(Vista及更高版本)时则返回ipv6。因此,依赖于此功能的功能适用于某些客户而不是其他客户。问题转换ipv6到ipv4
我添加了应该从ipv6转换到ipv4的代码,试图解决这个问题。这是从这个在线教程:http://www.4guysfromrolla.com/articles/071807-1.aspx .I'm使用dsn.GetHostAddress,然后循环通过IPS退换寻找一个是“互联网络”
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连接的客户端将返回机器的ipv4 IP而不是客户端计算机。
我见过许多博客上重复的示例代码。我很惊讶,因为它是错误的。第1部分,获取客户端的IP地址。如果失败,请返回服务器的IP地址。 WTF?!? – 2010-04-05 16:07:17
是的,刚刚在这里找到同样的例子:http://www.4guysfromrolla.com/articles/071807-1.aspx。如果没有别的,使用'ToString()'来检查枚举相等,看起来它是由一个.NET新手编写的。 – Groo 2010-12-07 16:03:07