Request.UserHostAddress
Request.UserHostAddress 是一种比较简便的获得客户端IP的方式。
MSDN的官方文档中如此描述了这个Property:获取远程客户端的 IP 主机地址。
本地测试得到 ::1
访问本地的网页时,往往通过 http://localhost:端口/文件名
来进行访问,浏览器并不知道localhost
是什么,会去通过DNS让系统尝试解析名为localhost
的域名,再根据解析得到的IP地址进行访问。
而我们查看系统对于localhost
的解析记录时,得到了如下结果:
>nslookup localhost
服务器: UnKnown
Address: 2001:da8::666
名称: localhost
Addresses: ::1
127.0.0.1
我们可以发现 ::1
和 127.0.0.1
都是在DNS的A记录里的,因为我们的系统支持ipv6(::1
是一个ipv6地址),ipv6/ipv4双栈DNS会根据顺序访问第一个可用的ip,所以会去访问::1
而不是127.0.0.1
。
其实,::1
是ipv6中的本地回环地址,正如127.0.0.1
是ipv4中的本地回环地址,只因为我们通过了ipv6访问了本地服务器,致使了我们看到的访问者ip也是::1
而不是127.0.0.1
。
重见127.0.0.1
既然解析localhost
时会根据顺序优先通过ipv6访问::1
,如果我们使用127.0.0.1
代替localhost
,我们就能看见访问者ip是127.0.0.1
了。