版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit)
标识(16bit) 标志(3bit) 分段偏移(13bit)
存活期(8bit) 协议(8bit) 报头校验和(16bit)
源IP地址(32bit)
目的IP地址(32bit)
选项(0或32bit,若有的话)
数据(可变)

版本 IP版本号。
报头长度 32位字的报头长度(HLEN)。
优先级和服务类型 服务类型描述数据报将如何被处理。前3位表示优先级位。
总长度 包括报头和数据的数据包长度。
标识 唯一的IP数据包值。
标志 说明是否有数据被分段。
分段偏移 如果数据包在装人帧时太大,则需要进行分段和重组。分段功能允许在因特网上存在有大小不同的最大传输单元(MUT)。
存活期(TTL) 存活期是在数据包产生时建立在其内部的一个设置。如果这个数据包在这个TTL到期时仍没有到达它要去的目的地,那么它将被丢弃。这个设置将防止IP包在寻找目的地的时候在网络中不断循环。
协议 上层协议的端口(TCP是端口6;UDP是端口17(十六进制)) 。同样也支持网络层协议,如ARP和ICMP。在某些分析器中被称为类型字段。下面将给出这个字段更详细的说明。
报头校验和 只针对报头的循环冗余校验(CRC)。
源IP地址 发送站的32位IP地址。
目的IP地址 数据包目的方站点的32位IP地址。
选项 用于网络检测、调试、安全以及更多的内容。
数据 在IP选项字段后面的就是上层数据。

对应于Jpcap包中IPPacket类:看一下具体的文档,得到了对应的关系:

构造IPv4包的方法

Method Summary
 void setIPv4Parameter(int priority,
boolean d_flag, boolean t_flag, boolean r_flag, int rsv_tos,
boolean rsv_frag, boolean dont_frag, boolean more_frag, int offset,
int ident, int ttl, int protocol, java.net.InetAddress src,
java.net.InetAddress dst)

          Sets the IPv4 parameters

实例:ipp. setIPv4Par ameter ( 0, false, false, false,0, tr ue , tr ue , false, 4, 1, 255, 230, / / 230 未定义协议
   new IPAddr ess( 110. 110. 17. 101) ,
   new IPAddr ess( "210. 40. 7. 149") ) ;

version:v4/v6

priority:优先权    /** Priority (class) (v4/v6) */
              public byte priority;

服务类型设置:  d_flag - IP flag bit: [D]elay        表示要求有更低的时延

        t_flag - IP flag bit: [T]hrough      表示要求有更高的吞吐量

        r_flag - IP flag bit: [R] eliability    表示要求更高的可靠性

        rsv_tos - Type of Service (TOS)    服务类型

数据偏移设置:  rsv_frag - Fragmentation Reservation flag 有无碎片标识

         dont_frag - Don't fragment flag     末尾碎片标识

         more_frag - More fragment flag     尚有碎片表示

         offset – Offset                   数据块偏移

IP数据报识别标志:ident – Identifier   上层协议调用

offset:分段偏移

ttl:存活时间    Time To Live

protocol:协议(int类型)这个是源码中给出的协议类型号

            /** Protocol number for ICMP */
            public static final short IPPROTO_ICMP = 1;

           /** Protocol number for IGMP */
            public static final short IPPROTO_IGMP = 2;

           /** Protocol number for IP in IP */
            public static final short IPPROTO_IP = 4;

           /** Protocol number for TCP */
            public static final short IPPROTO_TCP = 6;

            /** Protocol number for UDP */
            public static final short IPPROTO_UDP = 17;

          /** Protocol number for IPv6 */
            public static final short IPPROTO_IPv6 = 41;

           /** Protocol number for IPv6 hop-by-hop option */
            public static final short IPPROTO_HOPOPT = 0;

          /** Protocol number for routing header for IPv6 */
            public static final short IPPROTO_IPv6_Route = 43;

            /** Protocol number for fragment header for IPv6 */
            public static final short IPPROTO_IPv6_Frag = 44;

          /** Protocol number for IPv6 ICMP */
            public static final short IPPROTO_IPv6_ICMP = 58;

            /** Protocol number for no next header header for IPv6 */
            public static final short IPPROTO_IPv6_NoNxt = 59;

          /** Protocol number for destination option for IPv6 */
            public static final short IPPROTO_IPv6_Opts = 60;

src:源IP

dst:目的IP

之后是基于IP 数据包的洪水攻击的原理:

  用未定义协议字段构造IP 包进行洪水攻击构造一个IP 数据包, 在上层协议中用不属于任何已分配定义的协议类型表示此字段。目的IP 指向欲攻击主机, 源IP 采用伪
