Wiemy, że możemy użyć adresu MAC do utworzenia identyfikatora interfejsu, np. Dla lokalnego adresu IPv6 łącza, który powinien być unikalny w sieci.
Obraz pokazuje sposób na zrobienie tego:
Moje pytania to:
- Jak mogę utworzyć adres IPv6 z MAC za pomocą
awk
lubsed
? - LUB czy jest jakieś polecenie, które daje mi adres IPv6 lokalnego łącza dla określonego MAC (coś takiego
createIPv6 myMAC
)?
sed
awk
ipv6
mac-address
Nidal
źródło
źródło
Odpowiedzi:
Jeśli chcesz utworzyć cały adres IPv6 z MAC (i danego prefiksu), możesz skorzystać z doskonałego
ipv6calc
narzędzia Petera Bieringera.Następujące polecenie tworzy lokalny adres IPv6 (
fe80::
prefiks) lokalnie dla łącza na podstawie adresu MAC:Możesz pozostawić większość opcji z dala, a polecenie zgadnie, co zrobić:
W przypadku dystrybucji Debian
ipv6calc
znajduje się w głównym repozytorium.źródło
Z wpisu w Wikipedii IPv6 znajduje się bardziej tekstowy opis:
Więc zastąpienie trzecią
:
ze:FF:FE:
powinno załatwić sprawę:Nie mam pojęcia, czy ta składnia jest specyficzna dla GNU sed.
Praca w toku:
Konwertuj to na bity:
powinno spowodować, że bity
00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
pozostawiają tylko przerzucanie bitu 7.źródło
źródło
Możesz utworzyć funkcję bash (i umieścić ją w swojej
~/.bashrc
), która używaIFS
do podzielenia adresu MAC na 6 grup oddzielonych dwukropkami i ich złożenia. Musisz także przerzucić siódmy najbardziej znaczący bit, tj. Bit 1 pierwszego bajtu:Przykład użycia:
źródło
Muszę wyrazić uznanie dla @ rubo77 powyżej za czystą powłokę (chyba że liczysz printf) powyżej, której szukałem.
To dodaje trochę sed do:
(a) pomija wszelkie początkowe zera w każdym 16-bitowym fragmencie; i
(b) uchyla wszelkie dalsze całkowicie zerowe fragmenty na początku IID
... zgodnie ze wspólnymi konwencjami dotyczącymi zwięzłości adresów.
Pamiętaj, że jeśli chcesz zmienić przeznaczenie na inne (dowolne) prefiksy, które możesz, ponieważ EUI-64 może być używany w dowolnym zakresie (chociaż zaleca się, aby nie używać go do adresów globalnych ze względu na prywatność), potrzebujesz nieco bardziej skomplikowany skrypt sed. Dzieje się tak, ponieważ
fe80::
prefiks zawiera już trzy fragmenty zerowe (umieszczone w podwójnym dwukropku) przylegające do początku IID. Tak więc, nawet jeśli pierwsza część IID ma wszystkie zera (to znaczy, jeśli MAC zaczął się od02:00
), również by się pomknęła. Format EUI-64 pozostawia tylko jeden kolejny fragment, który może być zerowy - ostatni - który powyższy skrypt dodaje ponownie jako pojedyncze zero. Inne prefiksy mogą wymagać pozostawienia jednego zera między dwoma dwukropkami.źródło
printf
sam i zrobiłem dodatkowe rzeczy w sed.