【问题标题】:How to get Client Device information in ASP.NET / C#?如何在 ASP.NET / C# 中获取客户端设备信息?
【发布时间】:2017-08-01 16:25:58
【问题描述】:
我正在尝试获取访问日志的客户端计算机信息。如何在 ASP.NET / C# 中获取客户端设备名称和 IP 地址?
【问题讨论】:
标签:
asp.net
asp.net-mvc
client
ip-address
【解决方案1】:
您可以从Request.UserHostAddress 属性中获取直接客户端 IP:
public ActionResult Index()
{
string ip = Request.UserHostAddress;
...
}
话虽如此,在很多情况下这可能还不够好。例如,假设您的 Web 服务器位于反向代理(如 nginx 或 HAProxy)的后面。在这种情况下,UserHostAddress 将始终返回此代理的 IP。如果您想在这种情况下获取原始客户端 IP 地址,可以使用这些反向代理服务器可能设置的标准 X-Forwarded-For 请求标头:
string ip = Request.Headers["X-Forwarded-For"];
另外请注意,如果请求通过许多代理服务器,那么X-Forwarded-For 标头将表示每个代理服务器的 IP 地址的逗号分隔列表:
X-Forwarded-For: client, proxy1, proxy2
您可能需要考虑这种情况,如果您想获得最接近或等于客户端的 IP 地址,那么您应该从该列表中提取最左边的地址。
就“客户端设备名称”而言,TCP/HTTP 协议中没有内置这样的概念,因此如果您希望能够检索它,您的客户端可能需要使用一些自定义标头或参数来提供它在服务器上。