我想获得ClientIP地址,但是当我打电话给Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
时,我总是得到NULL
。HTTP_X_FORWARDED_FOR从c中的servervariables丢失#
在检查了Servervariables
的列表后,我注意到HTTP_X_FORWARDED_FOR
不在选项列表中。
任何人都知道这是如何可能和如何解决?或者这是正常的,这个选项不在列表中,我错过了一些东西。
预先感谢
我想获得ClientIP地址,但是当我打电话给Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
时,我总是得到NULL
。HTTP_X_FORWARDED_FOR从c中的servervariables丢失#
在检查了Servervariables
的列表后,我注意到HTTP_X_FORWARDED_FOR
不在选项列表中。
任何人都知道这是如何可能和如何解决?或者这是正常的,这个选项不在列表中,我错过了一些东西。
预先感谢
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
只会有一个值,如果该请求是由一个代理转发。通常您将通过使用Request.ServerVariables["REMOTE_ADDR"]
来获得客户端IP。
事实上,这并不能解释我调试request.servervariables并检查所有这个列表没有的键包含HTTP_X_FORWARDED_FOR的列表项 – thomvlau
好吧,如果没有涉及代理,头将永远不会存在。如果您正在调试,您最有可能在本地主机上请求,因此不会通过任何类型的代理进行请求。如果您可以,您可以使用Cloudflare作为您的某个域或子域名。他们甚至会在传入的请求中添加更多标题... –
请试试这个:
public static string GetUserIP() {
var ip = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null
&& HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "")
? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
: HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (ip.Contains(","))
ip = ip.Split(',').First();
return ip.Trim();
}
这里找到:
http://mycodepad.wordpress.com/2013/04/26/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for/
public string GetIPAddress()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ipAddress))
{
string[] addresses = ipAddress.Split(',');
if (addresses.Length != 0)
{
return addresses[0];
}
}
return context.Request.ServerVariables["REMOTE_ADDR"];
}
这种方法对你也许有用。
如果你在本地机器上运行它,这是正常的,看不到任何东西,否则你在一个真正的外部主机上运行它。
'REMOTE_ADDR'怎么办? – V4Vendetta
这是返回:: 1 - > ip6v相当于127.0.0.1 - 因为我已经搜索网络获取客户端地址,你首先检查HTTP_X_FORWARDED_FOR。如果这是空的,那么你得到remote_addr,因为这是返回一个不太准确的IP地址,路由器或...... thx回答btw – thomvlau
也许这就是你的意思http://stackoverflow.com/questions/10413171/i-want -to-try-to-check-the-ip-using-servervariablesremote-addr-but-it-keeps – V4Vendetta