如何在wlan上发送/接收第2层帧

时间:2011-02-01 21:11:29

标签: c sockets networking unix pcap

我想做什么:在用户空间中实施第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);
    ...

我只能在localhost上嗅探数据包,而不能在运行相同程序的其他笔记本电脑上嗅探。所以问题是“我怎样才能在wlan上播放没有ether_head的消息”?任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

如果您使用接入点(基础架构模式),则无法执行此操作,因为接入点会在其他无线站之间中继帧,因此必须知道如何与第2层协议进行通信。

我建议在第3层实施您的协议(您可能需要查看PF_PACKET套接字)。

答案 1 :(得分:0)

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