Bootstrap

解决win10系统中ping localhost被解析为 ::1的问题

目录

问题描述 

问题分析

解决方案

一、修改host文件

二、修改注册表

三、修改IPv6的优先级


问题描述 

本机为win10系统,在命令行窗口ping localhost时,本机IP127.0.0.1被解析为了 ::1的问题

1、在命令行窗口 ping 127.0.0.1

2、在命令行窗口 ping localhost

我们看到在ping localhost时,本机ip127.0.0.1被解析为了::1 。 

问题分析

原因是windows有个优先解析列表,当IPv6的优先级高于IPv4时,就会出现ping localhost时本机ip127.0.01被优先解析为IPv6格式的这种环回地址的情况。

IPV6协议会将本机ip127.0.0.1解析为 ::1 ( ::1是本机ip127.0.01 IPv6地址格式的表示形式或表达方式),::1是IPv6地址相当于IPv4的127.0.0.1,127.0.0.1是个回环地址。

所以,输入ping localhost命令时默认的就会出现返回的数据包并不是127.0.0.1而是::1,这就是Ipv6格式的本地ip地址

解决方案

一、修改host文件

修改C:\Windows\System32\drivers\hosts文件,在末尾加上下面两行:

127.0.0.1 localhost
localhost 127.0.0.1

配置C:\Windows\System32\drivers\hosts文件之后还是无法解决解析为::1,可以看看下面这种修改修改注册表的方法


二、修改注册表

在cmd中ping localhost解析出来的是IPV6的::1,原因是windows有个优先解析列表,当IPv6的优先级高于IPv4时,就会出现这种情况。我见网上有一种方法是修改注册表来提升IPv4优先级的。具体方法为:

打开RegEdit,导航到HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ tcpip6 \ Parameters, 创建DisabledComponents DWORD注册表值,将其值设置为20(十六进制),然后重启电脑。这种方法我试了,还是没能解决。最后,只能尝试终极大法——使用管理员命令行修改IPv6的优先级


三、修改IPv6的优先级

修改IPv6优先级的方法,即修改IPv4优先级高于IPv6的记录到优先解析表中。具体方法如下:

1、按win徽标+X(或在徽标键上右键),打开管理员命令行窗口(就是用管理员权限打开cmd)

2、输入命令 netsh interface ipv6 show prefixpolicies 查看IPv6优先级

请注意,以上可以看出,IPv6的优先级高于IPv4,即IPv6地址(::/0)优先于IPv4地址(::/96::ffff:0:0/96),因此,我们可以制定策略,使IPv6不会比任何IPv4地址有利。其中,标签表示优先级,0表示优先级最高,依次类推。

🔉 番外:IPv6特殊用途地址

  • ::/0,默认路由条目,不用于寻址;
  • ::/128,未指定地址, 可作为源IP地址使用;
  • ::1/128,IPv6主机回送地址,不用于发送出本地主机的数据中;
  • ::ffff:0:0/96,IPv4映射地址, 这种地址不会出现在分组头部,只用于内部主机;
  • ::{ipv4-address}/96,IPv4兼容地址,已过时,未使用;
  • 2001::32,Teredo地址;
  • 2001:10::/28,ORCHI(覆盖可路由加密散列标识符),这种地址不会出现在公共的Internet中;
  • 2001:db8::32,用于文档和实例的地址范围,这种地址不会出现在公共的Internet中;
  • 2002::16,6to4隧道中继的6to4地址;
  • 3ffe::/16,用于6bone实验,已过时,未使用;
  • 5f00::/16,用于6bone实验, 已过时,未使用;
  • fc00::/7,唯一的本地单播地址,不用于全球性的Inrternet;
  • fe80::/10,链路本地单播地址;
  • ff00::/8,IPv6组播地址, 仅为目的地址使用。

::/128   ——即0:0:0:0:0:0:0:0,只能作为尚未获得正式地址的主机的源地址,不能作为目的地址,不能分配给真实的网络接口

::1/128  ——即0:0:0:0:0:0:0:1,回环地址,相当于ipv4中的localhost(127.0.0.1),ping locahost可得到此地址 

3、设置优先级

现在需要设置使::/96::ffff:0:0/96的优先级高于::/0::1/128,在命令行中依次设置优先级

netsh int ipv6 set prefix ::/96 50 0
netsh int ipv6 set prefix ::ffff:0:0/96 40 1
netsh int ipv6 set prefix 2002::/16 35 2
netsh int ipv6 set prefix 2001::/32 30 3
netsh int ipv6 set prefix ::1/128 10 4
netsh int ipv6 set prefix ::/0 5 5
netsh int ipv6 set prefix fc00::/7 3 13
netsh int ipv6 set prefix fec0::/10 1 11
netsh int ipv6 set prefix 3ffe::/16 1 12

4、查看设置后的优先级

完了后输入命令netsh interface ipv6 show prefixpolicies查看优先级

可以看到,此时::/96::ffff:0:0/96优先级高于::/0了。

5、ping一下localhost

OK,配置完成!

🩸 相关问题:解决访问127.0.0.1时,提示“127.0.0.1 拒绝了我们的连接请求”

;