我想知道为什么在使用以下代码时:
HttpContext.Current.Request.UserHostAddress
它返回服务器的本地网关地址。例如,(192.168.1.1)。
但使用时:
System.Net.Dns.GetHostAddresses(HttpContext.Current.Request.Url.Host)(0).ToString()
它成功解析了本地客户端的外部IP地址。
我最近升级了网络服务器网络上的网关/防火墙,无法弄清楚为什么新网关会以这种方式改变标题。
答案 0 :(得分:0)
这两者非常不同。
HttpContext.Current.Request.UserHostAddress
为您提供向您的网站发出请求的远程客户端AKA用户的IP地址。访问此属性是即时的,即不涉及查询和解析。这是获取用户IP地址的正确方法。
System.Net.Dns.GetHostAddresses(HttpContext.Current.Request.Url.Host)(0).ToString()
通过查询系统配置的DNS服务器,为您提供网站主机本身的IP地址。 永远不会为您提供用户的IP地址。
如果您从192.168.1.1
获得HttpContext.Current.Request.UserHostAddress
所有请求,则可能是路由器/转发配置错误。