【发布时间】:2013-08-07 22:58:18
【问题描述】:
我目前正在使用臭名昭著的 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() 更改为 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
项目提交后,我会将我的完整代码发布给社区。p>
再次感谢您。
【问题讨论】:
-
我们能看到更多代码吗?
-
具体开调度和统计
标签: c pcap libpcap packet-sniffers