如何获取我机器的可 ping 的 IPv6 地址?

mar*_*hon 19 linux networking ipv6

当我尝试时: $ ip -6 addr 我得到类似的东西:

inet6 fe80::d773:9cf0:b0fd:572d/64 scope link

如果我尝试从机器本身 ping 通:

$ ping6 fe80::d773:9cf0:b0fd:572d/64
unknown host

$ ping6 fe80::d773:9cf0:b0fd:572d
connect: Invalid argument
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

tel*_*coM 28

任何以 开头的 IPv6 地址fe80:都相当于 IPv4169.254.*.*地址,即它是一个本地链路地址,只能在它直接连接的网段中访问,使用专门连接到该网段的 NIC。然而,与 IPv4 不同的是,NIC 同时拥有链路本地 IPv6 地址一个或多个全局 IPv6 地址是完全正常的。

由于fe80:IPv6 地址是链路本地地址,因此您必须在 ping 时指定要使用的网络接口。

例子:

$ ping6 fe80::beae:c5ff:febe:a742
connect: Invalid argument

$ ping6 -I eth0 fe80::beae:c5ff:febe:a742
PING fe80::beae:c5ff:febe:a742(fe80::beae:c5ff:febe:a742) from fe80::beae:c5ff:febe:a742%eth0 eth0: 56 data bytes
64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=1 ttl=64 time=0.182 ms
64 bytes from fe80::beae:c5ff:febe:a742%eth0: icmp_seq=2 ttl=64 time=0.167 ms
...
Run Code Online (Sandbox Code Playgroud)

您还可以使用%符号在地址末尾附加接口:ping6 fe80::beae:c5ff:febe:a742%eth0

此要求仅适用于链路本地 IPv6 地址:您可以在不指定接口的情况下 ping 全局可路由的 IPv6 地址。

$ ping6 2a00:1450:400f:80a::200e  # that's ipv6.google.com
PING 2a00:1450:400f:80a::200e(2a00:1450:400f:80a::200e) 56 data bytes
64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=1 ttl=55 time=17.6 ms
64 bytes from 2a00:1450:400f:80a::200e: icmp_seq=2 ttl=55 time=19.6 ms
...
Run Code Online (Sandbox Code Playgroud)

  • 作为答案的附录:您也可以在地址末尾指定接口:`ping6 fe80::beae:c5ff:febe:a742%eth0` (4认同)

gar*_*Red 6

man ping6,您必须告诉 ping 您正在使用哪个接口:

-I 接口地址

将源地址设置为指定的接口地址。参数可以是数字 IP 地址或设备名称。ping IPv6 链路本地地址时,需要此选项。

例如,如果您的界面是eth0

ping6 -I eth0 fe80::xxxxxx
Run Code Online (Sandbox Code Playgroud)

或者,没有-I选项:

ping6 fe80:xxxxxx%eth0
Run Code Online (Sandbox Code Playgroud)