我想在用户在我的网站中提交表单时获取客户端IP。
我尝试使用该命令:Request.UserHostAddress
但我得到的不是ip:::1
我该怎么办?
谢谢!
答案 0 :(得分:5)
那是因为你在本地进行测试。 ::1
是与127.0.0.1
等效的IPv6。
答案 1 :(得分:2)
::1
与localhost
public static string GetUserIpAddress()
{
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (ip == "::1") ip = "127.0.0.1"; // localhost
}
return ip;
}
答案 2 :(得分:2)
您可以使用REMOTE_ADDR,但如果您在本地访问该站点,它可能无效,它将显示本地主机。下面的代码将帮助您
string clientIp = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if( !string.IsNullOrEmpty(clientIp) )
{
string[] forwardedIps = clientIp.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );
clientIp = forwardedIps[forwardedIps.Length - 1];
}
else {
clientIp = context.Request.ServerVariables["REMOTE_ADDR"];
}
答案 3 :(得分:1)