我一直试图通过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,则数据包丢失。问题不在于无线空间中的其他数据包,而是数据包似乎根本无法进入太空。它们似乎被困在同一个界面中。
radiotap标头中是否有一些特定的标志?还有别的吗?
PS:我只是出于教育原因而在做自定义数据格式。我宁愿没有IEEE 802.11标头,因为它似乎违背了我打算构建的东西(一种从任何地方发送和接收数据包的方式,无需知道你要发送给的人)。因此,我更喜欢答案,例如"你不应该制作自己的包头类型等#34;不在那里谢谢:))
答案 0 :(得分:1)
如果您希望802.11网络接口读取数据包,则不能忽略802.11标头。当接收网络接口尝试读取您的数据包时,它将检查它是否是收件人(直接,或广播,或设置为混杂模式)。此外,802.11具有循环冗余校验(CRC)以验证没有发生传输错误。如果它希望读取CRS的位置不是正确的哈希值,则接收方将丢弃您的数据包。
我不确定您是否实际上是通过无线方式发送数据包。您应该能够通过在接收器上运行嗅探器来检查这一点,您需要为其设置监控模式,混杂模式以及读取CRC失败的数据包。