WireShark
概述
参考
Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面,同时,还内置了一系列的汇总分析工具。
TCPDump 和 Wireshark,这两大利器把我们“看不见”的数据包,呈现在我们眼前,一目了然。这两个工具就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。
- tcpdump 仅支持命令行格式使用,常用在 Linux 服务器中抓取和分析网络包。
- Wireshark 除了可以抓包外,还提供了可视化分析网络包的图形页面。
tcpdump 虽然功能强大,但是输出的格式并不直观。所以,日常只用 tcpdump 来抓取数据包,不用来分析数据包,而是把 tcpdump 抓取的数据包保存成 pcap 后缀的文件,接着用 Wireshark 工具进行数据包的可视化分析。
Wireshark 视图
https://www.wireshark.org/docs/wsug_html_chunked/ChUseViewMenuSection.html
我们使用 tcpdump -i any port 10443 -nn -w demo-http.pcap 命令,把抓取的数据包保存到 demo-http.pcap 文件,再用 Wireshark 打开它,可以看到三个主要的窗口
- Packet List(包列表)
- Packet Details(包详情)
- Packet Bytes(包字节流)
Packet List 窗口

在 Wireshark 的页面里,可以更加直观的分析数据包,不仅展示各个网络包的头部信息,还会用不同的颜色来区分不同的协议。
添加新列
可以在下面的 Packet Details 窗口中找到想要显示的字段,右键点击该字段,选择“应用为列”(或者选中后使用 Ctrl+Shift+I 快捷键)。

所有列的信息可以点击 “Edit(编辑) - Preferences(首选项) - appearance(外观) - Columns(列)” 查看,并修改列内容和调整列的顺序。
Packet Details 窗口

在 包列表 窗口中选择某一个网络包后,在 包详情 窗口中,可以更清楚的看到这个网络包在协议栈各层的详细信息,主要是各种协议的 Header 信息和 Payload 信息。e.g. 以编号为 4 的 HTTP GET 的网络包为例子:
- 可以在数据链路层,看到 MAC 包头信息,如源 MAC 地址和目标 MAC 地址等字段;
- 可以在 IP 层,看到 IP 包头信息,如源 IP 地址和目标 IP 地址、TTL、IP 包长度、协议等 IP 协议各个字段的数值和含义;
- 可以在 TCP 层,看到 TCP 包头信息,比如 Flags、Window、etc. 的数值和含义;
Packet Bytes 窗口

与 Pakcet Details 窗口不同,Packet Bytes 窗口展示的是该包的最原始数据内容,i.e. 数据的 Bytes 信息,并没有那些 WireShark 附加的描述性信息。整体分两大部分:
- 左侧是默认以十六进制表示的字节流信息(右键点击可以更改展示的类型)(每个 Bytes 占 8 bit);
- 右侧是字节流中每个字节对应 ASCII 表 的字符。
e.g. 图中粉框中的 47 45 54 对应的就 ASCII 表的 GET 这几个字符。
右侧有些杂乱无章的字符是因为一个包中的 Header 的每个部分的信息并不总是占用 8bit
- e.g. IP Header 中的 version 长度占用 4bit,0100(e.g. 十进制的 4);HL 长度占用 4bit,0101(e.g. 十进制的 4)
- 连在一起是 01000101 对应的十六进制为 45,对应的 ASCII 字符为 E。
- 所以这里面的 E 并不是指报文里包含了 E 字符,只是一种以每个 Bytes(8bit) 进行分割的展示方式
在我们使用 TCPDump 抓 HTTP 包的时候,可以看到这种命令:
tcpdump -nn 'tcp[20:2]=0x4745',其中tcp[20:2]表示从 TCP 头的第 20 个字节开始,读 2 个字节的数据。图中蓝色背景选中 20 个字节是 TCP Header 部分,后面俩字节是 47 45,i.e. GE 两个字符。所以这个抓包命令就是在抓 GET 请求的数据包。这就是 WireShark 的 Packet Bytes 窗口 中信息的一个典型应用,分析流量中的 Bytes
WireShark 安装
WireShark 依赖 pcap,若使用 WireShark 便携包,那么需要手动安装 Npcap。
Protocol Streams(协议流)
https://www.wireshark.org/docs/wsug_html_chunked/ChAdvFollowStreamSection.html#ChAdvFollowStream
WireShark 将具有某些相同特征的多个数据包分为一组,称为 Protocol Stream(协议流),每条 stream 都有一个 Stream ID。若是 TCP 的包,则是 TCP Protocol Streams;若是 HTTP 的包,则是 HTTP Protocol Stream;以此类推。
WireShark 通过 Follow Protocol Streams(追踪协议流) 的行为实现 统计、etc. 很多功能
想要将多个数据包分为一组,通常要有一些前提条件,比如 TCP 流要保证这些数据包的 src port 和 dest port 且 src ip 和 dest ip 完全相同、etc.
现在 WireShark 可以为如下追踪如下协议的流:
- DCCP
- HTTP
- HTTP/2
- QUIC
- SIP Call
- TCP
- TLS
- UDP
- WebSocket
Statistics(统计)
https://www.wireshark.org/docs/wsug_html_chunked/ChStatistics.html
WireShark 提供了广泛的网络统计信息,可以通过 “Statistics(统计)” 菜单访问。
这些统计信息的范围从有关加载的捕获文件的一般信息(如捕获的数据包的数量)到有关特定协议的统计信息(例如,有关捕获的 HTTP 请求和响应数量的统计信息)。
Conversations(会话)
https://www.wireshark.org/docs/wsug_html_chunked/ChStatConversations.html
Conversations(会话) 是两个指定 Endpoint 之间的流量。例如,IP 会话是两个 IP 地址之间的所有流量、Ethernet 会话是两个 Mac 地址之间的流量、etc.
会话统计窗口中的标签会根据标签名的特征合并数据包,以形成统计信息,合并后的数据包将会被到同一个组中
- Ethernet 标签 # 合并 src mac addr 和 dest mac addr 相同的数据包
- IPv4 标签 # 合并 src ip 和 dest ip 相同的数据包
- UDP 标签/TCP 标签 # 合并 src port 和 dest port 相同;且 src ip 与 dest ip 相同的数据包,每个组的数据包当做同一条 Protocol Stream(协议流),具有相同的 StreamID。
- 比如,若总共 2000 个包,其中有一些包的 src ip:port 和 dest ip:port 一样,那么该统计-会话中的 UDP 的协议流将会小于 2000
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.