Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从pcap_findalldevs()筛选网络设备_Linux_Ubuntu_Pcap - Fatal编程技术网

Linux 从pcap_findalldevs()筛选网络设备

Linux 从pcap_findalldevs()筛选网络设备,linux,ubuntu,pcap,Linux,Ubuntu,Pcap,我应该嗅探安装在fiven机器(Linux-Ubuntu)上的所有网络接口。为此,我正在使用pcap库。因此,我发现所有能够使用pcap_findalldevs(…)函数的设备,但结果也是usb和环回设备,我不想使用它们 你能告诉我,如何只过滤网络(以太网和wifi)设备吗?我想这取决于你所说的“网络”设备 如果您指的是IPv4/IPv6设备,您可以查询pcap\u If\u t->address返回的pcap\u If\t->address并查看每个地址的addr.sa\u family字段,

我应该嗅探安装在fiven机器(Linux-Ubuntu)上的所有网络接口。为此,我正在使用pcap库。因此,我发现所有能够使用pcap_findalldevs(…)函数的设备,但结果也是usb和环回设备,我不想使用它们


你能告诉我,如何只过滤网络(以太网和wifi)设备吗?

我想这取决于你所说的“网络”设备

如果您指的是IPv4/IPv6设备,您可以查询
pcap\u If\u t->address
返回的
pcap\u If\t->address
并查看每个地址的
addr.sa\u family
字段,以确定该设备是否支持
AF\u INET
和/或
AF\u INET6
。环回设备将
(pcap\u if\u t->flags&pcap\u if\u环回)!=0

问题是,这将包括非以太网和WiFi的设备,如令牌环、火线IP、PPP等。PCAP不提供了解硬件类型的便携式方法。

如果“所有网络接口”的意思是“所有连接到物理网络的接口,并且不捕获网络以外的内容”-环回接口是前者的示例,Linux和FreeBSD 9.0及更高版本上的USB捕获设备是后者的示例-然后:

  • 您可以按照apmasell的回答建议消除环回设备
  • 通过忽略
    pcap\u datalink()
    返回
    DLT\u USB\u LINUX
    DLT\u USB\u LINUX\u映射的接口,可以消除USB捕获设备
    
  • 您可以通过忽略
    pcap\u datalink()
    返回
    DLT\u Bluetooth\u HCI\u H4
    DLT\u Bluetooth\u HCI\u H4\u与\u PHDR
    的接口来消除蓝牙捕获设备
您需要打开设备以调用
pcap\u datalink()

这可能会消除大多数不感兴趣的设备(如果您有令牌环、PPP等接口,您可能希望在它们上捕获)