Sabemos que podemos usar o endereço MAC para criar um identificador de interface, por exemplo, para um endereço IPv6 local de link que deve ser exclusivo na rede.
A imagem mostra a maneira de fazer isso:
Minhas perguntas são:
- Como posso criar um endereço IPv6 a partir de um MAC usando
awk
oused
? - OU existe algum comando que me forneça o endereço IPv6 local do link para um MAC específico (algo assim
createIPv6 myMAC
)?
sed
awk
ipv6
mac-address
Nidal
fonte
fonte
Respostas:
Se você deseja criar um endereço IPv6 inteiro a partir de um MAC (e um determinado prefixo), você pode usar a excelente
ipv6calc
ferramenta de Peter Bieringer.O comando a seguir cria um endereço IPv6 local de link (
fe80::
prefixo) a partir de um endereço MAC:Você pode deixar a maioria das opções de lado e deixar o comando adivinhar o que fazer:
Para distribuições Debian,
ipv6calc
está no repositório principal.fonte
Na entrada da Wikipedia IPv6, uma descrição mais textual:
Portanto, substituir o terceiro
:
por:FF:FE:
deve fazer o truque:Não faço ideia se essa sintaxe é específica para o GNU sed.
Trabalho em progresso:
Converta isso em bits:
deve resultar nos bits
00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
deixando apenas o lançamento do número 7.fonte
fonte
Você pode criar uma função bash (e colocá-la no seu
~/.bashrc
) que usaIFS
para dividir o endereço MAC em 6 grupos separados por dois pontos e montá-los. Você também precisará inverter o sétimo bit mais significativo, ou seja, o bit 1 do primeiro byte:Exemplo de uso:
fonte
Devo dar os parabéns ao @ rubo77 acima para obter uma resposta de shell puro (a menos que você conte printf) acima, o que eu estava procurando.
Isso adiciona um pouco de sed a:
(a) elimine quaisquer zeros à esquerda em cada pedaço de 16 bits; e
(b) eliminar quaisquer outros pedaços totalmente zero no início do DIC
... conforme convenções comuns para a brevidade do endereço.
Observe que, se você desejar refazê-lo para outros prefixos (arbitrários), que podem ser usados em EUI-64 em qualquer escopo (embora seja recomendável não usá-lo para endereços globais por razões de privacidade), você precisará de um pouco script sed mais complicado. Isso ocorre porque o
fe80::
prefixo já contém três blocos de zero (elididos ao dois-pontos) adjacentes ao início do IID. Portanto, mesmo que o primeiro pedaço do IID seja totalmente zero (ou seja, se o MAC começou com02:00
), ele também seria eliminado. O formato EUI-64 deixa apenas mais um pedaço que pode ser zero - o último - que o script acima adiciona novamente como um único zero. Outros prefixos podem exigir que um deixe um único zero entre dois pontos.fonte
printf
sozinha e fiz as coisas adicionais no sed.