在监控模式下注册pcap处理程序

时间:2017-01-10 13:31:50

标签: c linux network-programming

我想在处于监控模式的接口上创建一个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创建了一个界面,我仍然会收到此错误。

1 个答案:

答案 0 :(得分:1)

简单回答

运行ip link set up dev <device>以设置您的设备。

问题

此设备未激活。换句话说,有一个设备,但默认情况下它被禁用。

为什么?

首先,在Linux中,每个网络设备都是一个接口。在我们的例子中,它是一个虚拟界面。

默认情况下,接口未标记为Active / Up,因为在大多数情况下,激活的设备需要更多资源(例如ARP服务,DHCP服务等。

相关问题