Мы знаем, что мы можем использовать MAC-адрес для создания идентификатора интерфейса, например, для локального IPv6-адреса канала, который должен быть уникальным в сети.
На рисунке показан способ сделать это:
Мои вопросы:
- Как я могу создать IPv6-адрес из MAC с помощью
awk
илиsed
? - ИЛИ есть ли команда, которая дает мне локальный IPv6-адрес для определенного MAC-адреса (что-то подобное
createIPv6 myMAC
)?
sed
awk
ipv6
mac-address
Нидал
источник
источник
Ответы:
Если вы хотите создать полный адрес IPv6 из MAC (и с заданным префиксом), вы можете использовать отличный
ipv6calc
инструмент Питера Биерингера.Следующая команда создает локальный IPv6-адрес (
fe80::
префикс) из MAC-адреса:Вы можете оставить большинство параметров и позволить команде угадать, что делать:
Для дистрибутивов Debian,
ipv6calc
находится в основном хранилище.источник
Из записи Википедии IPv6 более текстовое описание:
Таким образом , заменив треть
:
с:FF:FE:
следует сделать трюк:Не знаю, специфичен ли этот синтаксис для GNU sed.
Работа в процессе:
Преобразуйте это в биты:
должно приводить к тому, что биты
00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
оставляют только переключение бит 7.источник
источник
Вы можете создать функцию bash (и поместить ее в свой
~/.bashrc
), которая будет использоватьIFS
для разделения MAC-адреса на 6 групп, разделенных двоеточиями, и их сборки. Вам также нужно будет перевернуть 7-й старший значащий бит, то есть 1-й бит первого байта:Пример использования:
источник
Я должен отдать дань уважения @ rubo77 выше за чистый ответ (если не считать printf) выше, который я искал.
Это добавляет немного sed к:
(а) исключить любые начальные нули в каждом 16-битном фрагменте; и
(б) исключить любые дополнительные нулевые фрагменты в начале IID
... в соответствии с общими соглашениями для краткости адреса.
Обратите внимание, что если вы хотите переназначить это для других (произвольных) префиксов, которые вы могли бы использовать, так как EUI-64 может использоваться в любой области (хотя рекомендуется не использовать его для глобальных адресов из соображений конфиденциальности), вам потребуется немного более замысловатый сценарий sed. Это связано с тем, что
fe80::
префикс уже содержит три нулевых блока (исключенных из двойного двоеточия) рядом с началом IID. Таким образом, даже если первый блок IID имеет все нули (то есть, если MAC начался с02:00
), он также будет исключен. Формат EUI-64 оставляет только один дополнительный фрагмент, который может быть полностью нулевым, - последний - который сценарий выше добавляет обратно в качестве единого нуля. Для других префиксов может потребоваться оставить один ноль между двумя двоеточиями.источник
printf
одиночестве и вместо этого сделал дополнительные вещи в sed.