我正在尝试创建一个单行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?.$//此代码返回“无效参数”
我认为这是一个格式化问题,但我在网上找不到合适的格式化指南,而且我还是个新手。
发布于 2019-04-07 13:46:34
这段代码中有一堆问题。我认为您遗漏的主要内容是,您需要$( )来捕获一个命令的输出,以便您可以将其用作另一个命令的参数(您通常会使用双引号将其引起来,以避免意外的解析怪异)。按照您的编写方式,openssl rand -hex6不会被视为命令,就像sudo ifconfig的另外三个参数一样( sudo ifconfig的输出通过管道传递给sed)。
您还需要在-hex 6中使用空格,并且sed命令的末尾使用了不一致的分隔符,并且缺少右引号。此外,您可以只使用&来获取整个匹配的字符串(即s/../&:/g),而不是在第一个sed命令中使用捕获组。
以下是更正后的版本:
sudo ifconfig en0 ether "$(openssl rand -hex 6 | sed 's/../&:/g;s/:$//')"编辑:正如@Cyrus在评论中指出的那样,MAC地址空间分为全局管理和本地管理,以及非广播和多播(参见Wikipedia)。使用组播地址可能会带来麻烦,因此强制第二个数字为偶数会更好。这有点棘手,所以我将回避如何做的问题……
https://stackoverflow.com/questions/55555925
复制相似问题