Wireshark

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wireshark相关的知识,希望对你有一定的参考价值。

参考技术A Wireshark作为网络工具,一直被推崇;wireshark可以通过TCP的端口号的个数,或者Stream index的个数,来判定有几个线程;可以通过分段分片的消息,判定是否分片;可以通过mss判定MTU的大小。

抓eNb的WireShark pcap

tcpdump -p sctp -i eth2 -w aa.pcap

epc内部抓不同口,开两个ssh,抓取S1U和SGI的数据包

tcpdump -i eths1u -s 0 -w s1u.cap

tcpdump -i ethsgi -s 0 -w sgi.cap

Wireshark的时序图产生一个TCP序号vs.时间的图形。

在Wireshark的菜单Statistics ->TCP Stream Graph -> Time-Sequence Graph下,有两种格式的时序图,stevens和tcptrace。Stevens时序图描述了流量(序号)随着时间的变化,主要用于查看流量变化的情况,是否有中断、丢包、大时延的情况,命名取自W.Richard Stevens写的经典书籍《TCP/IP协议详解》。

Tcptrace时序图除了stevens时序图的内容外,还记录了对端ACK值和接收窗口的变化,内容较stevens时序图要丰富。Tcptrace原是Ohio University的Shawn Ostermann写的一个工具。

正常情况下,如果TCP速率稳定,那么在stevens时序图上看到的将是一条笔直上升的斜线,它的斜率等于速率,下面是放开限速的情况下的速率图,速率为100Mbps。

最好的情况下对应的WireShark的抓包

相比Stevens时序图,tcptrace时序图增加了对端ACK值和接收窗口变化的序号。如下图,中间黑色的粗线代表了发送的包,下方浅色的线代表了上一个ACK确认的包序号,上方浅色的线表征了TCP窗口,它等于上一个TCP ACK序号再加上TCP链路的window size。

下图为限速的情况下的序列图,下行限速1Mbps:

TCP segment of a reassembled PDU指的不是IP层的分片,IP分片在wireshark里用Fragmented IP protocol来标识。TCP segment of a reassembled PDU指TCP层收到上层大块报文后分解成段后发出去。

数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生。

网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意。

有些高层因为某些原因就会要求我这个面包不能切片,我要完整地面包,所以会在IP数据包包头里面加上一个标签:DF(Do not Fragment)。

这样当这个IP数据包在一大段网络(水管里面)传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包,然后返回一个错误信息给发送者。

TCP数据丢弃会造成网络丢包的发生

在TCP传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len。也可以说,后一个包的Seq会大于或等于前一个包的Seq。当Wireshark发现后一个包的Seq号小于前一个包的Seq+Len时,就会认为是乱序了,因此提示 [TCP Out-of-Order] 。如图所示,3362号包的Seq=2685642小于3360号包的Seq=2712622,所以就是乱序。

小跨度的乱序影响不大,比如原本顺序为1、2、3、4、5号包被打乱成2、1、3、4、5就没事。但跨度大的乱序却可能触发快速重传,比如打乱成2、3、4、5、1时,就会触发足够多的Dup ACK,从而导致1号包的重传。

当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生了一些重复的Ack。Wireshark会在这种重复的Ack上标记[TCP Dup ACK] 。

以图为例,服务器收到的7号包为“Seq=29303, Len=1460”,所以它期望下一个包应该是Seq+Len=29303+1460=30763,没想到实际收到的却是8号包Seq=32223,说明Seq=30763那个包可能丢失了。因此服务器立即在9号包发了Ack=30763,表示“我要的是Seq=30763”。由于接下来服务器收到的10号、12号、14号也都是大于Seq=30763的,因此它每收到一个就回复一次Ack=30763,从图中可见Wireshark在这些回复上都标记了[TCP Dup ACK]。

当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)。以图6为例,客户端收到了4个Ack=991851,于是在1177号包重传了Seq=991851。

如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上[TCP Retransmission]。以图为例,客户端发了原始包之后,一直等不到相应的Ack,于是只能在100多毫秒之后重传了。 

wireshark的配置

参考技术A

除了官网,很少有文章来说wireshark的配置的,由于研究需要,我们需要了解wireshark的配置,所以把官网的一些资料翻译下。
说明本文主要翻译官网的内容,结合自己的理解可能有所更改,也许有些错误,请谅解。

也许是软件本身比较复杂的原因,导致wireshark的配置非常多,在不同的文件夹下面,导致理解起来非常麻烦。

配置文件/文件夹 描述 unix/linux 文件夹 windows 下
1)preferences 对话框的偏好设置 /etc/wireshark.conf $HOME/.wireshark/preferences %WIRESHARK%\\wireshark.conf, %APPDATA%\\Wireshark\\preferences

2)recent 最近GUI设置(最近文件列表) $HOME/.wireshark/recent %APPDATA%\\Wireshark\\recent

3)cfilters 抓包过滤 $$HOME/.wireshark/cfilters %APPDATA%|%WIRESHARK%\\Wireshark\\cfilters

4)dfilters 显示过滤器 $HOME/.wireshark/dfilters %APPDATA%|%WIRESHARK%\\Wireshark\\dfilters

5) colorfilters 颜色规则 $HOME/.wireshark/colorfilters %APPDATA%|%WIRESHARK%\\Wireshark\\colorfilters

6) disabled_protos 禁止协议 $HOME/.wireshark/disabled_protos %APPDATA%|%WIRESHARK%\\Wireshark\\disabled_protos

