发现一种通过IPv6多播ping探测局域网内其他节点的方法(不需要路由器支持IPv6)

@Ta 2023-02-01发布,2023-02-01修改 9422点击
# 查看网卡名称
ifconfig

# ping网卡名称上的链路本地广播地址
ping6 FF02::1%网卡名称

# 等待一段时间,然后查看发现的节点
ip neigh
# 会打印节点的IPv6链路本地地址和MAC地址
# 备注:节点的IPv4地址也会顺便显示出来,但不是ping IPv6获得的,所以不完整

所有开启了IPv6功能并且未禁ping的机器都会出现,不需要路由器支持IPv6,因为只要开启了IPv6,机器就会给自己分配链路本地地址,不需要路由器分配。

不过发送ping的机器自己必须开启IPv6,ping的接口也不能关闭IPv6,否则多播发不出去。

ip neigh发现的局域网IPv6本地地址(形如fe80::xxxx:xxxx:xxxx:xxxx)可以用于直接通信,不过也得加上%网卡名称,比如:

# 尝试连接其中一台机器:
telnet fe80::xxxx:xxxx:xxxx:xxxx%网卡名称 443
curl 'http://[fe80::xxxx:xxxx:xxxx:xxxx%网卡名称]:80/'
ssh fe80::xxxx:xxxx:xxxx:xxxx%网卡名称

比如在安卓上:

ifconfig
# 发现网卡名称是wlan0

ping6 FF02::1%wlan0

# 等待一段时间,然后执行
ip neigh

# 尝试连接其中一台机器
telnet fe80::1234:2234:3234:4234%wlan0 443
curl "http://[fe80::1234:2234:3234:4234%wlan0]:80/"
ssh fe80::1234:2234:3234:4234%wlan0

在Windows上也可以进行类似操作

# 查看网卡序号
route print -6
# 在“接口列表”中找到属于局域网的网卡序号,比如我的是12

ping -t FF02::1%12
# 等待一段时间。
# Windows的ping不能正确显示多播结果,所以只会显示“请求超时”,但ping的结果会填充邻居节点列表。
# 你也可以通过 Wireshark 抓包来查看 ping 的结果,捕获过滤器填 icmp6 即可。

# 查看节点列表
netsh int ipv6 show neigh 12
netsh int ipv4 show neigh 12
# 备注:IPv4节点列表只是顺便显示出来,不是ping IPv6获得的,所以不完整

# 连接其中一个节点
ssh fe80::1234:2234:3234:4234%12
回复列表(6|隐藏机器人聊天)
添加新回复
回复需要登录