在我的ASP.NET应用程序中,我说这样的东西来获取客户端IP地址:
string ipAddress = HttpContext.Current.Request.UserHostAddress;
这是我一直使用的正常,直接的方式,而且似乎总能奏效。大家都知道上面的语句只是REMOTE_ADDR服务器变量的包装器。
够简单吧?好吧,在过去的几天里,我一直注意到在我的本地开发机器上,它将这作为值返回:
"fe80::dde4:def3:7f1b:a582%10"
我没有世俗的想法。我正在运行Vista x64并使用IIS7运行我的应用程序。我确实启用了IPv4和IPv6,但通常返回类似:
"1::"
我不知道为什么会这样。重启不会解决任何问题。
修改
发生这种情况时我正在使用Chrome。
答案 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。我建议关掉它:
这也将加速本地开发和调试,因为在启用IPv6时,FF有时会因为没有明显原因而挂起。
我建议的另一个选择是禁用IPv6。它现在没有用,除非你运行的是端到端的IPv6,没有最终用户的ISP。只需在连接上打开连接属性,然后取消选中“Internet协议版本6(TCP / IPv6)”框。