Obtém o endereço IPv6 do IPv4? [fechadas]

0

É possível fazer isso? Eu não me importo com qual ferramenta, ping, nmap, nslookup. Inferno, eu vou até escrever um script bash. Eu só preciso descobrir isso.

Editar: Tudo o que sei são endereços IPv4 e quero ver quais são os endereços IPv6 deles. Eu realisticamente não posso escanear um bloco / 32 inteiro de IPv6 e isso é terrivelmente ineficiente de qualquer maneira. TL; DR

IPv4 Input > IPv6 Output

pseudo-código:

ping 1.2.3.4

Resultado:

1.2.3.4: IPv6 Address

    
por Roboman1723 13.05.2016 / 18:10

1 resposta

2

Não há mapeamento direto entre os endereços IPv4 e IPv6. A maneira mais confiável que posso imaginar (que exige que você esteja na mesma rede que o nó IPv4) é obter o endereço MAC para o IP e construir um endereço baseado em EUI-64 de link-local a partir dele. Ou seja, os nós IPv6 quase sempre configuram automaticamente um endereço de link local baseado em MAC, portanto, isso deve funcionar na maioria dos casos.

O seguinte exemplo de script rápido e sujo funciona no Ubuntu Xenial (16.04) desde que o pacote python3-netaddr esteja instalado. Não parece funcionar em Trusty (14.04) uma vez que a biblioteca netaddr está faltando algumas das funcionalidades necessárias.

#!/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\"))"

Exemplo de uso (supondo que você colou o conteúdo em ipv4-to-ipv6.sh e fez um chmod +x ipv4-to-ipv6.sh ):

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

Observe que esse é um endereço de link local que precisa ter o escopo definido para um determinado link para ser útil, portanto, exige que o %<interface> seja utilizável na maioria dos aplicativos. Se seus hosts também tiverem um prefixo global de difusão ponto a ponto, provavelmente eles também poderão ser acessados usando o endereço baseado em MAC. (você pode, por exemplo, alterar a linha ip = mac.ipv6(...) para usar seu prefixo global e isso deve funcionar.)

    
por mpontillo 13.05.2016 / 18:52