提交表单时获取客户端IP。 (ASP.net C#)

时间:2014-02-26 12:32:05

标签: c# asp.net visual-studio-2010

我想在用户在我的网站中提交表单时获取客户端IP。 我尝试使用该命令:Request.UserHostAddress

但我得到的不是ip:::1

我该怎么办?

谢谢!

4 个答案:

答案 0 :(得分:5)

那是因为你在本地进行测试。 ::1是与127.0.0.1等效的IPv6。

What is IP address '::1'?

答案 1 :(得分:2)

::1localhost

相同 在ASP.NET中,您可以执行此操作以获取用户IP地址

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)

::1是IPv6环回地址。这意味着127.0.0.1

Ipv4  127.0.0.1    localhost
Ipv6  ::1          localhost

localhost