日期:2014-05-16  浏览次数:20888 次

无线局域网中抓包的问题
我在linux下写了个在无线局域网中抓包的程序,使用的套接字如下
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

并且将无线网卡设置为混杂模式。
我在自己的一个没有加密的无线网中做实验,发现可以抓到外网发过来的数据包,也可以抓到本机发出去的数据包,但是抓不到无线局域网中其它电脑发送给外网的数据包。求解决方法
------解决方案--------------------
当然不行了,其他电脑的wifi的数据虽然是广播的,但你电脑上的wifi在MAC层就把目的MAC地址不是你MAC地址的数据过滤了,当然抓不到了
你可以看看wifi的开源驱动
------解决方案--------------------
楼主的理论是非常正确的, 其实无线比有线是更加开放的环境, 所以抓包比有线要容易很多。(不考虑加密的因素)
其实现今环境有线连接下个人电脑基本无法capture到packet,因为广播式传输已经被交换式传输取代了,也就是说基本很少有人用集线器,绝大部分都使用交换机,从物理上保证最小broadcast domain.

但是楼主需要解决几个问题而不是简单创建一个raw socket,这个只是保证你在网卡收到包的情况下可以直接读取任何包,但是前提条件(网卡收到所有包)还没有满足。

要满足这个前提条件,一般需要把网卡设成混杂模式,这个需要使用设备操作函数ioctl给网卡发指令来获得。
通常情况下对有线网卡就够了, 但是无线网卡还有一个中monitor mode

在不enable monitor mode的情况下,网卡只能抓到和同一个hotspot associate的device,在开启monitor mode的情况下,可以capture所有packet

很多现代的渗透的实例都是开车加laptop完成的,所以不加密的无线网络或者强度不够而又不经常更换密码的网络都是高危的。

楼主如果感兴趣可以参看wireshark + libpcap的实现
http://wiki.wireshark.org/CaptureSetup/WLAN