使用 C 发送 802.11 帧的最简单方法是什么?

What's the easiest way to send 802.11 frames using C?

我是 C 的初学者,我最近决定将此项目从使用 Scapy/Python、 单独 迁移到 C,因为我想要更好的性能。我希望发送第 2 层数据,特别是用于通告接入点的信标帧。

到目前为止,我发现我需要(或者更确切地说可以)使用 libpcap 和一个名为 ieee80211.h 的 Linux header pre-defines 数据包,这就是我的全部可以从其他问题中收集。我发现其他信息说我应该使用原始套接字而不是 libpcap?我不确定这是否是我所需要的。我在 Google 上找到的大部分信息和教程都是指数据包嗅探,而不是发送。

如何定义自定义帧 and/or 数据包(例如信标帧或关联请求),然后简单地将其发送到 wlan0 等?

link 可能会有所帮助。正如您的问题所暗示的,它基本上在原始数据包级别打开驱动程序并创建整个数据包以通过网络发送。

我想我可能会更新这个。我使用了 libpcap。

您只需要为您的设备创建一个句柄,成功将其设置为监控模式(重要),检查数据 link 类型(例如 802.11 with Radiotap for layer 2)然后使用 pcap_sendpacket(handle, packetArrayContainingHex, size);.困难的部分是形成不会被拒绝或丢弃的合法数据包,看看 wireshark 会有所帮助。