我正在尝试制作一个单行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的新手。
这段代码中有很多问题。我认为你缺少的主要是你需要$( )
来捕获一个命令的输出,这样你就可以将它用作另一个命令的参数(你通常需要双引号,以避免意外的解析怪异)。你写它的方式,openssl rand -hex6
不被视为一个命令,就像sudo ifconfig
的三个参数(它是sudo ifconfig
输出到sed
的输出)。
你还需要-hex 6
中的空格,sed
命令的结尾使用不一致的分隔符,并且缺少一个接近的引号。此外,您可以使用sed
获取整个匹配的字符串(即&
),而不是在第一个s/../&:/g
命令中使用捕获组。
这是一个更正版本:
sudo ifconfig en0 ether "$(openssl rand -hex 6 | sed 's/../&:/g;s/:$//')"
编辑:正如@Cyrus在评论中指出的那样,MAC地址空间被划分为全局与本地管理,以及uncast与多播(请参阅Wikipedia)。使用多播地址可能会造成麻烦,因此强制第二个数字为偶数确实更好。这有点棘手,所以我要解决如何做的问题......