Получить IPv6-адрес от IPv4?

Можно ли сделать это? Мне все равно, какой инструмент, 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), - это получить MAC-адрес для IP и создать из него локальный для канала адрес 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(...) строка, чтобы использовать ваш глобальный префикс, и это должно работать.)

Другие вопросы по тегам