MAC 주소 생성

MAC 주소 생성

다음 질문이 있습니다. 고정된 MAC 접두사를 유지했습니다.

prefix=00:0c:29:51:

그런 다음 두 개의 옥텟을 추가하겠습니다. 4a:20처럼 무작위로 생성해야 합니다. 그래서 나는 가지고있다:

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

마침내,

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

그러나 이로 인해 중복된 MAC이 생성되는 경우가 있습니다.

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

이를 완화하는 한 가지 방법은 이 텍스트 파일을 반복하여 현재 생성된 MAC이 존재하는지 확인하는 것입니다. 그렇다면 재생성하여 확인하시기 바랍니다.

이 해결 방법을 극복하는 방법에 대한 아이디어가 있습니까? 감사해요.

답변1

min=1000그리고 max=10000? 65536개의 가능한 두 옥텟 값이 있습니다. 그 중 일부만 사용되는 이유가 있나요?

$RANDOM(적어도 Bash/ksh93/zsh) 쉘에서는 이 작업을 쉘에서 정확하게 수행할 수 있습니다 .

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

또는 생성된 주소를 파일에 저장하고 다음과 같이 새 주소를 얻을 때까지 재시도하려는 경우:

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"

답변2

/dev/urandom을 사용하여 생성할 수 있습니다.

end=$( for i in $(seq 1 2); do character=$( tr -dc "0-9A-E" < /dev/urandom | head -c 2); printf ":%s" $character; done); echo "00:0c:29:51"$end

관련 정보