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. C# GC 垃圾回收

    一.托管 .Net所指的托管资源到底是什么意思呢?是相对于所有资源,还是只限于某一方面的资源?很多人对此不是很了解. 其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的元素:因此对于Str ...

  2. jquery判断元素是否隐藏的多种方法

    第一种:使用CSS属性 复制代码 代码如下: var display =$('#id').css('display'); if(display == 'none'){    alert("被 ...

  3. 文档生成工具doxygen+图像生成工具GraphViz

    文档生成工具doxygen+图像生成工具GraphViz 虽然jdk自带的javadoc也很好用,不过使用doxygen+GraphViz 的组合可以生成许多强大的图(类图.协作图.文件包含/被包含图 ...

  4. java.lang.UnsatisfiedLinkError: no XXX in java.library.path

    其中涉及的测试源码如下: For those who didn't install Javawith default settings, a systematic way for solving JN ...

  5. JavaScript-打开新窗口

    open()方法可以查找一个已经存在或者新建一个新的浏览器窗口. 语法:window.open([URL], [窗口名称], [参数字符串]) 参数解释: URL:可选参数,在窗口中显示网页的网址或路 ...

  6. Spring的AOP2

    本文是<AOP 那点事儿>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实用主义的方向在发展.沿着 Spri ...

  7. Java程序员面试题集(116-135)

    摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用.不管你的Web开发中是否使用框架,JSP和Ser ...

  8. Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)

    为了保证应用程序存储数据的安全性,开发人员在开发应用程序的过程中须要注意使用Android 应用程序的内部存储空间. 依据不同的要求.将相应的数据文件.缓存文件.暂时文件等分别存储在相应的位置. 注意 ...

  9. 标准linuxserver搭建

    一:针对大数据平台的linux例如以下搭建.为了方便截图,採用的虚拟机,与真实环境有点出入 二:过程例如以下 1. 在vmware中选择载入虚拟光盘iso文件,然后进入安装 2. 默认选择第一项 In ...

  10. 两分钟让你明白cocos2dx的屏幕适配策略

    闲来无事,整理了一下cocos2dx的屏幕适配策略,本文适用于想快速理解cocos2dx适配的开发者. 我们先假设:以854 * 480 的屏幕为标准进行开发,当然,这也就是cocos2dx所说的设计 ...