geração de endereço MAC

0

Eu tenho o problema abaixo. Eu mantive um prefixo MAC constante:

prefix=00:0c:29:51:

Depois, adicionarei dois octetos. Como dizer, 4a: 20 e eu preciso que isso seja gerado aleatoriamente. Então eu tenho:

mac=$(awk -v min=1000 -v max=10000 'BEGIN{srand(); print int(min+rand()*(max-min+1))}' | sed -e 's/.\{2\}/&:/g;s/.$//')

E por último,

final_mac=00:0c:29:51:$mac
echo $final_mac

No entanto, isso às vezes gera um MAC duplicado.

80:29
67:51
99:48
87:36
87:36

Uma forma de atenuar isso seria percorrer este arquivo de texto para verificar se o atual MAC gerado existe. Se sim, gere-o novamente e verifique novamente.

Quaisquer pensamentos para superar essa solução alternativa que tenho? Obrigado.

    
por suhas savkoor 20.06.2017 / 15:02

1 resposta

2

Por que min=1000 e max=10000 ? Existem 65536 valores possíveis de dois octetos, há alguma razão para usar apenas parte deles?

Em shells que possuem $RANDOM (Bash / ksh93 / zsh pelo menos), você faz isso completamente no shell:

printf "00:0c:29:51:%02x:%02x\n" $(( $RANDOM % 256 )) $(( $RANDOM % 256 )) 

Ou, se você quiser armazenar os endereços gerados em um arquivo e tentar novamente até obter um novo, algo assim:

file=./generated_macs
gen() { 
    printf "00:0c:29:51:%02x:%02x\n" $(( $RANDOM % 256 )) $(( $RANDOM % 256)); 
}
while mac=$(gen); grep -q "$mac" "$file" ; do true ; done    
echo "$mac" >> "$file"
    
por 20.06.2017 / 15:40

Tags