Как использовать оболочку для получения IPv6-адреса с MAC-адреса?

Мы знаем, что мы можем использовать MAC-адрес для создания идентификатора интерфейса, например, для локального IPv6-адреса, который должен быть уникальным в Сети.

На изображении показано, как это сделать:

Создать идентификатор интерфейса с MAC-адреса

Мои вопросы:

  • Как я могу создать адрес IPv6 из MAC с помощью awk или sed ?
  • ИЛИ есть ли какая-либо команда, которая дает мне локальный адрес IPv6 для конкретного MAC (что-то вроде createIPv6 myMAC )?

3 Solutions collect form web for “Как использовать оболочку для получения IPv6-адреса с MAC-адреса?”

Если вы хотите создать целый IPv6-адрес из MAC-адреса (и данного префикса), вы можете использовать отличный инструмент ipv6calc Питера Bieringer.

Следующая команда создает локальный адрес IPv6 с привязкой ( fe80:: prefix) с MAC-адреса:

 $ ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr fe80:: 00:21:5b:f7:25:1b fe80::221:5bff:fef7:251b 

Вы можете оставить большинство опций и позволить команде угадать, что делать:

 $ ipv6calc --in prefix+mac fe80:: 00:21:5b:f7:25:1b No action type specified, try autodetection...found type: prefixmac2ipv6 fe80::221:5bff:fef7:251b 

Для дистрибутивов Debian ipv6calc находится в основном репозитории.

Из записи в Wikipedia IPv6 более текстовое описание:

64-битный идентификатор интерфейса чаще всего выводится из его 48-разрядного MAC-адреса.

MAC-адрес 00: 0C: 29: 0C: 47: D5 превращается в 64-разрядный EUI-64, вставляя FF: FE в середине: 00: 0C: 29: FF: FE: 0C: 47: D5.

Итак, заменив третий : с :FF:FE: должен сделать трюк:

 echo 00:0C:29:0C:47:D5 | sed s/:/:FF:FE:/3 00:0C:29:FF:FE:0C:47:D5 

Не знаю, является ли этот синтаксис специфичным для GNU sed.


Работа в процессе:

Преобразовать это в биты:

 for HEX in $(tr ":" " " <<< 00:0C:29:FF:FE:0C:47:D5) do printf "%08d " $(bc <<< "ibase=16;obase=2;$HEX") done 

должен привести к битам 00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101 оставив только перевернутый бит номер 7.

 #! /usr/bin/env python import sys n=[int(x, 16) for x in sys.argv[1].split(":")] print "fe80::%02x%02x:%02xff:fe%02x:%02x%02x" % tuple([n[0]^2]+n[1:]) 
  • Удалите кусок строк в соответствии с порядковыми номерами
  • Как удалить теги html из файла с помощью sed?
  • Вывод команды parse
  • поместить специальный символ или пробел, если шаблон не найден
  • Как удалить все теги HTML с помощью sed?
  • Найти первое появление каждого из этих шаблонов с помощью grep
  • Как искать и заменять строки, соответствующие списку заметок для нескольких файлов
  • Замените строки в файле на основе списка строк и списка соответствующих замещений
  • как разделить файл и строки
  • awk: разделить столбец, распечатать левую часть разделителя и вставить в середине csv
  • Удалить определенные номера строк из текстового файла с помощью sed?
  • Linux и Unix - лучшая ОС в мире.