我用库libpcap(Ubuntu,c)
捕获了信标帧我改变了wlan模式以通过以下函数调用来监视和捕获
// 3000 is large enough number for test
pcd = pcap_open_live(dev,3000,PROMISCUOUS,-1,errbuf)
// filter with "wlan type mgt subtype beacon"
pcap_compile(pcd,&bpg,"wlan type mgt subtype beacon",1,PCAP_NETMASK_UNKNOWN)
pcap_setfilter(pcd, &bpg)
以下是packet_view
void packet_view(
unsigned char *user,
const struct pcap_pkthdr *h,
const unsigned char *p
){
int len;
len = 0;
printf("PACKET\n");
while(len < h->len) {
printf("%02x ", *(p++));
if(!(++len % 16))
printf("\n");
}
printf("\n");
return ;
}
我得到了以下结果(最重要的32位)
00 00 12 00 2e 48 00 00 00 02 6c 09 a0 00 bb 01
00 00 80 00 00 00 ff ff ff ff ff ff 00 08 9f bf
但是......实际上信标帧必须从位“08”开始 因为信标帧的协议版本= 00 type = 00和subtype = 1000 =&gt; 00001000(08)
我用00启动数据包的原因是什么?我用“wlan type mgt subtype beacon”过滤了吗?
答案 0 :(得分:3)
您错过了一次pcap通话 - 拨打pcap_datalink()
。
除非pcap_datalink()
返回DLT_IEEE802_11
,否则数据包 NOT 以802.11标头开头。例如,如果它返回DLT_IEEE802_11_RADIO
,则数据包以radiotap header开头,并且后面有一个802.11标头;看起来像你的数据包。
有关值pcap_datalink()
可以返回的值以及pcap和pcap-ng文件中显示的值,请参阅the tcpdump.org link-layer header types page。
答案 1 :(得分:0)
将过滤器设置为 &#34;链接[0] == 0x80&#34; 适合我!
显然 https://wiki.wireshark.org/CaptureFilters
在没有信标的情况下捕获WLAN流量: link [0]!= 0x80