使用 ping6 命令,您可以使用以下命令找到接口外的 ipv6 主机的链路本地地址:
ping6 -I eth0 ff02::1
这将对子网中的所有内容执行 ping 操作,这样您就可以看到那里的情况。您可以在 中查看ndp
。
是否可以 ping 前缀中的所有内容,以便确定主机的全局单播地址?请注意,这假设 ipv6 地址是静态分配的,而不是自动配置的rad
- 因此我们不能仅根据 mac 地址来解决问题。
在 ipv4 术语中,这在功能上等同于ping -b 192.168.1.0/24
假设我们的前缀是2001:470:1f09:131::/64
,我正在寻找一种做类似的事情的方法:
ping6 -b 2001:470:1f09:131::/64
(我知道这-b
是缓冲区大小,这仅用于说明)
请注意,这是 OpenBSD,它不支持 -I 中的 IP 地址:
-I interface
Source packets with the given interface address. This flag ap-
plies if the ping destination is a multicast address, or link-lo-
cal/site-local unicast address.
答案1
将 Celada 的回答和 Bort 的评论放在一起,可以得到想要的结果:您需要和-I
选项-S
。
因此,假设网络接口vr0
具有 IPv6 地址,2001:1418:153:0:2e0:c5ff:fe3f:caef
您需要此命令来执行广播 ping:
ping6 -I vr0 -S 2001:1418:153:0:2e0:c5ff:fe3f:caef ff02::1
(仅删除-S
来自链路本地地址的回显答复的结果;删除-I
不再得到任何答案的结果。)
答案2
尝试:
ping6 ff02::1%yournic0
yournic0
面向相关链接的接口名称在哪里。
答案3
参数-I
可以是 IP 地址,也可以是接口名称。如果您指定接口名称,则它会使用该接口上的链路本地地址作为源地址。从主机的全局范围地址获取回复的技巧是从您自己的全局范围地址发送 ping:
ping6 -I 2001:db8:xxxx::your:own:ip:address ff02::1
答案4
抱歉,这个答案与原始问题没有直接关系。但近 8 年后,当我在 Linux 系统上寻找同样的问题时,一个流行的搜索引擎将我重定向到这个帖子。
因此,如果您使用的是类似 BSD 的系统,Vucar 提供的答案今天仍然有效(在 Mac-OS 10.15.16 上测试)
ping6 -I vr0 -S 2001:1418:153:0:2e0:c5ff:fe3f:caef ff02::1
但是,如果你使用的是基于 Linux 的系统,并且安装了 iputils-ping 版本 20190709 中的 ping 实用程序,则语法会略有不同:
ping6 -I 2001:1418:153:0:2e0:c5ff:fe3f:caef ff02::1%eth0
如果没有与目标地址关联的传出接口,则会产生以下错误:
ping6: sendmsg: Invalid argument
如果没有-I
参数,其他主机将使用其链路本地地址进行应答。此处的目标是检索本地网络上存在的全局单播地址。