击。生成随机的MAC地址(单播)

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发行版中?如果是的话,我可以用它。

mik*_*n32 5

根据维基百科,如果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)

  • `hexdump -n 7 -ve'1/1“%.2x”'/ dev / random | awk` ... +1 (2认同)