在嗅探时查找数据包的方向

时间:2013-01-22 08:08:51

标签: network-programming libpcap packet-capture tcpdump

我想要一个接口出站流量的源IP地址列表。如何使用libpcap找到数据包的方向,无论是入站还是出站读取流量?我不知道任何一方的子网信息。并且双方都有客户端/服务器,因此我不能依赖端口号范围来过滤流量。

为什么libpcap数据包标题中没有关于方向的信息,或者pcap-filter中的inbound过滤器选项?

4 个答案:

答案 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地址
  • 界面&方向
  • 主机名< - > IP地址数据库

PcapNg

听起来你正在从路由器或防火墙捕获,所以类似于以下内容 不行。

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_INPCAP_D_OUTPCAP_D_INOUT

请参阅tcpdump.org/manpages/pcap_setdirection.3pcap.txt