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

时间:2017-03-07 23:21:26

标签: bash random generator mac-address

我需要使用bash随机mac地址生成而不使用macchanger或类似的。

我有这个:

ObservableCollection

但有时候,如果你试图将mac放入interace中,它会说random_mac=$(hexdump -n6 -e '/1 ":%02X"' /dev/random | sed s/^://g) 。我调查了这个,它似乎与单播地址有关。我有一个解决方法:

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/:$//;')

任何已知的bash随机mac生成器适合单播规则?

我使用00阅读其他方法。我尝试使用尽可能少的工具,以减少运行脚本的要求。可以在没有od的情况下完成吗?或od绝对总是包含在所有Linux发行版中?如果是,我可以使用它。

2 个答案:

答案 0 :(得分:4)

根据Wikipedia,如果第一个八位字节的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

我们可以看到本地生成的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}'

或者,分散一点:

#!/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);
    }
'

答案 1 :(得分:3)

这个怎么样?

od -An -N6 -tx1 /dev/urandom | sed -e 's/^  *//' -e 's/  */:/g' -e 's/:$//' -e 's/^\(.\)[13579bdf]/\10/'

它生成随机(单播)MAC地址

  • 最后一个sed表达式确保将单播/多播位设置为零

  • 贪婪的空间替换是针对UNIX seds的可移植性

od中包含

coreutils,因此您不必担心 更多要求