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

时间:2014-03-21 20:43:04

标签: wifi pcap 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 

问题

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

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

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

2 个答案:

答案 0 :(得分:7)

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

由于与

有关的各种原因
  1. libnl有多个不兼容的版本,因此选择正确的版本来构建libpcap显然是分发构建者的痛苦;

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

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

    因此,它在Linux上运行不佳。

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

答案 1 :(得分:0)

如果您尝试使用C语言中的pcap库将设备设置为监控模式,则可以使用以下命令(请参阅pcap manpage):

概要

#include <pcap/pcap.h>

int pcap_can_set_rfmon(pcap_t *p);

说明

pcap_can_set_rfmon()检查在激活句柄时是否可以在捕获句柄上设置监视模式。

概要

#include <pcap/pcap.h>

int pcap_set_rfmon(pcap_t *p, int rfmon);

说明

pcap_set_rfmon()设置在激活句柄时是否应在捕获句柄上设置监视模式。如果rfmon不为零,则将设置监控模式,否则将不会设置。