最近在研究802.11数据帧,对各种帧做了大致的了解,所以想尝试下自己构造802.11帧,在此之前想抓几个帧研究下,在linux下成功的使用wireshark抓到了,然后又想自己用winpcap写个抓包的程序。
大家都知道WinPcap是为了满足程序开发的需要从UNIX下的LibPcap库 ,在以太网环境下将网卡设置在混杂模式下很容易获得整个物理链路上的数据帧,即你可以监听整个网段的主机数据包,可以实现Sniffer的功能,但是在无线局域网环境下(WLAN, IEEE802.11协议族),设置为混杂模式却不能嗅获到数据包,为了解决这个问题我也尝试了很多方面,在一次偶然的情况下看到了一种解决方法,那就是不设置为,打开函数 pcap_open_live(const char* device, int snaplen, int promisc, int to_ms, char *ebuf ) 中的第三项设置为0即可获得本机的所以数据帧,这个时候用函数获得数据包时会发现,得到的802.11数据帧与以太帧,即802.3数据帧格式完全一样,而且用pcap_datalink() 去获得网络类型时会发现结果是DLT_EN10MB,即以太网环境,可见该开发库为了方便用户的使用,刻意屏蔽(或简单处理)了帧类型,这样我们就可以像处理以太帧一样去处理了。但这样我们就不能处理帧的细节,下次打算转战用libpcap来写,到时候再说。