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