一、tcpdump
tcpdump是利用libcap库从ptype_all中抓包,而该ptype_all是内核网络协议栈通用代码;它是否能拿到80211的控制和管理帧,由驱动及固件决定
wifi驱动实现有两种架构:softmac+内核mac80211适配层,博通多为这种;固件会把所有的80211协议包发送驱动进而给到80211通用适配层,80211通用适配层处理管理帧和控制帧后将数据帧送往处理ptype_all的通用层、注意4步握手属于80211数据帧、因为有秘钥数据。这种架构,只要修改通用80211适配层上报管理帧和控制帧部分代码,就能保证tcpdump接收到所有的80211帧。
另外一种架构是,full mac,高通多采用这种;这种架构的好处是,80211的管理控制帧直接由modem侧dsp芯片在固件中处理,固件只把80211数据帧送到驱动,并由驱动直接上报ptype_all层。这种架构,无法通过修改内核代码获取到80211管理和控制帧。
二、针对wireshark
针对网卡的混杂模式,抓去所有的空口包:
这种需求其实本身就是违反协议的;80211协议本身要求,目的地址不是自己或全f的广播帧,是不能被接收的。故,需要驱动支持。而,默认window操作系统wifi驱动不支持混杂;ominipeek写了一套自己的window下wifi驱动,故而可以抓包。
而unbuntu及苹果等类linux操作系统自带网卡驱动变支持设置混杂模式,故而,可以直接使用wireshark工具抓去空口。