
简介这份资源是面向计算机网络课程学习者与网络初学者的Wireshark抓包分析练习文档围绕数据包捕获与协议解析展开适合正在学习TCP/IP体系结构、需要动手实践网络协议原理的学生和自学者。压缩包内共1个doc文件大小约592KB内容以图文结合的方式讲解Wireshark的安装运行、捕获界面布局、过滤器设置以及帧结构逐层解析涵盖以太网帧头部、IP包头部与TCP数据段等关键字段说明。文档通过实际抓包案例展示如何设置ip.addr过滤器、使用Follow TCP Stream查看HTTP交互并逐项解释帧号、时间戳、源目地址、协议层次等信息的含义帮助读者把教材中的抽象协议字段与真实流量对应起来。目前已有85人学习适合作为课堂实验配套练习或课后巩固材料便于读者掌握网络诊断与协议分析的基本思路。1. 从一份 .doc 实验报告说起WireShark 抓包到底在练什么很多人第一次接触计算机网络实验拿到的就是一份叫「计算机网络练习WireShark捕获和分析数据包.doc」的文档里面列着几条干巴巴的要求打开抓包工具、选网卡、抓一段流量、过滤某个协议、点开某个包看字段。照着做完能交差但做完之后脑子里往往只剩一个模糊印象——好像抓到了又好像什么都没学到。问题不在工具在于没人告诉你这些步骤背后对应的是协议栈的哪一层、每个字段为什么长这样、抓不到包时该往哪个方向查。WireShark 捕获和分析数据包这件事本质是把「网络通信」这个平时看不见的过程变成可逐字节检查的证据链。它解决的核心诉求有三个验证协议行为是否符合预期、定位真实网络故障、理解封装与解封装的层次关系。适合的人群很明确——正在上计算机网络课的学生、刚入行的运维和测试、需要排查接口问题的后端开发。这篇笔记不按实验报告的条目顺序走而是按「先能抓到、再能看懂、最后能定位问题」的落地路径来拆每一步都给出可复现的命令和参数也会把那些实验报告里从来不写、但一上手就翻车的地方讲清楚。2. 抓包前的环境准备选对网卡和捕获过滤器2.1 网卡选错是抓不到包的第一大原因WireShark 启动后第一件事是选接口这个界面看起来简单实际上是最容易出错的地方。列表里会出现一堆名字奇怪的接口比如以太网、WLAN、本地连接* 1、Npcap Loopback Adapter、Adapter for loopback traffic capture还有一堆vEthernet开头的虚拟网卡。选错一个抓半天一个包都没有然后开始怀疑是不是软件坏了。判断方法很直接先确认你当前上网走的是哪个接口。Windows 下打开「网络和 Internet 设置」看当前活动连接是有线还是无线Linux 下用ip addr或ip route看默认路由走哪个网卡。抓本机访问本机的流量比如本地起的 Web 服务物理网卡是抓不到的必须选回环接口Windows 上通常是Npcap Loopback AdapterLinux 上是lo。提示如果接口列表里出现多个同名网卡优先选带具体 IP 地址的那个虚拟网卡和蓝牙网卡一般不是你要的。2.2 捕获过滤器在抓之前就砍掉噪音很多人习惯先全抓再显示过滤结果抓了几十万个包文件几百兆分析时卡到怀疑人生。正确做法是在抓之前就用捕获过滤器Capture Filter把无关流量挡掉。捕获过滤器用的是 BPF 语法和显示过滤器Display Filter完全不是一套东西这是新手最容易混淆的点。常用捕获过滤器写法如下# 只抓 ICMP也就是 ping 相关的包 icmp # 只抓和某个 IP 通信的流量 host 192.168.1.100 # 只抓某个网段 net 192.168.1.0/24 # 只抓 80 端口 port 80 # 组合抓某台主机和 443 端口的通信 host 192.168.1.100 and port 443 # 排除某个主机的流量 not host 192.168.1.1这些表达式填在 WireShark 主界面工具栏下方那个标着「捕获过滤器」的输入框里点开始之前就要填好。逻辑说明host匹配源或目的 IPport匹配源或目的端口and、or、not是布尔组合。参数上要注意捕获过滤器一旦设错比如把port 80写成port 8080那 80 端口的包一个都进不来而且界面上不会有任何报错只会安静地什么都不显示。2.3 抓包位置决定了你能看到什么同一个通信过程在客户端抓、在服务端抓、在中间设备抓看到的包是不一样的。客户端抓到的出方向包源 IP 是自己服务端抓到的入方向包源 IP 是客户端。如果中间经过了 NAT客户端看到的源 IP 是内网地址服务端看到的是 NAT 转换后的公网地址两边的包对不上是正常的不是抓错了。还有一个常见误区以为在虚拟机上抓包能看到宿主机和其他机器的通信。默认情况下虚拟机的网卡是 NAT 或桥接模式只能看到流经这张虚拟网卡的流量。想抓整个局域网的流量需要把网卡设成混杂模式并且交换机端口要支持镜像普通家用环境基本做不到。所以实验里让你「在 PC 网卡上开启捕获」抓到的就是这台 PC 自己的进出流量别指望看到别人的。3. 用 ICMP 跑通第一个分析闭环3.1 一边 ping 一边抓是最小可复现实验ICMP 是理解抓包分析最好的入口因为它的交互过程简单、字段少、因果关系清晰。操作步骤先打开 WireShark 选好网卡、设好捕获过滤器icmp、点开始然后在命令行里执行ping一个可达的地址比如ping 8.8.8.8或ping 网关IP等 ping 结束回到 WireShark 点停止。# Windows 下 ping 四次 ping -n 4 8.8.8.8 # Linux/macOS 下 ping 四次 ping -c 4 8.8.8.8抓到的包会成对出现一个 Echo Request类型 8和一个 Echo Reply类型 0。点开任意一个包在中间的协议树里展开「Internet Control Message Protocol」能看到 Type、Code、Checksum、Identifier、Sequence Number 这些字段。Identifier 用来区分是哪个 ping 进程发的Sequence Number 从 1 开始递增用来匹配请求和应答。3.2 从帧到 ICMP一次完整的解封装观察点开一个包WireShark 的协议树从上到下依次是 Frame、Ethernet II、IPv4、ICMP。这个顺序就是数据从网线进来后逐层解封装的过程和教材里讲的封装顺序正好相反。Frame 层显示的是物理层信息包括帧号、捕获时间、帧长度。Ethernet II 层显示源 MAC 和目的 MAC如果目的 MAC 是全ff:ff:ff:ff:ff:ff就是广播。IPv4 层显示源 IP、目的 IP、TTL、协议号ICMP 对应的协议号是 1。ICMP 层才是真正的载荷内容。这里有个值得注意的细节TTL 每经过一个路由器减 1所以你在客户端抓到的包 TTL 通常是 64 或 128在服务端抓到的同一个包 TTL 已经减过了。如果 ping 不通看 Reply 有没有回来、回来的 TTL 是多少能大致判断包走到了哪一跳。3.3 显示过滤器把「看哪个包」变成精确操作抓到一堆包之后靠肉眼找太慢显示过滤器才是日常分析的主力。它和捕获过滤器语法不同功能也更强支持协议名、字段名、比较运算和逻辑组合。# 只看 ICMP icmp # 只看 ICMP 里的 Echo Request icmp.type 8 # 只看某个 IP 相关的包 ip.addr 192.168.1.100 # 只看源 IP ip.src 192.168.1.100 # 只看 TCP 的 SYN 包 tcp.flags.syn 1 and tcp.flags.ack 0 # 只看 HTTP 请求 http.request # 组合某台主机和 443 端口的 TCP 流量 ip.addr 192.168.1.100 and tcp.port 443参数说明是等于!是不等于and、or、not是逻辑运算contains可以做字符串包含匹配比如http.host contains example。显示过滤器写错时输入框会变红这是它比捕获过滤器友好的地方——至少会告诉你语法有问题。但要注意显示过滤器只是隐藏了不匹配的包原始捕获文件里那些包还在导出时如果不加过滤会全部导出。4. 把 TCP 三次握手和 HTTP 请求看穿4.1 三次握手的三个包长什么样ICMP 练熟之后下一个该啃的是 TCP。用浏览器访问一个 HTTP 网站或者用curl请求一个接口同时抓包过滤条件设tcp.port 80。你会看到通信开始时连续三个包SYN、SYN-ACK、ACK。第一个包客户端发 SYNFlags 里 SYN 置 1Seq 是一个随机初始序列号比如 0。第二个包服务端回 SYN-ACKSYN 和 ACK 都置 1Seq 是服务端自己的初始序列号Ack 是客户端 Seq 加 1。第三个包客户端发 ACKACK 置 1Seq 是客户端 Seq 加 1Ack 是服务端 Seq 加 1。WireShark 默认会把相对序列号显示出来也就是把初始序列号归一化成 0这样看起来更直观。如果你想看真实的绝对序列号在 TCP 协议首选项里把「Relative sequence numbers」关掉。这个设置在排查序列号相关问题时很有用因为有些设备会对序列号做改写。4.2 用 Follow TCP Stream 还原一次完整会话找到任意一个属于该 TCP 连接的包右键选「Follow」再选「TCP Stream」WireShark 会把这条连接上所有应用层数据按方向拼起来显示。客户端发的数据默认红色服务端发的默认蓝色。这是分析 HTTP、Redis、MySQL 这类文本协议最快的方法不用一个个包点开看。# 用 curl 发一个 HTTP 请求方便对照抓包结果 curl -v http://example.com/-v参数会把请求和响应的头都打印出来和 WireShark 里 Follow TCP Stream 看到的内容对照能确认抓到的数据和应用层实际收发的是否一致。如果 Follow 出来的内容乱码说明这条连接传的是二进制协议或者被加密了比如 HTTPS这时候看到的就是 TLS 握手和加密后的应用数据需要配置密钥才能解密。4.3 时间显示改成北京时间排查时序不再靠猜WireShark 默认显示的是相对时间或 UTC 时间排查跨时区或和日志对照的问题时很不方便。改法菜单栏「视图」→「时间显示格式」→「日期和时间」然后在「编辑」→「首选项」→「外观」→「时间」里把时区设成你所在的时区。这样每个包的时间戳就是本地时间和服务器日志、应用日志对照时不用再心算时差。时序分析里另一个关键列是 Delta Time也就是当前包和上一个包的时间差。在列标题上右键可以把它加出来。排查慢请求时看相邻两个包之间的 Delta Time能快速定位是网络延迟大还是服务端处理慢。比如 SYN 发出后很久才收到 SYN-ACK说明网络往返或服务端响应有问题SYN-ACK 很快回来但后续数据包间隔很大问题更可能在应用层。5. 抓包分析避坑五个血泪教训5.1 抓不到包先查网卡和过滤器现象点了开始界面一片空白ping 也 ping 了就是没包。原因通常有两个一是网卡选错二是捕获过滤器写得太严把包全挡了。解决先把捕获过滤器清空确认能抓到任意流量再逐步加过滤条件网卡逐个试或者用ipconfig/ip addr确认当前活动网卡的 IP选对应的那个。5.2 抓到一堆重复包是网卡混杂模式或镜像口导致的现象同一个包出现两次甚至多次序列号完全一样。原因抓包位置同时收到了多个路径的流量比如虚拟化和物理网卡同时抓、或者交换机镜像口配置重复。解决确认只选了一个接口关掉其他抓包工具检查是否有网卡绑定或桥接导致同一流量被多次捕获。5.3 显示过滤器写对了却过滤不出结果现象明明抓到了 HTTP 包输入http却一个都不显示。原因现在的网站大量使用 HTTPS80 端口的明文 HTTP 很少了你抓到的可能是 443 端口的 TLS 流量。解决先不加过滤看包的端口确认协议类型HTTPS 流量用tls或ssl过滤想看明文内容需要配置 SSLKEYLOGFILE 环境变量做解密。5.4 大文件卡顿是没做捕获过滤和文件切分现象抓了半小时文件几个 G打开就卡死。原因全量抓包没有限制噪音流量太多。解决抓之前设捕获过滤器同时在「捕获选项」里设置「输出」到多个文件比如每 100MB 切一个并限制文件数量。这样既能控制单个文件大小又不会丢数据。5.5 时间对不上是时区和时间格式没设现象WireShark 里的时间和服务器日志差好几个小时。原因默认时间显示格式是 UTC 或相对时间。解决按 4.3 的方法改成日期时间格式并设对时区。如果还是对不上检查抓包机器本身的系统时间是否准确NTP 没同步的话时间戳本身就是错的。6. 进阶用 tshark 和统计功能把分析做成可复用的流程图形界面适合交互式排查但要做批量分析或把抓包集成到脚本里tshark才是更顺手的工具。它是 WireShark 的命令行版本安装 WireShark 时一般会一起装上。# 列出所有可用网卡 tshark -D # 在指定网卡上抓 10 个包 tshark -i 1 -c 10 # 抓包并只显示源 IP、目的 IP、协议 tshark -i 1 -c 20 -T fields -e ip.src -e ip.dst -e _ws.col.Protocol # 读取已有 pcap 文件并按协议统计 tshark -r capture.pcapng -q -z io,phs # 统计 HTTP 请求的 host tshark -r capture.pcapng -Y http.request -T fields -e http.host | sort | uniq -c | sort -rn参数说明-i指定接口-c限制包数-r读文件-Y是显示过滤器-T fields -e指定输出哪些字段-z是统计选项。io,phs会输出协议分层统计一眼看出这次抓包里各协议占比排查「到底是什么流量占满了带宽」时特别有用。WireShark 自带的统计功能也值得用起来。「统计」→「对话」能看到每条 TCP/UDP 会话的流量和持续时间按字节数排序找出流量大户。「统计」→「端点」能看到每个 IP 收发了多少数据。「统计」→「HTTP」→「请求」能列出所有 HTTP 请求的 host 和 URI。这些视图比手动翻包快得多尤其是在你不确定问题出在哪个协议的时候。我自己的习惯是交互排查用图形界面确认问题后立刻用 tshark 把对应的过滤条件固化成一条命令存进排查脚本。下次遇到同类问题直接跑脚本出结果不用再从头点一遍。抓包这件事真正值钱的不是会点开包看字段而是能把「抓什么、怎么过滤、看哪个指标」变成一套可重复的流程。希望帮到你。本文还有配套的精品资源点击获取