深度剖析WinPcap之(十)——数据包的内核过滤(9)

本文转自http://eslxf.blog.51cto.com/918801/249589

 

我们现在给出一些实例来解释如何用BPF指令集来表示数据包过滤器(在所有的实例中,我们假设链路层的协议头为以太网的典型帧格式)
实例1 接收所有ip数据包,执行命令tcpdump -d ip,获得如下BPF指令
(000) ldh      [12]                        //加载数据包的协议类型值
(001) jeq      #0x800           jt 2      jf 3  //检查是否为ip协议
(002) ret      #96                         //返回TRUE
(003) ret      #0                          //返回FALSE
第一条指令加载以太网类型字段,即帧结构除去前导码的1213字节。
把该值与IP类型值(0x0800)比较,如果比较失败,返回0,丢弃该数据包。
如果比较成功,返回TRUE(96TRUE为一些非0值,表示需要存储数据包的字节数),接收该数据包。
实例接收所有ip数据包或arp数据包(10-3中的CFG的实现),执行命令tcpdump -d ip or arp,获得如下BPF指令:
(000) ldh      [12]                         //加载数据包的协议类型值
(001) jeq      #0x800           jt 3    jf 2  //检查是否为ip协议
(002) jeq      #0x806           jt 3    jf 4  //检查是否为arp协议
(003) ret      #96                          //返回TRUE
(004) ret      #0                           //返回FALSE
说明:第1条指令装载以太网数据包封装的上层协议类型值,在数据包中的偏移值为12字节。第2条指令将该值与IP类型值(0x0800)比较,如果相等,跳转到(003)处返回TRUE并接受该数据包;如果不相等,跳转到(002)。第3条语句将数据包的类型值与ARP类型值(0x0806)比较,如果相等,跳转至(003)处返回TRUE并接受该数据包;否则跳转至(004)处,返回FALSE并丢弃该数据包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值