- Gere um int de tamanho apropriado da seguinte forma: link
- Converta para hexadecimal da seguinte forma: link
- Adicione os traços entre três blocos gerados aleatoriamente
#!/bin/bash
RANGE=255
#set integer ceiling
number=$RANDOM
numbera=$RANDOM
numberb=$RANDOM
#generate random numbers
let "number %= $RANGE"
let "numbera %= $RANGE"
let "numberb %= $RANGE"
#ensure they are less than ceiling
octets='00-60-2F'
#set mac stem
octeta='echo "obase=16;$number" | bc'
octetb='echo "obase=16;$numbera" | bc'
octetc='echo "obase=16;$numberb" | bc'
#use a command line tool to change int to hex(bc is pretty standard)
#they're not really octets. just sections.
macadd="${octets}-${octeta}-${octetb}-${octetc}"
#concatenate values and add dashes
echo $macadd
#echo result to screen
#note: does not generate a leading zero on single character sections. easily remediedm but that's an exercise for you
Ou em python:
from random import randint
def gen_mac_char():
return hex((randint(0,16))).split('x')[1]
def gen_mac_pair():
return ''.join([gen_mac_char(), gen_mac_char()])
def gen_last_half_mac(stem):
return '-'.join([stem, gen_mac_pair(), gen_mac_pair(), gen_mac_pair()])
print(gen_last_half_mac('00-60-2F'))
Observe que a versão do Python usa apenas um campo de 16 amplos para gerar um caractere hexadecimal, para que você não precise se preocupar com o preenchimento de zero - abordagem corrigida para endereçar um comentário.