2009-10-09 74 views
1

我想从我的机器中捕获数据包,并且我正在使用libpcap(版本1.0.0-1)。问题是,这样的基本程序 -libpcap:没有检测到无线设备

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char *argv[]) { 
    char *dev, errbuf[PCAP_ERRBUF_SIZE]; 
    dev = pcap_lookupdev(errbuf); 
    if (dev == NULL) { 
     fprintf(stderr, "%s\n", errbuf); 
     return (2); 
    } 
    printf("Device : %s\n", dev); 
    return (0); 
} 

似乎并没有显示无线接口。每次我编译和运行程序,它都会检测到eth0。我怎样才能让它捕获无线接口?

回答

5

pcap_lookupdev()返回系统上的默认网络设备,通常是第一个列出的设备。 pcap_findalldevs()返回系统中所有设备的枚举,您可以使用它来选择设备并从中捕获设备。

3

尝试使用pcap_findalldevs()。我想pcap_lookupdev()匹配列表中的第一个条目是合适的接口

+0

是的。无需猜测,它位于手册页中:“pcap_lookupdev()返回指向适用于pcap_open_live()和pcap_lookupnet()的网络设备的指针” – bortzmeyer 2009-10-13 19:49:18

1

正如其他人所说,pcap_lookupdev()只是返回找到的第一个设备。您需要使用pcap_findalldevs()来构建所有可用设备的列表,然后提示用户选择一个(或让用户在命令行上指定n,然后使用第_n_个设备)。

但是,如果这只是一个快速而又脏的测试程序,您可以找到接口名称并将其直接编码到您的程序中。您可以使用ifconfigtcpdump -D查找系统上的接口名称,然后拨打电话pcap_create("en1", errbuf)