Недавно я скопировал скрипт из пользовательского deltaray для генерации случайных локальных MAC-адресов для виртуальных машин. Мне нравится этот скрипт, потому что это самый простой и эффективный скрипт bash для генерации MAC-адреса.

Однако все доступные частные MAC-адреса имеют четыре разных октета OUI, доступных для использования, и мой вопрос:

Как рандомизировать первый набор октетов для частных MAC-адресов и никогда не беспокоиться о столкновении с другой виртуальной машиной?

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

Где "x" в x2, x6, xA и xE рандомизированы.

Я изменил скрипт deltaray для статического частного MAC-адреса, но я хотел бы быть тщательным и иметь лучшее решение, а не только одно решение.

Мои моды:

#!/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

Спасибо

Пожалуйста, смотрите ответ на мой вопрос ниже.

2 ответа2

0

Есть ли причина, по которой виртуальные MAC-адреса должны быть случайными (на самом деле псевдослучайными)? Похоже, вы задаете вопрос о том, как получить гарантированный максимальный период в последовательности чисел, до наложения. Простое приращение было бы наиболее очевидным, но существуют CRC с максимальным периодом для допустимого минимального / максимального диапазона. но я не думаю, что у вас возникнут проблемы с последовательным доступом, поэтому CRC не понадобится.

При максимальном периоде вам просто нужно беспокоиться о том, существует ли виртуальная машина, когда вы ее переносите. Если это может произойти (из-за срока службы ваших виртуальных машин), то вам нужно вести историю запуска виртуальных машин и выбирать другой вариант, пока вы не попадете в историю. Предполагая, что у вас есть более широкий диапазон, чем, возможно, все еще работающие виртуальные машины, вы не получите перекрытия. Маловероятно, однако, что вам нужна история (если вы используете последовательность с максимальным периодом, например, простой инкремент) ..Я предполагаю время жизни ваших виртуальных машин и их количество относительно свободного пространства, которое у вас есть.

Предполагая, что нет других аддеров Mac, с которыми вам нужно беспокоиться о столкновении, кроме тех, которые вы создали сами с помощью этого алгоритма. Что не может быть правдой.

0

Я понял.

#!/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

Это сгенерирует все возможные локальные MAC-адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .