协议解析

Wireshark 最强大的功能之一就是协议解析功能,协议解析是由协议解析器完成。它将原始数据包拆分为相关数据段,并按照协议格式解析为

它是原始数据流与协议的翻译器。如果遇到新的协议可以用 C 语言或 Python 编写解析程序。注意: Wireshark 进行协议解析时,并不见得每次都会选择正确的协议解析器,尤其是当网络上的一个协议使用了不同于标准的配置的时候,一旦遇到这种情况,我们就需要手动更改。比如:FTP 协议原本应该使用 20,21 端口,却使用了 HTTPS 的 443 端口,这样可能将其解析为 HTTPS 协议,此时,可以通过查看 SSL 数据包中的数据字节区的 ASCII 码部分是否有相关有意义的明文出现,根据其中显示的 FileZilla Server 等明文,判断为 FTP 协议。此时,可以在需要转化类型的数据报上右键->解码为 选择合适的协议解码,注意:这样的设置只在本次软件使用时有效,下次启动时就恢复至原状态了。

Wireshark 是开源软件,可以通过下载查看其源代码来查看其解析错误的原因。

数据流追踪

TCP 数据报可以说是是我们日常分析中最常见的了,因此 Wireshark 为了方便我们分析,提供了将 TCP 数据报重组为易于阅读的形式。我们可以在一个 TCP 数据包上右键选择追踪流-> TCP 流,Wireshark 便将与之相关的数据包重组,弹窗显示出 HTTP 报文。

专家信息

菜单栏 -> 分析 -> 专家信息

是内置于 Wireshark 软件中最强大的工具之一,不但能在抓包过程中自动识别网络中发生的异常,甚至还能给出导致异常状况的原因, Wireshark 会把识别出来的事件按出故障概率的高低,通过 Expert Info 工具以事件类别的方式加以显示,同时还使用了颜色来加以区分。

信息类别:

  1. Errors:所抓数据识别出的严重错误,比如,感知到畸形(标准化配置不对)SPOOLSS 或 GTP 协议数据包,又或者识别到某些数据包的某种协议头部的某些字段值跟预期不符(比如,IPv4 数据包的 IP 包头中校验和字段值跟预期值不符合,即 IPv4 数据包通不过校验和检查)

    注意:川出现一两个畸形包时没问题,因为 Wireshark 的识别器也不是 100%准确的。

  2. Warnings:所抓数据识别出的一般性问题

  3. Notes:所抓数据识别出的可能会引发故障的异常现象

  4. Chats:此标签下的数据包都符合常规流量特征

  5. Details:此标签显示 Chats 标签事件的详情

  6. Packet Comments:把含有注释信息的数据包一一记录在案

可以通过专家信息对当前网络的稳定性或稳健性有一个了解。

errors,warnings,notes 这三个是最重要的,通过双击某个数据报,可以在数据列表区显示,也可以右键应用为过滤器,过滤查看。

认识 Errors 事件: Wireshark 感知到的子类 Error 事件,主要分为以下两种情况

  1. 校验和出错:既可能是 Ethernet 帧或者 IP 数据包真的通不过检验和检查所致,也可能是 checksum offload 参数方面的配置问题

    数据流动方向:网卡(接收)< - > CPU (处理) < - > Wireshark,为了减轻 CPU 的负担,校验和现在是放在网卡上做。网卡首先对到达自己的包,检验二层(链路层)的校验和,如果此校验和不对,直接丢弃,若正确,接收,再然后校验三层的校验和。所以一般情况下,Wireshark 抓不到校验和错误的问题,只有一种情况它会抓到:自己产生的数据包(因为自己产生的数据报被 CPU 处理时,校验和是空的,校验和由网卡负责,而 Wireshark 就是抓的 CPU 位置的数据包)

    校验和出错:某些操作系统支持 checksum offload(校验和计算下放)功能。为了节省 CPU 资源,操作系统把 IP、TCP、UDP 校验和计算功能下放给 NIC(网卡,network interface controller,也叫网络接口控制器,也叫网络适配器),数据包在出 NIC 的时候执行校验和计算。但是 Wireshark 会在数据到达 NIC 之前抓取数据包,此时 IP、TCP、UDP 校验和字段值并没有,于是会看到 Wireshark 感知到很多校验和有误之类的 Error 事件。而且这些校验和错误的数据包的源 IP 地址为本机 IP 地址。这样的 Error 事件可以忽略不考虑。也可以关闭 Wireshark IP、TCP 的校验和检查功能。 Wireshark 3.0.2 默认是关闭的(新版估计都默认关闭了,不确定的话,再按照下面操作一遍)

    操作方式:编辑(edit) -> 首选项(preference) -> 协议(protocol)-> Ipv4 -> 取消勾选 Validate the IPv4 checksum if possible。然后再对 TCP 也取消勾选那个。

  2. 伪造的数据包问题:一般是具体的应用层协议问题,也有可能是 Wireshark 的协议解析问题

认识 Errors 事件:总结

对于一个网络而言,穿梭于其中的数据包只要有百分之一、二的害群之马(即具备 Error 事件特征的数据包),不但会导致事故频发(比如 TCP 重传),而且会使网络变得很慢,因此只要网络用起来大致正常,Wireshark 是不可能抓到那么多真的害群之马的。

Warnings:所抓数据识别出的一般性问题。比如,感知到了存在 TCP 零窗 口、TCP window full、TCP 报文段失序、TCP 报文段丢失等现象,又或者 识别出了相关网络协议在运作时发出的数据包的内容与正常情况不一致。所 谓一般性问题几乎都是应用程序问题或通信问题。

认识 Warnings 事件: Wireshark 感知到的子类 Error 事件,主要分为以下三种情况

  1. 含 Reassembly 字样的几种子事件:大多是指 Wireshark 抓到了未能重组 的数据包。一般而言,这都是 Wireshark 协议解析器问题。
  2. 在 Summary 一栏里含 window 字样的子事件:几乎都是指 Wireshark 感知到了网络中存在 TCP zero windown 或 window full 问题,一般而言都是建立 TCP 连接的端到端设备忙不过来所致。
  3. 在 Summary 一栏里含 Segment 字样的子事件:Wireshark 生成 TCP 报文 段丢失事件信息,是因其未抓全隶属于某股 TCP 数据流的所有 TCP 报文段:生成 TCP 报文段失序事件信息,是因其感知到了 TCP 报文段未按发送主 机发出的顺序到达接受主机 这三种子事件都属于 TCP 故障,一般是由网络故障所引发

认识 Warnings 事件:总结

Wireshark 能感知数据包中的种种特征,比如窗口大小字段、TCP 报文在传输中是否失序、TCP 数据收到之后是否做出确认。但是请注意,Warnings 事件只是 Wireshark 自认为比较重要的事件,却也不可全信,比如说 Wireshark 未能抓取所有数据包,则必会生成 Warnings 事件,但这未必就是网络问题,可能只是抓包时机把握。

Notes:所抓数据识别出的可能会发故障的异常现象。比如,感知到了 TCP 重传。重复确认、以及快速重传等现象。虽然上述行为可能会对网络产生严重影响,但也属于 TCP 的正常行为,所以被归类在 Notes,提醒用户这些数据有导致问题的嫌疑。

认识 Notes 事件: Wireshark 感知到的子类 Error 事件,主要分为以下三种情况

  1. Summary-栏里含 Retransmissioyls、Fast Retrarmsmissions、DuplifateACK 字样的子事件:通常预示着网速慢)丢包或者通过 TCP 传输数据的主机的应用程序忙不过来。
  2. 在 Summary 一栏里含 Keep-Alive 字样的子事件:通常预示着 TCP 或者基 于 TCP 的应用程序的问题。
  3. 在 Summary 一栏里含 Time to live 字样的子事件:通常预示看路由问题

认识 Notes 事件:总结 Notes 事件的每一种子事件,并非是由定的募一种类型的网络故障所导致的,以 TCP 重传现象为例,可能是因为包错误)网络状态差(带宽低、延时高)、服务器或客户端停止响应等。Wireshark 只是通过 Expert Info 工具提示存在 TCP 重传现象,至于如何定位原因找到问题,还得靠自己。

Chats,可以统计各种数据包的个数,尤其是 TCP 的 SYN 的个数,可以判断是 否正在受到 SYN flood 的攻击。

总结:

  1. 有时 Wireshark 感知的 Warnings 事件无关紧要,但是识别出的 Notes 事件却偏偏会影响网络性能,所以排除故障时,需要关注内 在,切勿只看表面
  2. Wireshark 摆乌龙的情况时有发生,既可能是杯弓蛇影、谎报军情 误报故障;也有可能会一叶障目感知不到网络的异常状况。
  3. 所以 Wireshark 虽然智能,但也不过是个工具而已,解决网络故障 靠的还是网管人员的知识储备。

统计

捕获文件属性(统计摘要说明)

菜单栏 -> 统计 -> 捕获文件属性

对抓获的数据报进行全局统计

抓取数据包的文件名,长度,时间,抓包接口,还有一些抓包速度,大小,比例等统计信息。

协议分级

菜单栏 -> 统计 -> 协议分层

统计通信流量中不同协议占同一层次的百分比。通过这个工具的百分比可以对全网流量有直观的了解,整个网络中哪些流量占用多,哪些流量占用少。可以通过百分比查看网络异常,比如: ARP 流量一般是 0.0 几% 或 0.几% ,如果你看到网络中 ARP 流量为 10%或 20%,那么网络中大概率有 ARP 泛洪 攻击

使用 UDP 的一般有 DNS、OICQ,使用 TCP 的一般有 HTTP、SSL、Data

各字段讲解:

  1. 协议:数据包所归属的协议名称
  2. 按分组百分比:抓包文件所含数据包个数在每一种协议类型中的占比(同一层)
  3. 分组:每种协议类型数据包个数
  4. 按字节百分比:抓包文件所含数据包字节数在每种协议类型中的占比(同一层)
  5. 字节:每种协议类型数据包字节数
  6. 比特每秒:某种协议类型的数据包在抓包时段内的传输速率
  7. 结束 分组:隶属于该协议类型的数据包的纯粹数量。(举例:比如当 TCP 协议的 Packets 和 End Packets 数量分别是 13716 和 9425,这就表示抓取的数据中,以 TCP 封装数据总数是 13716 个,但只有 9425 个纯 TCP 数据包,也就是还有 4291 个数据包在 TCP 头部之后还紧跟了高层应用协议头部,比如 HTTP 头部)
  8. 结束 字节;隶属于该协议类型的数据包的纯粹字节数
  9. 结束 位每秒:隶属于该协议类型的数据包在抓包时段内纯粹传输速率

比如: 前后 1000 100,即: 后面比前面少得离谱 这种情况下,900 多个在传数据的包,很大程度上是基于 TCP 的攻击

端点与会话

端点是结点与结点之间,会话是一对一的,可以通过他们来找出发送流量,占用带宽大的或有异常行为的。

端点

罗列出所有二层、三层、四层节点数据统计信息,还可以从高到 低排列,通过这些统计信息,可以很好解释一下现象:

  1. MAC 地址少,IP 端点多:这种现象可能的原因是有一台路由器来负责转发所有进出本地 LAN 的 IP 流量,也就是说所有流量都是由某一个 IP 地址为网关做集中转发的。这属于正常现象。
  2. IP 地址少,TCP 端点(TCP 端口号)多:即 每个 lP 都试图建立或已经建立多条 TCP 连接。对于此现象,如果建立多条连接的 IP 端点是服务器,就属于正常现象,否则极有可能就是有人在发动网络攻击,比如 TCP SYN 攻击。

会话

  1. 窗口左下角 显示过滤器的限制复选框:该窗口将会显示经过显示过滤器过滤的信息
  2. 窗口左下角 解析名称复选框:用相应的名字取代窗口显示的信息
  3. Ethernet:观察具有不同 MAC 地址的主机之间发生过什么样的交流。通过此标签,可以观察是否出现了二层广播风暴,或者伪造 MAC 地址欺骗攻击等问题、
  4. IPv4/IPv6:观察具有不同 IP 地址主机之间有过什么样的沟通。通过此标签,可以观察极高曝光率的 IP 地址,判断流量的异常,判断是否有黑客工具在扫描网络,或者判断由于感染上蠕虫病毒持续发送巨量 Ping 包的主机。
  5. TCP/UDP:观察具有不同 IP 地址的主机之间建立的各种 TCP/UDP 会话。通过此标签,可以观察是否有某一台主机打开过多的 TCP/UDP 连接,对于单台而言打开 10-20 个连接应该是正常范畴,若连接过百,就可能有问题。或者判断是否有主机试图与稀奇古怪的 TCP/UDP 目的端口号建立连接,也就是所谓的 TCP/UDP 端口扫描。

