snort IP defragment 模型:

BSD favors an original fragment with an offset that is less than or equal to a subsequent fragment.
BSD-right favors a subsequent fragment when the original fragment has an offset that is less than or equal to the subsequent one.
Linux favors an original fragment with an offset that is less than a subsequent fragment.
First favors the original fragment with a given offset.
Last favors the subsequent fragment with a given offset.
                                                          
 
可以看到:
 
前三个 BSD, BSD right, Linux 都是按 offset 排序后重组。
BSD 与  Linux 类似,都是将当前包用完,再找 offset 最小的包补上;差别仅在于 offset 相同时,BSD取旧,Linux取新。而 BSD right 则相比 BSD 差别在于,前者在任何重叠区域都使用新包,除了新包是旧包子集且 offset 更大的情况(新包 offset > 旧包 offset 并且 新包 end <= 旧包end 的情况)。
 
First,Last 比较简单,仅仅是时间维度上。
 

snort frag 模块:

 
frag2 :
检测到IP分组的first,last后,则分组遇到一个新包都会遍历整个组以判断分组是否完善。
 
frag3:
支持多种IP分组合并策略
在分组中插入每个包的时候,都会与目的位置的 left,right 判断是否有重叠,如果有重叠,则根据合并策略会调整 current,left,right 包的 offset,size值,如果调整后现有组中有size小于零的包直接从组中删除,如果当前根据合并策略可以丢弃则丢弃。
组中每插入一个包,都会将包 size (去除重叠后得出来的长度) 累加于 frag_bytes。
包未设置 more fragemnt,则设置组大小 calculated_size。
 
如果已发现分组 first,last 且 frag_bytes >= calculated_size(理论上 > 不会发生),则认为分组已经完善。
 
 
重组时会创建一个新的 Packet。
链路层 header, pcap header 的时间戳 是取的当前触发 Frag3Rebuild 的包,即此分组中最后捕获到包。
IP header,从当前包中拷贝头,并清除 Fragment 标志及偏移,从组中拷贝 IP Options。
 
 
snort 2.8.3 的 frag3 还不支持IPv6的,但 2.9.4 的 frag3 支持。
 
 

IP defragment的更多相关文章

  1. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  2. 理解 Linux 网络栈(1):Linux 网络协议栈简单总结

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  3. Linux内核--网络栈实现分析(四)--网络层之IP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7514017 更多请看专栏,地址 ...

  4. Tcp/ip 报文解析

    在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...

  5. 网站定位之---根据IP获得区域

    记得以前做一个培训机构网站时候需要定位,那时候用的搜狐的api,不是很精准. demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetC ...

  6. 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)

    前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP. 下面我们给 VIP 关联一个 floating IP,再进行测试. 访问 Project ...

  7. PHP获取客户端IP

    /** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...

  8. 获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)

    前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程. 在创建 insta ...

  9. Java获取本机的IP与MAC地址

    有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...

随机推荐

  1. hdu Hat's Fibonacci

    import java.math.BigInteger; import java.util.*; public class Main { public static void main(String ...

  2. javascript之window对象

    window :window对象是BOM中所有对象的核心,除了是BOM中所有对象的父对象外,还包含一些窗口控制函数. 1.全局的window对象 JavaScript中的任何一个全局函数或变量都是wi ...

  3. UVA_埃及分数(Hard Version) UVA 12588

    Problem EEg[y]ptian Fractions (HARD version)Given a fraction a/b, write it as a sum of different Egy ...

  4. html&CSS初学

    <link href="https://fonts.gdgdocs.org/css?family=Lobster" rel="stylesheet" ty ...

  5. array_multisort 关联(string)键名保持不变,但数字键名会被重新索引。

    $array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', ...

  6. static静态属性和静态方法的原理与调用技巧

    这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下     本文实例讲述了php中static静态属 ...

  7. SVN中tag branch trunk用法详解

    SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...

  8. 【二分查找+优化O(n)】【续UVA1121】Subsequence

    之前的二分答案做法 http://blog.csdn.net/zy691357966/article/details/40212215 二分查找做法: 我们首先试试只枚举终点.对于终点j,我们的目标是 ...

  9. hive大数据倾斜总结

    在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的 Counters是整个Job的总和,优化是基于这些Counters得出的 ...

  10. 美化select的jquery插件

    自己写的一个美化select插件,浏览器自带的实在太丑,还不能用css自定义. 插件主要原理是隐藏原生的select控件,支持select上设置change事件. 脚本 /* * iSelect * ...