为什么我在ASP.Net中获取:: 1作为IP地址..以及如何获得正确的IP地址?

时间:2011-04-26 19:39:34

标签: vb.net asp.net-mvc-2 ip-address

我在localhost中运行ASp.Net mvc应用程序 - 使用visual studio提供的dev服务器。我想获得IP地址。我试过了

Request.UserHostAddress

Request.ServerVariables("REMOTE_ADDR")

在这两种情况下,我得到:: 1作为结果。它是什么?我为什么要这样做?如何获得127.0.0.1或192.168.1.xxx?

6 个答案:

答案 0 :(得分:21)

您获得的是有效的IP地址。 ::1是IPv6中的local_host。 (在local_host中使用下划线来阻止SO认为它是某种坏文本)

答案 1 :(得分:15)

调用'localhost'时你所看到的是有效的。 :: 1是IPv6环回地址。相当于IPv4的127.0.0.1。

而不是打电话:

 http://localhost/...

呼叫:

 http://{machinename}/...
        -or-
 http://127.0.0.1/...
        -or- 
 http://192.168.1.XXX/...

[将 {machinename} 替换为您计算机的计算机名称。将 XXX 替换为您的计算机IP地址。]

任何通过您的计算机进入MVC应用程序的人都将拥有有效的IP地址。如果客户端是IPv6主机,它将保存IPv6 IP地址。如果客户端是IPv4主机,它将保存IPv4 IP地址。

如果您一直想保存IPv4地址,请查看本文,了解如何使用简单的类http://www.4guysfromrolla.com/articles/071807-1.aspx完成它。您应该能够以此为例,构建一个快速帮助方法来实现此目的。

答案 2 :(得分:1)

Request.Params["REMOTE_ADDR"]

而不是Request.ServerVariables("REMOTE_ADDR")

答案 3 :(得分:1)

如果您希望localhost返回127.0.0.1,可能需要更改“hosts”文件。 您可以在“%systemdrive%\ Windows \ System32 \ drivers \ etc”

中找到它

它对我有用,现在我用“Request.ServerVariables [”REMOTE_ADDR“]”获得127.0.0.1。我取消注释127.0.0.1(删除#)。

您可以在此处找到默认主机文件 http://support.microsoft.com/kb/972034

我的档案

#localhost名称解析在DNS本身内处理。

127.0.0.1       localhost

#:: 1 localhost

答案 4 :(得分:0)

下面我用来查找ip的代码

public static string GetIp()
        {
            var Request = HttpContext.Current.Request;

            try
            {

                Console.WriteLine(string.Join("|", new List<object> {
                    Request.UserHostAddress,
                    Request.Headers["X-Forwarded-For"],
                    Request.Headers["REMOTE_ADDR"]
                })
                );

                var ip = Request.UserHostAddress;
                if (Request.Headers["X-Forwarded-For"] != null)
                {
                    ip = Request.Headers["X-Forwarded-For"];
                    Console.WriteLine(ip + "|X-Forwarded-For");
                }
                else if (Request.Headers["REMOTE_ADDR"] != null)
                {
                    ip = Request.Headers["REMOTE_ADDR"];
                    Console.WriteLine(ip + "|REMOTE_ADDR");
                }
                return ip;
            }
            catch (Exception ex)
            {
                Log.WriteInfo("Message :" + ex.Message + "<br/>" + Environment.NewLine +
                    "StackTrace :" + ex.StackTrace);
            }
            return null;
        }

答案 5 :(得分:0)

如果获得ipv6地址,之后您可以找到该地址的有效ipv4地址映射。

c#代码在下面;

  public static string GetIP4Address(string ip) {
        try {
            var hostNames = Dns.GetHostEntry(ip);
            var ipv4 = hostNames.AddressList.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
            if(ipv4 != null) {
                return ipv4.ToString();
            }

        } catch(Exception ex) {
            log.WarnFormat("Error When Getting Client Ipv4");
        }

        return ip;
    }