分组长度

选择统计-> 分组长度

统计数据流量中包长度的分布,通过数据报长度的分布情况,对网络情况做一个大概的分析。

正常包的话,大部分为 40-2559,小型帧(小于 40)或巨型侦(大于 2559)攻击,当小于 40 或者大于 2559 的比例占到 5%或 10%时,有可能存在这种攻击。

可以通过显示过滤器输入协议类型,比如: arp, tcp 等,查看各类型协议的长度大概都是多大。

40-319:大部分都是小型帧,比如:

arp:一般是 40 或 50 多,为小型帧

icmp:ping 包一般 70 多到 90 多,别的可能到 100 多 200 多左右

dns:79 到 227 左右

tcp 的控制信息:50,60,70 等

320-2559:大型帧,一般为 tcp 碎片包一般 800,900,1000 多

TCP 和 IP 头部均为 20 字节,UDP 头部 8 字节,以太网帧 MTU 1500 字节,除去 TCP,IP 头部,还剩下 1460 个字节。

重点关注 1280-2559 长度的数据包,像这种较大的数据包,一般是用于数据传输,比如:http 下载,ftp 上传等,如果这种类型的数据包比较多,说明我们可能在看视频,浏览网页比较多,较小的数据包用传输控制信息。

图表分析

IO 图表

菜单 -> 统计 -> IO 图表

IO 图是 Wireshark 最高效也最强大的工具之一,它对网络中的吞吐流量进行实时的图形显示,用来分析网络性能

界面:

上半部分是图形显示区域,下边是配置区域。

下方列表是可供显示的 IO 图,可以看到有 8 列

  1. Enabled :显示此图与否
  2. Graph Name :图表名,双击鼠标左键,可以自定义
  3. Display Filter :显示过滤器,用来输入过滤语句,双击鼠标左键,可以自定义语句
  4. Color:图的颜色,双击鼠标左键,可以自定义
  5. Style:图表的类型,有 bar,dot,line 等,双击鼠标左键,可以自定义
  6. Y Axis:Y 轴的单位,双击鼠标左键,可以自定义 字节,比特 MAX():每个计时单位内,所传输数据包中相关参数的最高值 MIN():每个计时单位内,所传输数据包中相关参数的最低值 AVG():每个计时单位内,所传输数据包中相关参数的平均值 SUM():右边输入适当条件(如:ip.len),单位时间内,参数总和 COUNT FRAMES():统计在每个计时单位内,发生的匹配该条件的现象 COUNT FIELDS():每个计时单位内,所传输数据包中该字段出现的次数
  7. 后面两类还没动过... 左下角加减号可以自己增加或减少图,间隔是用来控制 x 的单位的,一天时钟复选框勾选,以一天当中具体时间来显示 x 轴,可以选择鼠标拖拽或缩放图表。

举例: 通过 IO Graphs 图形来反映对 xx Web 页面的访问量: 显示在不同时间内,访问 baidu 站点的次数。显示过滤器表达式为 http.host contains "xx"

测算端到端之间的吞吐量(主机 172.16.89.101 和 172.16.89.100 间的 IP 流量图): 显示过滤器语句 ip.addr eq 172.16.89.101 and ip.addr eq 172.16.89.100

添加更多的条件来观察数据流在传输过程中发生的变故: tcp.stream eq 16 and tcp.analysis.retransmission,反映某股数据流重传现象 tcp.stream eq 16 and tcp.analysis.zero_ window,反映某股数据流中的 TCP 零窗口现象 (tcp.stream eq 8 表示流编号等于 8 的,即:trace 中第 8 个 TCP 流) 注释: TCP 重传:TCP 重传现象预示着发生了丢包,说明网络卡或者其他与网络性能有关的问题。 TCP 零窗口:TCP 零窗口现象意味着 TCP 接收方或者发送方反映迟钝。

获悉某股 TCP 数据流中数据包的抖动情况

选中其中一个 TCP 包,右键-> 对话过滤器-> TCP,然后复制语句,打开 IO 图表,再写上 frame.time_delta_displayed 就可以了

数据流图

菜单 -> 统计 -> 流量图

