como gerar um endereço MAC aleatório a partir da linha de comando do Linux

21

Como eu gero um endereço MAC aleatório a partir da linha de comando do Linux?

Eu procuro por uma solução que requer apenas ferramentas padrão comumente encontradas na linha de comando do Linux.

O endereço MAC será usado para um KVM convidado.

    
por Erik Sjölund 10.08.2011 / 09:46

9 respostas

40

eu uso

macaddr=$(echo $FQDN|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:::::/')

O benefício deste método, em um número completamente aleatório, é que é possível reproduzir de forma confiável o endereço MAC com base no FQDN da máquina, o que acho útil às vezes. O 02 para o primeiro octeto apenas define o bit "atribuído localmente", o que torna óbvio que não é um endereço MAC fornecido pelo fornecedor e garante que você não colidirá com o endereço MAC de uma NIC real.

Se você precisar gerar vários endereços MAC por host, usei para concatenar o FQDN com o nome da ponte para conectar a interface; isso fez um bom trabalho de espalhar as coisas para diferentes NICs.

    
por 10.08.2011 / 10:00
7

Os scripts postados são bons, mas eu quero adicionar um aviso: Mind the Birthday (paradoxon)!

O fato é que, mesmo que você tenha apenas 23 pessoas, a chance é de 50% de que 2 delas tenham aniversário no mesmo dia.

Depende do seu cenário como você o usa, mas se você gerar o MACS aleatoriamente, em aproximadamente 1 milhão a chance de um confronto com o número mac é de 40% em 2 milhões, já é 87%!

Se você precisa apenas de um par isso é ok, mas quando você mantém um farm de servidores com centenas de servidores, cada um deles hospedando dezenas de máquinas virtuais, ou se você usa os macs como índice em algum banco de dados e precisa uniques tenha cuidado!

    
por 10.08.2011 / 11:23
5
myserver% perl -e 'for ($i=0;$i<6;$i++){@m[$i]=int(rand(256));} printf "%X:%X:%X:%X:%X:%X\n",@m;'
55:C2:A5:FA:17:74

Ah, a velha Motocicleta do Exército Suíço é montada novamente. E por meio da versão 0.2, estou sem vergonha de roubar o ponto excelente de womble sobre o primeiro octeto sendo 02:

myserver% perl -e 'for ($i=0;$i<5;$i++){@m[$i]=int(rand(256));} printf "02:%X:%X:%X:%X:%X\n",@m;'
02:8E:94:A3:47:26
    
por 10.08.2011 / 10:01
4

Eu sei que este post é antigo, mas para futuros visitantes, se você quiser um endereço MAC pseudo-aleatório criptograficamente seguro, sem estar limitado a 0x02 como o OUI, aqui está um gerador agnóstico rápido de plataforma:

$ printf '%02x' $((0x$(od /dev/urandom -N1 -t x1 -An | cut -c 2-) & 0xFE | 0x02)); od /dev/urandom -N5 -t x1 -An | sed 's/ /:/g'
    
por 25.09.2014 / 10:04
2

Aqui está outro, baseado na resposta do wombie:

macaddr=$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/:::::/')
echo $macaddr
    
por 30.10.2012 / 09:53
2

Aqui estão cinco outras opções, todas usando bits aleatórios para o bit menos significativo do byte mais significativo que indica se o endereço é unicast ou multicast e para o segundo bit menos significativo do byte mais significativo que indica se o endereço é administrado universal ou localmente.

jot -w%02X -s: -r 6 1 256
openssl rand -hex 6|fold -w2|paste -sd: -
od -N6 -tx1 -An /dev/random|awk '$1=$1'|tr \  :
god -N6 -tx1 -An /dev/random|cut -c2-|tr \  :
hexdump -n6 -e'/1 ":%02X"' /dev/random|cut -c2-

jot vem com OS X e BSDs, mas não com a maioria das distribuições Linux. Em jot -w altera o formato, -s altera o separador e -r gera números aleatórios.

od está em POSIX, mas hexdump não está.

O od ( /usr/bin/od below) do OS X usa um formato de saída diferente do GNU od :

$ /usr/bin/od -N6 -tx1 -An /dev/random|tr ' ' :
:::::::::::d9::b9::d7::da::5f::96::::::::::::::::::::::::::::::::::::::::
$ god -N6 -tx1 -An /dev/random|tr ' ' :
:f5:6d:0a:3b:39:f9

Nas opções od do OS X colocadas depois que um argumento para um arquivo de entrada é tratado como o nome dos arquivos de entrada, o comando na resposta de Aaron Toponce lê /dev/urandom indefinidamente com od . do OS X. / p>     

por 26.05.2016 / 09:07
2

Essas variantes também funcionam.

por mais tempo:

openssl rand -hex 6 | sed 's/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/:::::/'

ou menor:

openssl rand -hex 6 | sed 's/\(..\)/:/g; s/:$//'

O consumo de carga de ambas as variantes é muito semelhante de acordo com a medição rápida com o tempo.

    
por 07.09.2016 / 10:40
1

Você poderia adicionar um $ RANDOM após $ FQDN e isso forneceria endereços MAC aleatórios sempre que fosse executado. Isso é especialmente útil para pessoas que desejam criar vms de backup usando instantâneos ou clones de vms.

macaddr=$(echo $FQDN$RANDOM|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:::::/')
    
por 29.07.2016 / 00:30
0

Eu uso:

echo -n 02; od -t x1 -An -N 5 /dev/urandom | tr ' ' ':'
    
por 19.07.2016 / 10:54