文件来自于前几天CyBRICS 2021中的lx100题目,因为做题时候被IP分片坑到了,发现自己对于网络这一块的知识掌握的并不好,所以写一篇文章来理一下。为了省事就直接用比赛的pcap文件做样例了:点击。

从Wireshark抓包来看IP分片

UDP/lPv4分片

一般来说我们都知道MTU是1500字节,因此超过1500字节的数据就需要进行ip分片。包含源和目的端口号的UDP头部只出现在第一个分片里,分片由IPv4头部中的标识(Identification)、分片偏移(Fragment offiet)和更多分片(More Fragments, MF)字段控制。

  • 这些分片的标识(Identification)都是同样的而且分片偏移(Fragment offiet)是以8字节为单位的偏移。同样的标识和不同的偏移让接收方可以对分片进行重组。
  • 更多分片(More Fragments, MF)标志指明该数据报后面是否还有更多的分组, 只有最后一个分片才应置成0。当MF = 0的分片被接收到时, 重组程序才能确定原始数据报的长度, 它等于分片偏移字段的值(乘以8)加上当前分片IPv4总长度字段的值。

下图是一个长度为3000字节的udp包(包括了udp包头的8个字节)。原始数据报要加上ipv4包头为3020字节,它超过了MTU的限制,因此发送的时候会进行分片。

  • 第一个分片中实际传送了1472字节的udp数据和8字节udp包头。此时偏移为0,因为接下来还有数据包要发因此MF置为1
  • 第二个分片传送1480字节的udp数据,因为第一个分片已经传送了1480,因此这里的偏移为1480/8 = 185,因为接下来还有数据包要发因此MF置为1
  • 最后一个分片传送剩下的40字节数据,并将MF置为0,此时接收方可以通过370*8+60来算出原始数据报的长度,因此也知道了udp包的大小为3000字节(减掉ip包头的20字节)。

wireshark中的视角

比赛用的这个pcap文件实际上抓的是照相机用udp传输图片的过程,我们以一个udp传输为例:

我们发现它和我们上一节讲的不太一样,UDP包按理应该是第一个出现,之后跟着一串分片后的IPv4包。而打开上面截图里所有的IPv4包我们发现它们的MF标志全都是1,且最后的udp包的length明显大于了MTU。这是因为wireshark的首选项中自动开启了重组分片数据的选项。这个默认开启的选项能直接帮我们重组原udp数据包并用它替换了MF=0的那个IPv4数据包,因此在开启该选项时我们是找不到MF=0的数据包的。

为了更好的理解这个过程我们关闭这个选项。可以看到下面的样子:

我们打开第一个UDP包,它的数据如下:

我们可以知道虽然它包头中的长度给出的Length为8537(包含8个字节包头,实际数据为8529字节),但是真实的Data里只有1472字节,1472+8(UDP包头)+20(IP包头) = MTU。我们再看这一组最后一个IPv4包:

我们可以看到它的MF=0,因此计算925*8+1157 = 8557,这是原始的数据报文,减掉20字节的IP包头,恰好为8537字节。与UDP包中所给的Length值一样。

回到这是一道ctf题目

上文也说了这是一道照相机传图片的题,因此一个udp包就是一张图,我们只需从pcap文件里提取图片就行。
用pyshark库对pcap文件进行处理,注意首选项中的改动是会影响到pyshark这个库的设置的。是否打开重组IPv4数据包选项会影响到UDP流的追踪结果(这很显然啦,毕竟两个选项下udp的DATA大小都不一样了)。
直接贴一手队友的代码(开启重组数据包的选项):

import pysharkdef get_jpeg(data, cnt):start = data.find('ffd8ff') #jpg文件头data = data[start:]l = len(data)//2bs = int(data, base=16).to_bytes(l, 'big')with open(f'jpgs/{cnt}.jpeg', 'wb') as f:f.write(bs)pcap = pyshark.FileCapture('lx100.pcap', display_filter='udp', include_raw=True, use_json=True)
cnt = 0
for p in pcap:if p.highest_layer == 'DATA_RAW':data = str(p['UDP'].get('payload_raw')[0])if data.endswith('ffd9'): # jpg文件尾cnt += 1get_jpeg(data, cnt)

