在监控模式下使用libpcap嗅探wifi

use*_*879 6 pcap wifi libpcap

问题陈述

调用pcap_activate()结果PCAP_ERR_RFMON_NOTSUP错误,即不支持RF监视器模式.

上下文

我正在编写小型C程序,其工作是在监视器模式下监听笔记本电脑的wifi卡.笔记本电脑正在运行Ubuntu 12.04 LTS.我运行了airmon-ng start wlan0命令,之后出现了mon0接口.以下显示运行airmon命令后iwconfig命令的输出:

$ iwconfig
mon0      IEEE 802.11bgn  Mode:Monitor  Tx-Power=16 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"SKY88F48"  
          Mode:Managed  Frequency:2.412 GHz  Access Point: 7C:4C:A5:3B:33:59   
          Bit Rate=52 Mb/s   Tx-Power=16 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=43/70  Signal level=-67 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:4  Invalid misc:415   Missed beacon:0 
Run Code Online (Sandbox Code Playgroud)

在我的程序中,我使用设备mon0创建网络句柄pcap_create().然后我成功设置了快照长度和混杂模式.

当我检查是否可以使用pcap_can_set_rfmon()方法设置rfmon时,它返回正数.然后我使用pcap_set_rfmon()成功通过的方法设置rfmon .我也设置了超时.最后当我调用pcap_activate()它时返回错误PCAP_ERR_RFMON_NOTSUP,即不支持RF监视器模式.我正在以root身份运行我的程序.

有一点需要注意的是,我安装了wireshark并开始监听mon0,成功捕获了所有流量.

小智 7

您不需要在mon0上设置rfmon模式 - 它本身就处于监控模式.抓住它; 这就是你对Wireshark的所作所为.

由于各种原因而与之相关

  1. libnl有多个不兼容的版本,所以选择正确的版本来构建libpcap显然是分销构建者的痛苦;

  2. 选择与使用libnl和libpcap的应用程序使用的版本不同的版本,由于上述不兼容性而导致可怕的问题;

用于Linux的libpcap rfmon模式代码最适合大多数设备,它使用libnl(实质上,它创建一个新的monN接口,复制airmon-ng的功能,打开该接口进行捕获,并在捕获完成时删除它),是不是因为libpcap的配置在很多Linux发行版能不能用libnl.

因此,它在Linux上运行不正常.

编写libpcap代码直接使用netlink套接字,而不是通过libnl,是在我的待办事项列表中,但不幸的是,它在该列表上的许多其他问题背后.