如何从 macOS 发送 Wi-Fi 管理帧?

信息安全 网络 无线上网 苹果系统 死攻击
2021-08-30 13:08:04

我意识到这个问题在之前已被提及。但是,建议的解决方案都没有解决我的问题,并且它们都无法回答如何发送所有类型的 Wi-Fi 管理帧的首要问题。虽然提到了Kismac2aireplay-ngscapy,但之前的答案都没有解决我的问题。

我的目标是能够从命令行发送取消身份验证帧(以及其他管理帧,如果可能的话)。

虽然 aireplay-ng 据说可用于 Mac;运行它之后,它实际上什么也没做。我觉得这是许多其他 Mac 用户遇到过的相同问题。此外,scapy 似乎也有同样的问题(可能是由于难以将 OSX Wi-Fi 接口置于监控模式?)。

像 scapy 这样的解决方案会很棒,因为它也可以让我发送其他管理帧,比如信标帧。最后,Kismac2 并不可取,因为它有一个 GUI,我只想要一个简单的、基于命令行的方法来发送这些帧。

PS 一个适合我发送 deauths 的工具是JamWiFi但再一次,它是基于 GUI 的。但是,我很想知道该工具究竟是如何发送帧的。

1个回答

好像您在问JamWIFI如何发送解除关联数据包而不是其他任何东西,所以我会回答这个问题。首先,查看 Git 存储库,我们看到以下内容:

libpcap 为在 MAC 层发送/接收原始 802.11 帧提供了一个很好的抽象点

这是您问题答案的前半部分,他正在使用 libpcap。如果您以前没有听说过它,它是一个非常大的数据包捕获库,但它还可以做更多的事情 这里的文档

您问题的后半部分答案在于代码。我绝不是 Objective-C 或 C 开发人员,但是,如果你看一下内部,ANClientKiller.m我们就会知道它是如何发送取消身份验证请求的。从代码顶部开始,我们将请求本身定义为:

#define DEAUTH_REQ \
"\xC0\x00\x3A\x01\xCC\xCC\xCC\xCC\xCC\xCC\xBB\xBB\xBB\xBB\xBB\xBB" \
"\xBB\xBB\xBB\xBB\xBB\xBB\x00\x00\x07\x00"

你可能想知道这个数据包是做什么的,所以我会告诉你。上述数据包实际上是一个声明,表明接收器不再经过身份验证。一旦发送,它就会导致取消身份验证,具有讽刺意味的是,它试图重新进行身份验证。这里的诀窍是请求必须被接受并且必须立即生效这就是它的全部内容。这与在 Aircrack-ng 中进行取消身份验证的方式相同。以及其他工具。好吧,至少使用相同的数据包。

就实际发送这个数据包而言,这是一个更具体的语言。如果您进一步查看代码,您会注意到以下内容:

- (AN80211Packet *)deauthPacketForBSSID:(const unsigned char *)bssid client:(const unsigned char *)client {
    char deauth[26];
    memcpy(&deauth[0], DEAUTH_REQ, 26);
    memcpy(&deauth[4], client, 6);
    memcpy(&deauth[10], bssid, 6);
    memcpy(&deauth[16], bssid, 6);
    AN80211Packet * packet = [[AN80211Packet alloc] initWithData:[NSData dataWithBytes:deauth length:26]];
    return packet;
}

如果您想了解具体细节,则需要在这里阅读有关memcpy的信息。基本上,这段代码正在准备要发送的数据包。

使用 memcpy 它从目的地获取字节DEAUTH_REQ并将确切数量的字节复制到目的地。完成此操作后,我们现在返回数据包及其DEAUTH_REQ内部,以及 BSSID(接入点的 MAC 地址)和客户端。此数据包现在已准备好发送以进行取消身份验证。如果您要继续发送此数据包,您将继续从客户端连接的接入点取消对客户端的身份验证。

您会注意到我没有包含实际发送数据包的代码。这是因为这完全取决于您使用什么语言来实现这一点以及什么库,因此有太多细节/细微差别。

希望这能回答你的问题。如果你想用另一种语言自己实现这个,你可以或多或少地从 JamWIFI 获取代码,只改变你语言的细微差别,它会工作,不管是在 Mac 上。网上已经有大量取消身份验证的 WIFI 客户端实现,因此您无需重新发明轮子。