如果希望查看网卡的IP地址信息,就可以在工具栏上选择“捕获选项”,这样就可以打开如图1-3所示的Wireshark捕获窗口。
图1-3 Wireshark的工具栏 在这个窗口中每个网卡左侧都有一个
三角形按钮
,单击这个按钮就可以显示详细信息,这些信息中最有用的就是IP地址
“统计”→“对话”
,然后在打开的“对话”窗口中选中“IPv4”选项卡。如图1-9所示,这个选项卡以一个表格的形式显示图1-10 Wireshark中的对话列表
图1-11 启用了“解析网络地址”之后的数据包细节面板
现在我们返回到“对话”窗口中,这时里面的IP地址没有任何的变化。Wireshark为了方便我们自行选择查看IP地址还是域名,在这个窗口的左下方有一个“解析名称”的复选框
,只有当选中了这个复选框之后,里面的IP地址才会被解析为域名,如图1-12所示。
图1-12 启用了“解析网络地址”之后的会话列表
伯克利包过滤中的限定符有下面3种
限定符 | 描述 | 默认值 | 示例 |
---|---|---|---|
type | 表示指代的对象,如IP地址、子网或端口等。 | 默认为host | host 192.168.1.1 表示主机名或IP地址,net 表示子网,port 表示端口 |
dir | 表示数据包的传输方向,如源地址或目的地址。 | 默认为src or dst | src 表示源地址,dst 表示目的地址。例如,192.168.1.1 表示源或目的地址为192.168.1.1的数据包 |
proto | 表示与数据包匹配的协议类型。 | 无默认值 | 常见的协议包括ether(以太网)、ip(互联网协议)、tcp(传输控制协议)、arp(地址解析协议) |
图2-2 IP数据包头的格式
选择菜单栏上的“捕获”→“选项”按钮。
图2-3
(2)如图2-4所示,在“所选择接口的捕获过滤器”后面的文本框中填写字符串形式的过滤器。
图2-4 Wireshark中设置捕获过滤器 这个编写的过滤器如果不正确的话,文本框的颜色会变成粉红色,如果正确的话则为绿色。
图2-5给出了一个正确的过滤器。
图2-5 一个设置好的捕获过滤器
在数据包列表处选中一个数据包,然后在数据包详细信息栏处查看这个数据包的详细内容,这里会以行的形式展示数据包的信息,当我们选中其中一行时(见图2-11),例如IP地址,那么在状态栏处就会显示出该数据包该行对应的过滤器表达式。
图2-11 在状态栏处显示的过滤器表达式
我们以用时间分割为例,将每隔10秒捕获的数据保存为一个文件,使用的方法为勾选“自动创建新文件,经过…”,然后勾选下方的第2个复选框,在文本框中输入10,单位选择为“秒”(见图3-3)。
图3-3 “Wireshark·捕获接口”中“输出”选项 选择完毕之后,单击“开始”捕获数据包,这时Wireshark就会将每隔10秒捕获到的数据包单独的保存成文件。图3-4给出了保存文件的示例。
Wireshark中提供了类似的功能,但你选择了多文件输出的时候,如果不希望这个文件的个数一直在增加,可以选择使用环形缓冲器,这样Wireshark就不会不断地产生新的文件。具体的设置如图3-5所示。
图3-5 环形缓冲器的使用
单击菜单栏上的“分析”→“显示过滤器”
图3-11 Wireshark中的显示过滤器
单击这个对话窗口左下方的“+”按钮,在左侧“新建显示过滤器”中输入过滤器的名称(例如baidu),在右侧输入“显示过滤器”的内容,我这里输入的是ip.addr==www.baidu.com(见图3-12),完成之后单击OK按钮。
图3-13 在Wireshark中的添加一个显示过滤器
步骤 | 描述 | 详细过程 |
---|---|---|
1 | 判断服务器是否在同一局域网 | 操作系统将自己的IP地址和子网掩码用二进制表示并进行与运算,确定所在子网。例如,IP地址192.168.1.10和子网掩码255.255.255.0的与运算得到子网192.168.1.0。 |
2 | 寻找网关并转换IP地址为MAC地址 | 如果目标服务器不在同一局域网内,客户端需要找到网关(如192.168.1.1)。然后通过ARP协议将IP地址转换为MAC地址,以便局域网中的交换机能识别并转发数据包。 |
3 | 建立与服务器的TCP连接 | 使用TCP协议的三次握手建立客户端和服务器之间的连接。 |
4 | 应用程序构造HTTP请求 | 操作系统完成TCP连接后,应用程序负责构造HTTP请求数据包。这个阶段可能会有延迟,因为应用程序处理请求需要时间。 |
5 | 服务器响应及传输时间 | 客户端发送请求后,数据包传送到服务器并得到响应。这个过程包括数据传输时间和服务器应用程序的响应时间。 |
表7-1 与子网掩码IP地址对应十进制,二进制
我们平时使用的时间格式有两种,一种是常用的某年某月某日,称为绝对格式。另一种就是形如秒表上的显示,这个示数表示的是经过了多久,例如2分21秒,称为相对格式。 默认情况下,Wireshark中提供了一个显示捕获数据包时刻的“Time”列(见图7-13)。这个列中显示的是相对值,捕获到第一个数据包的时间定义为零点,之后捕获到数据包的时间值都是距离这个零点的时间间隔,单位为微秒。
图7-13 Wireshark中的Time列
Wireshark为了能够更好地对数据包进行分析,还提供了多种时间的显示方式。如果要修改这些显示方式的话,可以在菜单栏上依次单击“视图”→“时间显示格式”,Wireshark中提供的包括如图7-14所示的选项。
图7-14 Wireshark中的“时间
只使用某一种时间格式的话不太容易看出数据包之间的关联,但是来回切换时间格式又过于烦琐。这时我们就可以选择在原有时间列的基础上再添加新的列,这个列用来显示当前包与前面包的时间间隔,具体的步骤如下。
图7-15 Wireshark中的首选项
图7-16 在Wireshark中添加新的一列
如图7-17所示,我们在类型里选择使用Custom类型,在字段处输入“tcp.time_delta”,最后在字段发生处添加一个“0”。
图7-17 添加列的内容
在数据包列表面板中已经多了一个名为“tcp.time_delta”的列,但是现在该列还不能正常工作。我们还需要完成如下的步骤。
图7-18 勾选“Calculate
(3)单击“OK”按钮。这时再查看数据包列表面板就可以看到新的一列已经起作用了。
在默认情况下,Wireshark会以捕获第一个数据包的时间作为原点。但是我们也可以自行将某一个数据包定义为原点,具体的方法是在一个数据包上单击鼠标右键,在弹出的菜单上选中“设置/取消设置时间参考”,此时这个数据包的时间列就会显示为“REF”。如果我们使用了相对时间格式的话,它之后的所有数据包都会将这个数据包的捕获时间作为原点。
在整个上网过程中,一共可以分成4个阶段,但是由于其中的ARP阶段位于内网,而且速度非常快,因此通常不会引起网络延迟,这里只考虑后面的3个阶段,分别是网络传输延迟、客户端应用程序引起的延迟和服务器应用程序引起的延迟。需要注意的一点是,这种延迟分类的方法是基于Wireshark捕获数据包得出的。图7-19中显示了上网过程中捕获到的数据包。
图7-19 上网过程中产生的数据包
这5个数据包的含义如图7-20所示,其中①②③④⑤分别对应着图7-19中的第9、10、11、12、13这几个数据包。
图7-20 客户机与服务器的通信过程
当发生网络延迟时,我们首先需要考虑的就是传输线路导致的延迟。如图7-21所示,我们首先来查看捕获到的TCP 3次握手中的第2个数据包,它的tcp.time_delta值为0.062,这个值是由3个时间共同组成的:
图7-21 TCP 3次握手中的第2个数据包
从客户端到服务端的时间; 服务端操作系统接收TCP 3次握手的syn请求,并回应一个(syn,ack)回应; 从服务端到客户端的时间。 考虑操作系统在处理TCP 握手时的时间很短,这个值可以看作是由第一个和第 3 个时间组成的,也就是数据包在线路上传输所花费的时间。如果这个值较大的话,则说明线路传输时出现了延时,这个原因可能是由服务端和客户端之间的设备造成的。
菜单栏上的“帮助”→“关于Wireshark”,打开“关于Wireshark”对话框。如图16-1所示,在这个对话框中显示了当前版本所支持的所有工具,如果在这个对话框中显示了“with Lua 5.x”的话,表示已经内嵌了Lua的解释环境。
图16-1 Wireshark中的Lua版本
TShark -v来查看。如图16-2所示,我们可以看到这个Tshark和Wireshark一样都支持Lua5.2.4。
图16-2 TShark -v来查看Lua版本
Tshark中,可以使用如下的命令查看每个网卡的编号: tshark -D
使用第4块网卡来捕获数据,为了加快捕获的速度,这里使用-s参数来表示只捕获数据包的前512个字节数据: tshark -s 512 -i 4
和Wireshark一样,Tshark还支持捕获过滤器和显示过滤器的使用,这两种过滤器的语法也和Wireshark中规定的一样,例如下面就使用了目标端口为80的过滤器: tshark -s 512 -i 4 -f 'tcp dst port 80' 捕获到的数据包如图17-3所示。
图17-3 tshark捕获到的数据包
Tshark中还提供了强大的统计功能,这个功能通过参数-z来实现,这个参数后面需要使用Tshark所指定的值,可以使用如下命令: tshark -z -h Tshark所有可以使用的值如图17-4所示。
图17-4 tshark的统计功能
使用“io,phs”作为-z参数的值,这里面我们添加了-q来指定不显示捕获的数据包信息: tshark -i 4 -f“port 80” -q -z io,phs 执行该命令的结果如图17-5所示。
图17-5 tshark的统计结果
如果你希望深入地了解Tshark的功能,可以访问https://www.wireshark.org/docs/man-pages/tshark.html来学习。
Dumpcap也是Wireshark中自带的一个命令行工具,这种工具的优势就在于对资源的消耗较小。你可以使用dumpcap.exe -h来查看它的帮助文件。
图17-6 Dumpcap的帮助文件
使用Wireshark在捕获数据包时得到的文件可能会很大,Editcap就可以将这种大文件分割成较小的文件。另外,Editcap也可以通过开始时间和停止时间来获取捕获数据包文件的子集,删除捕获数据包文件中重复数据等。 同样我们了解这个工具最好的办法还是查看它的帮助文件,使用Editcap -h可以看到(见图17-7)。
图17-7 Editcap的帮助文件
参数 | 描述 | 使用示例 | 功能 |
---|---|---|---|
-r | 保留原始文件 | editcap -r Traces.pcapng packetrange.pcapng 1-2000 | 保留输入文件Traces.pcapng,并将其中的前2000个数据包保存到packetrange.pcapng |
-c | 按数量拆分文件 | editcap -c 2000 Traces.pcapng SplitTrace.pcapng | 将文件Traces.pcapng按每2000个数据包拆分成多个文件,保存为SplitTrace.pcapng |
-d | 去除重复数据包(比较当前数据包和前5个) | editcap -d Traces.pcapng nodupes.pcapng | 检测并去除文件Traces.pcapng中的重复数据包,保存为nodupes.pcapng |
-D | 去除重复数据包(指定范围) | editcap -D 10000 Traces.pcapng nodupes.pcapng | 可以指定范围(0~100000)来检测并去除Traces.pcapng中的重复数据包,保存为nodupes.pcapng |
Mergecap的功能比较单一,它主要的功能就是将多个文件合并成一个文件,最基本的语法为: mergecap –w infile1.pcapng infile2.pcapng … 也就是mergecap后面跟多个文件名,其中的第一个是其他文件合并生成的。
参数 | 描述 | 输出单位 |
---|---|---|
-t | 输出包文件的类型 | - |
-E | 输出包文件的封装类型 | - |
-c | 输出包的个数 | - |
-s | 输出包文件的大小 | byte |
-d | 输出所有包的总字节长度 | byte |
-u | 输出包文件中包的时间周期 | second |
-a | 输出包文件中包的起始时间 | - |
-e | 输出包文件中包的结束时间 | - |
-y | 输出包文件中包的平均速率 | byte/s |
-i | 输出包文件中包的平均速率 | bit/s |
-z | 输出包文件中包的平均字节长度 | byte |
-x | 输出包文件中包的平均速率 | packet/s |
图17-8 使用Capinfos查看数据包的信息