2017-03-11 63 views
0

我正在尝试获取访问日志的客户机信息。如何在ASP.NET/C#中获取客户端设备名称和IP地址?如何获取ASP.NET/C#中的客户端设备信息?

+1

检查这篇文章如何获取用户的公共IP地址:http://stackoverflow.com/a/19286308/3126771。你的意思是“客户端设备”?你在说浏览器代理吗? – Arun

回答

2

您可以从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协议中没有内置这种概念,所以如果您希望能够检索,您的客户端可能需要使用一些自定义标头或参数来提供它它在服务器上。

相关问题