IIS7或ASP.NET返回奇数客户端IP地址

时间:2009-03-11 16:23:18

标签: c# asp.net iis iis-7

在我的ASP.NET应用程序中,我说这样的东西来获取客户端IP地址:

string ipAddress = HttpContext.Current.Request.UserHostAddress;

这是我一直使用的正常,直接的方式,而且似乎总能奏效。大家都知道上面的语句只是REMOTE_ADDR服务器变量的包装器。

够简单吧?好吧,在过去的几天里,我一直注意到在我的本地开发机器上,它将这作为值返回:

"fe80::dde4:def3:7f1b:a582%10"

我没有世俗的想法。我正在运行Vista x64并使用IIS7运行我的应用程序。我确实启用了IPv4和IPv6,但通常返回类似:

"1::"

我不知道为什么会这样。重启不会解决任何问题。

修改

发生这种情况时我正在使用Chrome。

2 个答案:

答案 0 :(得分:8)

看起来它正在返回IPv6

::1是IPv6的环回地址,它只是1::的反向字节顺序。

我还应该注意IPv6中的fe80::/10地址是自动配置IP地址(在IPv4中,这些是169.254.0.0/16)。例如,如果您在专用LAN上并且无法访问DHCP服务器,则Windows将自动为您的以太网适配器分配自动配置IP地址。

仅供参考,您通常应该为无法访问DHCP服务器的适配器分配专用IP地址。

答案 1 :(得分:4)

当您看到此问题时,您使用的是FireFox吗?默认情况下,它将在可用时使用IPv6。我建议关掉它:

  • 导航至“about:config”
  • 找到“network.dns.disableIPv6”条目
  • 将其设为true

这也将加速本地开发和调试,因为在启用IPv6时,FF有时会因为没有明显原因而挂起。

我建议的另一个选择是禁用IPv6。它现在没有用,除非你运行的是端到端的IPv6,没有最终用户的ISP。只需在连接上打开连接属性,然后取消选中“Internet协议版本6(TCP / IPv6)”框。