snort 中的afpacket

简介

     snort在2.9版本加入了daq,同时引入了afpacket。afpacket是linux2.6开始引入的报文获取接口。其最大的特点是打破以往复制报文传递给用户的方式,而是采用了共享内存的交互方式。并且利用环形缓冲区使用户可以无锁处理。

分析

  1. snort使用afpacket可以实现inline模式, 即IPS,不同于IDS的被动防御模式, IPS可以主动阻断。

  2. snort首先会将配置的接口两两配对,这里以ETH0和ETH1为例.

  3. 然后使用afpacket的相关接口(具体可在内核中查找关键字)为每个接口分别建立两个环形缓冲区,

    RX为输入缓冲区, TX为输出缓冲区。缓冲区是一块内核和用户共享的内存空间。

  4. 缓冲区的处理原理是循环队列,以输入缓冲区为例; 当内核发现RX有空位时就将报文放入空位中并打上可用标志,用户发现有标注可用的单元时就可以对其处理,使用完成后为该单元标注空闲标志内核又可继续利用。因为单消费者和生产者情况所以该队列能够无锁处理。

  5. 从ETH0进入的报文如红线所示,内核将报文放入RX中,snort获取该报文并进行匹配后返回通过和丢弃两种结果。如果是通过,则将该数据拷贝进ETH1的发送缓冲区TX并将在ETH0的RX中的该单元标志位空闲,否则不进行拷贝直接将ETH0的RX中的该单元标志为空闲。

 

180840_qBGA_572632.jpg

转载于:https://my.oschina.net/u/572632/blog/294600

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值