Nous soaps que nous pouvons utiliser l'adresse MAC pour créer un identifiant d'interface, par exemple pour une adresse IPv6 link-local qui devrait être unique dans le réseau.
L'image montre la façon de le faire:
Mes questions sont les suivantes:
awk
ou sed
? createIPv6 myMAC
il une command qui me donne l'adresse IPv6 link-local pour un MAC spécifique (quelque chose comme ça createIPv6 myMAC
)? Si vous voulez créer une adresse IPv6 complète à partir d'un MAC (et d'un préfixe donné), vous pouvez utiliser l'excellent outil ipv6calc
de Peter Bieringer.
La command suivante crée une adresse IPv6 link-local ( fe80::
prefix) à partir d'une adresse MAC:
$ ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr fe80:: 00:21:5b:f7:25:1b fe80::221:5bff:fef7:251b
Vous pouvez laisser la plupart des options et laisser la command deviner quoi faire:
$ ipv6calc --in prefix+mac fe80:: 00:21:5b:f7:25:1b No action type specified, try autodetection...found type: prefixmac2ipv6 fe80::221:5bff:fef7:251b
Pour les dissortingbutions Debian, ipv6calc
est dans le référentiel principal.
De l' input Wikipedia IPv6 une description plus textuelle:
Un identifiant d'interface 64 bits est le plus souvent dérivé de son adresse MAC 48 bits.
Une adresse MAC 00: 0C: 29: 0C: 47: D5 est transformé en un 64-bit EUI-64 en insérant FF: FE au milieu: 00: 0C: 29: FF: FE: 0C: 47: D5.
Donc en remplaçant le troisième :
avec :FF:FE:
devrait faire l'affaire:
echo 00:0C:29:0C:47:D5 | sed s/:/:FF:FE:/3 00:0C:29:FF:FE:0C:47:D5
Aucune idée si cette syntaxe est spécifique à GNU sed.
Travail en cours:
Convertir en bits:
for HEX in $(tr ":" " " <<< 00:0C:29:FF:FE:0C:47:D5) do printf "%08d " $(bc <<< "ibase=16;obase=2;$HEX") done
les bits 00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
en ne laissant que le basculement du bit numéro 7.
#! /usr/bin/env python import sys n=[int(x, 16) for x in sys.argv[1].split(":")] print "fe80::%02x%02x:%02xff:fe%02x:%02x%02x" % tuple([n[0]^2]+n[1:])