深入网络通信底层,学习使用 tcpdump、Wireshark、Tshark、nmap、ss 等工具捕获和分析数据包,精准定位复杂的网络连接问题和安全异常。这是从"会用"到"精通"VPS 的必经之路。
📡 什么是网络包分析
网络包分析(Packet Analysis),俗称"抓包",是指捕获、解码并分析在网络上传输的数据包。数据包是网络通信的基本单位,包含了所有传输的信息。通过分析这些原始数据,我们可以像侦探一样,看清网络通信的每一个细节,从而诊断出那些表面上难以发现的问题。
当 ping 不通、网站超时、速度缓慢等问题无法通过常规手段解决时,抓包分析就是我们的终极武器。
🏥 快速诊断工具箱:ss / netstat / ip
抓包是重型工具,很多时候先用这些轻量命令就能快速定位问题——不需要抓任何包,秒级得到结论:
ss Socket Statistics,比 netstat 更快更现代,查看所有 TCP/UDP 连接和监听端口
ip 查看网络接口、IP 地址、路由表、ARP 邻居表,替代老旧的 ifconfig/route
netstat 老牌工具,部分系统默认安装,功能与 ss 类似但速度较慢
# ── ss(推荐,比 netstat 更快更现代)────────────────────────────────────────
# 查看所有监听中的 TCP 端口(-l 监听,-t TCP,-n 不解析,-p 显示进程)
ss -tlnp
# 查看所有已建立的 TCP 连接
ss -tnp state established
# 查看连接到某个端口的所有连接(如排查 80 端口连接数)
ss -tnp | grep ':80'
# 统计各状态的 TCP 连接数(TIME_WAIT 过多是常见问题)
ss -s
# 查看某个进程(如 nginx)的所有连接
ss -tnp | grep nginx
# ── ip 命令(查看网络接口和路由)────────────────────────────────────────────
# 查看所有网络接口和 IP 地址
ip addr show
# 查看路由表
ip route show
# 查看 ARP 表(局域网设备 MAC 地址映射)
ip neigh show
# ── netstat(老工具,仍然好用)───────────────────────────────────────────────
# 查看监听端口和对应进程
netstat -tlnp
# 统计 TCP 连接状态分布
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c | sort -rn 🧰 神器:tcpdump 入门
tcpdump 是 Linux 下强大的命令行抓包工具,几乎所有 Linux 发行版都自带或可以轻松安装。
安装 tcpdump
# Debian/Ubuntu
sudo apt update && sudo apt install tcpdump -y
# CentOS/RHEL
sudo yum install tcpdump -y 常用参数解析
| 参数 | 说明 |
|---|---|
| -i [interface] | 指定要监听的网络接口,如 `eth0`。`any` 表示监听所有接口。 |
| -n | 不将 IP 地址解析为主机名,显示数字 IP。 |
| -nn | 不将 IP 地址和端口号解析为主机名和服务名。 |
| -X | 以十六进制和 ASCII 码形式显示数据包内容。 |
| -w [file.pcap] | 将抓取的数据包保存到文件,而不是在屏幕上显示。 |
| -r [file.pcap] | 从文件中读取数据包进行分析。 |
| -c [count] | 抓取指定数量的数据包后停止。 |
| -A | 以 ASCII 码形式打印数据包内容(非常适合直接看 HTTP 明文请求)。 |
| -s [snaplen] | 设置每个数据包的最大截取长度。默认 262144,0 表示完整截取。 |
| -v / -vv / -vvv | 增加输出详细程度,-vvv 可以看到完整的协议字段。 |
🔍 核心:流量过滤(BPF 语法)
在繁忙的服务器上,不加过滤地抓包会产生海量数据。学会使用 BPF(伯克利包过滤器)语法是 tcpdump 的精髓所在。
| 类型 | 命令示例 | 说明 |
|---|---|---|
| 按主机 | tcpdump host 1.2.3.4 | 抓取所有与 IP 1.2.3.4 相关的数据包。 |
| 按端口 | tcpdump port 80 | 抓取所有源端口或目的端口为 80 的数据包。 |
| 按协议 | tcpdump icmp | 只抓取 ICMP 协议的数据包(例如 ping)。 |
| 组合条件 | tcpdump src 1.2.3.4 and tcp port 443 | 抓取从 IP 1.2.3.4 发出,且目标端口为 443 的 TCP 包。 |
| 排除端口 | tcpdump not port 22 | 排除 SSH 流量,避免抓包时产生自我循环干扰。 |
| 按网段 | tcpdump net 192.168.1.0/24 | 抓取整个 192.168.1.x 子网的所有流量。 |
| SYN包 | tcpdump 'tcp[tcpflags] & tcp-syn != 0' | 只抓取 TCP SYN 包,排查连接建立问题或 SYN Flood 攻击。 |
可以使用 and(&&)、or(||)、not(!)来组合更复杂的过滤条件。
🎓 进阶:tcpdump 高阶技巧
掌握这些技巧可以让抓包更高效、更安全,避免文件撑爆磁盘或手动下载文件的麻烦:
# ── 环形缓冲写入(防止抓包文件撑爆磁盘)────────────────────────────────────
# 每个文件最大 100MB,最多保留 5 个文件(循环覆盖),总占用 ≤500MB
tcpdump -i any -w /tmp/capture-%Y%m%d-%H%M%S.pcap -G 3600 -C 100 -W 5
# ── 实时管道给 Wireshark(无需保存文件,本地直接分析)────────────────────────
# 前提:本地已安装 Wireshark,SSH 连通 VPS
ssh user@VPS_IP "tcpdump -i any -U -w - not port 22" | wireshark -k -i -
# -U 表示不缓冲直接发送,-w - 输出到 stdout;本地 Wireshark 实时显示
# ── 抓包同时在终端预览(调试时很有用)───────────────────────────────────────
tcpdump -i any -n port 80 -A 2>/dev/null | grep -E "GET|POST|Host:|HTTP/"
# ── 按文件大小自动切割(长时间抓包)──────────────────────────────────────────
# 每 50MB 切一个新文件
tcpdump -i any -w /tmp/cap.pcap -C 50
# ── 指定抓包时长(自动停止)──────────────────────────────────────────────────
timeout 60 tcpdump -i any -w /tmp/60s-capture.pcap port 443 💻 进阶:终端里的 Wireshark(Tshark)
tcpdump 虽然抓包强大,但在终端里直接分析高层协议(如 HTTP、DNS)非常吃力。Tshark(Wireshark 的命令行版本)可以直接在终端解析协议字段,无需导出文件。
# 安装 tshark(Debian/Ubuntu)
sudo apt update && sudo apt install tshark -y
# 实时监听并提取 HTTP 请求的 Host 和 URI(就像 Nginx 访问日志一样直观)
tshark -i any -Y "http.request" -T fields -e http.host -e http.request.uri
# 提取 DNS 查询的域名(实时监控设备在查询什么域名)
tshark -i any -Y "dns.qry.type == 1" -T fields -e dns.qry.name
# 统计每个 IP 的流量占比
tshark -i any -z conv,ip -q 🎨 图形化分析:Wireshark
虽然 tcpdump 负责在服务器上抓包,但最强大的分析工具是图形化的 Wireshark。标准流程是:服务器抓包,本地分析。
在 VPS 上抓包并保存为文件
tcpdump -i eth0 -w capture.pcap host 8.8.8.8 and icmp 将文件下载到本地
scp user@your_vps_ip:~/capture.pcap . 使用 Wireshark 打开分析
在本地电脑安装 Wireshark,打开 capture.pcap,可以看到按协议分层的清晰界面,轻松追踪会话、查看数据内容。
Wireshark 高效使用技巧
# ── Wireshark 高效使用技巧 ──────────────────────────────────────────────────
# 追踪 TCP 会话(最常用!)
# 右键某条 TCP 包 → Follow → TCP Stream
# → 弹出窗口显示完整的请求/响应对话,HTTP 明文一览无遗
# 统计功能(Statistics 菜单)
# Statistics → Protocol Hierarchy → 各协议流量占比分布图
# Statistics → Conversations → 按 IP 对统计流量/包数
# Statistics → IO Graph → 流量随时间变化的折线图
# Statistics → Response Time → HTTP/DNS 响应时间分析
# 导出特定数据
# File → Export Objects → HTTP → 导出所有 HTTP 传输的文件(图片/JS/CSS)
# 颜色规则说明(Wireshark 默认配色)
# 黑底红字 → TCP 重传(丢包!)
# 红底白字 → TCP RST(连接被拒绝)
# 黄底黑字 → TCP 问题(乱序/重复ACK)
# 蓝底白字 → SMB/CIFS 流量 🎯 进阶:Wireshark 显示过滤
注意:tcpdump 的"捕获过滤"(BPF 语法)和 Wireshark 顶部的"显示过滤"(Display Filter)语法完全不同!显示过滤发生在抓包之后,语法更加面向对象和协议层,功能更强大。
// 仅显示源 IP 为 192.168.1.100 且目标端口为 80 的流量
ip.src == 192.168.1.100 and tcp.dstport == 80
// 仅显示 HTTP 响应码为 400 或 500 系列的报错包
http.response.code >= 400
// 仅显示包含 "admin" 字符串的 HTTP 请求
http.request.uri contains "admin"
// 仅显示 TCP 握手阶段的 SYN 包
tcp.flags.syn == 1 and tcp.flags.ack == 0
// 显示 TCP 重传(排查丢包/网速慢)
tcp.analysis.retransmission
// 显示 TCP RST(排查连接被拒绝)
tcp.flags.reset == 1
// 过滤特定会话的所有包(右键某条记录 → Follow → TCP Stream 更方便)
tcp.stream eq 0 🗺️ 进阶:nmap 端口扫描与服务识别
nmap 是网络侦察的利器。与 tcpdump 的被动监听不同,nmap 主动探测目标端口的开放情况和运行的服务版本。在排查"端口为什么连不上"或"确认自己的 VPS 暴露了哪些端口"时极其有用。
# ── 安装 nmap ────────────────────────────────────────────────────────────────
apt install nmap -y
# ── 基础端口扫描 ──────────────────────────────────────────────────────────────
# 扫描目标常用端口(前 1000 个端口,最常用)
nmap 目标IP
# 扫描全部 65535 个端口
nmap -p- 目标IP
# 扫描指定端口范围
nmap -p 80,443,8080-9090 目标IP
# ── 服务版本识别(运维诊断神器)─────────────────────────────────────────────
# 检测开放端口上运行的服务和版本
nmap -sV 目标IP
# 同时检测操作系统类型
nmap -O 目标IP
# 最全面的扫描(含脚本检测,较慢)
nmap -A 目标IP
# ── 自查 VPS 暴露情况(重要!)───────────────────────────────────────────────
# 从外部视角扫描自己的 VPS,确认没有意外开放的端口
nmap -sV 你的VPS公网IP
# ── 常见用途:排查 frp/代理服务端口是否正常开放 ──────────────────────────────
nmap -p 7000,6022,15000 你的VPS公网IP ⚠️ 注意:只扫描你自己管理的服务器,扫描他人服务器在很多地区属于违法行为。建议定期用 nmap 扫描自己的 VPS,确认没有意外开放的端口或暴露的服务版本。
🔎 实战:6 大协议分析案例
理论结合实践,来看最常见的故障场景如何通过抓包精准定位。
案例一:连接失败排查(TCP 三次握手)
场景:无法访问 VPS 上部署的网站(http://your_vps_ip:80)。
# 在服务器上抓取 80 端口的包
tcpdump -i any -n tcp port 80 分析思路:
- 正常:
SYN→SYN,ACK→ACK(完整三次握手)。 - 只看到 SYN:请求到达,但服务器未响应。可能是防火墙拦截或服务未监听(用
ss -tlnp确认)。 - 有 SYN,ACK 但无后续:服务器回应了但客户端未收到。可能是中间网络问题(如被墙)。
- 看到 RST:服务器直接拒绝连接,通常是端口上没有服务在运行。
案例二:网络缓慢排查(TCP 重传)
场景:网站加载非常慢,或者文件下载速度远低于预期。
分析思路:
在 Wireshark 中输入显示过滤器 tcp.analysis.retransmission。如果看到大量黑色背景、红色字体的条目,说明网络存在严重丢包,TCP 不断重发数据,这是速度慢的根源。建议结合 mtr(第22篇)进一步定位丢包节点。
案例三:DNS 解析排查
场景:网站无法访问,但 ping IP 地址是通的。
# 在服务器上抓取 DNS 查询包
tcpdump -i any -n udp port 53 分析思路:
执行 curl google.com,正常应看到发往上游 DNS 的查询请求(Query)和响应(Response)。如果只有请求无响应,说明 DNS 流量被拦截或上游服务器故障。配合第26篇 AdGuard Home 的查询日志可以更直观地看到 DNS 解析流程。
案例四:排查恶意 CC/DDoS 攻击
场景:服务器负载突然飙升,带宽被占满,怀疑被恶意攻击。
# 抓取 1000 个 SYN 包并统计来源 IP 的连接数(排查 SYN Flood)
tcpdump -i any -n -c 1000 'tcp[tcpflags] & (tcp-syn) != 0' \
| awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr | head -n 10
# 扩展版:持续监控 + 自动封禁超过阈值的 IP(需要 root)
tcpdump -i any -n 'tcp[tcpflags] & (tcp-syn) != 0' 2>/dev/null \
| awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr \
| awk '$1 > 100 {print $2}' \
| xargs -I{} ufw deny from {} to any 分析思路:
这个单行脚本会抓取包含 SYN 标志的连接请求,并自动统计出请求次数最多的前 10 个源 IP。如果某个单 IP 短时间内发出海量 SYN 请求,说明遇到了典型的 SYN Flood 攻击。拿到 IP 后,直接 ufw deny from 恶意IP 封杀,并考虑在 Cloudflare(第23篇)开启 Under Attack Mode。
案例五:HTTPS 证书问题排查
场景:浏览器报"证书无效"或 curl 报 SSL 错误,或 Let's Encrypt 证书续签后仍出问题。
# ── 案例五:HTTPS 证书问题排查 ─────────────────────────────────────────────
# 1. 用 openssl 检查证书详情(最直接的方式)
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
| openssl x509 -noout -text \
| grep -E "Subject:|Issuer:|Not After|DNS:"
# 2. 检查证书有效期(快速查看是否过期)
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null \
| openssl x509 -noout -dates
# 3. 用 tcpdump 分析 TLS 握手(排查 SSL 协商失败)
tcpdump -i any -nn -w /tmp/tls.pcap port 443
# 抓包后用 Wireshark 过滤:ssl.alert_message 查看 TLS 告警
# 4. curl 详细 SSL 错误信息
curl -v https://yourdomain.com 2>&1 | grep -E "SSL|TLS|certificate|error"
# 5. 检查 Nginx 当前加载的证书
nginx -T 2>/dev/null | grep -E "ssl_certificate |ssl_certificate_key"
# 常见问题速查:
# SSL_ERROR_RX_RECORD_TOO_LONG → Nginx 监听 443 但未配置 SSL(端口用了但没 TLS)
# certificate has expired → Let's Encrypt 证书过期,执行 certbot renew
# unable to verify certificate → 中间证书链不完整,检查 fullchain.pem 而非 cert.pem 分析思路:
openssl s_client 是排查 HTTPS 问题最直接的工具,比浏览器报错信息更准确。常见错误:证书过期(certbot renew 续签)、中间证书链不完整(应使用 fullchain.pem 而非 cert.pem)、域名不匹配(检查 Nginx server_name 与证书 CN/SAN 是否一致)。详细配置参见第29篇 SSL 证书管理指南。
案例六:SSH 连接超时排查
场景:SSH 连接超时或一直卡在密码/密钥认证,无法登录服务器。
# ── 案例六:SSH 连接超时排查 ────────────────────────────────────────────────
# 1. 首先确认基本连通性(区分"网络不通"和"SSH 服务问题")
ping -c 4 VPS_IP # ICMP 通不通
telnet VPS_IP 22 # 22 端口通不通(比 SSH 更底层)
nc -zv VPS_IP 22 # 同上,更简洁
# 2. SSH 详细调试模式(-v/-vv/-vvv 逐级详细)
ssh -vvv user@VPS_IP
# 重点看日志中卡在哪一步:
# "Connection established" → 网络通,SSH 服务在运行
# "Authentications can continue: publickey,password" → 到了认证阶段
# 长时间无响应 → 通常是 iptables 封了或 SSH 配置问题
# 3. 用 tcpdump 在 VPS 上确认连接是否到达
tcpdump -i any -n port 22
# 如果有 SYN 包但没有 SYN-ACK → sshd 未运行或被防火墙封
# 如果有完整握手但断开 → 认证配置问题(/etc/ssh/sshd_config)
# 4. 检查 sshd 是否在运行及监听情况
systemctl status sshd
ss -tlnp | grep :22
# 5. 检查防火墙规则
ufw status
iptables -L -n | grep 22
# 6. 查看 sshd 认证日志
tail -50 /var/log/auth.log | grep sshd
# 常见错误:
# "Connection reset by peer" → 通常是对方防火墙 RST 了连接
# "Too many authentication failures" → 尝试次数过多被临时封禁(fail2ban)
# "Permission denied" → 密钥/密码认证失败 分析思路:
SSH 排查的黄金步骤:先用 ping 确认 IP 可达,再用 telnet IP 22 确认 SSH 端口可达,再用 ssh -vvv 看卡在哪个认证步骤。如果连 VPS 控制台(VNC)都进不去,说明防火墙把所有流量封了,需要在 VPS 服务商控制面板通过带外 Console 修复。
🛡️ 安全与最佳实践
🔒 保护隐私
数据包中可能包含未加密的密码、Cookie 等敏感信息。不要在公共场合分析抓包文件,并确保妥善保管 .pcap 文件,用完即删。
🎯 精准过滤
抓包前先思考清楚要排查的问题,使用最精确的过滤规则抓取最小的必要数据集,这会极大提高分析效率。
⏱️ 短时抓取
除非必要,不要长时间持续抓包——会消耗 CPU 和磁盘 I/O,并产生巨大文件。使用 -c 限制包数或 timeout 限制时长。
❓ 常见问题解答
tcpdump 抓包时会影响服务器性能吗?
会有一定影响,但通常可控。tcpdump 运行在内核空间,通过 libpcap 库捕获数据包,性能开销主要取决于:① 流量速率:高流量服务器(如 10Gbps 链路)抓包时 CPU 占用会明显上升;② 过滤精度:BPF 过滤在内核完成,精准过滤比不过滤开销小很多(port 80 比不加过滤快很多);③ 写磁盘 I/O:-w 写文件时磁盘 I/O 是主要瓶颈。生产环境最佳实践:① 始终加过滤表达式;② 使用 -c 限制抓包数量;③ 写到 tmpfs(/tmp)而非普通磁盘;④ 抓完立即删除文件,不要长期保留。
tcpdump 看不到 HTTPS 的内容,只能看到加密数据?
是的,这是 TLS 加密的设计目的。tcpdump 在网络层抓包,TLS 在应用层加密,抓到的只是密文。想看 HTTPS 明文的方法:① 在服务端看:如果你管理该服务器,直接看 Nginx/Apache 的访问日志(已经解密了);② SSLKEYLOGFILE:在浏览器设置环境变量 SSLKEYLOGFILE=/tmp/ssl-keys.log,抓包后导入 Wireshark,Wireshark 可以用这个密钥文件解密 TLS 流量(仅限自己的浏览器会话);③ 中间人代理:Charles Proxy 或 mitmproxy,在本地配置代理后可以看到所有 HTTPS 内容(需要安装 CA 证书);④ HTTP 明文:对非 HTTPS 的 HTTP 流量,直接用 tcpdump -A port 80 就能看到明文请求内容。
如何找出服务器上哪个进程在占用网络带宽?
多种方法组合使用:① ss -tnp:查看所有 TCP 连接和对应进程,找到连接数异常多的进程;② nethogs(apt install nethogs):实时按进程显示带宽占用,最直观;③ bandwhich:同类工具,Rust 编写,同时显示进程和连接的带宽(见第22篇);④ iftop(apt install iftop):实时显示按 IP 对的带宽占用,适合找出与哪些外部 IP 传输量最大;⑤ tcpdump + 统计:tcpdump -i any -n -c 10000 2>/dev/null | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr | head -20 统计与哪些 IP 通信最频繁。
Wireshark 显示过滤和 tcpdump 的 BPF 过滤语法为什么不一样?
两者设计目标不同:BPF(Berkeley Packet Filter)是内核级过滤器,运行在网络驱动层,目的是在进入用户空间之前就过滤掉不需要的包,性能极高。它只能基于包的原始字节进行匹配(IP 头、TCP 头字段等),语法相对底层;Wireshark 显示过滤运行在 Wireshark 应用层,已经完成了完整的协议解析,可以基于任意协议字段进行过滤(如 http.response.code >= 400),表达能力极强但不能实时过滤(只能在已有的抓包文件上筛选)。实际使用建议:tcpdump 时用 BPF 尽量缩小捕获范围(减少文件大小),在 Wireshark 里再用显示过滤精确定位问题包。
为什么 tcpdump 抓不到本地回环(127.0.0.1)的包?
原因是使用了错误的接口。127.0.0.1 的流量走的是回环接口 lo,而不是 eth0 或默认的 any。解决方法:指定 -i lo 或 -i any:tcpdump -i lo -n port 3306。这在排查本机内部服务间通信(如 PHP-FPM → MySQL 的数据库连接、Nginx → 后端应用的反代请求)时非常有用。-i any 会同时监听所有接口包括 lo,是最省心的选择,但在高流量服务器上可能带来更多噪音。
ss 命令显示大量 TIME_WAIT 连接,是否正常?
TIME_WAIT 是 TCP 连接关闭后的正常等待状态(默认等待 2MSL,约 60 秒),防止延迟到达的数据包被新连接误收。少量 TIME_WAIT 完全正常,但以下情况需要关注:① 数量持续超过几千:说明短连接频率很高(如大量 HTTP 短连接),可以考虑开启 HTTP Keep-Alive 减少 TCP 连接重建;② 影响新建连接:系统端口耗尽导致无法建立新连接,需要增大 net.ipv4.ip_local_port_range 或开启 net.ipv4.tcp_tw_reuse=1(见第22篇 sysctl 优化);③ 正常高并发现象:Nginx 反代到 PHP-FPM 的连接、爬虫访问频繁等场景下大量 TIME_WAIT 是正常的,不需要处理。
nmap 扫描自己的 VPS 时被 Cloudflare 拦截了,怎么办?
如果域名接入了 Cloudflare CDN,nmap 域名 扫描的是 Cloudflare 的 IP,而不是 VPS 的真实 IP——所以结果没有参考价值(你只是扫描了 CF 的边缘节点)。解决方案:① 直接扫描 VPS IP:nmap -sV 你的VPS公网IP,绕过 Cloudflare;② 临时关闭 CF 代理:在 Cloudflare DNS 面板将域名改为灰色(仅 DNS),nmap 再扫域名就能直接到达 VPS;③ VPS 上自扫:SSH 进 VPS 后用 ss -tlnp 查看本机监听端口,比外部 nmap 扫描更准确(不受防火墙影响)。
如何用 tcpdump 排查 frp/内网穿透不通的问题?
系统化的排查步骤:① 在 VPS 上抓 frp 控制端口:tcpdump -i any -n port 7000,确认客户端是否成功连上 frps(应看到完整 TCP 三次握手);② 抓映射端口:tcpdump -i any -n port 6022(你配置的 remotePort),确认外部请求到达 VPS 时数据包是否存在;③ 在内网机器上抓本地端口:tcpdump -i lo -n port 22,确认 frpc 是否将请求转发到了内网服务;④ 配合日志:frp 的 log.to 路径查看是否有 proxy 连接建立的记录。常见问题:控制端口到了但映射端口没有包 → frpc 配置的 remotePort 与 frps 的 allowPorts 冲突;内网有包但返回 RST → 本地服务未运行或 IP 填错了。
Wireshark 打开 pcap 文件后一条数据也没有,怎么回事?
常见原因:① 过滤条件留存:Wireshark 顶部的显示过滤器输入框有上次的过滤条件,导致所有包都被过滤掉——清空过滤框即可;② 文件截断:抓包时服务器突然断开或 Ctrl+C 过于粗暴,pcap 文件头部损坏——尝试用 tcpdump -r capture.pcap 先在命令行读取测试;③ 空文件:tcpdump 使用了非常严格的过滤条件导致真的没有抓到任何包,可以检查 ls -la capture.pcap 查看文件大小(几百字节说明只有文件头,没有数据包);④ Wireshark 版本不兼容:极少数情况下新版 pcap 格式与旧版 Wireshark 不兼容,升级 Wireshark 即可。