使用libpcap的无线数据包注入
Wireless packet injection using libpcap
我已经尝试通过libpcap将数据包注入无线接口很长一段时间了。当我检查来自同一接口的数据包时,我能够看到相同的数据包,但没有其他接口或机器能够获得这些数据包。
为了演示我的意思,这里有一小段我正在使用的代码:
u_char RADIOTAP_WRAPPER[] = {
0x00, // it_version
0x00, // padding
0x0a, 0x00, // length
0x00, 0x00, 0x80, 0x00, // IEEE80211_RADIOTAP_TX_FLAGS
0x00, 0x08, // no-ack required
};
u_char my_packet[] = {
// Some custom data of mine that I want to send (and no, I don't want to use IEEE 802.11
};
u_char *complete_packet; // Concatenate the header and the my_packet data and place it here (skipping that code for brevity)
pcap_sendpacket(handle,complete_packet,complete_packet_size);
数据包创建正确,如果我在同一台设备上使用pcap_next
运行接收器(在我的情况下是wlan0),它就可以完美工作。但是,如果我在附近的设备上使用wlan0,或者在自己的设备上用wlan1,则数据包丢失。问题不在于无线空间中的其他数据包,而在于这些数据包似乎根本没有进入太空。它们似乎被卡在同一个界面中。
无线电报标头中是否有我可能丢失的特定标志?还有别的吗?
附言:我做自定义数据格式只是出于教育原因。我宁愿不使用IEEE 802.11报头,因为它似乎违背了我的计划(一种从任何地方发送和接收数据包的方式,不需要知道你要发送的人)。因此,我更希望像"你不应该制作你自己的包头类型等"这样的答案不在那里。感谢:)
如果您希望802.11网络接口读取数据包,则不能省略802.11标头。当接收网络接口试图读取您的数据包时,它会检查它是否是接收方(直接接收,或用于广播,或是否设置为混杂模式)。此外,802.11具有循环冗余校验(CRC)以验证没有发生传输错误。如果它期望读取CRS的位置不是正确的哈希值,接收器将丢弃您的数据包。
我不确定你是否真的在通过空中传送你的包裹。您应该能够通过在接收器上运行嗅探器来检查这一点,您希望为其设置监视模式、混杂模式和读取未通过CRC的数据包。
相关文章:
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 使用C++将UDP数据包存储在Structure中
- FFmpeg av_read_frame从音频流返回数据包
- 为什么操作系统正在更改我的数据包的指定传出端口
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- recvfrom 只收到几个数据包,之后它进入等待状态
- 如何使用WinPcap发送/注入数据包
- 使用libpcap的无线数据包注入
- 用于数据包注入的 Libnet 与原始套接字
- 防止数据包注入