wireshark简易抓包分析

测试ping时会发现一个现象:
在指定ping包长度后,实际发出的包总长=指定ping包长度+28

为什么ping -s指定大小n后,发出的包长为n+28呢?

先在不涉及分片的简单情况下抓包分析。
通过下方ping指令指定包长20Byte后,终端输出的结果显示实际发出去的包长却是48Byte(小于MTU 1500,此时ping包不会被分片)。

test@test-FTF:~$ ping 172.30.200.180 -s 20
PING 172.30.200.180 (172.30.200.180) 20(48) bytes of data.
28 bytes from 172.30.200.180: icmp_seq=1 ttl=63 time=0.253 ms
^C
--- 172.30.200.180 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 0.153/0.203/0.253/0.050 ms

先看下ip协议定义的包头:

固定ip头为20Byte(除去可选字段的可变部分),片偏移值的单位为8字节(此值为n,代表着此包数据部分偏移量是8n Byte),整个ip头的长度按照4字节对齐。

icmp协议定义的头部如下,前4Byte固定头部,一般认为icmp request、reply等常见的报文类型头部8Byte(有4Byte的可变部分记录序列号+标识符):

下图为实际wireshark抓包,可以看到ping包的offset偏移量是0(因为有且只有一个包),ip包总长=48Byte。这里会发现,当指定ping包20Byte时,icmp包的data部分只有12Byte,与实际发出的48Byte相差了36Byte

其中20Byte很好理解是IP协议头,另外8Byte为ICMP头,但是多剩下的8Byte是哪里的呢?
查看wireshark显示的十六进制ICMP报文内容,一共28Byte:

0020         08 00 6e ff 12 89 00 0a 47 ae 2a 63 00 00   ....n.....G.*c..
0030   00 00 d4 37 0e 00 00 00 00 00 10 11 12 13         ...7..........

其中“47 ae 2a 63 00 00 00 00 ”是icmp时间戳,占了8Byte,正好是前面找不到原因的8Byte大小。所以多出来的36Byte=icmp协议头固定前8Byte+icmp时间戳8Byte+ip协议头20Byte。

由此知,icmp 报文格式还有一部分可选字段是记录时间戳,request和reply类型都会使用此字段:

这就是为什么指定了ping包长为20后,实际抓到的icmp报文长却是28(icmp data长12)、ip包长48

当通过ping -s len指定发出长度为len的ping包时,程序默认将固定的8Byte ICMP头部长度涵盖了进去,意味着icmp报文的数据段长度将设为(len-8)。但实际发出的icmp包可能使用了头部的可选数据段记录时间戳,导致实际发送时icmp包长增加了8Byte,总的ip包长增加了28Byte。

icmp大包是如何被分片的呢?

上面是未被分片的抓包,下面观察下被分片的icmp包的ip头部offset变化。
下方指令指定5000包长后,实际发出是5028Byte。28Byte的增量同理。

test@test-FTF:~$ ping 172.30.200.180 -s 5000
PING 172.30.200.180 (172.30.200.180) 5000(5028) bytes of data.
5008 bytes from 172.30.200.180: icmp_seq=1 ttl=63 time=21.9 ms
^C
--- 172.30.200.180 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 21.860/24.090/26.321/2.230 ms

当指定ping包长为5000时,每个发出的icmp报文的数据部分长度为5000-8=4992Byte,ICMP报文总长度为4992+8+8=5008Byte=5028-20。

对于ip层来说,待传输的ip层数据为5008Byte ICMP报文,ip层将对这5008Byte的数据进行分片,确保每个分片包加上ip头部后的包总长不超过1500,即会把ip层数据分为5008=1480*3+568这四部分,需要分成4个分片包发出。

一个ping包发出,wireshark会抓到四个fragmented ip 包,如下图:

2-5号是4个分片包。注意:第一列2-5这个序号不代表ip报文id,而是表明这个软件抓到的第几个包的序号。reassembled in #5代表着这些分片内容将在5号包内重组后显示。

  • 第一个分片包:ip头部header length这里二进制值为0101,转换成十进制为5,因为这个项值的单位是4Byte,这里代表的是ip头部长度为20Byte。ip包的数据部分长度1500-20=1480Byte

  • 第二个分片包:flags值为20b9=0010 0000 1011 1001,flags部分的最高位0是保留位,从左数第二高位0是DF位(DF位置1代表不分片),第三高位1是MF位(MF置1代表着more fragments后面还有分片包),后13位代表片偏移,片偏移为0 0000 1011 1001(185),此值单位是8Byte,所以表示的是185*8=1480 Byte的偏移量。对于第一个分片包的icmp数据来说,第一个包只存放了1480Byte的ICMP内容,故第二个分片包的片偏移为1480。

  • 第三个分片,flags值为2172=0010 0001 0111 0010,片偏移为0001 0111 0010(370),偏移量为3708=2960Byte。对于第一个分片包的icmp数据来说,前两个包存放了14802=2960Byte的ICMP内容,故第三个分片包的片偏移为2960。

  • 第四个分片,flags值为022b=0000 0010 0010 1011,片偏移为0 0010 0010 1011(555),偏移量为5558=4440Byte。对于第一个分片包的icmp数据来说,前三个包存放了14803=4440Byte的ICMP内容,故第四个分片包的片偏移为4440。最后一个分片的icmp数据长度为588-20=568Byte。注意,最后一个分片包的MF未置上,说明当前包就是最后一个分片了。

    在最后一个分片包内,wireshark会自动将前面收到的所有IP分片重组后显示在此包的ip数据部分,对比可发现前面三个分片ip头之后就只有ip data区,而最后一个分片ip头后是一个完整的icmp报文(16Byte头+4992Byte数据)。

wireshark简易抓包分析——ping指定大小包长多28Byte相关推荐

  1. 实验十四:Wireshark数据抓包分析之ARP协议

    实验十四:Wireshark数据抓包分析之ARP协议 目录 一.实验目的及要求 二.实验原理 1.什么是ARP 2.ARP工作流程 3.ARP缓存表 三.实验环境 四.实验步骤及内容 实验步骤一 1. ...

  2. 网络安全学习第10篇 - ping程序的实现,抓包分析ping数据包以及ping工具对于网络安全方面的威胁

    请结合附件:Ping的实现原理与ping.cpp的内容,编写一个程序,使其能够实现简单的ping的功能,即判断目标网站是否可以连接,然后通过Wireshark进行抓包分析其ICMP协议,指出哪个数据包 ...

  3. Wireshark网络抓包分析

    目录 1. 以太网协议头(数据链路层) -- 14byte 2. IP数据头(网络层) -- 20byte 3.  ARP抓包分析 3.1 ARP介绍 3.2 报文格式 3.3 抓包分析 3.3.1 ...

  4. Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark

    Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark Wireshark(前称Ethereal)是一个网络包分析工具.该工具主要是用来捕获网络包,并显示包的详细情况.本节将分别介绍 ...

  5. Wireshark数据抓包分析——网络协议篇

    Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...

  6. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  7. wireshark Fiddler抓包分析与解密https Fiddler修改https请求和响应

    Https理论 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为 ...

  8. 网络:抓包分析ping的原理

    控制报文协议(Internet Control Message Protocol,ICMP)是 TCP/IP 协议族的一个子协议.ICMP 协议用于在 IP 主机和路由器之间传递控制消息,描述网络是否 ...

  9. linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)

    遇到需要在Linux下抓包分析的问题,便用到了wireshark,非常强大的抓包分析软件,直接在系统里面安装,然后使用明亮抓包即可! 我这里用的是Ubuntuserver版,执行安装: 1.apt-g ...

最新文章

  1. linux mysql insert_linux mysql怎么添加数据
  2. 【数字信号处理】傅里叶变换性质 ( 序列对称分解定理示例 | 共轭对称序列与原序列之间的关系 | 共轭反对称序列与原序列之间的关系 )
  3. 渐进式迭代教学法--PHP
  4. erdas2015几何校正模块在哪_erdas图像几何校正操作步骤指南
  5. 为什么使用NoSql及NoSql的优点
  6. Log4j 2:性能接近疯狂
  7. Linux 如何通过命令仅获取IP地址
  8. 最可怕的八种黑客手段,网络攻击真是无孔不入!【转载】
  9. cookie可存的最大限制_cookie、localStorage、sessionStorage、
  10. mfc ctabctrl 双排显示_盐城便宜的开口型双排脚手架生产厂家-斯戴博盘扣脚手架...
  11. 一步步学习SPD2010--第二章节--处理SP网站(9)---- 关键点
  12. 产品经理面试:为什么想做产品经理
  13. C语言基础项目:200 行代码实现贪吃蛇,思路+源码详解
  14. 运维这个工作岗位还有前途吗?
  15. 2sk2225代换3A/1500V中文资料【PDF数据手册】
  16. 计算机复制教程,介绍几款常用的屏幕拷贝工具,快速抓取电脑画面
  17. 动态DNS的定义以及优缺点有哪些
  18. lpl夏季赛2021赛程表出炉,用当贝投影F3百吋大屏看比赛!
  19. 12、Kanzi插件——创建Kanzi Engine插件的方法
  20. 电脑计算机打不开显示远程过程,win10系统打不开图片提示“远程过程调用失败”的解决方法...

热门文章

  1. 浅谈Java语言中八种基本数据类型
  2. Python 调用Windows内置的语音合成,并生成wav文件
  3. 计算机毕业设计-SpringBoot自助旅游管理系统-java旅游路线系统
  4. 精神病和神经病有区别吗?
  5. android分享助手下载地址,语音导出分享助手
  6. pycharm创建python工程_使用Pycharm(Python工具)新建项目及创建Python文件的教程
  7. DHT11温湿度模块驱动程序
  8. 2022秋招,游戏开发岗与java开发岗如何抉择?
  9. 用M8制作电感、电容、电解电容测量仪表
  10. php单双引号的区别与foreach 遍历