装, 服务类型字段选默认, 数据块偏移设为无碎片无偏移, T TL 设为最大值255, 协议字段填入任一未分配的协议类型, 最后在校验和处填入正确的校验码进行发送。注意此时
只进行了IP 数据报首部校验和的计算, 对IP 数据报的数据段可进行随意的构造。

  由于IP 校验码无误, IP 数据包是合理的, 不会在传输过程中因协议字段的变化而丢弃。但是由于其上层协议是未知的, 所以到达目的主机后不能进行进一步的数据处理,
也不会像SYN 洪水攻击那样进行TCP 数据报校验和的检验。此时, 系统认为此数据包的协议没有连同数据包发送过来或是系统不支持此协议, 于是直接向发送此数据包的源IP
位置回执一个ICMP 包, 以通知对方IP 数据报的协议未能同时送达。

  在这种情况下, 被攻击主机虽然没有建立一个连接, 也不会有等待延时, 但是大量的此种数据包发送出来进行攻击, 特别是形成DDoS 攻击时, 系统资源会消耗殆尽, 造成很
大的危害。

ICMP的回送类型:

3 2 Protocol Unreachable——协议不可达    x

IP报文解析及基于IP 数据包的洪水攻击的更多相关文章

  1. Tcp/ip 报文解析

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

  2. lua中是 ffi 解析 【是如何处理数据包的/pkt是如何传进去的】 fsfsfs

    lua中的ffi是如何解析的呢? 拿bcc中对proto的解析说起: metatype是有大学问的: ffi.metatype(ffi.typeof('struct ip_t'), { __index ...

  3. 基于IPV6数据包分析(GNS3)

    1:实验拓扑 2:检测路由之间的连通性 路由器R4  ping  各路由器 R1路由表 R4路由表 3:抓包分析 A:回送请求报文(Echo Request)  (128)     Type=128, ...

  4. 基于IPV6数据包的分析(GNS3)

    一.实验拓扑 二.路由配置 1.路由R1的详细配置(以R1为例,R2与R3相同) R1(config)#interface fastEthernet 0/1 R1(config-if)#ipv6 ad ...

  5. 数据包接收系列 — IP协议处理流程(一)

    本文主要内容:在接收数据包时,IP协议的处理流程. 内核版本:2.6.37 Author:zhangskd @ csdn blog IP报头 IP报头: struct iphdr { #if defi ...

  6. 转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理

    三层网络设备对于IP报文的分片和重组处理原理 对于网络分片,我一年前就想整理出来,虽然说网络上的资料很多,但是真正掌握精髓的除非真正做过分片程序,不然很难将协议栈整体联系起来理解.这篇文章,包括设计分 ...

  7. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  8. Socket: Java Socket 几个重要的TCP/IP选项解析(转)

    Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...

  9. Wireshark-过滤器-数据包解析

    目录 过滤器 数据包解析 参考 推荐阅读: https://www.cnblogs.com/zwtblog/tag/计算机网络/ 过滤器 显示过滤器 和 捕获过滤器,俩者使用非常类似. 在Wiresh ...

随机推荐

  1. kthread_stop引起的OOP

    1 使用kthread_create创建线程:     struct task_struct *kthread_create(int (*threadfn)(void *data), void *da ...

  2. Linux编程(获取系统时间)

    #include <stdio.h> #include <time.h> int main() { time_t now; struct tm *w; time(&no ...

  3. Readonly与const初识

    对于readonly和const,很多人无法具体区分,不清楚它们的具体使用场合:现在我们分析它们之间的区别和使用场合. const是一个编译期常量:const只能用于修饰基元类型.枚举类型或者字符串类 ...

  4. c# 读取其他程序的ListView内容

    ArcMap没找到一个导出图层字段结构的功能,自已花点时间用C#做了个小工具,专门用来导arcmap中图层属性面板中的字段信息. 使用说明: 1) 点击“查找窗口”按钮.2) 在ListView控件上 ...

  5. EL表达式(胖先生版)

    EL表达式没有指定范围,从最小范围开始 <% pageContext.setAttribute("shxt", "java web"); request. ...

  6. 搭建Eclipse、Resin Web开发环境

    搭建Eclipse.Resin Web开发环境 一.当然是安装java开发环境 参看: Java环境的搭建 http://www.cnblogs.com/ghj1976/archive/2010/04 ...

  7. db file sequential read (数据文件顺序读取)

    转载:http://www.dbtan.com/2010/04/db-file-sequential-read.html db file sequential read (数据文件顺序读取): db ...

  8. GitHub使用教程及常见错误解决

    1.下载Git并安装 Git for Windows Git-1.8.4-preview20130916.exe 按照默认步骤完成安装 2.设置SSH建立计算机与Github的链接 2.1 点击 开始 ...

  9. LR之错误处理

    1.脚本的健壮性 2.VuGen的处理机制 3.lr_continue_on_error函数 4.示例代码

  10. Laravel不同数据库的模型之间关联

    假设ModelA和ModelB之间是BelongsTo的关系 如果同属于一个数据库连接 那么 public function a(){ return $this->belongsTo(" ...