我想做的是:在用户空间中实现第2层协议。
所以我在Linux 2.6.32下使用pcap嗅探数据包:
...
struct pcap_t *pcap_h = pcap_open_live("wlan0", BUFSIZ, 1, 0, errbuf);
...
while (1) {
int ret = pcap_loop(pcap_h, -1, newpkt_callback, NULL);
...
}
...
这对所有数据包都适用。但是,当我使用pcap发送没有ether_head和IP头的数据包时:
const char pkt[] = "WHATEVER";
nsent = pcap_sendpacket(pcap_h, (const u_char *)pkt, len);
...
我只能在本地主机上嗅探该数据包,而不能在运行同一程序的其他笔记本电脑上嗅探该数据包。因此,问题是“如何在无线局域网上广播没有ether_head的消息”?任何指针将不胜感激。
最佳答案
如果使用的是接入点(基础结构模式),则无法执行此操作,因为该接入点在其他无线站之间中继帧,因此必须知道如何使用第2层协议。
我建议在第3层实现您的协议(并且您可能希望研究PF_PACKET
套接字)。
关于c - 如何在无线局域网上发送/接收第2层帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4867988/