gpt4 book ai didi

c - 用于实时捕获的 pcap 逻辑

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:57 25 4
gpt4 key购买 nike

我目前正在使用声名狼藉的 pcap 库编写数据包捕获程序,该程序基于 Arch Linux Arm 并使用 C 语言编程,但我遇到了障碍。

该设备将位于 SPAN 以太网端口,并应收集通过交换机的所有数据,并将其保存到文件中并使用 wireshark 离线打开以供分析。

程序将无错误地编译和执行;然而,统计数据只返回每次捕获 1 到 6 个数据包。出于测试目的,我已将计数设置为 20,并且正在对设备执行 ping 操作以生成流量。

程序的逻辑(为了不转储我的整个代码)是这样的:

pcap_open_live()  //find device
pcap_lookupnet() //get IP and net mask
pcap_dump_open() //open savefile
pcap_dispatch() //capture packets & call &pcap_dump
pcap_stats() //output capture stats to screen
pcap_dump_close() //close file
pcap_close() //close device & free memory

代码指定混杂模式,设备在 ifconfig 时通过 DHCP 获得 IP,我没有使用 bpf 过滤器,即: pcap_compile() pcap_setfilter()作为 pcap_dispatch() 的一部分。当我确实使用它时,结果在 4 到 6 个数据包之间。我已经通读了手册页、许多网站和论坛,但就是看不到。

如果您需要任何其他信息/代码,请询问。如果有人能指出我正确的方向,我将非常感激,我会为社区发布我的结果:)

感谢您的宝贵时间。

伙计们,你们发现了,谢谢你们。

我从 pcap_dispatch() 更改为 pcap_loop() 并捕获目标 20 个数据包。完美的。所以综上所述,代码逻辑如下。

pcap_open_live() //find device
pcap_lookupnet() //get IP and net mask
pcap_dump_open() //open savefile
pcap_loop() //capture packets & call &pcap_dump
pcap_stats() //output capture stats to screen
pcap_dump_close() //close file
pcap_close() //close device & free memory

项目提交后,我会发布我的完整代码,作为对社区的帮助。

再次感谢。

最佳答案

来自手册页:

pcap_dispatch() 处理来自实时捕获或“savefile”的数据包,直到处理完 cnt 数据包,到达当前数据包缓冲区的末尾当进行实时捕获时,结束从“保存文件”读取时到达“保存文件”

然后为

pcap_loop() 处理来自实时捕获或“保存文件”的数据包,直到处理完 cnt 数据包,从“保存文件”读取时到达“保存文件”的末尾

我的预感是数据包缓冲区一次最多只能容纳 6 个数据包,当您发送时,您会耗尽缓冲区并返回。尝试使用 pcap_loop() 并查看您的问题是否已解决。

关于c - 用于实时捕获的 pcap 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com