我想做什么:在用户空间中实施第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的消息”?任何指针都会受到赞赏。
答案 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。