Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Генератор MAC адреса  (Прочитано 5048 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Валерий [РФ]

  • Автор темы
  • Участник
  • *
  • Сообщений: 139
  • Xubuntu 18.04.3 LTS
    • Просмотр профиля
Генератор MAC адреса
« : 11 Август 2015, 18:21:50 »
Всем привет!
Подскажите пожалуйста, как на php сделать простенький генератор мак адресов? Или в виде обычного bash скрипта?
«Лучше быть умным и иногда тупить, чем быть тупым и всегда умничать»

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12075
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #1 : 11 Август 2015, 18:48:38 »
мак - это по сути псевдослучайное число, если не считать префиксов (https://ru.wikipedia.org/wiki/MAC-%D0%B0%D0%B4%D1%80%D0%B5%D1%81). Префиксы распределяемые между производиетелями сетевых интерфейсов. Как правильно выбрать префикс - не скажу - не знаю. Но можно выбрать локально администрируемый вариант и префикс брать произвольный. А последние биты - можно смело из рандома брать.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Валерий [РФ]

  • Автор темы
  • Участник
  • *
  • Сообщений: 139
  • Xubuntu 18.04.3 LTS
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #2 : 11 Август 2015, 19:41:06 »
Я нашел разные генераторы онлайн и заметил одну фишку по формированию мак адреса.

Вот пример:
70-B4-5A-95-D5-E7
3C-F6-57-D8-30-BB
3C-65-3F-3B-03-F5
3A-00-24-73-CD-85
3D-61-A9-39-2D-18
F4-9E-CC-4F-33-A1
36-70-98-8E-48-C8
49-84-2D-88-C0-31
7E-FA-31-A3-6E-FF
29-AC-60-D2-E6-8E
EB-DA-2C-B7-29-5F
59-60-D0-F1-EF-18

Как видим он состоит из 12 символов разбитых через дефис по 2 символа на 6 ячеек. Порядок символов уникален, т.е. либо буква и цифра (F4-), либо две цифры от 0 до 99 (98-), либо две буквы (FF-), по другому мак не примется.

Я попробовал собрать вот такой скрипт (php) из готовый вариантов на различных сайтах но у меня получается какая-то лажа)))

Код: PHP
  1. <?php
  2. $input = array(
  3. "A",
  4. "B",
  5. "C",
  6. "D",
  7. "E",
  8. "F",
  9. "G",
  10. "H",
  11. "I",
  12. "J",
  13. "K",
  14. "L",
  15. "M",
  16. "N",
  17. "O",
  18. "P",
  19. "Q",
  20. "R",
  21. "S",
  22. "T",
  23. "U",
  24. "V",
  25. "W",
  26. "X",
  27. "Y",
  28. "Z",
  29. "0",
  30. "1",
  31. "2",
  32. "3",
  33. "4",
  34. "5",
  35. "6",
  36. "7",
  37. "8",
  38. "9"
  39. );
  40. $rand_keys = array_rand($input, 12);
  41. echo $input[$rand_keys[0]] . "";
  42. echo $input[$rand_keys[1]] . "-";
  43. echo $input[$rand_keys[2]] . "";
  44. echo $input[$rand_keys[3]] . "-";
  45. echo $input[$rand_keys[4]] . "";
  46. echo $input[$rand_keys[5]] . "-";
  47. echo $input[$rand_keys[6]] . "";
  48. echo $input[$rand_keys[7]] . "-";
  49. echo $input[$rand_keys[8]] . "";
  50. echo $input[$rand_keys[9]] . "-";
  51. echo $input[$rand_keys[10]] . "";
  52. echo $input[$rand_keys[11]] . "";
  53. ?>

сам я в этом чайник  ;D
Может кто доведет до ума по выше описанному принципу?
«Лучше быть умным и иногда тупить, чем быть тупым и всегда умничать»

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #3 : 11 Август 2015, 19:58:04 »
Я нашел разные генераторы онлайн и заметил одну фишку по формированию мак адреса.
...
Как видим он состоит из 12 символов разбитых через дефис по 2 символа на 6 ячеек. Порядок символов уникален, т.е. либо буква и цифра (F4-), либо две цифры от 0 до 99 (98-), либо две буквы (FF-), по другому мак не примется.
Цитировать
Ну, блин, вы даёте!
(с) из известного фильма.

