我想在我的代码中获取访问者的公共 IP 地址。
我写了下面的代码来获取它:
var context = System.Web.HttpContext.Current;
string ip = String.Empty;
if (context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
{
ip = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else if (!String.IsNullOrWhiteSpace(context.Request.UserHostAddress))
{
ip = context.Request.UserHostAddress;
}
if (ip == "::1")
ip = "127.0.0.1";
return ip;
Run Code Online (Sandbox Code Playgroud)
我没有得到确切的 IP 地址它返回的值如下:fe80::9419:dfb3:22ce:4e88%68但是当我在什么是我的 IP 中看到我的 IP 时?它显示13.67.58.30。我将如何获得确切的 IP 地址?
要获取请求的客户端 IP,您可以使用以下命令读取它:
var clientIp = Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ??
Request.ServerVariables["REMOTE_ADDR"];
Run Code Online (Sandbox Code Playgroud)
您看到的 IP 地址是 IPv6 地址,因此它们是有效的 IP 编号,由客户端发送 HTTP 标头,因此您对此无能为力,很糟糕。
您需要记住的一件事是 HTTP_X_FORWARDED_FOR 可以包含多个有效的 IP 号码。
var listIp = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
clientIp = string.IsNullOrEmpty(listIp) ? Request.ServerVariables["REMOTE_ADDR"]
: listIp.Split(',')[0];
Run Code Online (Sandbox Code Playgroud)