0

我想做的事:在用户空间实现第 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);
    ...

我只能在本地主机上嗅探数据包,而不能在运行相同程序的其他笔记本电脑上嗅探。所以问题是“如何在 wlan 上广播没有 ether_head 的消息”?任何指针将不胜感激。

4

2 回答 2

1

如果您使用的是接入点(基础架构模式),则不能这样做,因为接入点会在其他无线站之间中继帧,因此必须知道如何使用您的第 2 层协议。

我建议在第 3 层实现你的协议(你可能想研究一下PF_PACKET套接字)。

于 2011-02-02T00:16:31.860 回答
0

您必须发送带有标题的完整帧,而不仅仅是一些随机数据。在函数 pcap_inject() 中查看本手册http://linux.die.net/man/3/pcap 。在创建新框架时,这可能会有所帮助http://www.tcpdump.org/pcap.html,或者只使用 libnet 库http://libnet.sourceforge.net/libnet.html

于 2012-04-27T19:46:48.400 回答