Wie kann ich mit bash eine gültige zufällige MAC-Adresse generieren?
Die erste Hälfte der Adresse sollte immer so bleiben
00-60-2F-xx-xx-xx
soll nur der x wert zufällig generiert werden?
bash
mac-address
NES
quelle
quelle
echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'
Antworten:
Hier ist ein Fisch.
Dieses Shell-Skript generiert die zufällige Zeichenfolge, die Sie suchen:
Ich hatte hier nur etwas, das zeigte, wie man es von der Kommandozeile aus ausführt, aber nach einem Blick auf Dennis Williamsons komplizierte (aber hochgeladene) Lösung sehe ich, dass die Antwort, die die Leute erwarten, die ist, bei der sie keine Arbeit erledigen müssen sich.
quelle
Oder in Python:
Beachten Sie, dass die Python-Version nur ein 16-faches Feld zum Generieren eines Hex-Zeichens verwendet, sodass Sie sich keine Gedanken über das Null-Auffüllen machen müssen - Ansatz geändert, um einen Kommentar zu adressieren.
quelle
00-60-2F-8B-5-2C
,00-60-2F-A-71-97
,00-60-2F-82-F1-4
.In der Vergangenheit habe ich folgendes getan:
aber das wird sie nur im Bereich von 0-9 machen. Für meine Zwecke war das gut genug.
Eine wahrscheinlich bessere Lösung wäre die Verwendung von printf:
So funktioniert das:
quelle
%02X
würde einen Großbuchstaben geben.Auch mit Standardwerkzeugen
oder
könnte die kürzeste von allen sein.
quelle
Die Schlüssel zur Funktionsweise:
LC_CTYPE=C
- erlaubt Zeichen> 0x7FIFS=
- Deaktiviert die Interpretation von\t
(Tab),\n
(Newline) und Leerzeichen-d ''
- erlaubt Zeilenumbrüche-r
erlaubt\
(und sollte fast immer aus Gewohnheit verwendet werdenread
)-%02x\n
bewirkt, dass die Ausgabe ein literaler Bindestrich gefolgt von einer zweistelligen Hexadezimalzahl und gegebenenfalls einer führenden Null ist. Die Newline ist hier überflüssig und könnte weggelassen werden.read
ein einzelnes Byte (-n 1
)/dev/urandom
im Bereich von 0 bis 255 (00
bisFF
).Das einfache Anführungszeichen im letzten Argument
printf
der Schleife bewirkt, dass das Zeichen als numerischer Wert ausgegeben wird ("A" wird als "65" ausgegeben). In der POSIX-Spezifikationprintf
steht:quelle
IFS= read …
vermeiden, 09 0a und 20 (die üblichen IFS-Zeichen) in 00 zu folden.-d ''
. Ich werde meine Antwort reparieren. Danke für die Information.-r
, was "\" schützt, ist rausgefallen. Ich wünschte, der richtige Umgang mit Binärdaten in Shell-Programmen wäre nicht so kompliziert. ☺ Es scheint unmöglich zu sein, 00 in der Mitte der Zeichenfolge genau darzustellen. Ihre Einzelzeichenmethode verarbeitet 00 aufgrund der praktischen (entworfenen?) Zusammenarbeit zwischen derread
Zeichenfolgeninterpolation und derprintf
Behandlung des Ein-Zeichen-Arguments'
. Seufzer.hexdump -C
.Der kürzeste Weg, den ich finden konnte, war die direkte Verwendung von Hexdump
Getestet unter GNU / Linux
quelle
hexdump -n3 -e'/3 "00-60-2F" 3/1 "-%02X"' /dev/random
ist etwas kürzer :-)Eine andere einzeilige Lösung
Gleiches in Großbuchstaben
Generieren Sie es für eine Bash-Umgebungsvariable
Einzelheiten:
od (Oktaldump)
-An
Unterdrückt die führende Adressendarstellung (zusätzliches Rauschen) der Ausgabe.-N3
Begrenzen Sie die Ausgabe auf drei Bytes.-t xC
Ausgabe wahlweise in hexadezimaler ASCII-Schreibweise./dev/urandom
Linux-Kernel-Zufallszahlen-Pseudodatei.sed (Stream-Editor) Für Leerzeichen zum Ersetzen von Bindestrichen.
-e <SCRIPT>
Führen Sie das sed-Skript aus.tr (Stringübersetzung) Optional in diesem Beispiel. Ich mag MAC-Adressen in Großbuchstaben in meinen Skripten / meiner Umgebung.
quelle
quelle
Das sollte funktionieren
quelle
quelle
Dieser funktioniert auch. Die Ausgabe erfolgt nach Bedarf in Großbuchstaben.
quelle
Dies funktioniert im klassischen shell (
#!/bin/sh
) Skript:Oder, wenn Sie ein benutzerdefiniertes Präfix haben möchten:
Anwendungsbeispiel:
quelle
Eine andere Option ist die Verwendung von
jot
:-w
ändert das Format,-s
ändert das Trennzeichen und-r
generiert Zufallszahlen.Die Befehle, die
od
in den von artistoex und zero2cx geposteten Antworten verwendet werden, fügen der Ausgabe unter OS X zusätzliche Gedankenstriche hinzuod
, was jedoch nicht der Fall ist:OS X
od
(/usr/bin/od
unten) verwendet ein anderes Ausgabeformat als GNUod
:quelle
jot -w%02X -s- -r 3 1 256
zujot -w%02X -s- -r 3 0 256
.In Linux:
Erläuterung:
Unter Linux wird bei jedem Lesen
/proc/sys/kernel/random/uuid
eine neue UUID vom Typ 4 (zufällig) zurückgegeben . Die meisten seiner Zeichen sind (pseudo) zufällige hexadezimale Ziffern, daher können wir sie verwenden. Z.B:Jetzt genügt es, zuerst
00-60-2f-
(ohne Zeilenvorschub) zu drucken :Vorteile:
printf
undcut
sind POSIX-Tools;Nachteile:
/proc/sys/kernel/random/uuid
ist auf einigen Systemen möglicherweise nicht verfügbar;quelle
Ein Liner (Bash)
Ergebnis
quelle