问题陈述
调用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.
答案 0 :(得分:7)
您不需要在mon0上设置rfmon模式 - 它本身就处于监控模式。抓住它;这就是你对Wireshark的所作所为。
由于与
有关的各种原因libnl有多个不兼容的版本,因此选择正确的版本来构建libpcap显然是分发构建者的痛苦;
选择与使用libnl和libpcap的应用程序使用的版本不同的版本,由于上述不兼容性而导致可怕的问题;
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不为零,则将设置监控模式,否则将不会设置。