Osc*_*vis 4 random bash mac-address generator
我需要在不使用macchanger或类似工具的情况下,在bash中生成随机的mac地址。
我有这个:
random_mac=$(hexdump -n6 -e '/1 ":%02X"' /dev/random | sed s/^://g)
Run Code Online (Sandbox Code Playgroud)
但是有时候,如果您尝试将Mac放入界面,它会说SIOCSIFHWADDR: Cannot assign requested address。我对此进行了调查,似乎与单播地址有关。我有一个解决方法:
random_mac=00:$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 200 | md5sum | sed -r 's/^(.{10}).*$/\1/;s/([0-9a-f]{2})/\1:/g; s/:$//;')
Run Code Online (Sandbox Code Playgroud)
但是我不太喜欢这个,因为它不是完全随机的。它始终00是一开始的。
任何已知的bash随机mac生成器都适合单播规则吗?
我阅读使用其他方法od。我想以较少的工具,可以使用具有较小的requeriments运行该脚本。没有可以做od?还是od绝对总是包含在所有Linux发行版中?如果是的话,我可以用它。
根据维基百科,如果LSB的第一个字节是0,这是一个单播地址。如果第二LSB上的第一个八位组是1,这是一个本地产生的MAC地址。
0x0 0000
0x1 0001
0x2 0010
0x3 0011
0x4 0100
0x5 0101
0x6 0110
0x7 0111
0x8 1000
0x9 1001
0xA 1010
0xB 1011
0xC 1100
0xD 1101
0xE 1110
0xF 1111
Run Code Online (Sandbox Code Playgroud)
我们可以看到,对于本地生成的MAC地址即安全第一字节是X 2,X 6,X A和X E,因为它们都在端10.使用awk,我们可以把那些到一个数组,然后替换的第二个字节输出与随机选择。
此更新版本将与Linux或OS X的工作:
#!/bin/bash
hexdump -n 6 -ve '1/1 "%.2x "' /dev/random | awk -v a="2,6,a,e" -v r="$RANDOM" 'BEGIN{srand(r);}NR==1{split(a,b,",");r=int(rand()*4+1);printf "%s%s:%s:%s:%s:%s:%s\n",substr($1,0,1),b[r],$2,$3,$4,$5,$6}'
Run Code Online (Sandbox Code Playgroud)
或者,摊开了一下:
#!/bin/bash
hexdump -n 6 -ve '1/1 "%.2x "' /dev/random |\
awk -v a="2,6,a,e" -v r="$RANDOM" '
BEGIN {
srand(r);
}
NR==1 {
split(a, b, ",");
r=int(rand() * 4 + 1);
printf("%s%s:%s:%s:%s:%s:%s\n", substr($1, 0, 1), b[r], $2, $3, $4, $5, $6);
}
'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |