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