IP、TCP、UDP首部详解上海时时乐走势图

第4~16行

    0x0000:  4510 00fc 7e99 4000 4006 44a8 c0a8 0808  E...~.@.@.D.....
    0x0010:  7040 3dba 0016 90ab c727 1e02 7728 bf1f  p@=......'..w(..
    0x0020:  5018 79b0 7799 0000 0000 00b0 823d 4cf1  P.y.w........=L.
    0x0030:  1108 58fc 3686 2bd2 5220 fe37 85ab 74cc  ..X.6. .R..7..t.
    0x0040:  bfb1 8831 7d1c 3b57 52ae aa91 28a2 67d8  ...1}.;WR...(.g.
    0x0050:  08fb a257 7fc8 7186 39dc d266 3d32 cce8  ...W..q.9..f=2..
    0x0060:  3eb7 130b a7d3 833b 59c9 bdf8 2141 6863  >......;Y...!Ahc
    0x0070:  7cae 25ff 459e c94a a635 7098 6925 db48  |.%.E..J.5p.i%.H
    0x0080:  a9b0 32ab 5393 737f cf8c f2ed b47a 7d8b  ..2.S.s......z}.
    0x0090:  346c 39df 3ecc d2b0 e0ad 5104 272d 6513  4l9.>.....Q.'-e.
    0x00a0:  4b8d 5ee6 6c7d 9477 e40b 8637 996a bb5a  K.^.l}.w...7.j.Z
    0x00b0:  471a 2ac4 3335 266d 0485 2e52 b2c2 f6e8  G.*.35&m...R....
    0x00c0:  0549 5ae0 9c7b ad45 da0a eef2 1ccb b2ac  .IZ..{.E........
    0x00d0:  a4a2 0a96 cc5f 238c 9570 0d15 984e 6f58  ....._#..p...NoX
    0x00e0:  d8ff 8034 1165 cf44 02e4 ed6b 631e 2548  ...4.e.D...kc.%H
    0x00f0:  56fd 4c8a 664c e5ee d845 2e50            V.L.fL...E.P

以上这些是IP包的内容,左侧是16进制,右侧是ASCII部分。如果想看到这些具体的数据则需要查看前一期中TCP数据报的格式。

  • 4510
    4:IP版本,此处代表为IPv4
    5:代表首部长度,此处代表为20B
    10:代表协议的服务类型
  • 00fc
    表示数据总长度,00FC:代表总长度为252B
  • 7e99
    表示标识,如果IP包的大小超过了数据链路层的MTU限制,就需要对IP包进行拆分,此时就要用这个域来表示哪些包在拆分前是同一组的。此处的标识域为0x7e99
  • 4
    再继续向后看,就是3位标志位,用来控制IP抓分后重新组装用,最低位为MF(More Fragment),中间位为DF(Don't Fragment)不能分片
  • MF=1:表示后面还有分片
  • MF=0:表示这已经是若干分片中的最后一个
  • DF=0:允许分片
  • 000:片偏移量,本次没有拆分包,所以全为0
  • 40:TTL(Time To Life),数据包在网络中的寿命。此处为0x40,进制为64,表示如果中间超过了这个路由节点,则认为目的不可达,中间路由器将进行丢弃处理。
  • 06:指上一层协议类型,此处为0x06,可以看出协议编号为6,代表为TCP协议。
  • 44a8:表示IP首部校验和,此处为0x44a8
  • c0a8 0808:IP源地址,此处为192.168.8.8
  • 7040 3dba:IP目的地址:此处为:112.64.60.186
    到此,数据包头部已经全部解释完成。

     从上面的结果可以看出:


第三行

22:34:11.334916 IP 192.168.8.8.22 > 112.64.61.186.37035: Flags [P.], seq 3341229570:3341229782, ack 1999159071, win 31152, length 212
  • 22:34:11.334916 :抓包的时间
  • IP : 抓取的数据包位于网络层,即IP包
  • 192.168.8.8.22:抓取包的源IP地址和端口
  • > :数据的传输方向
  • 112.64.61.186.37035:抓取的包目的地IP和端口
  • Flags和后面内容:建立三次握手信息

     在很多路由上也有" IP 碎片(Fragment) 攻击防御"的设置,网络规模在150台左右,建议IP碎片值设置在:3000包/秒,在海蜘蛛路由上测试过,如果 IP碎片值设置过小有些私服游戏网站打不开。

二、TCP 首部

上海时时乐走势图 1

TCP 首部

  • 1、第一个4字节:
    • (1)源端口,16位;发送数据的源进程端口
    • (2)目的端口,16位;接收数据的进程端口
  • 2、第二个4字节与第三个4字节
    • (1)序号,32位;代表当前TCP数据段第一个字节占整个字节流的相对位置;
    • (2)确认号,32位;代表接收端希望接收的数据序号,为上次接收到数据报的序号 1,当ACK标志位为1时才生效。
  • 3、第四个4字节:
    • (1)数据偏移,4位;实际代表TCP首部长度,最大为60字节。
    • (2)6个标志位,每个标志位1位;
      SYN,为同步标志,用于数据同步;
      ACK,为确认序号,ACK=1时确认号才有效;
      FIN,为结束序号,用于发送端提出断开连接;
      URG,为紧急序号,URG=1是紧急指针有效;
      PSH,指示接收方立即将数据提交给应用层,而不是等待缓冲区满;
      RST,重置连接。
    • (3)窗口值,16位;标识接收方可接受的数据字节数。详解可参看:http://www.cnblogs.com/woaiyy/p/3554182.html
  • 4、第五个4字节
    • (1)校验和,16位;用于检验数据完整性。
    • (2)紧急指针,16位;只有当URG标识位为1时,紧急指针才有效。紧急指针的值与序号的相加值为紧急数据的最后一个字节位置。用于发送紧急数据。

UDP协议包分析

    我们先来抓取一个UDP包,如下所示:

[root@localhost ~]# tcpdump -i ens5f1 -nn -X 'udp' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:18:12.499924 IP 192.168.8.101.137 > 192.168.8.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
    0x0000:  4500 004e 31ab 0000 8011 763f c0a8 0865  E..N1.....v?...e
    0x0010:  c0a8 08ff 0089 0089 003a 1277 ddc1 0110  .........:.w....
    0x0020:  0001 0000 0000 0000 2046 4b46 4545 4643  .........FKFEEFC
    0x0030:  4e44 4344 4144 4244 4744 4144 4944 4144  NDCDADBDGDADIDAD
    0x0040:  4245 4945 4645 4841 4100 0020 0001       BEIEFEHAA.....
1 packet captured
1 packet received by filter
0 packets dropped by kernel

相对于IP包来讲,UDP的包要简单很多,其首部总共就8个字节。而UDP位于传输层,自然前面也增加了IP包相关的头部。

  • 0089:源端口为0x0089即:137
  • 0089:目的端口为0x0089即:137
  • 003a:UDP包的总长度,即58字节,去掉首部的8字节后,真正可以用来传输的只有50字节。
  • 1277:UDP校验和。为0x1277

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
上海时时乐走势图 2

      1. 攻击方式之ping o death

一、IP 首部

上海时时乐走势图 3

IP 首部

  • 1、第一个4字节(也就是第一行):

    • (1)版本号(Version),4位;用于标识IP协议版本,IPv4是0100,IPv6是0110,也就是二进制的4和6。
    • (2)首部长度(Internet Header Length),4位;用于标识首部的长度,单位为4字节,所以首部长度最大值为:(2^4 - 1) * 4 = 60字节,但一般只推荐使用20字节的固定长度。
    • (3)服务类型(Type Of Service),8位;用于标识IP包的优先级,但现在并未使用。
    • (4)总长度(Total Length),16位;标识IP数据报的总长度,最大为:2^16 -1 = 65535字节。
  • 2、第二个四字节:

    • (1)标识(Identification),16位;用于标识IP数据报,如果因为数据链路层帧数据段长度限制(也就是MTU,支持的最大传输单元),IP数据报需要进行分片发送,则每个分片的IP数据报标识都是一致的。
    • (2)标志(Flag),3位,但目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。
    • (3)片偏移(Fragment Offset),13位;代表某个分片在原始数据中的相对位置。
  • 3、第三个四字节:

    • (1)生存时间(TTL),8位;以前代表IP数据报最大的生存时间,现在标识IP数据报可以经过的路由器数。
    • (2)协议(Protocol),8位;代表上层传输层协议的类型,1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。
    • (3)校验和(Header Checksum),16位;用于验证数据完整性,计算方法为,首先将校验和位置零,然后将每16位二进制反码求和即为校验和,最后写入校验和位置。
  • 4、第四个四字节:源IP地址

  • 5、第五个四字节:目的IP地址


    经过前面的学习,tcpdump的用法相信应该都掌握了,今天我们来学习对tcpdump输出内容的学习和了解。我们以第一个示例进行讲解如下所示:

 

转载:http://blog.csdn.net/zhangliangzi/article/details/52554439

第二行

listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes

tcpdump监听的网络设备接口和链路层类型(以太网)要抓包的大小限制

      二. IP碎片攻击

三、UDP 首部

上海时时乐走势图 4

UDP 首部

  • 端口号:用来表示发送和接受进程。由于 I P层已经把I P数据报分配给T C P或U D P(根据I P首部中协议字段值),因此T C P端口号由T C P来查看,而 U D P端口号由UDP来查看。T C P端口号与UDP端口号是相互独立的。

  • 长度:UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为 8字节(发送一份0字节的UDP数据报是 O K)。

  • 检验和:UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。

第一行

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes

这里仅仅是提示如果想获取和查看更详细的命令可以尝试添加的参数。

      jolt2.c是在一个死循环中不停的发送一个ICMP/UDP的IP碎片,可以使Windows系统的机器死锁。我测试了没打SP的Windows 2000,CPU利用率会立即上升到100%,鼠标无法移动。

IP协议包分析

[root@localhost ~]# tcpdump -i ens5f1 -nn -X 'port 22' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
22:34:11.334916 IP 192.168.8.8.22 > 112.64.61.186.37035: Flags [P.], seq 3341229570:3341229782, ack 1999159071, win 31152, length 212
    0x0000:  4510 00fc 7e99 4000 4006 44a8 c0a8 0808  E...~.@.@.D.....
    0x0010:  7040 3dba 0016 90ab c727 1e02 7728 bf1f  p@=......'..w(..
    0x0020:  5018 79b0 7799 0000 0000 00b0 823d 4cf1  P.y.w........=L.
    0x0030:  1108 58fc 3686 2bd2 5220 fe37 85ab 74cc  ..X.6. .R..7..t.
    0x0040:  bfb1 8831 7d1c 3b57 52ae aa91 28a2 67d8  ...1}.;WR...(.g.
    0x0050:  08fb a257 7fc8 7186 39dc d266 3d32 cce8  ...W..q.9..f=2..
    0x0060:  3eb7 130b a7d3 833b 59c9 bdf8 2141 6863  >......;Y...!Ahc
    0x0070:  7cae 25ff 459e c94a a635 7098 6925 db48  |.%.E..J.5p.i%.H
    0x0080:  a9b0 32ab 5393 737f cf8c f2ed b47a 7d8b  ..2.S.s......z}.
    0x0090:  346c 39df 3ecc d2b0 e0ad 5104 272d 6513  4l9.>.....Q.'-e.
    0x00a0:  4b8d 5ee6 6c7d 9477 e40b 8637 996a bb5a  K.^.l}.w...7.j.Z
    0x00b0:  471a 2ac4 3335 266d 0485 2e52 b2c2 f6e8  G.*.35&m...R....
    0x00c0:  0549 5ae0 9c7b ad45 da0a eef2 1ccb b2ac  .IZ..{.E........
    0x00d0:  a4a2 0a96 cc5f 238c 9570 0d15 984e 6f58  ....._#..p...NoX
    0x00e0:  d8ff 8034 1165 cf44 02e4 ed6b 631e 2548  ...4.e.D...kc.%H
    0x00f0:  56fd 4c8a 664c e5ee d845 2e50            V.L.fL...E.P
1 packet captured
1 packet received by filter
0 packets dropped by kernel

      链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。 
      IP首部包含了分片和重组所需的信息: 

      | Identification |R|DF|MF| Fragment Offset | 
      |<-16>|<3>|<-13>|
      参数解释:
      Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。 
      R:保留未用。
      DF:Dont Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。 
      MF:More Fragment,“更多的分片”,除了最后一片外,其他每个组成数据报的片都要把该比特置为1。 
      Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。 
      了解了分片,也分析了IP头的一些信息,让我们看看IP碎片是怎样运用在网络攻击上的。

      # ping -c 1 -s 65535 192.168.0.1 
      Error: packet size 65535 is too large. Maximum is 65507 
      一般来说,Linux自带的ping是不允许我们做这个坏事的。
      65507是它计算好的:65535-20-8=65507。Win2K下的ping更抠门,数据只允许65500大小。所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你还是继续往下阅读本文吧。

      我们用Snort分别抓取采用ICMP和UDP协议发送的数据包。 
      发送的ICMP包: 
      01/07-15:33:26.974096 192.168.0.9 -> 192.168.0.1 
      ICMP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29 
      Frag Offset: 0x1FFE Frag Size: 0x9 
      08 00 00 00 00 00 00 00 00 ......... 
      发送的UDP包: 
      01/10-14:21:00.298282 192.168.0.9 -> 192.168.0.1 
      UDP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29 
      Frag Offset: 0x1FFE Frag Size: 0x9 
      04 D3 04 D2 00 09 00 00 61 ........a

 

      ping o death是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。ping不就是发送ICMP Echo Request数据包的吗?让我们尝试攻击一下吧!不管IP和ICMP首部长度了,数据长度反正是多多益善,就65535吧,发送一个包:

 

      一.IP碎片是如何产生的

     Windows系统请打上最新的Service Pack,目前的Linux内核已经不受影响。如果可能,在网络边界上禁止碎片包通过,或者用iptables限制每秒通过碎片包的数目。如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络。Win2K系统中,自定义IP安全策略,设置“碎片检查”。

      2. 攻击方式之jolt2

     分片标志位MF=0,说明是最后一个分片。
     偏移量为0x1FFE,计算重组后的长度为 (0x1FFE * 8) 29 = 65549 > 65535,溢出。
     IP包的ID为1109,可以作为IDS检测的一个特征。
     ICMP包:
     类型为8、代码为0,是Echo Request;
     校验和为0x0000,程序没有计算校验,所以确切的说这个ICMP包是非法的。
     UDP包:
     目的端口由用户在命令参数中指定;
     源端口是目的端口和1235进行OR的结果;
     校验和为0x0000,和ICMP的一样,没有计算,非法的UDP。
     净荷部分只有一个字符a。
     jolt2.c应该可以伪造源IP地址,但是源程序中并没有把用户试图伪装的IP地址赋值给src_addr,不知道作者是不是故意的。
     jolt2的影响相当大,通过不停的发送这个偏移量很大的数据包,不仅死锁未打补丁的Windows系统,同时也大大增加了网络流量。曾经有人利用jolt2模拟网络流量,测试IDS在高负载流量下的攻击检测效率,就是利用这个特性。
     
     三. 如何阻止IP碎片攻击

为了加深理解IP协议和一些DoS攻击手段大家有必要看看以下内容,也许对你理解这个概念有所帮助.先来看看IP碎片是如何产生的吧。

 

      IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节。如果有意发送总长度超过65535 的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片攻击程序,来了解如何人为制造IP碎片来攻击系统。

本文由上海时时乐走势图发布于上海时时乐走势图,转载请注明出处:IP、TCP、UDP首部详解上海时时乐走势图

您可能还会对下面的文章感兴趣: