Jak wygenerować losowy adres MAC z wiersza poleceń systemu Linux?
Poszukuję rozwiązania, które wymaga jedynie standardowych narzędzi powszechnie spotykanych w wierszu poleceń systemu Linux.
Adres MAC zostanie użyty dla gościa KVM.
źródło
Jak wygenerować losowy adres MAC z wiersza poleceń systemu Linux?
Poszukuję rozwiązania, które wymaga jedynie standardowych narzędzi powszechnie spotykanych w wierszu poleceń systemu Linux.
Adres MAC zostanie użyty dla gościa KVM.
używam
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Zaletą tej metody, w porównaniu z całkowicie losową liczbą, jest to, że można niezawodnie odtworzyć adres MAC na podstawie nazwy FQDN komputera, co czasem uważam za przydatne. 02
Dla pierwszego oktetu prostu ustawia „lokalnie” przypisanego bitu, który sprawia, że jest oczywiste, że nie jest to adres MAC sprzedawca-pod warunkiem, i gwarantuje, że nie będzie kolidować z adresem MAC prawdziwym NIC za.
Jeśli chcesz wygenerować wiele adresów MAC na host, użyłem do połączenia nazwy FQDN z nazwą mostu, z którym ma zostać podłączony interfejs; dobrze to rozłożyło na różne karty sieciowe.
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
Opublikowane skrypty są dobre, ale chcę dodać ostrzeżenie: Mind the Birthday (paradoxon)!
Wynika to z faktu, że nawet jeśli masz tylko 23 osoby, szansa wynosi już 50%, że 2 z nich mają urodziny tego samego dnia.
Zależy to od scenariusza, w jaki sposób go używasz, ale jeśli wygenerujesz MACS losowo, przy około 1 milionie szansa na starcie liczby mac wynosi 40% przy 2 milionach, to już 87%!
Jeśli potrzebujesz tylko kilku, jest to w porządku, ale jeśli utrzymujesz farmę serwerów z setkami serwerów, każdy z nich obsługuje dziesiątki maszyn wirtualnych lub jeśli używasz macs jako indeksu w niektórych bazach danych do księgowości i potrzebujesz unikatów, bądź ostrożny !
źródło
Ach, stara szwajcarska piła łańcuchowa znów jeździ. I w wersji 0.2 bez skrępowania kradnę doskonały punkt womble dotyczący pierwszego oktetu jako 02:
źródło
Te warianty również działają.
dłużej:
lub krócej:
Zużycie obciążenia w obu wariantach jest bardzo podobne według szybkiego pomiaru w czasie.
źródło
fold -w2|paste -sd: -
zamiastsed
.sed
Rozwiązanie jest chyba łatwiejsze do zapamiętania, ponieważ używa bardziej znajome narzędzia - choć dowiedziałem się więcej z jego / jej odpowiedź.ec
kartę sieciową na jednym z moich serwerów, który zaczyna się od 11101100 w wersji binarnej ...Wiem, że ten post jest stary, ale dla przyszłych gości, jeśli chcesz kryptograficznie bezpieczny pseudolosowy adres MAC, bez ograniczenia do 0x02 jako OUI, oto szybki, głównie platformowy generator agnostyczny:
źródło
Oto kolejna, oparta na odpowiedzi wombie:
źródło
Oto pięć innych opcji, z których wszystkie używają losowych bitów dla najmniej znaczącego bitu najbardziej znaczącego bajtu, który wskazuje, czy adres jest emisji pojedynczej czy multiemisji, oraz dla drugiego najmniej znaczącego bitu najbardziej znaczącego bajtu, który wskazuje, czy adres jest administrowany uniwersalnie lub lokalnie.
jot
jest dostarczany z OS X i BSD, ale nie z większością dystrybucji Linuksa. Wjot
-w
zmienia format,-s
zmienia separator i-r
generuje losowe liczby.od
jest w POSIX, ale gohexdump
nie ma.OS X
od
(/usr/bin/od
poniżej) używa innego formatu wyjściowego niż GNUod
:W OS X
od
opcje umieszczone po argumencie dla pliku wejściowego są traktowane jak nazwy plików wejściowych, więc polecenie w odpowiedzi Aarona Toponce czyta/dev/urandom
z OS X w nieskończonośćod
.źródło
Możesz po prostu dodać $ RANDOM po $ FQDN, a to da ci losowe adresy mac przy każdym uruchomieniu. Jest to szczególnie przydatne dla osób, które chcą tworzyć kopie zapasowe vms przy użyciu migawek lub klonów vms.
źródło
Używam:
źródło
Python one-liner:
źródło
Dla zabawy, oto wersja czysto bashowa, przetestowana na Bash 4.4.12 (1) - wydanie:
Pierwszy wiersz odczytuje 6 znaków z
/dev/urandom
; następnie używając zestawu znaków C wypisz 0-szesnastkową wartość każdego znaku oddzielonego dwukropkiem (nowa linia jest opcjonalna, ale przydatna do wydrukowania wartości).Wyodrębnianie wartości znaku za pomocą printf jest zdefiniowane w dokumentacji printf POSIX :
źródło