我想要一个接口出站流量的源 IP 地址列表。如何使用 libpcap 找到数据包的方向,无论它是入站还是出站读取流量?我不知道任何一方的子网信息。并且两边都有客户端/服务器,所以我不能依靠端口号范围来过滤流量。
为什么 libpcap 数据包标头中没有关于方向的信息,或者像pcap-filterinbound
中的过滤选项?
我想要一个接口出站流量的源 IP 地址列表。如何使用 libpcap 找到数据包的方向,无论它是入站还是出站读取流量?我不知道任何一方的子网信息。并且两边都有客户端/服务器,所以我不能依靠端口号范围来过滤流量。
为什么 libpcap 数据包标头中没有关于方向的信息,或者像pcap-filterinbound
中的过滤选项?
Netsniff-NG 虽然不依赖 libpcap,但支持 Linux 内核数据包类型扩展。他们记录 在这里
其中一种数据包类型是传出的,并被注释为“任何类型的传出”。以下示例将捕获离开您的接口的所有数据包。
$ netsniff-ng --in eth0 --out outgoing.pcap --type outgoing
使用它,您可以利用其他命令行工具来读取 PCAP 文件并提取所有源地址。也许像这样的*nix-ey:
$ tcpdump -nnr outgoing.pcap | cut -d " " -f3 | cut -d . -f1-4
注意:我没有在路由器上试过这个。
您可以使用“ether src”或“ether dst”来过滤数据包方向。这需要你知道接口的mac地址。
您可以选择一个方向,数据包将被捕获调用pcap_setdirection()
之前pcap_loop()
。
例如,要捕获传入的数据包,您只需要编写:
handle = pcap_open_live("eth0", 65535, 1, 0, errbuf);
pcap_setdirection(handle, PCAP_D_IN);
pcap_loop(handle, -1, process_packet, NULL);
可能的方向是:PCAP_D_IN
, PCAP_D_OUT
, PCAP_D_INOUT
。
PCAP 文件格式不包含保存捕获期间使用的接口的字段。话虽如此,Wireshark 和 Tshark 目前使用的较新的 PCAP-NG 文件格式支持它以及数据包方向。
现有的 pcap-ng 功能:
听起来您是从路由器或防火墙捕获的,因此以下内容不起作用。
ip src 192.168.1.1
将流量捕获到流中可能是一种选择,但它仍然不会为您提供方向信息。不过,您将能够轻松确定源地址和目标地址。如果您有现有的 pcap,您可以将其转换为 ARGUS 格式:
argus -r capture.pcap -w capture.argus
ra -nnr capture.argus
可以轻松获取端点/主机的其他工具(一些带有示例)是:
ntop -f capture.pcap
tcpprof -nr capture.pcap
Wireshark端点
流工具
你必须解析出你想要的信息,但我认为这不会太麻烦。如果您无法使用它,我建议您查看 PCAP-NG。