Преобразование MAC-адреса в локальный адрес ссылки с помощью bash

Как конвертировать Mac-адрес в адрес ipv6 Link-Local?

вы должны добавить fe80:: в начале и вставить ff:fe в середине

кроме того, все ведущие нули должны быть разделены

2 Solutions collect form web for “Преобразование MAC-адреса в локальный адрес ссылки с помощью bash”

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

 mac_to_ipv6 () { IFS=':'; set $1; unset IFS ipv6_address="fe80::$(printf %02x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6" } 

Вы можете использовать префикс и дескрипторы дескриптора ${VAR#PREFIX} и ${VAR%SUFFIX} чтобы вырезать MAC-адрес на куски.

 mac_to_ipv6 () { mac=$1 ipv6_address=fe80::$(printf %02x $((0x${mac%%:*} ^ 2))) mac=${mac#*:} ipv6_address=$ipv6_address${mac%:*:*:*}ff:fe mac=${mac#*:*:} ipv6_address=$ipv6_address${mac%:*}${mac##*:} } и mac_to_ipv6 () { mac=$1 ipv6_address=fe80::$(printf %02x $((0x${mac%%:*} ^ 2))) mac=${mac#*:} ipv6_address=$ipv6_address${mac%:*:*:*}ff:fe mac=${mac#*:*:} ipv6_address=$ipv6_address${mac%:*}${mac##*:} } 

Вы можете использовать конструкцию подстроки (только bash, а не sh).

 mac_to_ipv6 () { local mac=$1 byte0 printf %02x -v byte0 $((0x${mac:0:2} ^ 2)) ipv6_address="fe80::$byte0${mac:3:5}ff:fe${mac:9:5}${mac:15:2}" } и mac_to_ipv6 () { local mac=$1 byte0 printf %02x -v byte0 $((0x${mac:0:2} ^ 2)) ipv6_address="fe80::$byte0${mac:3:5}ff:fe${mac:9:5}${mac:15:2}" } 

Взяв объяснение Жиля, но правильно перевернув 7-й бит в соответствии со спецификацией IPv6 :

 #!/bin/bash IFS=':'; set $1; unset IFS printf "fe80::%x%x:%x:%x:%x\n" 0x$(( 0x${1} ^ 0x02 )) 0x${2} 0x${3}ff 0xfe${4} 0x${5}${6} 

Пример бит-листания:

 $ mac_to_ipv6 00:00:00:00:00:00 fe80::200:00ff:fe00:0000 
  • tproxy на пользователя
  • Пул NTP содержит только записи IPv4?
  • Как использовать оболочку для получения IPv6-адреса с MAC-адреса?
  • Конфигурация IPv6 pfSense
  • Почему мои сценарии if-up.d работают до завершения DHCP (v6)?
  • Является ли «безопасным» отключить IPv6 для ускорения работы Firefox?
  • Разрешение имени хоста занимает 5 секунд
  • postfix добавить один адрес IPv6
  • ip6tables разрешает трафик IPv6 с OpenVPN через мой VPS
  • Самый маленький дистрибутив Linux / BSD для тестирования IPv6?
  • Netcat (nc6) - Минимальный IPv6 только TCP-сервер и клиент
  • Interesting Posts

    Понимание различных дистрибутивов Linux

    Сортировка по имени файла с помощью команды du

    Рабочий стол внезапно перестает реагировать на мышь (перемещение / фокусировка / щелканье элементов пользовательского интерфейса)

    Как заставить Вино работать с SELinux?

    Почему команда GNU find -execdir ведет себя иначе, чем поиск BSD?

    Что происходит, когда виртуальный пакет зависит / рекомендует / предлагать без реального пакета зависит / рекомендует / предлагать?

    Каков префикс числа в файлах конфигурации из каталога .d

    libvirt: Создание виртуальной машины Centos 7: не удалось запустить Switch Root

    Существуют ли дистрибутивы Linux, которые защищают от «самообороны»?

    Почему эти команды xrandr не работают?

    Выполняют ли все задания в оболочке bash именно сеанс?

    Почему «измененная» дата не изменяется при изменении файла?

    Увеличение настроек `ulimit -u` временно в OSX Yosemite

    Запустите `grep`, исключая файл по определенному пути

    Установите переменную среды оболочки без использования встроенной команды оболочки

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