Как я могу сгенерировать действительный случайный MAC-адрес с Bash.
Первая половина адреса всегда должна оставаться такой же
00-60-2F-xx-xx-xx
просто значение х должно генерироваться случайным образом?
bash
mac-address
NES
источник
источник
echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"'
Ответы:
Вот рыба.
Этот сценарий оболочки сгенерирует случайную строку, которую вы ищете:
У меня просто было кое-что, что показывало, как запустить его из командной строки, но, посмотрев на извилистое (но одобренное) решение Денниса Уильямсона, я вижу, что люди ожидают ответа, в котором им не нужно делать никакой работы. самих себя.
источник
В прошлом я делал это используя:
но это только сделает их в диапазоне 0-9. Для моих целей это было достаточно хорошо.
Вероятно, лучшим решением было бы использовать printf:
Вот как это работает:
источник
%02X
дал бы одну заглавную букву.Или в питоне:
Обратите внимание, что версия Python использует только поле шириной 16 для генерации шестнадцатеричного символа, так что вам не нужно беспокоиться о заполнении нулями - подход исправлен с учетом комментария.
источник
00-60-2F-8B-5-2C
,00-60-2F-A-71-97
,00-60-2F-82-F1-4
.Используя стандартные инструменты, либо
или
может быть самым коротким из всех.
источник
Ключи к тому, как это работает:
LC_CTYPE=C
- разрешает символы> 0x7FIFS=
- отключает интерпретацию\t
(табуляции),\n
(новой строки) и пробела-d ''
- позволяет переводить строки-r
позволяет\
(и почти всегда должен использоваться по привычкеread
)-%02x\n
приводит к тому, что вывод будет буквальным дефисом, за которым следует двузначное шестнадцатеричное число, включая, если необходимо, начальный ноль. Новая строка здесь лишняя и может быть опущена.read
Получает один байт (-n 1
) от/dev/urandom
в диапазоне от 0 до 255 (00
кFF
).Одиночная кавычка в последнем аргументе
printf
в цикле приводит к выводу символа в виде его числового значения («A» выводится как «65»). Смотрите спецификацию POSIX,printf
где сказано:источник
IFS= read …
избегать складывания 09 0a и 20 (обычные символы IFS) в 00.-d ''
. Я исправлю свой ответ. Спасибо, что дали мне знать.-r
что защищает `\` поссорилось. Я бы хотел, чтобы правильная обработка двоичных данных в программах оболочки была не такой сложной. Seems Кажется невозможным точно представить 00 в середине строки. Ваш односимвольный метод обрабатывает 00 в силу удобного (разработанного?) Взаимодействия междуread
, интерполяции строк и того, какprintf
обрабатывается односимвольный аргумент'
. Вздох.hexdump -C
.Самый короткий способ, которым я мог придумать, - это использовать hexdump напрямую.
Протестировано на GNU / Linux
источник
hexdump -n3 -e'/3 "00-60-2F" 3/1 "-%02X"' /dev/random
немного короче :-)Еще одно решение
То же самое в верхнем регистре
Сгенерируйте его для переменной среды Bash
Детали:
od (восьмеричный дамп)
-An
Подавляет лидирующее представление адреса (дополнительный шум) вывода.-N3
Ограничьте вывод тремя байтами.-t xC
Выведите в шестнадцатеричном виде, ASCII стиль символов, по желанию./dev/urandom
Псевдофайл случайного числа ядра Linux.sed (редактор потоков) Для замены пробела на пробел.
-e <SCRIPT>
выполнить сценарий sed.tr (перевод строки) Необязательно, в этом примере. Мне нравятся прописные MAC-адреса в моих скриптах / окружении.
источник
источник
Это должно работать
источник
источник
Этот тоже работает. Вывод все в верхнем регистре, как требуется.
источник
Это работает в классическом
#!/bin/sh
сценарии shell ( ):Или, если вы хотите иметь собственный префикс:
Пример использования:
источник
Другой вариант заключается в использовании
jot
:-w
изменяет формат,-s
изменяет разделитель и-r
генерирует случайные числа.Команды, используемые
od
в ответах, опубликованных artistoex и zero2cx, добавляют дополнительные черты к выходу с OS Xod
, но это не делает:OS X
od
(/usr/bin/od
ниже) использует другой формат вывода, чем GNUod
:источник
jot -w%02X -s- -r 3 1 256
наjot -w%02X -s- -r 3 0 256
.В Linux:
Объяснение:
В Linux каждый раз при чтении выдает
/proc/sys/kernel/random/uuid
новый UUID типа 4 (случайный) . Большинство его символов - (псевдо) случайные шестнадцатеричные цифры, поэтому мы можем их использовать. Например:Теперь достаточно
00-60-2f-
сначала напечатать (без перевода строки):Плюсы:
printf
иcut
являются инструментами POSIX;Минусы:
/proc/sys/kernel/random/uuid
может быть недоступно в некоторых системах;источник
Один лайнер (баш)
результат
источник