Генератор локальных MAC-адресов

1147
ina2n

Недавно я скопировал скрипт из пользовательского 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 ; do echo -n $ ; done | sed -e 's/\(..\)/:\1/g' ) echo 02$mac 

Спасибо

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

0
Вы уже рандомизировали 5 байтов, верно? 2 ^ 40 много адресов. Вероятность столкновения в этом пространстве астрономически мала, даже если в течение десятилетий вы запускаете миллионы новых экземпляров виртуальных машин в секунду. Стоит ли добираться до 2 ^ 47 дополнительных усилий? Spiff 7 лет назад 0
Я понимаю вашу точку зрения, и я понимаю математику. Проблема заключается в создании наилучшего возможного решения и забыв о необходимости контролировать, администрировать или вести записи. Создание нового MAC занимает миллисекунды, а администрирование занимает слишком много времени и не нужно. ina2n 7 лет назад 0

2 ответа на вопрос

0
Kevin Normoyle

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

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

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

Спасибо, Кевин. Речь идет о максимизации возможных MAC, поэтому нет необходимости администрировать виртуальные машины в вашей методологии. Последнее, на что у меня есть время, - это попытаться выяснить, какие MAC-адреса назначены, где и когда истекает срок их действия. ina2n 7 лет назад 0
0
ina2n

Я понял.

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

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

Похожие вопросы