我想获得在我的网站注册的任何IP地址。如何在ASPNET中做到这一点。我用下面的代码,但是,它没有得到正确的IP地址如何获取IP地址?
string ipaddress = Request.UserHostAddress;
我想获得在我的网站注册的任何IP地址。如何在ASPNET中做到这一点。我用下面的代码,但是,它没有得到正确的IP地址如何获取IP地址?
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;
}
拆分HTTP_X_FORWARDED_FOR并选择最后一个更好 - 查看答案http://stackoverflow.com/a/13249280/52277 – 2014-05-01 05:08:10
'X-Forwarded-For'可以包含多个IP地址。 – Gabriel 2014-11-03 00:50:39
如果一个客户端连接,通过透明的非匿名代理,你可以从他们的地址:
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
可以返回null或“未知”如果无法获得IP那样。
Request.ServerVariables["REMOTE_ADDR"]
应该与Request.UserHostAddress
相同,如果请求不是来自非匿名代理,则可以使用其中的任一个。
但是,如果请求来自匿名代理,则无法直接获取客户端的IP。这就是为什么他们称这些代理匿名。
应该使用HTTP_X_FORWARDED_FOR,但它可以返回多个由逗号分隔的IP地址。见this page。
所以你应该经常检查它。我个人使用分割功能。
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;
}
我会小心的,你选择的第一个项目可能是192.168.x.x.您通常希望获得最后一个,因为那是连接到您的系统的最后一个代理或客户端(可能是最可靠的来源)。见[维基百科文章](http://en.wikipedia.org/wiki/X-Forwarded-For)我使用的代码是这样的:'ip =(HttpContext.Request.ServerVariables [“HTTP_X_FORWARDED_FOR”] ??“” ).Split(',')。Last()。Trim();' – 2012-11-06 10:30:19
@WouterSimons,根据[Wikipedia article](https://en.wikipedia.org/wiki/X-Forwarded-For)“最左边的是原始客户端“,所以应该使用First()而不是Last() – 2015-11-25 06:36:01
在您使用IP地址进行安全保护的情况下,您应该了解您的基础设施。
如果您在Web服务器和设置标头的客户端之间使用代理,则应该可以信任最后一个地址。然后你使用像穆罕默德建议的更新代码,总是从转发头获得最后一个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;
}
这Wikipedia article更全面地说明了风险。
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"];
}
请向您的代码添加解释(并改进缩进)。这会提高你的答案的质量! – 2016-12-02 12:20:23
你永远不会使用'le'变量 - 我想你想在下一行使用那个而不是'0' – 2016-12-02 12:36:29
在MVC 6,您检索IP地址这种方式:
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
1 http://www.w3schools.com/asp/coll_servervariables.asp](http://www .w3schools.com/asp/coll_servervariables.asp)2. [http://balanagaraj.wordpress.com/2008/01/07/get-users-country-name-using-ip-address/](http:// balanagaraj.wordpress.com/2008/01/07/get-users-country-name-using-ip-address/) – solairaja 2009-12-15 12:50:02
[如何在ASP.NET中获取用户的客户IP地址?](http:/ /stackoverflow.com/questions/735350/how-to-get-a-users-client-ip-address-in-asp-net) – 2015-06-10 17:54:28