다음 질문이 있습니다. 고정된 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