我想捕获从我的机器出来的数据包,而我正在使用libpcap(版本1.0.0-1)。问题是,像这样的基本程序 -
#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。我怎样才能捕获无线接口呢?
答案 0 :(得分:5)
pcap_lookupdev()返回系统上的默认网络设备,通常是列出的第一个设备。 pcap_findalldevs()返回系统中所有设备的枚举,您可以使用它来选择设备并从中捕获。
答案 1 :(得分:3)
尝试使用pcap_findalldevs()。我猜pcap_lookupdev()匹配列表中的第一个条目是合适的接口
答案 2 :(得分:1)
正如其他人所说,pcap_lookupdev()
只返回找到的第一个设备。您需要使用pcap_findalldevs()
来构建所有可用设备的列表,然后提示用户选择一个(或让用户在命令行中指定一个数字 n ,然后使用_n_th device)。
但是,如果这只是一个快速而肮脏的测试程序,您可以找到接口名称并将其直接编码到您的程序中。您可以使用ifconfig
或tcpdump -D
查找系统上的接口名称,然后拨打pcap_create("en1", errbuf)
之类的电话。