7)ethers 以太网名称解析 /etc/ethers $HOME/.wireshark/ethers %APPDATA%|%WIRESHARK%\\Wireshark\\ethers

**8)manuf ** 以太网名称解析 /etc/manuf $HOME/.wireshark/manuf %APPDATA%|%WIRESHARK%\\Wireshark\\manuf

9) 主机 IPV4和IPV6名称解析 /etc/hosts ,$HOME/.wireshark/hosts %APPDATA%|%WIRESHARK%\\Wireshark\\hosts

10) subnets IPV4子网名称解析 /etc/subnets $HOME/.wireshark/subnets %APPDATA%|%WIRESHARK%\\Wireshark\\subnets

11)ipxnets IPX名称解析 /etc/ipxnet $HOME/.wireshark/ipxnets %APPDATA%|%WIRESHARK%\\Wireshark\\ipxnets

12)plugins 插件目录 /usr/share/wireshark/plugins /usr/local/share/wireshark/plugins $HOME/.wireshark/plugins %APPDATA%|%WIRESHARK%\\Wireshark\\plugins

13)temp 临时文件 环境变量:TMPDIR 环境变量:TMPDIR 或TEMP

windows下的目录说明:
%APPDATA%指向个人配置文件夹,例如:( C:\\Documents and Settings\\<username>\\Application Data 详细信息请参见: 第A.3.1节“Windows配置文件” ),

%WIRESHARK%指向Wireshark程序文件夹,例如: C:\\Program Files\\Wireshark

preferences/wireshark.conf
这个文件包括wireshark的偏好配置,包括默认的抓包和显示包等,简单的text语句显示格式如下:
variable:value
在程序启动的时候读取这个配置,在你更改“首选项”的时候将数据写入到文件。
可以看下界面,内容是相当丰富。

最近配置,此文件包含各种GUI相关设置,如主窗口位置和大小,最近的文件列表等。它是一个包含以下形式语句的简单文本文件:

variable:value

此文件包含已经定义和保存的所有捕获过滤器。它由一行或多行组成,每行包括以下格式:
"<filter name>" <filter string>
在捕获过滤器对话框中按“保存”按钮时保存到文件,程序启动时候读取配置

此文件包含已经定义和保存的所有显示过滤器,它由一行或多行组成,每行包含以下格式:
"<filter name>" <filter string>

此文件包含已经定义和保存的所有滤色器,它由一行或多行组成,每行包括以下格式:

程序启动时候读取,在颜色规则对话框中设置保存按钮的时候保存。

每行表示一个禁止的协议名,下面给出一些列子:

当Wireshark尝试将以太网硬件地址转换为名称时,它会查询 表A.1“配置文件和文件夹概述”中 列出的 文件 。如果在/etc/ethers中找不到地址,Wireshark将查找$ HOME /.wireshark/ethers

这些文件中的每一行由一个硬件地址和由空格分隔的名称组成。硬件地址的数字由冒号(:),短划线( - )或句点(。)分隔。以下是一些例子:

启动时候读取,但是不会写。

Wireshark使用 表A.1“配置文件和文件夹概述”中 列出的文件将 以太网地址的前三个字节转换为制造商名称。此文件具有与ethers文件相同的格式,但地址长度为三个字节。

一个例子是:

启动时候读入,但是不写。

Wireshark使用 表A.1“配置文件和文件夹概述”中 列出的 文件 将IPv4和IPv6地址转换为名称。
此文件的格式与Unix系统上通常的/ etc / hosts文件相同。
一个例子是:

只加载,但是不写入。

Wireshark使用 表A.1“配置文件和文件夹概述”中 列出的文件将 IPv4地址转换为子网名称。如果未找到来自hosts文件或DNS的完全匹配,Wireshark将尝试部分匹配该地址的子网。

此文件的每一行都包含一个IPv4地址,一个仅由\'/\'分隔的子网掩码长度和一个用空格分隔的名称。虽然地址必须是完整的IPv4地址,但随后会忽略超出掩码长度的任何值。

一个例子是:

部分匹配的名称将打印为“subnet-name.remaining-address”。例如,上面子网下的“192.168.0.1”将打印为“ws_test_network.1”; 如果上面的掩码长度是16而不是24,则打印的地址将是“ws_test_network.0.1”。

此文件中的设置在程序启动时读入,并且从不由Wireshark写入。

Wireshark使用 表A.1“配置文件和文件夹概述”中 列出的 文件 将IPX网络号转换为名称。

一个例子是:

此文件中的设置在程序启动时读入,并且从不由Wireshark写入。

Wireshark在 表A.1“配置文件和文件夹概述”中 列出的目录中搜索插件 。按列出的顺序搜索它们。

如果你开始一个新的捕获并且没有为它指定文件名,Wireshark使用这个目录来存储该文件; 请参见 第4.7节“捕获文件和文件模式” 。

如果你开始一个新的捕获并且没有为它指定文件名,Wireshark使用这个目录来存储该文件; 请参见 第4.7节“捕获文件和文件模式” 。

以上是关于Wireshark的主要内容,如果未能解决你的问题,请参考以下文章

Wireshark抓取Android数据包

2022-渗透测试-6个最常用的工具

网络协议分析仪tcpdump和wireshark使用

高分:Wireshark使用教程

几种安全工具库的简介及部分相关使用教程

抓包工具都有啥