MAC - это Ethernet адрес, 2 адреса в Ethernet кадре, всё асолютно регламентировано стандартом IEEE 802.3:
- нет там никаих 12 символов ...
- там есть 6-байтовое числовое заначение, каждый байт: 0-255,
- а 2 символа в вашей записи - это шестнадцатеричные числа, выражающие полубайты, 4 бит - старший и 4-младший.
- а 16-ричные цифры записываются знаками: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
- выбирайте любые 12 таких знаков (6 байт, 12 полубайт), записывайте их в ряд - это и будет вам допустимый MAC-адрес.

Так что 012345 и FEDCBA - это вполне хорошие MAC-адреса.

Оффлайн Валерий [РФ]

  • Автор темы
  • Участник
  • *
  • Сообщений: 139
  • Xubuntu 18.04.3 LTS
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #4 : 11 Август 2015, 20:10:45 »
Я нашел разные генераторы онлайн и заметил одну фишку по формированию мак адреса.
...
Как видим он состоит из 12 символов разбитых через дефис по 2 символа на 6 ячеек. Порядок символов уникален, т.е. либо буква и цифра (F4-), либо две цифры от 0 до 99 (98-), либо две буквы (FF-), по другому мак не примется.
Цитировать
Ну, блин, вы даёте!
(с) из известного фильма.

MAC - это Ethernet адрес, 2 адреса в Ethernet кадре, всё асолютно регламентировано стандартом IEEE 802.3:
- нет там никаих 12 символов ...
- там есть 6-байтовое числовое заначение, каждый байт: 0-255,
- а 2 символа в вашей записи - это шестнадцатеричные числа, выражающие полубайты, 4 бит - старший и 4-младший.
- а 16-ричные цифры записываются знаками: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
- выбирайте любые 12 таких знаков (6 байт, 12 полубайт), записывайте их в ряд - это и будет вам допустимый MAC-адрес.

Так что 012345 и FEDCBA - это вполне хорошие MAC-адреса.


Ясно. Но сути не меняет.
Всё равно нужен генератор который будет складывать из этого (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.) мак адрес.
«Лучше быть умным и иногда тупить, чем быть тупым и всегда умничать»

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #5 : 11 Август 2015, 20:16:38 »
Всё равно нужен генератор который будет складывать из этого (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.) мак адрес.
А что там генерировать: берёте последовательно наугад 12 раз цифру из этого ряда...

Оффлайн Валерий [РФ]

  • Автор темы
  • Участник
  • *
  • Сообщений: 139
  • Xubuntu 18.04.3 LTS
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #6 : 11 Август 2015, 20:21:06 »
Вот, получилось  :D
Код: PHP
  1. <?php
  2. $input = array("A","B","C","D","E","F","0","1","2","3","4","5","6","7","8","9");
  3. $rand_keys = array_rand($input, 12);
  4. echo $input[rand(0,12)] . "";
  5. echo $input[rand(0,12)] . "-";
  6. echo $input[rand(0,12)] . "";
  7. echo $input[rand(0,12)] . "-";
  8. echo $input[rand(0,12)] . "";
  9. echo $input[rand(0,12)] . "-";
  10. echo $input[rand(0,12)] . "";
  11. echo $input[rand(0,12)] . "-";
  12. echo $input[rand(0,12)] . "";
  13. echo $input[rand(0,12)] . "-";
  14. echo $input[rand(0,12)] . "";
  15. echo $input[rand(0,12)] . "";
  16. ?>

Не знаю на сколько такой код правильный, но зато работает  ;D
«Лучше быть умным и иногда тупить, чем быть тупым и всегда умничать»

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #7 : 11 Август 2015, 20:59:06 »
Не знаю на сколько такой код правильный, но зато работает  ;D
Ну работает - и ладно...

Непонятно зачем так записывать (16-ричные цифры):
$input = array("A","B","C","D","E","F","0","1","2","3","4","5","6","7","8","9");Запишите так:
$input = array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12075
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Генератор MAC адреса
« Ответ #8 : 12 Август 2015, 00:05:08 »
я в PHP не силен, но ИМХО rand должен давать числа в диапазоне 0-15 (0-F в шеснадцатеричной системе счисления), а не 0,12.

И не забывайте, что старшие два бита для локально администрируруемых MAC адресов (согласно стандарту) обязаны быть 01 т.е. самый старший знак должен быть в диапазоне 4-7.

Ну а кроме того как по мне так проще генерить 6 случайных байт (5 чисел в диапазоне 0-255 и одно 64-127 - первый байт) и оформить их вывод в 16-ричном виде (не знаю как в PHP это делать - но должно быть ибо 16-ричный - довольно часто употребимый формат).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.145 секунд. Запросов: 24.