Network programming 嗅探时查找数据包的方向

Network programming 嗅探时查找数据包的方向,network-programming,libpcap,packet-capture,tcpdump,Network Programming,Libpcap,Packet Capture,Tcpdump,我想要一个接口出站流量的源IP地址列表。我如何使用libpcap找到数据包的方向,无论是入站还是出站读取流量?我不知道双方的子网信息。而且两边都有客户端/服务器,所以我不能依赖端口号范围来过滤流量 为什么libpcap数据包头中没有关于方向的信息,或者像中的inbound这样的筛选选项?PCAP文件格式不包含保存捕获期间使用的接口的字段。话虽如此,Wireshark&Tshark目前使用的较新PCAP-NG文件格式与数据包方向一起支持该格式 现有pcap ng功能: 丢包计数 注释(评论) 本

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


为什么libpcap数据包头中没有关于方向的信息,或者像中的
inbound
这样的筛选选项?

PCAP文件格式不包含保存捕获期间使用的接口的字段。话虽如此,Wireshark&Tshark目前使用的较新PCAP-NG文件格式与数据包方向一起支持该格式

现有pcap ng功能:

  • 丢包计数
  • 注释(评论)
  • 本地IP地址
  • 界面与方向
  • 主机名IP地址数据库

这听起来像是从路由器或防火墙捕获,所以类似于以下内容 这是行不通的

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
钢丝鲨

流动工具


你必须解析出你想要的信息,但我认为这不太麻烦。如果您不能使用PCAP-NG,我建议您看看。

Netsniff-NG虽然不依赖libpcap,但支持Linux内核数据包类型扩展。 它们是有记录的

其中一种数据包类型是传出的,并注释为“任何类型的传出”。 下面的示例将捕获离开接口的所有数据包

$ netsniff-ng --in eth0 --out outgoing.pcap --type outgoing
使用此命令,您可以使用其他命令行工具读取PCAP文件并取出所有源代码 地址。也许是像这样的事情:

$ tcpdump -nnr outgoing.pcap  | cut -d " " -f3 | cut -d . -f1-4

注意:我还没有在路由器上尝试过

您可以使用“ethersrc”或“etherdst”来过滤数据包方向。这要求您知道接口的mac地址。

您可以在
pcap\u loop()之前选择数据包捕获的方向

例如,要捕获传入的数据包,只需编写:

handle = pcap_open_live("eth0", 65535, 1, 0, errbuf);
pcap_setdirection(handle, PCAP_D_IN);
pcap_loop(handle, -1, process_packet, NULL);
可能的方向是:
PCAP\u-D\u-IN
PCAP\u-D\u-OUT
PCAP\u-D\u-IN


请参见

pcap ng支持它,因为文件格式有一个可以放置方向的位置。但是,这是“可以放置”,而不是“将放置”,而且,由于libpcap/WinPcap目前通常不提供方向信息,因此使用libpcap/WinPcap捕获并可以写入pcap ng的程序,例如Wireshark/TShark(和OS X Mountain Lion的tcpdump),没有方向指示器放入文件中,因此,不要将其放入文件中。也就是说,pcap ng不足以解决整个问题。谢谢你澄清。谢谢。所以没有办法以pcap ng格式捕获流量?我想用libpcap编写一个C代码。我应该自己实施吗?将此功能添加到libpcap容易吗?我有一些C编程的基本知识。谁知道方向?NIC驱动程序?使用libpcap无法获取捕获数据包的方向。您可以将捕获的数据包保存为pcap或pcap ng或任何您拥有或可以使用代码写出数据包的格式,但您不能输出方向信息,因为您没有方向信息。您必须向libpcap添加新接口以获取方向信息,因为当前的API没有任何机制来提供该信息。这意味着添加它并不容易。