好像您在问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 客户端实现,因此您无需重新发明轮子。