Wie erstelle ich eine zufällige MAC-Adresse über die Linux-Befehlszeile?
Ich suche nach einer Lösung, die nur Standardtools benötigt, die häufig in der Linux-Befehlszeile zu finden sind.
Die MAC-Adresse wird für ein Gast-KVM verwendet.
Wie erstelle ich eine zufällige MAC-Adresse über die Linux-Befehlszeile?
Ich suche nach einer Lösung, die nur Standardtools benötigt, die häufig in der Linux-Befehlszeile zu finden sind.
Die MAC-Adresse wird für ein Gast-KVM verwendet.
Antworten:
ich benutze
macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Der Vorteil dieser Methode gegenüber einer vollständig zufälligen Zahl ist, dass es möglich ist, die MAC-Adresse basierend auf dem FQDN des Computers zuverlässig zu reproduzieren, was ich manchmal nützlich finde. Das 02
für das erste Oktett setzt nur das "lokal zugewiesene" Bit, was deutlich macht, dass es sich nicht um eine vom Hersteller bereitgestellte MAC-Adresse handelt und garantiert, dass Sie nicht mit der MAC-Adresse einer echten Netzwerkkarte kollidieren.
Wenn Sie mehrere MAC-Adressen pro Host generieren müssen, habe ich den FQDN mit dem Namen der Bridge verkettet, mit der die Schnittstelle verbunden werden soll. Dies hat eine gute Arbeit geleistet, um Dinge für verschiedene Netzwerkkarten zu verbreiten.
tr -dc A-F0-9 < /dev/urandom | head -c 10 | sed -r 's/(..)/\1:/g;s/:$//;s/^/02:/'
Die geposteten Skripte sind gut, aber ich möchte eine Warnung hinzufügen: Mind the Birthday (paradoxon)!
Es kommt daher, dass selbst wenn Sie nur 23 Leute haben, die Chance bereits 50% ist, dass 2 von ihnen am selben Tag Geburtstag haben.
Es hängt von Ihrem Szenario ab, wie Sie es verwenden, aber wenn Sie das MACS zufällig generieren, beträgt Ihre Chance für einen Mac-Nummern-Konflikt bei ca. 1 Million 40%, bei 2 Millionen sind es bereits 87%!
Wenn Sie nur ein paar benötigen, ist dies in Ordnung. Wenn Sie jedoch eine Serverfarm mit Hunderten von Servern unterhalten, von denen jeder Dutzende virtueller Maschinen hostet, oder wenn Sie die Macs als Index in einer Datenbank für die Buchhaltung verwenden und Unikate vorsichtig sein müssen !
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74
Ah, die alte Schweizer Kettensäge reitet wieder. Und mit Version 0.2 klaue ich schamlos Wombles hervorragenden Punkt, dass das erste Oktett 02 ist:
myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26
Diese Varianten funktionieren auch.
länger:
openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/'
oder kürzer:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/:$//'
Der Lastverbrauch beider Varianten ist laut Schnellmessung mit der Zeit sehr ähnlich.
fold -w2|paste -sd: -
statt sed
. Die sed
Lösung ist wahrscheinlich leichter zu merken, da sie ein vertrauteres Tool verwendet - obwohl ich aus seiner / ihrer Antwort mehr gelernt habe.
ec
so 11101100 in binären beginnt ...
Ich weiß, dass dieser Beitrag alt ist, aber für zukünftige Besucher, wenn Sie eine kryptografisch sichere pseudozufällige MAC-Adresse möchten, ohne auf 0x02 als OUI beschränkt zu sein, ist hier ein schneller, meist plattformunabhängiger Generator:
$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'
Hier ist eine andere, basierend auf der Antwort von Wombie:
macaddr=$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/')
echo $macaddr
Hier sind fünf weitere Optionen, die alle Zufallsbits für das niedrigstwertige Bit des höchstwertigen Bytes verwenden, das angibt, ob die Adresse Unicast oder Multicast ist, und für das zweitniedrigstwertige Bit des höchstwertigen Bytes, das angibt, ob die Adresse ist universell oder lokal verwaltet.
jot -w%02X -s: -r 6 1 256
openssl rand -hex 6|fold -w2|paste -sd: -
od -N6 -tx1 -An /dev/random|awk '$1=$1'|tr \ :
god -N6 -tx1 -An /dev/random|cut -c2-|tr \ :
hexdump -n6 -e'/1 ":%02X"' /dev/random|cut -c2-
jot
kommt mit OS X und BSDs, aber nicht mit den meisten Linux-Distributionen. In jot
-w
ändert das Format -s
ändert den Separator und -r
erzeugt Zufallszahlen.
od
ist in POSIX aber hexdump
nicht.
OS X od
( /usr/bin/od
unten) verwendet ein anderes Ausgabeformat als GNU od
:
$ /usr/bin/od -N6 -tx1 -An /dev/random|tr ' ' :
:::::::::::d9::b9::d7::da::5f::96::::::::::::::::::::::::::::::::::::::::
$ god -N6 -tx1 -An /dev/random|tr ' ' :
:f5:6d:0a:3b:39:f9
In OS X werden od
Optionen, die nach einem Argument für eine Eingabedatei platziert werden, als Namen von Eingabedateien behandelt, sodass der Befehl in der Antwort von Aaron Toponce für /dev/urandom
unbestimmte Zeit mit OS X gelesen wird od
.
Sie könnten einfach ein $ RANDOM nach $ FQDN hinzufügen und dies würde Ihnen bei jeder Ausführung zufällige Mac-Adressen geben. Dies ist besonders hilfreich für Benutzer, die Sicherungs-VMs mit Snapshots oder Klonen von VMs erstellen möchten.
macaddr=$(echo $FQDN$RANDOM|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
Ich benutze:
echo -n 02; od -t x1 -An -N 5 /dev/urandom | tr ' ' ':'
Nur zum Spaß ist hier eine reine Bash-Version, getestet gegen Bash 4.4.12 (1) -Release:
read -N6 b </dev/urandom
LC_ALL=C printf "%02x:%02x:%02x:%02x:%02x:%02x\n" "'${b:0:1}" "'${b:1:1}" "'${b:2:1}" "'${b:3:1}" "'${b:4:1}" "'${b:5:1}"
Erste Zeile liest 6 Zeichen aus /dev/urandom
; Verwenden Sie dann den C-Zeichensatz, und geben Sie den mit 0 gefüllten Hex-Wert jedes Zeichens aus, der durch einen Doppelpunkt getrennt ist.
Das Extrahieren des Werts eines Zeichens mit printf wird in der POSIX- printf- Dokumentation definiert:
Wenn das führende Zeichen ein einfaches Anführungszeichen oder ein doppeltes Anführungszeichen ist, ist der Wert der numerische Wert im zugrunde liegenden Codesatz des Zeichens, das auf das einfache Anführungszeichen oder das doppelte Anführungszeichen folgt.