Как использовать оболочку для получения 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:]) 
  • Более сжатые методы для обертывания файла, чем использование sed
  • Заменить значения в столбце, содержащем числа
  • Как использовать sed для изменения}, {"Foo" to} \ n {"Foo"?
  • Поиск и замена строк, которые не являются подстроками других строк
  • Удаление управляющих символов с помощью sed
  • Использование команды Sed без определения переменных в сценарии оболочки
  • Используйте find + sed + cp, чтобы найти файлы и скопировать их в каталог с другим именем
  • Рекурсивно найти все файлы с именем «file.txt» и выполнить команду sed
  • Как заменить начальный ноль пробелом в SED?
  • Удаление содержимого из файла
  • Многострочная обработка текста: редактирование sshd_config
  • Interesting Posts

    Как восстановить /etc/init.d/.depend.(boot|start|stop) на Debian?

    Как измерять время, затрачиваемое на доступ к данным файла через сетевое хранилище?

    Печать строк с похожим текстом вместе

    Почему я не мог убить процесс NOHUP?

    Работа Anacron жалуется: «Gtk-WARNING **: невозможно открыть дисплей»

    Openstack для домашнего облачного хостинга

    как создать файл данных со столбцом даты от дня1 до дня?

    Преобразуйте аргумент в верхний регистр, чтобы передать его как переменную

    Как я могу сделать awk на Busybox обрабатывать весь вход с символом NULL между ними как одну запись?

    Случайные аргументы (содержащие цветовые коды) из массива

    Возможно ли перенаправить трафик на IP-адрес злоумышленника?

    Как установить драйвер камеры из файла ac и что делает этот драйвер?

    Как запустить java-приложение после перезагрузки компьютера?

    Удалите сервер MySQL без удаления или нарушения каких-либо функций клиента

    Проблема с размером файловой системы

    Linux и Unix - лучшая ОС в мире.