我想获得在我的网站上注册的IP地址.如何在ASPNET中执行此操作.我使用了以下代码,但是,它没有获得正确的IP地址
string ipaddress = Request.UserHostAddress;
Muhammad Akh.. 68
您可以使用此方法获取客户端计算机的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; }
`X-Forwarded-For`可以包含多个IP地址. (7认同)
拆分HTTP_X_FORWARDED_FOR并选择最后更好 - 请参阅答案http://stackoverflow.com/a/13249280/52277 (2认同)
Wouter Simon.. 38
在使用IP地址进行安全性的情况下,您应该了解您的基础结构.
如果您在Web服务器和设置标头的客户端之间使用代理,则应该能够信任最后一个地址.然后你使用像穆罕默德建议的更新代码来始终从转发头获取最后一个IP地址(参见下面的代码)
如果您不使用代理,请注意X-Forwarded-For标头很容易欺骗.我建议你忽略它,除非你有明确的理由不这样做.
我更新了Muhammed Akhtar的代码如下,以便您选择:
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; }
这篇维基百科文章更彻底地解释了风险.
您可以使用此方法获取客户端计算机的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; }
在使用IP地址进行安全性的情况下,您应该了解您的基础结构.
如果您在Web服务器和设置标头的客户端之间使用代理,则应该能够信任最后一个地址.然后你使用像穆罕默德建议的更新代码来始终从转发头获取最后一个IP地址(参见下面的代码)
如果您不使用代理,请注意X-Forwarded-For标头很容易欺骗.我建议你忽略它,除非你有明确的理由不这样做.
我更新了Muhammed Akhtar的代码如下,以便您选择:
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; }
这篇维基百科文章更彻底地解释了风险.
应该使用HTTP_X_FORWARDED_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; }
在MVC 6中,您以这种方式检索IP地址:
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()