版本(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. 关闭oom killer

    最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ...

  2. SOAP+WSDL

    一 SOAPSOAP最开始是用作RPC机制的,后来XML的出现使其应用非常广泛.它与HTTP一样是一种应用级协议,使用他可以在不同的应用程序之间进行数据交换.SOAP可以基于HTTP,也可以基于HTT ...

  3. Clusterware后台进程

    Clusterware由若干进程组成,其中最重要的是CRSD,CSSD,EVMD   在Clusterware安装的最后阶段,会要求在每个节点执行root.sh脚本,这个脚本实际的作用就是在/etc/ ...

  4. mysql添加索引

    1.添加PRIMARY KEY(主键索引)  mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索 ...

  5. 剑指offer—第三章高质量代码(o(1)时间删除链表节点)

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点,链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode* m_pValue ...

  6. 仿Twitter登陆移动背景效果

    有使用Twitter客户端的朋友应该有发现在登录的时候,屏幕上方和下方的云朵图片是不断移动着的,再加上Twitter那支可爱的小鸟在不停的动着,给人的感觉就好像是小鸟在飞翔一样,感觉效果很不错. 我也 ...

  7. Twitter Storm如何保证消息不丢失

    storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍storm是怎么做到这个保证的,以及我们使用者怎么做才能充分利用storm的可靠性特点. 一个tuple被”完全处理”是什么意 ...

  8. springMVC框架访问web-inf下的jsp文件

    博客原文章:http://td.xue163.com/1042/1/10425265.html 用户提出问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC ...

  9. jQuery对select标签的常用操作

    1.获取当前选中项的value. $("#selector").val(); 2.获取当前选中项的text. $("#selector").find(" ...

  10. leetcode:Roman to Integer(罗马数字转化为罗马数字)

    Question: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the rang ...