我想在我的代码中获取访问者的公共(public) 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;
我没有得到准确的 IP 地址它返回的值如下:fe80::9419:dfb3:22ce:4e88%68
但是当我在中看到我的 IP 时我的 IP 是什么? 它显示 13.67.58.30
。我如何获得准确的 IP 地址?
最佳答案
我建议反对使用Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
。原因是它由 X-Forwarded-For
HTTP header 传递,并且所有 HTTP header 都可以被欺骗。如果使用您的代码,用户可以通过简单地替换 header 来模拟他们想要的任何 IP。此外,也不能保证所有代理甚至都会将该 header 放在首位。
您可以通过以下方式获取用户的 IP 地址:
string ip = context.Request.UserHostAddress;
您看到的那个数字很可能是客户的 IPv6地址。
关于c# - 如何在asp.net中使用C#获取IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148983/