版本(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. BZOJ 3754 Tree之最小方差树

    枚举平均数. mdzz编译器. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  2. ubuntu16.04 64位server安装php7

    You can do the following: sudo apt-get install python-software-properties sudo LC_ALL=C.UTF-8 add-ap ...

  3. 最全的Android源码目录结构详解(转)

     Android 2.1|-- Makefile|-- bionic                        (bionic C库)|-- bootable                (启动 ...

  4. web服务器的相关资料 ngix

    OpenResty:官方网站  http://openresty.org/cn/index.html 利用nginx+lua+memcache实现灰度发布 http://www.cnblogs.com ...

  5. 8个必备的PHP功能开发 (转)

    做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得心应手,本文将分享8个开发必备的PHP功能,个个都非常实用,希望各位PHP开发者能够掌握. 1.传 ...

  6. linux 命令行字符终端terminal下强制清空回收站

    回收站其实就是一个文件夹,存放被删掉的文件. ubuntu 回收站的路径: $HOME/.local/share/Trash/ 强制清空回收站: rm -fr $HOME/.local/share/T ...

  7. (转)python 优先队列

    #!/usr/bin/python from Queue import Queue from Queue import PriorityQueue a1='a1' a2='a2' a3='a3' a4 ...

  8. ecshop 商品详情页显示同类别下的推荐商品

    1.打开goods.php文件找到下面代码 $smarty->assign('goods_rank', get_goods_rank($goods_id)); // 商品的销售排名 在上面的代码 ...

  9. (六) 6.1 Neurons Networks Representation

    面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示 ...

  10. 【原创】牛顿法和拟牛顿法 -- BFGS, L-BFGS, OWL-QN

    数据.特征和数值优化算法是机器学习的核心,而牛顿法及其改良(拟牛顿法)是机器最常用的一类数字优化算法,今天就从牛顿法开始,介绍几个拟牛顿法算法.本博文只介绍算法的思想,具体的数学推导过程不做介绍. 1 ...