从Wireshark抓包来看IP分片相关推荐

  1. wireshark抓包vx ip

    使用工具: Wireshark 可以直接搜索官网获取,个人用的免费的,也可以直接在kali中也是可以直接用的. 正文: 通过wireshark进行抓包,需要拨打电话,无需接通,我们设置一下过滤的条件即 ...

  2. Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程

    整体而言,RTSP 通常工作于可靠的传输协议 TCP 之上,就像 HTTP 那样,用于发起/结束流媒体传输,交换流媒体元信息.RTP 通常工作于 UDP 之上,用于传输实际的流媒体数据,其中的载荷格式 ...

  3. Wireshark抓包—maybe caused by 'IP chechsum offload'?

    如题,使用Wireshark抓包,发现IP的校验和都是0,这样的数据包看起来很不爽. 这是由于网卡的引起的,网卡设置"IP chechsum offload"为Enable,这样操 ...

  4. WireShark抓包,may be caused by ip checksum offload的解决办法

    From: http://blog.csdn.net/yanjiee/article/details/8051494 今天在用WireShark抓包的时候,发现由本机发出去的包都是黑底红字,点进去看了 ...

  5. TCP/IP详解卷1 - wireshark抓包分析

    TCP/IP详解卷1 - 系列文 TCP/IP详解卷1 - 思维导图(1) TCP/IP详解卷1 - wireshark抓包分析 引言 在初学TCP/IP协议时,会觉得协议是一种很抽象的东西,通过wi ...

  6. Wireshark抓包分析微信功能----tcp/ip选修课期末大作业

    分析相关功能所抓取的数据包和完整大作业报告(word版)均已上传至Wireshark抓包分析微信功能----tcp/ip选修课期末大作业-网络监控文档类资源-CSDN文库 适合Wireshark入门的 ...

  7. Wireshark抓包工具使用教程以及常用抓包规则

    Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的,所以今天讲述的内容可能无法直接帮你解决问题,但 ...

  8. wireshark 抓包工具

    Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的,所以今天讲述的内容可能无法直接帮你解决问题,但 ...

  9. Wireshark抓包工具使用教程以及常用抓包规则 ——Powered By 死性不改

    原文地址: http://www.clxp.net.cn/article.asp?id=2288 内容: Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具 ...

最新文章

  1. 用notepad++怎样批量添加引号
  2. begin.lydsy 入门OJ题库:1101、1102:那些四位数、那些四位数之二
  3. 互联网晚报 | 9月2日 星期四 | 小米汽车有限公司正式成立;唯品富邦消费金融获批开业;恒大举行保交楼军令状签署大会...
  4. (19)Zynq FPGA TTC定时器介绍
  5. VS2013 启用 angularjs 智能提示 Intelligence
  6. 网络近端串扰测试软件,干货 如何使用DSP技术进行网线近端串扰测试
  7. JAVA命令行运行时设置参数
  8. linux aix试题,《aix-linux考试试题.xls》-支持高清全文免费浏览-max文档
  9. 使用python和Modbus协议控制YK-08继电器
  10. PHP获取汉字笔画数功能
  11. 游戏开发人员需要了解的5种ASO技术,苹果游戏aso优化
  12. 开机出现RUNDLL加载:C:WINDOWS\downlo~1\Cnsmin.dll时…
  13. POI解析docx与doc文档中的难点归纳
  14. mysql 修改校对规则_调整MYSQL校对规则
  15. 成绩不好的穷孩子,该做出选择了
  16. 用Origin找两曲线的交点
  17. 阿里云云效流水线教程
  18. 2018年 应届毕业生 安卓开发工程师 求职准备
  19. 服务器运行失败win10音频,Win10系统提示音频服务未运行的解决方法
  20. Jenkins 登录忘记用户名和密码

热门文章

  1. 最优化算法对偶单纯形法的matlab实现(对偶单纯形法看这一篇就够了)
  2. javaScript中Float精度计算
  3. 一文学会编写用户故事 (User Stories)
  4. [转载] 周富裕-“鸭脖子”们的资本春天
  5. 前端vue项目-关于下载文件pdf/excel
  6. 使用Docker部署web项目
  7. 离散数学实验笛卡尔乘积C语言,离散数学计算笛卡尔乘积C++或C语言实验报告.doc...
  8. Visual Studio 未能正确加载包问题
  9. 在网上看到了一个实现财务自由的25倍法则
  10. insert into select 插入不进去数据