如何结合ifconfig和openssl更改MAC地址

4

我正在尝试制作一个一行代码的MAC地址欺骗器。但是,我无法将ifconfig与OpenSSL组合使用。

我的方法是使用OpenSSL生成随机MAC地址,并将其更改为MAC地址。然而,将更改MAC地址的代码与随机MAC地址生成器组合起来似乎无法正常工作。

openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//

这段代码创建了一个随机的MAC地址。

sudo ifconfig en0 ether xyz

这段代码将MAC地址设置为xyz。

将这两行代码组合起来并没有像预期的那样改变MAC地址。

sudo ifconfig en0 ether openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//

这段代码返回一个"无效参数"的错误信息。

我认为可能是一个格式问题,但我在网上找不到合适的格式化指南,并且我对bash不太熟悉。


创建MAC地址时需要考虑几个因素,因为MAC地址空间被分为单播/多播/广播/全局唯一/本地管理几部分。请参见:MAC_address#Address_details - Cyrus
1个回答

6
这段代码存在很多问题。我认为你遗漏了一个$( ),需要捕获一个命令的输出,以便将其用作另一个命令的参数(通常要用双引号将其括起来,以避免意外的解析问题)。按照你现在的写法,openssl rand -hex6不是一个命令,而只是sudo ifconfig的三个参数(并且管道传递给sed的是sudo ifconfig的输出)。
你还需要在 -hex 6之间加上空格,并且sed命令的结尾使用的分隔符不一致并且缺少一个闭引号。此外,第一个sed命令中,可以直接使用&来获取整个匹配字符串(即s/../&:/g)。
以下是更正后的版本:
sudo ifconfig en0 ether "$(openssl rand -hex 6 | sed 's/../&:/g;s/:$//')"

编辑:正如评论中@Cyrus指出的那样,MAC地址空间分为全局管理和本地管理、单播和多播(请参见维基百科)。使用多播地址可能会造成麻烦,因此最好强制第二个数字为偶数。这有点棘手,所以我要回避如何做到这一点的问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接