我想在处于监控模式的接口上创建一个pcap
处理程序。该接口是使用linux中的iw
工具生成的。为此,我使用popen
void registerWIMonitor(const char *deviceName) {
char cmd [1000] = {0x0};
sprintf(cmd, "iw phy phy0 interface add %s type monitor", deviceName);
FILE* fp = popen(cmd, "w");
if (fp == NULL) {
throwErrorScreen(strerror(errno), REGISTERWIMONITOR);
}
pclose(fp);
}
然后我在监视器deviceName
上注册处理程序。
void pcapPrepareHandler(const char *deviceName) {
char errorBuffer[PCAP_ERRBUF_SIZE];
if (!(handler = pcap_create(deviceName, errorBuffer))) {
throwErrorScreen(errorBuffer, PCAP_CREATE);
}
if ((pcap_set_snaplen(handler, SNAPLEN)) < 0) {
throwErrorScreen(pcap_geterr(handler), PCAP_HANDLER_SET_SNAPLEN);
}
if ((pcap_set_promisc(handler, PROMISC)) < 0) {
throwErrorScreen(pcap_geterr(handler), PCAP_HANDLER_SET_PROMISC);
}
if ((pcap_set_timeout(handler, TO_MS)) < 0) {
throwErrorScreen(pcap_geterr(handler), PCAP_HANDLER_SET_TIMEOUT);
}
if (!pcap_can_set_rfmon(handler)) {
throwErrorScreen(pcap_geterr(handler), PCAP_HANDLER_SET_TIMEOUT);
}
if ((pcap_activate(handler)) < 0) {
throwErrorScreen(pcap_geterr(handler), PCAP_HANDLER_ACTIVATE);
}
}
但是上面的函数会在pcap_activate
上引发错误。错误缓冲区显示That device is not up
。
如果我跑
iw wimon0 info
它返回结果:
Interface wimon0
ifindex 16
wdev 0xe
addr 00:26:82:e7:88:82
type monitor
wiphy 0
显示接口已成功创建。 当我输入
时,我会搜索一下ifconfig
它没有返回界面wimon0
。
如果现在我跑:
ls /sys/class/ieee80211/phy0/device/net
要查看可用的设备,它会返回界面wimon0
。也:
cat /sys/class/ieee80211/phy0/device/net/moni0/type
返回803
,这意味着界面真正处于监控模式。
我的意思是它可能没有在系统上正确注册。但我不知道如何正确地做到这一点。我错过了什么吗?
即使我使用airmon-ng
创建了一个界面,我仍然会收到此错误。
答案 0 :(得分:1)
运行ip link set up dev <device>
以设置您的设备。
此设备未激活。换句话说,有一个设备,但默认情况下它被禁用。
首先,在Linux中,每个网络设备都是一个接口。在我们的例子中,它是一个虚拟界面。
默认情况下,接口未标记为Active / Up
,因为在大多数情况下,激活的设备需要更多资源(例如ARP
服务,DHCP
服务等。