C# 如何获取IP地址?
我想得到的ip地址谁是在我的网站注册。如何在ASPNET中执行此操作。我使用了下面的代码,但是,它没有得到正确的IP地址C# 如何获取IP地址?,c#,.net,asp.net,C#,.net,Asp.net,我想得到的ip地址谁是在我的网站注册。如何在ASPNET中执行此操作。我使用了下面的代码,但是,它没有得到正确的IP地址 string ipaddress = Request.UserHostAddress; 您可以使用此方法获取客户端计算机的IP地址 public static String GetIP() { String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"
string ipaddress = Request.UserHostAddress;
您可以使用此方法获取客户端计算机的IP地址
public static String GetIP()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return ip;
}
如果客户端通过透明的非匿名代理进行连接,则可以从以下地址获取其地址:
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
如果无法通过这种方式获得IP,则返回null或“未知”
Request.ServerVariables[“REMOTE\u ADDR”]
应与Request.UserHostAddress
相同,如果请求不是来自非匿名代理,则可以使用这两种方法
但是,如果请求来自匿名代理,则无法直接获取客户端的IP。这就是为什么他们将这些代理称为匿名代理。应该使用HTTP\u X\u FORWARDED\u FOR,但它可以返回多个用逗号分隔的IP地址。看 所以你应该经常检查它。我个人使用Split函数
public static String GetIPAddress()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
else
ip = ip.Split(',')[0];
return ip;
}
在使用IP地址进行安全保护的情况下,您应该了解您的基础结构 如果您在web服务器和设置标头的客户端之间使用代理,则应该能够信任最后一个地址。然后使用Muhammed建议的代码进行更新,以始终从转发头获取最后一个IP地址(请参见下面的代码) 如果您不使用代理,请注意X-Forwarded-For头很容易被欺骗。我建议你忽略它,除非你有明确的理由不这样做 我更新了穆罕默德·阿赫塔的代码如下,以便您选择:
public string GetIP(bool CheckForward = false)
{
string ip = null;
if (CheckForward) {
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
if (string.IsNullOrEmpty(ip)) {
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} else { // Using X-Forwarded-For last address
ip = ip.Split(',')
.Last()
.Trim();
}
return ip;
}
这更全面地解释了风险。在MVC 6中,您可以通过以下方式检索IP地址:
string result = string.Empty;
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ip))
{
string[] ipRange = ip.Split(',');
int le = ipRange.Length - 1;
result = ipRange[0];
}
else
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
我会小心的,你选择的第一个项目可能是192.168.x.x。您通常希望获取最后一个,因为它是连接到您的系统的最后一个代理或客户端(可能是最可靠的源)。请参阅我使用的代码:
ip=(HttpContext.Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]???”).Split(“,”).Last().Trim()代码>@WouterSimons,根据相同的“最左边是原始客户机”,因此应该使用First()而不是Last()1。2.拆分HTTP_X_FORWARDED_FOR可能重复,选择last更好-请参阅答案X-FORWARDED-FOR
可以包含多个IP地址。请为代码添加说明(并改进缩进)。这将提高您答案的质量!您从未使用过le
变量-我想您应该在下一行中使用该变量,而不是0
。Last()需要System.Linq,以防无法编译该代码