简介:本资源是一份面向计算机网络初学者与实践教学场景的Wireshark抓包分析实验指导文档,聚焦网络协议原理理解与真实流量诊断能力培养。文档系统讲解Wireshark安装配置、界面分区功能(数据帧列表/协议解析/原始字节视图)、捕获过滤器(如ip.addr==192.168.5.8)设置、TCP流追踪(Follow TCP Stream)及多层协议解构方法,涵盖以太网帧、IPv4报头、TCP段等关键字段的逐项解读与实例分析。资源为单个Word文档(.doc格式),文件大小592KB,内容完整覆盖从启动捕获到协议深度解析的全流程,含大量截图标注与字段说明表格,便于课堂演示或自主实验复现。目前已有85人学习下载,适合高校《计算机网络》课程配套实验、网络运维入门训练及网络安全基础能力构建。
1. Wireshark 抓包不是“点开就看懂”,而是从物理层帧头到应用层明文的逐层解构实战
你刚装好 Wireshark,点下 Start,满屏跳动的 TCP、HTTP、DNS 包——但下一秒就卡在“这堆十六进制到底哪是 IP 地址?SYN 是啥?为什么 Follow TCP Stream 后全是乱码?”
这不是操作失败,是缺少一次真正落地的协议分层解剖训练。这份《计算机网络练习:Wireshark 捕获和分析数据包》文档,不是泛泛而谈的安装指南,而是一份按真实教学场景拆解的、带完整帧结构标注的实操笔记:它把一个 62 字节的 TCP SYN 帧,从 Ethernet II 头部的00:00:e2:5b:d4:61MAC 地址,一直剥到 IP 头里的 TTL=128、TCP 头里的 Flags=0x02(SYN 标志位),再到 HTTP 层的GET / HTTP/1.1明文请求——每一层都对应教材图示(如谢希仁《计算机网络》P122 IPv4 字段、P149 TCP 头部),每行字段都有中文释义+十六进制值+现实意义。它解决的不是“怎么打开 Wireshark”,而是“看到一个包,如何三秒内定位问题发生在哪一层”。适合正在啃《自顶向下》或备考 408 的学生、刚接手内网排查的运维新人、以及想甩掉“只会过滤不会归因”的开发工程师。文档里没有一句废话,所有截图都指向一个目标:让你合上文档后,能独立对着抓包结果,指着屏幕说:“这个包卡在三次握手第二步,因为 ACK 没回来——不是 DNS 解析慢,是防火墙拦了 SYN-ACK。”
2. 从零启动:安装、网卡选择与捕获前必设的三层过滤逻辑
Wireshark 的“简单易用”是个温柔陷阱——默认全量抓包,5 秒就能生成上万帧,新手直接淹没在噪音里。真正高效的抓包,必须在点击 Start 前完成三件事:确认驱动兼容性、锁定目标网卡、预置过滤规则。这三步漏掉任何一环,后续分析就是玄学。
2.1 驱动安装:WinPcap/Npcap 不是可选项,而是底层命脉
Wireshark 在 Windows 上依赖Npcap(WinPcap 的现代替代)才能访问原始网络接口。很多用户装完 Wireshark 发现“没有可用接口”,根本原因是 Npcap 未安装或安装时勾选了错误选项。
提示:下载 Wireshark 官方安装包(如
Wireshark-win64-4.2.7.exe)时,安装向导会默认勾选 “Install Npcap”,但务必手动勾选下方“Use Npcap in loopback mode (recommended)”——否则无法捕获本机 localhost 流量(比如调试本地 Web 服务时的 HTTP 请求将完全不可见)。
验证是否生效:安装完成后,在命令行执行
nmap -sS -p 80 127.0.0.1若返回80/tcp open http,说明 Npcap loopback 模式已启用;若报错Failed to open device,需重装并强制勾选该选项。
2.2 网卡选择:别只盯着“以太网”,要识别真实流量出口
Wireshark 主界面左上角的接口列表(如Ethernet,Wi-Fi,Loopback)看似直观,但实际常出现“选对网卡却抓不到包”的情况。原因在于:
- 虚拟网卡干扰:VMware/VirtualBox 创建的
VMnet1、vEthernet (WSL)等虚拟适配器会出现在列表中,但它们不承载真实外网流量; - 多网卡冲突:笔记本同时连 Wi-Fi 和有线时,系统可能将流量路由到未选中的网卡;
- USB 网卡识别异常:某些 USB 转 RJ45 网卡在 Npcap 下显示为
Adapter #3而非名称,需靠速率判断(1.0 Gbps 通常是有线,100 Mbps 可能是旧设备)。
实操判据:
- 先在 CMD 执行
ipconfig /all,记录当前活跃网卡的IPv4 地址(如192.168.1.102)和物理地址(MAC); - 回到 Wireshark 接口列表,鼠标悬停在每个接口上——Wireshark 会显示该接口的 IPv4 地址和 MAC;
- 严格匹配你
ipconfig中的 IP 和 MAC,才是真实出口网卡。例如:
→ Wireshark 中对应接口悬停显示Ethernet adapter 以太网: IPv4 Address: 192.168.1.102 Physical Address: 00-11-22-33-44-55192.168.1.102 / 00:11:22:33:44:55,即为正确选择。
2.3 过滤预设:捕获过滤器(Capture Filter)是性能守门员
很多人混淆捕获过滤器(Capture Filter)和显示过滤器(Display Filter)。前者在数据进入 Wireshark 前就丢弃无关包,降低 CPU 占用、避免内存溢出;后者仅在 UI 层隐藏,所有包仍被保存在内存中。对于初学者,必须优先用捕获过滤器缩小范围。
| 过滤目标 | 捕获过滤器语法 | 作用说明 | 典型场景 |
|---|---|---|---|
| 特定 IP 通信 | host 192.168.5.8 | 只捕获与该 IP 的双向流量(含源/目的) | 排查某台服务器响应延迟 |
| 单向流量 | src host 192.168.5.8 | 仅捕获该 IP 发出的包(目的地址为它不算) | 分析客户端主动发起的请求 |
| 指定协议+端口 | tcp port 80 | 只抓 TCP 80 端口(HTTP)流量,排除 HTTPS(443)、SSH(22) 等干扰 | 聚焦 Web 访问行为 |
| ICMP 报文(Ping) | icmp | 过滤所有 ICMP 类型(Echo Request/Reply, TTL Exceeded) | 验证网络连通性及路径MTU |
| ARP 协议 | arp | 专抓地址解析协议包,用于检测 ARP 欺骗或网络设备 MAC 学习异常 | 内网安全审计 |
关键参数说明:
host是最常用且安全的语法,等价于(src host X and dst host X),比ip.addr == X更高效(后者是显示过滤器语法,不能用于捕获阶段);port默认指 TCP/UDP 端口,若需限定协议,必须写tcp port 80或udp port 53;- 语法无空格:
tcp port 80正确,tcp port = 80错误(捕获过滤器不支持==); - 启用方法:
Capture → Options → Capture Filter输入后点击Start,勿在主界面 Filter 栏输入(那是显示过滤器)。
3. 协议分层解剖:从 Frame 到 HTTP 的六层穿透式阅读法
Wireshark 界面三分区(Packet List / Packet Details / Packet Bytes)不是摆设,而是协议栈的物理映射。一份合格的抓包分析,必须按 OSI 模型从下往上逐层验证。文档中那个 62 字节的 SYN 帧,正是最佳教学样本——我们把它拆成六层,每层给出字段、值、教材出处、现实意义。
3.1 物理层(Frame):62 字节背后的硬件真相
Wireshark 显示的Frame 1 (62 bytes on wire, 62 bytes captured)表面是长度,实则揭示两个关键事实:
on wire= 62 bytes:表示网线上传输的实际字节数,包含以太网帧头(14B)、IP 头(20B)、TCP 头(28B)——但不含 FCS(帧校验序列)4 字节,因为网卡驱动在提交给 Wireshark 前已剥离 FCS;captured= 62 bytes:表示 Wireshark 实际保存的字节数,与on wire相等,说明未发生截断(若显示62 bytes captured (1514 bytes on wire),则表明设置了过小的 SnapLen,导致 IP/TCP 头被截断,分析必然失败)。
注意:Wireshark 默认 SnapLen 为 262144 字节(足够捕获任意大包),但若手动修改过
Edit → Preferences → Capture → SnapLen,务必确认其值 ≥ 65535(最大 IP 包长),否则 TCP 头部 Options 字段(如 MSS=1460)可能被截断,导致无法识别 SYN 标志。
3.2 数据链路层(Ethernet II):MAC 地址与类型字段的硬编码逻辑
展开Ethernet II行,看到:
Destination: Jetcell_e5:1d:0a (00:d0:2b:e5:1d:0a) Source: AcerTech_5b:d4:61 (00:00:e2:5b:d4:61) Type: IP (0x0800)- MAC 地址格式:
00:d0:2b:e5:1d:0a是标准 IEEE 802.3 格式,前 3 字节00:d0:2b是 OUI(组织唯一标识符),查 IEEE 官网可知00-D0-2B属于Jetcell Communications,即该网卡厂商; - Type 字段
0x0800:这是以太网帧的“协议身份证”,0x0800=IP,0x0806=ARP,0x86DD=IPv6。它不是长度字段(IEEE 802.3 用 Length 字段),而是明确告诉上层:“我载的是 IPv4 包,请交给 IP 协议栈处理”。
3.3 网络层(IPv4):TTL=128 是 Windows 的指纹,不是偶然
展开Internet Protocol Version 4,重点字段:
| 字段名 | 值 | 教材出处 | 现实意义 |
|---|---|---|---|
| Version | 4 | 《计算机网络》P122 图 4-12 | IPv4 协议版本,区别于 IPv6(Version=6) |
| Header Length | 20 bytes | P122 | 固定 20B(无 Options),若含 Timestamp 选项则 >20B |
| Total Length | 48 | P122 | IP 包总长 = Header(20) + Data(28),此处 Data 即 TCP 头(28B),无 payload |
| Identification | 0x8360 (33632) | P122 | 分片重组标识,同一 IP 包分片时此值相同 |
| Flags | 0x02 (Don't Fragment) | P122 | 0x02表示 DF 位(Don't Fragment)置 1,禁止分片 |
| Time to Live | 128 | P122 | Windows 系统默认 TTL,Linux 通常为 64,路由器每转发减 1,据此可反推源主机 OS |
血泪经验:TTL=128 是判断 Windows 主机的强信号,但若包经过 3 跳路由器,Wireshark 显示 TTL=125,则不能武断说源是 Linux——需结合
ipconfig查看本机 TTL 设置(Windows 可通过netsh int ipv4 set glob defaultcurhoplimit=64修改)。
3.4 传输层(TCP):Flags=0x02 是三次握手的起始密钥
展开Transmission Control Protocol,核心字段:
Source Port: 2764 Destination Port: http (80) Sequence Number: 0 (relative sequence number) Flags: 0x02 (SYN) Window Size: 65535- Flags=0x02:TCP 标志位是 8 位字段,
0x02二进制为00000010,对应SYN 位(第 2 位)置 1,即“请求建立连接”; - Relative Sequence Number:Wireshark 默认开启相对序号(
Edit → Preferences → Protocols → TCP → Relative sequence numbers),将首个 SYN 包 Seq 设为 0,便于观察增量;若关闭此选项,Seq 将显示真实随机值(如0x8a3f1c2d); - Window Size=65535:初始滑动窗口大小,单位字节,表示本端最多接收 64KB 数据,并非带宽限制,而是接收缓冲区大小。
3.5 应用层(HTTP):Follow TCP Stream 是明文破译器
当 TCP 层确认连接建立后,HTTP 请求才开始。文档中强调的Follow TCP Stream功能,本质是Wireshark 将属于同一 TCP 连接的所有包(按 src/dst IP+port 组合)按顺序拼接,并自动去除 TCP 头部,只保留应用层 payload。
操作路径:右键任一 TCP 包 →Follow → TCP Stream→ 弹窗中显示:
GET / HTTP/1.1 Host: www.example.com User-Agent: curl/7.81.0 Accept: */* HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1234 <!DOCTYPE html>...- 编码识别:若中文显示为
...,是因为 HTTP 响应头Content-Type: text/html; charset=gb2312未被 Wireshark 自动识别,需手动设置:View → Character Sets → Chinese (GBK); - 流方向标记:弹窗左上角显示
Stream index: 0 [TCP],右侧client → server/server → client箭头清晰区分请求与响应。
3.6 协议栈全景:Protocols in frame 字段是自动诊断报告
Wireshark 在 Frame 层自动标注[Protocols in frame: eth:ip:tcp],这是协议封装链的黄金索引。它意味着:
- 此帧由以太网帧承载(eth);
- 以太网载荷是 IPv4 包(ip);
- IPv4 载荷是 TCP 段(tcp);
- 若此处显示
eth:ip:udp:dns,则说明是 DNS 查询(UDP 53 端口); - 若显示
eth:ip:tcp:http,则 HTTP 层已被成功解析,无需手动展开;若只到tcp,说明 Wireshark 未识别出 HTTP(可能端口非 80/443,或 payload 被加密)。
4. 避坑:新手必踩的五个“看似正常实则致命”错误
Wireshark 抓包翻车,90% 不是软件问题,而是环境配置或认知偏差导致的“伪故障”。以下五条,全部来自一线教学和企业排障现场的真实血泪记录,每一条都附带现象、根因和可立即执行的修复方案。
4.1 现象:点击 Start 后界面空白,无任何包流动
原因:Npcap 未启用 Loopback 模式,且当前无外网流量(如 Wi-Fi 断开、网线未插)
→ 新手常误以为软件崩溃,反复重装
解决:
- 确认物理连接:
ping 8.8.8.8测试外网; - 若
ping通但 Wireshark 无包,执行nmap -sS -p 80 127.0.0.1; - 若
nmap报错Failed to open device,重装 Wireshark 并强制勾选 “Use Npcap in loopback mode”; - 重启 Wireshark,选择
Loopback: Microsoft接口抓本机回环流量(如访问http://localhost)。
4.2 现象:抓到大量TCP Retransmission和TCP Spurious Retransmission
原因:Wireshark 运行在高负载机器上,CPU 来不及处理包,导致内核缓冲区溢出丢包
→ 用户误判为网络丢包,疯狂检查交换机端口
解决:
Capture → Options → Capture Filter输入tcp缩小范围;Edit → Preferences → Capture → Buffer size改为2(MB),避免大缓冲区加剧延迟;- 关闭所有浏览器/视频软件,仅留必要进程;
- 终极方案:改用
tshark -i "Ethernet" -f "tcp" -w test.pcap命令行抓包(tshark 是 Wireshark 的 CLI 版本,资源占用低 70%)。
4.3 现象:Filter 栏输入ip.addr == 192.168.5.8后无结果,但host 192.168.5.8有效
原因:ip.addr == X是显示过滤器语法,只能在抓包后使用;而host X是捕获过滤器语法,可在 Start 前设置
→ 新手混淆两者,以为语法错误,转而用复杂正则
解决:
- 想抓包时过滤:
Capture → Options → Capture Filter输入host 192.168.5.8; - 想抓包后筛选:主界面 Filter 栏输入
ip.addr == 192.168.5.8(注意双等号); - 记住口诀:捕获过滤器用
host/net/port,显示过滤器用ip.addr/tcp.port/http.request。
4.4 现象:Follow TCP Stream 后显示乱码,中文全为 ``
原因:HTTP 响应头未声明charset,Wireshark 默认用 UTF-8 解码 GBK 编码的网页
→ 用户以为抓包失败,放弃分析
解决:
- 在 Packet Details 中展开
Hypertext Transfer Protocol→ 找Content-Type字段; - 若值为
text/html(无 charset),则右键该字段 →Prepare as filter → Selected; - 在 Filter 栏输入
http.content_type contains "html"回车,筛选所有 HTML 包; - 对第一个 HTML 包右键 →
Follow → TCP Stream→ 弹窗右下角Show data as下拉选Chinese (GBK)。
4.5 现象:ARP 包过滤后,只看到Who has 192.168.1.1? Tell 192.168.1.102,无回复
原因:目标 IP(192.168.1.1)是网关,但网关未响应 ARP 请求(可能禁用了 ICMP/ARP 响应,或防火墙拦截)
→ 用户误以为局域网断开,重启路由器
解决:
arp -a查看本机 ARP 缓存,确认192.168.1.1是否已有 MAC;- 若缓存中存在,说明 ARP 已成功,无需抓包;
- 若缓存为空,执行
ping 192.168.1.1,再立即抓包——ping触发 ARP 请求,网关收到 ICMP Echo Request 后才会回复 ARP; - 关键技巧:在
Capture Filter中设arp or icmp,同时抓 ARP 和 ICMP,观察“请求-响应”完整链路。
5. 进阶验证:用三个真实场景构建你的协议分析肌肉记忆
掌握单帧解剖只是起点,真正的协议分析能力体现在快速定位异常模式、关联多帧行为、逆向推导网络状态。以下三个场景,全部基于文档中提到的“巧用 Wireshark 有效管理内网”需求设计,每个都提供可复现的步骤、预期结果和底层原理,帮你把知识变成条件反射。
5.1 场景一:确认内网是否存在 ARP 欺骗(毒化攻击)
ARP 欺骗的本质是伪造 ARP Reply 包,将网关 MAC 替换为攻击者 MAC。正常网络中,网关的 MAC 应长期稳定;若频繁变更,则高度可疑。
操作步骤:
- 启动 Wireshark,捕获过滤器设为
arp; - 捕获 30 秒,停止后在 Packet List 中按
Info列排序(点击列头); - 查找所有
ARP Reply行,重点关注Gratuitous ARP(免费 ARP)和is-at字段; - 在
Packet Details中展开Address Resolution Protocol→Sender MAC address; - 关键验证:对比多个
ARP Reply中Sender MAC address是否一致。若192.168.1.1(网关)的 MAC 在不同时间点显示为00:11:22:33:44:55和aa:bb:cc:dd:ee:ff,则存在 ARP 欺骗。
原理深挖:
- 正常网关 ARP Reply 的
Sender MAC应与ipconfig /all中网关的物理地址完全一致; - 攻击者发送的
Gratuitous ARP(源/目的 IP 相同)会强制更新其他主机 ARP 缓存,其Sender MAC是攻击者本机 MAC; - Wireshark 自动将
Gratuitous ARP标为红色(Coloring Rule),可快速识别。
5.2 场景二:定位 HTTP 请求超时的瓶颈层(DNS/Connect/SSL/Server)
一个curl -v http://example.com超时,可能是 DNS 解析慢、TCP 连接卡住、SSL 握手失败或服务器无响应。Wireshark 能精准定位在哪一层。
操作步骤:
- 捕获过滤器设为
tcp port 80 or tcp port 443 or udp port 53(覆盖 HTTP/HTTPS/DNS); - 执行
curl -v http://example.com; - 停止抓包,在 Filter 栏输入
http or dns or ssl; - 按时间排序,查找
curl发起的第一个包:- 若先出现
UDP 53查询,且无DNS Response→DNS 层故障(检查/etc/resolv.conf或 DNS 服务器); - 若出现
TCP SYN但无SYN-ACK→Connect 层故障(目标端口关闭、防火墙拦截); - 若
TCP三次握手完成,但出现TLS Client Hello后无Server Hello→SSL 层故障(证书问题、协议不匹配); - 若
HTTP GET发出,但无HTTP 200→Server 层故障(Web 服务宕机、应用逻辑阻塞)。
- 若先出现
参数表:各层超时的典型 Wireshark 特征
| 故障层 | 关键包序列 | Wireshark 显示特征 | 排查命令 |
|---|---|---|---|
| DNS | UDP 53 → No Response | Standard query A example.com后无Standard query response | dig example.com @8.8.8.8 |
| Connect | TCP SYN → No SYN-ACK | 2764 > 80 [SYN]后无80 > 2764 [SYN, ACK] | telnet example.com 80 |
| SSL | Client Hello → No Server Hello | TLSv1.2 协议下Client Hello后无Server Hello | openssl s_client -connect example.com:443 |
| Server | HTTP GET → No HTTP 200 | GET / HTTP/1.1后无HTTP/1.1 200 OK | curl -I http://example.com |
5.3 场景三:提取明文 Telnet 操作指令(验证弱密码风险)
Telnet 传输明文,Wireshark 可直接还原用户输入。这是文档中“检测明文数据包”的实战延伸,也是安全审计的核心技能。
操作步骤:
- 捕获过滤器设为
tcp port 23; - 在另一终端执行
telnet 192.168.1.1(目标为可登录的设备); - 输入用户名
admin,密码123456,执行show version; - 停止抓包,在 Filter 栏输入
telnet; - 找到
Telnet Data包,在Packet Bytes区域右键 →Export Packet Bytes→ 保存为telnet.raw; - 用
xxd telnet.raw查看十六进制,搜索61646d696e(admin的 ASCII 十六进制); - 更优方案:在
Packet Details中展开Telnet→Data字段,右键 →Copy → Printable Text,直接粘贴出明文。
原理深挖:
- Telnet 协议本身无加密,所有字符(包括回车
\r\n)均以 ASCII 传输; - Wireshark 的
Telnet解析器会自动将0x0d 0x0a(CRLF)转换为换行,使show version\r\n显示为show version; - 安全警示:若在企业内网抓到此类包,立即禁用 Telnet,改用 SSH(Wireshark 中 SSH 流量显示为
SSH协议,Packet Bytes全为乱码,证明加密有效)。
从那以后我每次做网络排障,都强制走一遍“捕获过滤器预设 → 三层协议验证(eth/ip/tcp)→ 关键字段比对(TTL/MAC/Flags)→ 多帧行为关联”。不是为了炫技,而是因为——当客户说“网站打不开”,你能在 30 秒内指着屏幕说“DNS 解析超时,建议换 DNS 服务器”,比说“我看看”更有说服力。希望帮到你。
本文还有配套的精品资源,点击获取