Network programming 嗅探时查找数据包的方向
我想要一个接口出站流量的源IP地址列表。我如何使用libpcap找到数据包的方向,无论是入站还是出站读取流量?我不知道双方的子网信息。而且两边都有客户端/服务器,所以我不能依赖端口号范围来过滤流量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功能: 丢包计数 注释(评论) 本
为什么libpcap数据包头中没有关于方向的信息,或者像中的
inbound
这样的筛选选项?PCAP文件格式不包含保存捕获期间使用的接口的字段。话虽如此,Wireshark&Tshark目前使用的较新PCAP-NG文件格式与数据包方向一起支持该格式
现有pcap ng功能:
- 丢包计数
- 注释(评论)
- 本地IP地址
- 界面与方向
- 主机名IP地址数据库
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没有任何机制来提供该信息。这意味着添加它并不容易。