环境准备
为了确保您能顺利跟随本指南进行操作,请准备好以下环境:
- 操作系统:Ubuntu 24.04 LTS 桌面版(其他如22.04、20.04等主流版本也基本适用)。
- 软件工具:Wireshark 最新稳定版。
- 权限要求:需要一个具有
sudo权限的用户账户。
Wireshark是什么?
Wireshark是一款开源、跨平台的网络协议分析器。它就像一台用于网络世界的“显微镜”,能够捕获流经网卡的数据包,并将其内部细节(从底层以太网帧到高层应用数据)层层解析并展示出来。
对于网络管理员、开发者或安全工程师而言,Wireshark是排查故障、调试程序和分析流量的必备工具。同时,它也是初学者直观学习TCP/IP等网络协议的最佳途径之一。
在Ubuntu上安装与配置Wireshark
在Ubuntu等Linux系统上,我们推荐使用命令行进行安装,高效且准确。
1. 安装Wireshark
打开终端,依次执行以下命令:
# 更新软件包列表
sudo apt update
# 安装Wireshark(包含图形界面和命令行工具tshark)
sudo apt install -y wireshark
安装过程中,会弹出一个配置窗口,询问“是否允许非超级用户捕获数据包?”。请使用键盘方向键选择“是”,然后按回车确认。这一步是关键,它通过权限配置,允许普通用户进行抓包操作。
2. 配置用户权限(关键步骤)
安装完成后,为了让当前用户能直接使用Wireshark抓包,需要将其加入wireshark组。
# 将当前登录用户添加到wireshark组
sudo usermod -aG wireshark $USER
执行此命令后,请务必注销当前用户并重新登录,或者重启电脑,以使新的组权限生效。
3. 验证安装
重启后,打开终端输入以下命令验证:
wireshark -v
如果成功显示Wireshark的版本信息,则说明安装成功。
初识Wireshark界面与核心概念
通过应用程序菜单搜索“Wireshark”启动,或直接在终端输入wireshark命令启动。
启动后,在开始抓包前,我们先快速了解三个核心窗口:

- 数据包列表面板:以表格形式按时间顺序列出所有捕获的数据包。包含编号、时间戳、源/目标IP、协议等信息摘要。
- 数据包详情面板:这是分析数据包最重要的区域。单击列表中的一个数据包后,此处会以树状结构分层解析其所有内容(如帧、以太网头、IP头、TCP/UDP头、应用数据等)。
- 数据包字节流面板:以十六进制和ASCII码格式显示数据包最原始的二进制内容。当你在详情面板点击某个字段时,这里会高亮对应的原始字节。
实战:抓取并分析你的第一个Ping包
现在,让我们通过分析一次ping命令,来亲手捕获数据包。
第一步:选择网卡并开始捕获
- 在Wireshark主界面的接口列表中,选择正在使用的网络接口(有线网络通常是
eth0,Wi-Fi通常是 wlan0)。可以通过观察接口名称后的流量波形图来判断活跃接口。
- 双击该接口,Wireshark会立即开始捕获所有经过此接口的数据包。
第二步:执行Ping操作
- 迅速打开一个新的终端窗口,输入命令:
ping -4 -c 4 www.baidu.com。这个命令会向百度的服务器发送4个ICMP请求包(Ping请求)。
第三步:停止捕获并过滤
- 当终端显示完Ping的回复结果后,回到Wireshark,点击工具栏左上角的红色停止按钮。
- 此时可能已捕获大量数据包。为了快速找到Ping包(ICMP协议),在顶部显示过滤器栏中输入:
icmp,然后按回车。界面将只显示ICMP协议的数据包,你应该能看到清晰的“请求”(Echo request)和“回复”(Echo reply)配对出现。
第四步:解读数据包
- 在数据包列表中点选一个ICMP请求包(Type为8),然后在数据包详情面板中逐层展开。
- 展开
Internet Protocol Version 4 层,可以看到源IP地址(你的电脑IP)和目标IP地址。
- 继续展开
Internet Control Message Protocol,可以看到 Type: 8 (Echo (ping) request) 等信息。
恭喜!你已经成功完成了第一次抓包分析!
核心技能:使用显示过滤器精准定位
面对海量数据,显示过滤器是你的“火眼金睛”。它可以在捕获完成后,帮助你快速筛选出感兴趣的数据。以下是一份常用显示过滤器速查表,供你参考。
Wireshark 常用显示过滤器速查表
| 过滤器用途 |
过滤器表达式示例 |
说明 |
| 基础IP/端口过滤 |
ip.addr == 192.168.1.1 |
过滤与指定IP地址相关的所有流量(源或目标) |
|
ip.src == 10.0.0.0/24 |
过滤源IP地址属于特定网段的数据包 |
|
tcp.port == 80 |
过滤TCP协议源或目标端口为80(HTTP)的数据包 |
|
!arp |
排除ARP协议数据包,减少干扰 |
| TCP协议分析 |
tcp.flags.syn == 1 |
过滤TCP SYN包,用于查看TCP连接请求(三次握手) |
|
tcp.analysis.retransmission |
非常实用,过滤出所有重传的TCP包,用于判断网络质量 |
|
tcp.flags.reset == 1 |
过滤TCP RST包,表示连接被重置 |
| HTTP/HTTPS协议 |
http.request.method == “GET” |
过滤HTTP的GET请求 |
|
http.response.code == 404 |
过滤HTTP状态码为404(未找到)的响应 |
|
tls.handshake.type == 1 |
过滤TLS/SSL握手的ClientHello报文 |
| 网络诊断 |
icmp.type == 3 |
过滤ICMP目标不可达错误 |
|
dns |
过滤DNS域名解析查询和响应 |
| 逻辑组合 |
(ip.src == 192.168.1.100) && (tcp.port == 443) |
组合过滤,只看来自某IP的443端口流量 |
|
http && !(ip.addr == 192.168.1.50) |
查看除特定IP外的所有HTTP流量 |

小技巧:在显示过滤器输入框内输入时,Wireshark会自动提示可用字段。如果表达式背景变绿,说明语法正确;如果变红,则说明有误。
总结
至此,你已经成功在Ubuntu上安装并配置了Wireshark,完成了第一次ICMP抓包分析,并掌握了显示过滤器的基本用法。接下来,可以尝试抓取一次访问普通HTTP网站产生的数据包,并使用过滤器tcp.port == 80观察TCP三次握手和HTTP请求/响应的完整过程,这将帮助你更深入地理解网络通信的实际流程。
|