Lokaler MAC-Adressgenerator

1183
ina2n

Vor kurzem habe ich ein Skript von User Deltaray kopiert, um zufällige lokale MAC-Adressen für virtuelle Maschinen zu generieren. Ich mag dieses Skript, weil es das einfachste und effektivste Bash-Skript zum Erzeugen einer MAC-Adresse ist.

Für alle verfügbaren privaten MAC-Adressen stehen jedoch vier verschiedene OUI-Oktetts zur Verfügung. Meine Frage lautet:

Wie kann der erste Satz von Oktetts für private MAC-Adressen randomisiert werden, und Sie müssen sich nie um die Kollision mit einer anderen VM kümmern?

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

Dabei sind die "x" in x2, x6, xA und xE zufällig angeordnet.

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, nicht nur eine einzige Lösung.

Meine Mods:

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

Vielen Dank

Bitte sehen Sie die Antwort auf meine Frage unten.

0
Sie haben bereits 5 Bytes randomisiert, richtig? 2 ^ 40 ist viel Adressat. Die Wahrscheinlichkeit einer Kollision in diesem Bereich ist astronomisch gering, selbst wenn Sie jahrzehntelang Millionen neuer VM-Instanzen pro Sekunde hochschleudern. Ist es wirklich wert, zu 2 ^ 47 zu kommen? Spiff vor 7 Jahren 0
Ich verstehe Ihren Punkt und bekomme die Rechnung. Es geht darum, die bestmögliche Lösung zu schaffen und zu vergessen, dass Datensätze überwacht, verwaltet oder verwaltet werden müssen. Das Erstellen des neuen MAC dauert Millisekunden, während die Verwaltung viel zu zeitaufwändig und unnötig ist. ina2n vor 7 Jahren 0

2 Antworten auf die Frage

0
Kevin Normoyle

Gibt es einen Grund, warum die VM-MAC-Adressen zufällig sein müssen (tatsächlich Pseudo-Zufall)? Anscheinend stellen Sie sich die Frage, wie Sie in einer Zahlenfolge eine garantierte Höchstdauer erreichen, bevor Sie sich überschneiden. Ein einfaches Inkrement wäre am naheliegendsten, aber CRCs mit maximaler Periode für einen zulässigen Min / Max-Bereich sind vorhanden. aber ich glaube nicht, dass Sie ein sequenzielles Problem haben würden, CRC wäre also unnötig.

Bei der maximalen Zeitdauer müssen Sie sich nur darum kümmern, ob beim Wickeln noch eine VM vorhanden ist. Wenn dies passieren kann (aufgrund der Lebensdauer Ihrer VMs), müssen Sie einen Verlauf der laufenden VMs beibehalten und eine andere Auswahl treffen, bis Sie den Verlauf nicht erreichen. Vorausgesetzt, Sie haben einen größeren Bereich zur Verfügung, als möglicherweise noch VMs ausgeführt wird, würden Sie sich nicht überlappen. Es ist jedoch unwahrscheinlich, dass Sie eine Historie benötigen (wenn Sie eine Sequenz mit maximaler Periode verwenden, z. B. einfaches Inkrement). Ich schätze die Lebensdauer Ihrer VMs und die Anzahl, bezogen auf den verfügbaren Speicherplatz.

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

Vielen Dank, Kevin. Hier geht es um die Maximierung möglicher MACs, sodass die VMs nicht in Ihrer Methodik verwaltet werden müssen. Das letzte, für das ich Zeit habe, ist herauszufinden, welche MAC-Adressen wo zugewiesen werden und wann sie ablaufen. ina2n vor 7 Jahren 0
0
ina2n

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 $ ; echo -n $ ) mac=$( for i in ; do echo -n $ ; done | sed -e 's/\(..\)/:\1/g' ) echo $local$mac 

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