【问题标题】:Get client's IP address and computer name?获取客户端的 IP 地址和计算机名称?
【发布时间】:2011-09-18 14:40:58
【问题描述】:

我有一个 ASP.Net 4.0 应用程序,在 IIS 7.0 服务器上的公司 Intranet 网络上发布,我想将客户端的 IP 地址保存在我的数据库中。所以我想获取客户端的IP地址和计算机名。

我尝试了互联网搜索的方法,但我得到了“服务器 IP”和“服务器名称”。我认为这是合乎逻辑的,因为我尝试的所有方法都是在服务器端进行的 C# 代码。

所以,我想我必须使用像 JavaScript 这样的客户端代码。

有没有人有正确的方法来做到这一点?

【问题讨论】:

    标签: c# javascript asp.net


    【解决方案1】:

    您可以在Request 对象上使用UserHostAddressUserHostName 属性:

    string ip = Request.UserHostAddress;
    string hostname = Request.UserHostName;
    

    【讨论】:

    • 这可能是最好的选择,但我知道我的浏览器从不发送这些标头。也许这些是 IE 的功能。
    • @Pointy,用户 ip 地址不作为任何标头发送。它由底层套接字确定,因此使用哪个浏览器发送 HTTP 请求并不重要。事实上,您可以使用 WebClient 编写一个 .NET 程序来从某台机器发送 HTTP 请求,并且仍然会获取客户端的 IP 地址。至于用户主机名,ASP.NET 尝试使用 DNS 来解析它。
    • 啊,我明白你的意思了——它是服务器端基础设施的一个功能。谢谢!
    • 您应该注意,如果混合使用代理或负载均衡器,这将崩溃。 ASP.NET 将获取代理或负载均衡器的 IP 地址而不是客户端 IP 地址,有一个标准,如果中间设备可以提供帮助,它们将添加 X-Forwarded-For 标头。
    • Request.UserHostAddress 适用于 IP 地址,但 Request.UserHostName 返回相同的内容:在我的情况下,本地测试为两者返回 ::1(而远程测试 Request.UserHostAddress 确实有效)。我最终使用了Dns.GetHostEntry(Request.ServerVariables["REMOTE_ADDR"]).HostName;,它可以获取主机名。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多