我目前正在使用臭名昭著的 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'd 时通过 DHCP 获得 IP,我没有使用 bpf 过滤器,即:
pcap_compile()
pcap_setfilter()
作为pcap_dispatch()
. 当我确实使用它时,结果在 4 到 6 个数据包之间。我已经阅读了手册页,许多网站和论坛,我只是看不到它。
如果您需要任何其他信息/代码,请询问。如果有人能指出我正确的方向,我将非常感激,我会为社区发布我的结果:)
感谢您的时间。
各位看官,谢谢。
我从pcap_dispatch()
to更改为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
项目提交后,我会将我的完整代码发布给社区。
再次感谢你。