Lokaler MAC-Adressgenerator

Lokaler MAC-Adressgenerator

KürzlichIch habe ein Skript kopiertausBenutzer deltarayum zufällige lokale MAC-Adressen für virtuelle Maschinen zu generieren. Mir gefällt dieses Skript, weil es das einfachste und effektivste Bash-Skript zum Generieren einer MAC-Adresse ist.

Jedoch,alle verfügbaren privaten MAC-Adressen haben vier verschiedene OUI-Oktette zur Verfügungzur Verwendung, und meine Frage ist:

Wie kann man den ersten Oktettsatz für private MAC-Adressen zufällig anordnen, ohne sich jemals Sorgen über Kollisionen mit einer anderen VM machen zu müssen?

x2-xx-xx-xx-xx-xx 
x6-xx-xx-xx-xx-xx
xA-xx-xx-xx-xx-xx
xE-xx-xx-xx-xx-xx

Wobei die „x“ in x2, x6, xA und xE zufällig sind.

Ich habe das Skript von deltaray für eine statische private MAC-Adresse geändert, aber ich möchte gründlich sein und die beste Lösung haben und nicht nur eine einzige Lösung.

Meine Mods:

#!/bin/bash
hexchars="0123456789ABCDEF"
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo 02$mac

Danke

Die Antwort auf meine Frage finden Sie weiter unten.

Antwort1

Gibt es einen Grund, warum die VM-MAC-Adressen zufällig (eigentlich pseudozufällig) sein müssen? Sie scheinen die Frage zu stellen, wie man eine garantierte maximale Periode in einer Zahlenfolge erhält, bevor es zu Überschneidungen kommt. Eine einfache Erhöhung wäre am naheliegendsten, aber es gibt CRCs mit maximaler Periode für einen zulässigen Min/Max-Bereich. Aber ich glaube nicht, dass Sie ein Problem mit der Sequenz hätten, also wäre CRC unnötig.

Bei maximaler Periode müssen Sie sich nur darum kümmern, ob eine VM noch existiert, wenn Sie sie umbrechen. Wenn das passieren kann (aufgrund der Lebensdauer Ihrer VMs), müssen Sie einen Verlauf der laufenden VMs führen und eine andere Wahl treffen, bis Sie nicht mehr auf den Verlauf stoßen. Vorausgesetzt, Sie haben einen größeren Bereich zur Verfügung als möglicherweise noch laufende VMs, dann würden Sie keine Überschneidungen bekommen. Es ist jedoch unwahrscheinlich, dass Sie einen Verlauf benötigen (wenn Sie eine Sequenz mit maximaler Periode verwenden, wie z. B. einfaches Inkrement). Ich schätze die Lebensdauer Ihrer VMs und die Anzahl im Verhältnis zum verfügbaren Speicherplatz.

Vorausgesetzt, es gibt keine anderen Mac-Adressen, mit denen Sie sich über Kollisionen Sorgen machen müssen, außer denen, die Sie selbst mit diesem Algorithmus erstellen. Was möglicherweise nicht stimmt.

Antwort2

Ich habe es herausgefunden.

#!/bin/bash
# This will generate every possible local MAC address available.  Works on any system that can run the bash shell.
localoctet="26AE"
hexchars="0123456789ABCDEF"
local=$( echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; echo -n ${localoctet:$(( $RANDOM % 4 )):1} )
mac=$( for i in {1..10} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
echo $local$mac

Dadurch werden alle möglichen lokalen MAC-Adressen generiert.

verwandte Informationen