如何使用pcap_lookupdev查找无线设备?

时间:2011-07-28 05:41:23

标签: c++ linux wireless libpcap

到目前为止,这是我的代码。


#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int & argc, char* argv[]){


    char *net; /* dot notation of the network address */
    char *mask;/* dot notation of the network mask    */
    int ret;   /* return code */
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 netp; /* ip          */
    bpf_u_int32 maskp;/* subnet mask */
    struct in_addr addr;

    char *dev; /* name of the device to use */

    printf("Asking pcap to find a valid device for use to sniff on.\n");
    dev = pcap_lookupdev(errbuf);
    if(dev == NULL) {
        printf("pcap_lookupdev ERROR:  %s\n",errbuf);
        exit(1);
    }

    printf("Printing out device name.\n");
    printf("DEV: %s\n",dev);

    printf("Asking pcap for the network address and mask of the device.\n");
    ret = pcap_lookupnet(dev,&netp,&maskp,errbuf);
    if(ret == -1) {
        printf("Unable to retrieve the network address and mask of the device.  Error Description:  %s\n",errbuf);
        exit(1);
    }

    printf("Get the network address in a human readable form,\n");
    addr.s_addr = netp;
    net = inet_ntoa(addr);
    if(net == NULL) {
        printf("Unable to retrieve network address in human readable form.\n");
        perror("inet_ntoa");
        exit(1);
    }

    printf("NET: %s\n",net);

    /* do the same as above for the device's mask */
    addr.s_addr = maskp;
    mask = inet_ntoa(addr);

    if(mask == NULL) {
        printf("Unable to retrieve device mask in human readable form.  ");
        perror("inet_ntoa");
        exit(1);
    }

    printf("MASK: %s\n",mask);
    return 0;
}

/*
Output:

Asking pcap to find a valid device for use to sniff on.
Printing out device name.
DEV: eth0
Asking pcap for the network address and mask of the device.
Unable to retrieve the network address and mask of the device.  Error Description:  eth0: no IPv4 address assigned

*/

这是我的问题:我需要做些什么才能让pcap_lookupdev查找无线设备(即wlan0)?

2 个答案:

答案 0 :(得分:2)

pcap_findalldevs documentation暗示 pcap_lookupdev()找不到任何合适的网络设备的原因:

  

请注意,可能存在无法打开的网络设备   pcap_open_live()由进程调用pcap_findalldevs(),因为,   例如,该流程可能没有 足够的权限 来打开   他们捕捉;如果是这样,那些设备将不会出现在列表中

您可能没有必要的权限来捕获任何可用网络设备上的流量。尝试使用 sudo 运行程序,假设您拥有计算机的管理员权限。

有关其他信息,请参阅requirement of root privileges for libpcap functions

答案 1 :(得分:0)

pcap_lookupdev()会查找一个设备。那可能不是你想要的设备;如果您同时拥有有线和无线接口设备,它可能会找到有线设备,并且,因为它没有查看无线设备,这是因为它恰好是它找到的第一个设备。

没有办法告诉它在无线设备上只看

要获取libpcap可以处理的所有设备的列表,请使用pcap_findalldevs()