获取客户端的IP地址和计算机名?

4
我有一个ASP.Net 4.0应用程序,发布在公司内部网络上的IIS 7.0服务器上,并且我想把客户端的IP地址保存在我的数据库中。所以我想获取客户端的IP地址和计算机名称。
我尝试过从互联网搜索到的方法,但我只得到了"SERVER IP"和"SERVER NAME"。我认为这很合理,因为我试过的所有方法都是在服务器端处理的C#代码。
因此,我认为我必须使用客户端代码,例如JavaScript。
有人知道正确的方法吗?
1个回答

13
你可以使用Request对象上的UserHostAddressUserHostName属性:
string ip = Request.UserHostAddress;
string hostname = Request.UserHostName;

那可能是最好的选择,但我知道我的浏览器从不发送那些标头。也许那些是IE的功能。 - Pointy
2
@Pointy,用户的IP地址并不作为任何头部发送。它是从底层套接字中确定的,因此发送HTTP请求使用哪个浏览器并不重要。事实上,您可以编写一个使用WebClient的.NET程序从某台机器发送HTTP请求,客户端的IP地址仍将被获取。至于用户主机名,ASP.NET尝试使用DNS解析它。 - Darin Dimitrov
1
啊,我明白你的意思了 - 这是服务器基础设施的一个功能。谢谢! - Pointy
3
请注意,如果存在代理或负载均衡器,则此方法将失效。ASP.NET将获取代理或负载均衡器的IP地址而不是客户端IP地址,如果中间设备实现了一种标准(X-Forwarded-For头),则可以帮助解决这个问题。 - Chris Taylor
Request.UserHostAddress 适用于 IP 地址,但是 Request.UserHostName 返回相同的内容:在我的情况下,本地测试返回了两者为 ::1(而远程测试 Request.UserHostAddress 确实有效)。我最终使用了 Dns.GetHostEntry(Request.ServerVariables["REMOTE_ADDR"]).HostName; 来获取主机名,这样做起到了作用。 - TylerH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接