我正在尝试获取访问日志的客户端计算机信息。如何在ASP.NET / C#中获取客户端设备名称和IP地址?
答案 0 :(得分: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协议中没有内置这样的概念,因此如果您希望能够检索它,您的客户端可能需要使用一些自定义标头或参数来提供它在服务器上。