asp.net获取客户端ip,在服务器端运行得到的是::1

时间:2021-01-23 16:13:10
strHostIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (null == strHostIP || strHostIP == String.Empty)
                {
                    strHostIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
部署上去可获得其他电脑登录的ip,但是如果在本机运行的话则会出现ip变::1,这是为什么

10 个解决方案

#1


该回复于2011-12-20 11:16:19被版主删除

#2


本帖最后由 net_lover 于 2011-12-20 11:19:19 编辑
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1

#3


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


那请问可不可以判断是用了什么格式,而不去改host文件呢

#4


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1

# 127.0.0.1       localhost
我只保留了这个也还是不行求改法

#5


  有缓存的吧?
  网卡禁用一下,再启用,试试

#6


Request.UserAddress

#7


引用 6 楼 cf_nxcxy 的回复:
Request.UserAddress

还是::1 不是缓存的缘故

#8


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


这个在Host里面默认已经给注释掉了。

其实,要不显示这个需要把IPv6给关掉,但是不推荐这么干,因为关掉Ipv6在新型的系统中可能会出现不可预知的错误。

用DNS工具类和Environment获取本机机器名结合使用来获得本机在局域网中的IP吧,这个是可行的。详见 Dns    <-  类名很简单
或者如果要想显示127.0.0.1,那么就把::1映射成127.0.0.1,不用想太多。

#9


引用 8 楼 sunzongbao2007 的回复:
引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


这个在Host里面默认已经给注释掉了。

其实,要不显示这个需要把IPv6给关掉,但是不推荐这么干,因为关掉Ipv6在新型的系统中可能会出现不可预知的错误。

用DNS工具类和Envi……

我是新手!能给个例子吗!我对着方面不会

#10


 public static string GetClientIPv4Address()
        {
            string ipv4 = String.Empty;

            foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }

            if (ipv4 != String.Empty)
            {
                return ipv4;
            }
            // 利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 纪录,
            // 再逐一判断何者为 IPv4 协议,即可转为 IPv4 位址。
            foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
            //foreach (IPAddress ip in Dns.GetHostAddresses(Dns.GetHostName()))
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }

            return ipv4;
        }
        public static string GetClientIP()
        {
            if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])
            {
                return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }
            else
            {
                return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            }
        }
解决方法

#1


该回复于2011-12-20 11:16:19被版主删除

#2


本帖最后由 net_lover 于 2011-12-20 11:19:19 编辑
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1

#3


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


那请问可不可以判断是用了什么格式,而不去改host文件呢

#4


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1

# 127.0.0.1       localhost
我只保留了这个也还是不行求改法

#5


  有缓存的吧?
  网卡禁用一下,再启用,试试

#6


Request.UserAddress

#7


引用 6 楼 cf_nxcxy 的回复:
Request.UserAddress

还是::1 不是缓存的缘故

#8


引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


这个在Host里面默认已经给注释掉了。

其实,要不显示这个需要把IPv6给关掉,但是不推荐这么干,因为关掉Ipv6在新型的系统中可能会出现不可预知的错误。

用DNS工具类和Environment获取本机机器名结合使用来获得本机在局域网中的IP吧,这个是可行的。详见 Dns    <-  类名很简单
或者如果要想显示127.0.0.1,那么就把::1映射成127.0.0.1,不用想太多。

#9


引用 8 楼 sunzongbao2007 的回复:
引用 2 楼 net_lover 的回复:
::1使用IPV6的格式
把服务器的hosts文件里面的 localhost ::1 注释掉,只保留127.0.0.1 即可显示127.0.0.1


这个在Host里面默认已经给注释掉了。

其实,要不显示这个需要把IPv6给关掉,但是不推荐这么干,因为关掉Ipv6在新型的系统中可能会出现不可预知的错误。

用DNS工具类和Envi……

我是新手!能给个例子吗!我对着方面不会

#10


 public static string GetClientIPv4Address()
        {
            string ipv4 = String.Empty;

            foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }

            if (ipv4 != String.Empty)
            {
                return ipv4;
            }
            // 利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 纪录,
            // 再逐一判断何者为 IPv4 协议,即可转为 IPv4 位址。
            foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
            //foreach (IPAddress ip in Dns.GetHostAddresses(Dns.GetHostName()))
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    ipv4 = ip.ToString();
                    break;
                }
            }

            return ipv4;
        }
        public static string GetClientIP()
        {
            if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])
            {
                return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }
            else
            {
                return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            }
        }
解决方法