我想做的是:在用户空间中实现第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/

10-09 20:29