从 IPv4 获取 IPv6 地址?

从 IPv4 获取 IPv6 地址?

可以这样做吗?我不在乎使用什么工具,ping、nmap、nslookup。见鬼,我甚至会写一个 bash 脚本。我只需要弄清楚这一点。

编辑:我只知道 IPv4 地址,我想看看它们的 IPv6 地址是什么。实际上我无法扫描整个 /32 块 IPv6,而且这效率极低。TL;DR

IPv4 Input > IPv6 Output

伪代码:

ping 1.2.3.4

结果:

1.2.3.4: IPv6 Address

答案1

IPv4 和 IPv6 地址之间没有直接映射。我能想到的最可靠的方法(需要您与 IPv4 节点位于同一网络上)是获取 IP 的 MAC 地址,并从中构建基于 EUI-64 的链路本地地址。也就是说,IPv6 节点几乎总是会自动配置基于 MAC 的链路本地地址,因此在大多数情况下这应该有效。

只要安装了软件包,以下简单示例脚本就可以在 Ubuntu Xenial (16.04) 上运行python3-netaddr。它似乎无法在 Trusty (14.04) 上运行,因为 netaddr 库缺少一些必需的功能。

#!/bin/bash -e

IP=$1
ping -c 1 $1 > /dev/null 2> /dev/null
MAC=$(arp -an $1 | awk '{ print $4 }')
IFACE=$(arp -an $1 | awk '{ print $7 }')

python3 -c "
from netaddr import IPAddress
from netaddr.eui import EUI
mac = EUI(\"$MAC\")
ip = mac.ipv6(IPAddress('fe80::'))
print('{ip}%{iface}'.format(ip=ip, iface=\"$IFACE\"))"

使用示例(假设您将内容粘贴到ipv4-to-ipv6.sh并执行了chmod +x ipv4-to-ipv6.sh):

./ipv4-to-ipv6.sh 192.168.0.1
fe80::224:b4ff:fe9c:1329%eth0

请注意,这是一个链路本地地址,必须限定在特定链路范围内才能使用,因此要求%<interface>在大多数应用程序中都可用。如果您的主机在此网络上也有一个全局单播前缀,那么它们可能也可以使用那里的基于 MAC 的地址进行访问。(例如,您可以更改该行ip = mac.ipv6(...)以使用您的全局前缀,这应该可以工作。)

相关内容