Linux下Libpcap源码分析和包过滤机制 (4)

本文详细介绍了Linux下Libpcap库的包过滤机制,探讨了内核空间过滤数据包对捕获效率的重要性。在Linux 2.4.29版本中,通过setsockopt()函数实现过滤器的安装和卸载,利用sock_fprog结构转换为sk_filter。此外,还提到了libpcap的其他辅助函数如pcap_dump_open()和pcap_open_offline()。libpcap的历史、平台无关性和对BPF的良好支持使其在各种网络监控软件中广泛应用。
摘要由CSDN通过智能技术生成
过滤代码的安装

前面我们曾经提到,在内核空间过滤数据包对整个捕获机制的效率是至关重要的。早期使用 SOCK_PACKET 方式的 Linux 不支持内核过滤,因此过滤操作只能在用户空间执行(请参阅函数 pcap_read_packet() 代码),在《UNIX 网络编程(第一卷)》(参考资料 B)的第 26 章中对此有明确的描述。不过现在看起来情况已经发生改变,Linux 在 PF_PACKET 类型的 socket 上支持内核过滤。Linux 内核允许我们把一个名为 LPF(Linux Packet Filter) 的过滤器直接放到 PF_PACKET 类型 socket 的处理过程中,过滤器在网卡接收中断执行后立即执行。LSF 基于BPF机制,但两者在实现上有略微的不同。实际代码如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值