将会话通信过程图形可视化出来,可以通过显示过滤器过滤想要查看的,再查看。

  1. All packets:所有数据包
  2. Displayed packets:经过过滤器过滤
  3. 流类型:All flow:所有数据或者经过过滤器的数据包生成总体数据流图、tcp flow:所有或者进过过滤器的包生成 TCP 标记、序列号、ACK 号以及报文段长度的 TCP 数据流图、UDP Flow 等
  4. 左下角 限制显示过滤器 复选框(暂时还不知道咋用)。

HTTP

  1. 分组计数器 Packet Counter:了解抓包文件中 HTTP 数据包的总数以及其中 HTTP 各类型请求数据包(post、get 等)和 HTTP 响应数据包(从 1xx 开始的响应状态码)数量及比率分别为多少。

  2. 请求序列 Request Sequences:主机请求访问的 Web 站点的分布情况,以及所访问的 Web 站点上的具体资源,指向资源的 URL

  3. 负载分配 Load Distribution:了解访问过哪些 Web 站点。

    注:可下载专业排除 HTTP 故障的软件 Fiddler

TCP 流图形(TCP Graph)

TCP Stream Graph 菜单中 Time-Sequence(Stevens)子菜单用法:

  1. 该工具不能在线实时生成统计信息,使用之前先停止抓包
  2. 具有方向性,需要选中一个隶属于需要分析的 TCP 数据流的数据包再生成图表,比如,要让此工具生成与 HTTP 下载流量有关的统计信息,就应该选择下行流量的数据包,即源 P 是公网,端口是 80,目标 IP 是私网,端口是随机的数据包。
  3. Stenvens 子菜单所生成的图形实际上反映的是,在单位时间内,受监控的 TCP 流在某个方向所传输数据的字节数。根据此可以判断某应用的下载或者上传速度。
  4. 需要放大图表中的某个区域,只需要用鼠标圈定该点所在的区域,缩小按减号
  5. 鼠标左键图表中的点,便可在主窗口中的数据包列表区域定位到与其对应的数据包
  6. 可在弹出的窗口调整相关的显示参数。

TCP Stream Graph 菜单中 Time-Sequence(tcp-trace)子菜单用法:

  1. tcp-trace 子菜单功能起源于 UNIX tcp dump 工具
  2. 可提供被监控 TCP 连接的诸多信息,包括 TCP 确认、TCP 重传、以及 TCP 窗口大小等。
  3. 也需要先停止抓,再分析数据,生成图表
  4. 此菜单反映的信息星及其丰富,可为网络排障诊断提供重要线索
  5. 可直观反映出诸多现象,比如,TCP 窗口的填充速度高于预期的大规模 TCP 重传等现象

一条曲线:表示单位时间内,受监控的 TCP,在某个方向上所传数据的字节数 另一条表示曲线:表示整个数据传输过程中 TCP 报文段的 TCP 接受窗口

吞吐量:不但能了解某条 TCP 连接的吞吐量,而且还能判断 TCP 连接是否稳定。

往返时间:能了解到某条 TCP 连接中特定方向上的所有 TCP 报文段的往返时间(RTT)。

窗口尺寸:能了解通过 TCP 连接传送数据时,发送方的窗口大小。

IPv4 Statistics

  1. All Address:生成有关 IP 地址的统计
  2. Destinations and Ports:生成 IP 地址在发包时所用的传输层协议以及端口号
  3. IP protocol Types:生成抓取数据中 IP 上层的协议统计。
  4. Source and Destination Addresses:生成源和目标 IP 地址统计信息。

命令行模式

使用命令行分析的优势

利用命令行对捕获文件进行调优分析

掌握命令行工具的常用命令

掌握命令行行工具与第三方辅助工具的使用方法

找到 Wireshark 的安装目录,下面有 tshark.exe 及其帮助文档 tshark.html,复杂网络情况,手工比较困难,可以使用编写脚本,这是就需要使用 命令行工具了。

要使用 tshark 等工具,需要切换至对应目录或将目录加入环境变量

命令行可以在 linux 中使用 grep、awk 等高效处理工具

如果需要对捕获文件的概述信息进行查看,可以使用 capinfos.exe

一般抓包之后,先看看捕获文件属性(summary),再看协议分级,掌握一下当前网络的大体情况,然后再干别的。

大体完了,细节处,在以后实战的时候,见到再完善。

参考资料: