winpcap函数对比

1.pcap_dump()和pcap_live_dump() 

void pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
将数据包保存到磁盘

int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
将捕获保存到文件

pcap_live_dump() 和 pcap_dump()的区别,除了可以设置限制之外,就是运行结果。pcap_live_dump() 利用了 WinPcap NPF 驱动自带的功能, (详情请参见 NPF 驱动核心手册) ,在内核级来写堆文件,并将上下文交换的数量和内存拷贝的数量最小化。显然,这个特性目前并不能应用于其它操作系统,因为 pcap_live_dump() 是 WinPcap 的特性之一,并且只运行于 Win32 平台下。

2.pcap_dispatch()和 或 pcap_loop()

当适配器被打开,捕获工作就可以用 pcap_dispatch() 或 pcap_loop()进行。 这两个函数非常的相似,区别就是 pcap_ dispatch() 当超时时间到了(timeout expires)就返回 (尽管不能保证) ,而 pcap_loop() 不会因此而返回,只有当 cnt 数据包被捕获,所以, pcap_loop()会在一小段时间内,阻塞网络的利用。 pcap_loop()对于我们这个简单的范例来说,可以满足需求,不过, pcap_dispatch() 函数一般用于比较复杂的程序中。这两个函数都有一个 回调 参数, packet_handler 指向一个可以接收数据包的函数。 这个函数会在收到每个新的数据包并收到一个通用状态时被 libpcap 所调用 ( 与函数 pcap_loop() 和pcap_dispatch() 中的 user 参数相似),数据包的首部一般有一些诸如时间戳,数据包长度的信息,还有包含了协议首部的实际数据。 注意:冗余校验码 CRC 不再支持,因为帧到达适配器,并经过校验确认以后,适配器就会将 CRC 删除,与此同时,大部分适配器会直接丢弃 CRC 错误的数据包,所以, WinPcap 没法捕获到它们。请注意,使用 pcap_loop() 函数可能会遇到障碍,主要因为它直接由数据包捕获驱动所调用。因
此,用户程序是不能直接控制它的。另一个实现方法(也是提高可读性的方法),是使用pcap_next_ex() 函数。

void pcap_breakloop (pcap_t *)
设置一个标志位,这个标志位会强制 pcap_dispatch() 或 pcap_loop() 返回,而不是继续循环。

转载于:https://www.cnblogs.com/liubin-home/p/5395077.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值