pcap_dispatch与pcap_loop使用区别

111 篇文章 1 订阅
55 篇文章 3 订阅

1.pcap_dispatch和pcap_loop使用回调函数结构都一样:

static void process_packet(u_char *user, struct pcap_pkthdr *pHeadr, u_char *pkt_data) {    // 如果process_packet定义在类中,那么必须以static修饰
}

2.pcap_dispatch和pcap_loop函数参数都一样:

int pkts_read = -1;     // 让libpcap一直抓包,如果pkts_read为1000,则libpcap一次抓1000个包
pcap_loop(handler, pkts_read, (pcap_handler)process_packet, nullptr);
pcap_dispatch(handler, pkts_read, (pcap_handler)process_packet, nullptr);

3.pcap_loop使用较为简单,当网卡收到包,则调用包回调process_packet处理,否则,进程阻塞

4.pcap_dispatch收到包则调用包回调process_packet处理,否则,函数返回

5.pcap_dispatch配合pcap_setnonblock使用,设置libpcap非阻塞方式:

pcap_t *handler = pcap_open_live(...);
...
pcap_setnonblock(handler, 1, ...);

6.pcap_loop不能和pcap_setnonblock关联使用,否则libpcap不能循环抓包。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值