yuw*_*uwe 3 macos bash terminal openssl mac-address
我正在尝试制作单行MAC地址欺骗程序。但是,我无法将ifconfig与OpenSSL结合使用。
我这样做的方法是使用OpenSSL将MAC地址更改为随机生成的MAC地址。但是,将代码与随机MAC地址创建者结合使用以更改MAC地址似乎不起作用。
openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//
Run Code Online (Sandbox Code Playgroud)
此代码创建一个随机MAC地址
sudo ifconfig en0 ether xyz
Run Code Online (Sandbox Code Playgroud)
此代码将MAC地址设置为xyz
合并这两行并没有按预期更改MAC地址。
sudo ifconfig en0 ether openssl rand -hex6 | sed 's/\(..\)/\1:/g;s?.$//
Run Code Online (Sandbox Code Playgroud)
此代码返回“无效参数”
我希望这是一个格式化问题,但是我无法在网上找到合适的格式化指南,因此对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/:$//')"
Run Code Online (Sandbox Code Playgroud)
编辑:正如@Cyrus在评论中指出的那样,MAC地址空间分为全局管理与本地管理,以及非广播与多播(请参阅Wikipedia)。使用多播地址可能会引起麻烦,因此最好使第二个数字为偶数。这有点棘手,所以我将回避如何做的问题...