问题:
asp.net取得的客户端IP会是:::1呢,而不是192.168.1.17之类的(WIN7本机调试)
代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
string ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(ip))
{
ip = Request.ServerVariables["REMOTE_ADDR"];
}
Response.Write("客户端IP地址:" + ip);
}
}
运行结果:
客户端IP地址:::1
::1是IPv6格式的地址
你的代码我这里显示是127.0.0.1,应该是我用的XP,没有装IPv6的关系
Request.ServerVariables["Remote_Addr"]你试下这个
首先你不可能让客户端也通过设置该变ip的类型为ipv4,所以只能判断ip地址是ipv4还是ipv6,然后转换ipv6为ipv4
ipv6转ipv4的 http://wenku.baidu.com/view/a274f5791711cc7931b71667.html
public static string UserIPAddress
{
get
{
string userIP;
HttpRequest Request = Current.Request;
if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "")
userIP = Request.ServerVariables["REMOTE_ADDR"];
else
userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (userIP == null || userIP == "")
userIP = Request.UserHostAddress;
return userIP;
}
}
localhost获取的一定是127.0.0.1,所以同意Salvia的答案