
简介这份PDF教程面向网络管理员、运维工程师及网络协议分析初学者系统讲解WIRESHARK抓包的核心方法与实操流程帮助读者掌握网络通信过程的观察、诊断与性能优化思路。内容围绕网络结构、交换机端口镜像和抓包软件操作流程三部分展开涵盖AP、AC、交换机与PC之间的连接关系LAN口与WAN口数据抓取差异以及镜像端口选择等关键环节并给出从选择网卡、启动抓包、停止抓包到查看报文、保存文件的完整操作路径同时说明不同保存格式的适用场景。资源包共1个PDF文件大小约945KB轻量便携适合随时查阅。目前已有655人学习可作为网络排障与协议分析的入门参考帮助读者快速建立抓包分析的整体认知并应用于实际工作场景。1. 从一份《WIRESHARK抓包教程[归纳].pdf》说起为什么你抓不到想要的包很多人第一次打开 Wireshark看到满屏滚动的数据包第一反应是“这玩意儿怎么用”。更常见的情况是按着某份《WIRESHARK抓包教程[归纳].pdf》一步步操作网卡选了、过滤写了、包也抓了结果要么一个目标包都没有要么全是看不懂的 TCP 重传和 TLS 握手。问题往往不在 Wireshark 本身而在于抓包位置、过滤时机和协议分层这三件事没想清楚。Wireshark 是本地协议分析器它只能看到流经你选定网卡的数据帧。这意味着抓本机 HTTP 请求选对网卡就能看到抓手机 App 流量得先把流量引到本机抓交换机上其他设备的包需要端口镜像。这份归纳教程真正该帮你建立的不是“点哪个按钮”而是“包在哪、我怎么让它经过我、我该在第几层看它”。下面按抓包位置选择、过滤表达式、协议分析、典型场景排错、进阶技巧五块展开每一步都落到可复现的命令和参数上。2. 抓包位置决定成败本机、镜像口还是手机代理2.1 先判断包到底经不经过你的网卡Wireshark 的捕获列表里通常有 Ethernet、WLAN、Loopback、NPF 虚拟网卡等。选错网卡的典型症状是浏览器明明在访问网页Wireshark 却一个包都不涨。判断方法很直接——在命令行执行ping或curl同时看哪个网卡的流量计数在跳。# Windows 下查看活动网卡和流量计数 netstat -e # Linux 下持续观察某网卡收发包 watch -n 1 cat /proc/net/dev | grep -E eth0|wlan0netstat -e输出的是本机所有网卡汇总的收发字节数适合快速确认“有没有流量”。Linux 的/proc/net/dev按网卡分行能精确到eth0、wlan0。如果目标流量走的是无线网卡却在有线网卡上抓自然一无所获。这一步不涉及任何高级配置但它是后面所有操作的前提。选网卡时还有一个容易忽略的点虚拟网卡。装了虚拟机、Docker、某些安全软件后系统里会多出VMware Network Adapter、vEthernet、Npcap Loopback等接口。访问本机127.0.0.1的服务流量走 Loopback必须选 Npcap 提供的 Loopback 接口才能抓到访问局域网其他机器走物理网卡。把这两类混在一起就会出现“教程里能抓、我这里抓不到”的玄学现象。2.2 交换机镜像与 Hub 的差别如果目标是抓同一交换机下另一台设备的流量本机网卡默认看不到因为交换机按 MAC 地址转发不会把别人的单播帧泛洪给你。常见做法是配置端口镜像SPAN把目标端口或 VLAN 的流量复制到你的抓包口。配置命令因厂商而异以常见企业级交换机为例# 华为/华三风格把 GE0/0/1 的入向流量镜像到 GE0/0/24 system-view observe-port 1 interface GigabitEthernet0/0/24 interface GigabitEthernet0/0/1 port-mirroring to observe-port 1 inboundobserve-port定义监控口port-mirroring ... inbound表示只镜像进入目标口的流量。如果双向都要加both。这里的关键参数是镜像方向只抓inbound会漏掉目标设备发出的响应包分析 TCP 三次握手时就会缺一半。用 Hub 代替交换机可以天然广播但 Hub 早已淘汰且半双工会引入冲突不建议在生产环境用。提示镜像口带宽要大于被镜像口峰值带宽否则会丢包。抓包机网卡建议关闭省电和中断合并避免高吞吐下丢帧。2.3 手机 App 抓包代理模式与 Wireshark 的分工热搜里频繁出现“小程序抓包”“app 抓包失败”“fiddler 手机抓包”说明大量需求集中在移动端。Wireshark 本身不解析手机上的应用层代理常见组合是手机 Wi-Fi 设置 HTTP 代理指向本机本机用 Fiddler/Charles/mitmproxy 做中间人Wireshark 抓本机代理网卡的流量做底层验证。# 以 mitmproxy 为例监听 8080 并生成 CA 证书 mitmproxy --listen-port 8080 # 手机浏览器访问 http://mitm.it 安装证书后流量即可被解密查看--listen-port指定代理端口手机端代理填本机局域网 IP 加这个端口。Wireshark 此时选本机物理网卡过滤tcp.port 8080就能看到代理进出的原始 TCP 流。注意安卓 7 以后用户证书默认不被 App 信任需要 root 后把证书装到系统区或者用可调试包配合networkSecurityConfig。这就是“安卓 8.1 抓不到包”的根因不是 Wireshark 的问题。3. 过滤表达式从“包海”里捞出你要的那几个3.1 捕获过滤与显示过滤别搞混Wireshark 有两套过滤捕获过滤Capture FilterBPF 语法在抓之前生效决定哪些包被写入内存显示过滤Display Filter在抓之后生效只影响当前视图。新手最容易犯的错是把http写进捕获过滤结果一个包没有——因为 BPF 的http只匹配 80 端口且语法受限而很多流量走 443 或非标准端口。# 捕获过滤只抓 80 和 443 端口减少内存占用 tcp port 80 or tcp port 443 # 显示过滤从已抓包中筛出 HTTP 请求 http.request # 显示过滤筛出某 IP 的 DNS 查询 ip.addr 192.168.1.100 dns捕获过滤用tcp port、host、net这类原语不支持http.request这种协议字段。显示过滤支持http、dns、tls.handshake等丰富字段但它是事后筛选抓的时候没抓到的包不会因为显示过滤而出现。所以高流量环境下先用捕获过滤缩小范围再用显示过滤精确定位。3.2 常用显示过滤速查与参数含义目标显示过滤表达式说明某 IP 全部流量ip.addr 10.0.0.5收发都包含仅发往某 IPip.dst 10.0.0.5方向限定某端口 TCPtcp.port 8080源或目的HTTP 请求http.request不含响应TLS 握手tls.handshake.type 11 为 Client Hello含特定字符串frame contains token全帧搜索较慢排除 ARP!arp减少噪声frame contains是字节级匹配对 HTTPS 加密内容无效只能用于明文协议或已解密的流量。tls.handshake.type 1里的1是 IANA 定义的 Client Hello 类型值改成2就是 Server Hello。这些字段名在 Wireshark 的“表达式”对话框里可以搜索不必死记。3.3 跟踪流与导出对象定位到可疑包后右键“Follow → TCP Stream”能把整条会话重组成可读文本。HTTP 明文流里直接能看到请求头和响应体如果是 TLS看到的是密文。导出对象File → Export Objects → HTTP可以把流经的图片、JS、JSON 落盘做进一步分析。# 命令行等价操作用 tshark 跟踪流并输出 ASCII tshark -r capture.pcap -q -z follow,tcp,ascii,0 # 导出 HTTP 对象到目录 tshark -r capture.pcap --export-objects http,./output-z follow,tcp,ascii,0中的0是流编号可在 Wireshark 界面里看到。--export-objects第一个参数是协议第二个是输出目录。这两个命令适合把抓包结果交给脚本做批量处理比手工点界面高效得多。4. 协议分层分析从帧到应用层逐层看4.1 物理层与数据链路层先确认帧有没有到抓不到包时第一步看 Wireshark 的接口列表有没有流量计数。如果计数为 0问题在物理层或驱动层网线没插、网卡被禁用、驱动未绑定 Npcap、或者选了错误的接口。计数正常但显示过滤后为空问题在过滤表达式或协议层。数据链路层要关注 VLAN 标签。热搜里“wireshark 显示 vlan”说明很多人遇到带 Tag 的帧。如果交换机 Trunk 口出来的包带 802.1Q 标签Wireshark 默认会显示VLAN字段但某些网卡驱动会剥离标签导致看不到。此时需要在网卡高级设置里关闭“VLAN 剥离”或“优先级与 VLAN”。# 显示过滤只看 VLAN 100 的帧 vlan.id 100 # 显示过滤只看不带 VLAN 的帧 !vlanvlan.id是 12 位字段取值 1–4094。如果抓包点在三层设备之后VLAN 标签已被剥离就不要再按vlan过滤否则永远为空。4.2 网络层与传输层IP、ICMP、TCP 重传热搜里“科来 icmp 抓包”“过滤 icmp 报文”是经典入门练习。ICMP 适合验证连通性和路径过滤icmp后点开包能看到 Type 8请求和 Type 0应答。如果只有请求没有应答说明对端没回或回程被拦。TCP 分析重点看三个东西三次握手、重传、窗口。显示过滤tcp.flags.syn 1能筛出所有 SYN 包tcp.analysis.retransmission筛出重传。大量重传通常意味着链路丢包或对端处理慢不是 Wireshark 的锅。# 统计 TCP 重传次数 tshark -r capture.pcap -q -z io,stat,0,COUNT(tcp.analysis.retransmission)tcp.analysis.retransmission # 查看某条流的往返时延 tshark -r capture.pcap -q -z conv,tcpio,stat做统计conv,tcp输出 TCP 会话列表含每条的包数、字节数、起止时间。这些数字比肉眼翻包可靠得多适合写进排障报告。4.3 应用层HTTP、DNS、TLS 的看点HTTP 明文直接看http.request.method、http.response.code。DNS 看dns.qry.name和dns.flags.rcodercode 3表示域名不存在。TLS 看tls.handshake.extensions_server_name也就是 SNI能知道客户端想访问哪个域名即使内容加密。# 提取所有 DNS 查询名 tshark -r capture.pcap -Y dns.flags.response 0 -T fields -e dns.qry.name # 提取 TLS SNI tshark -r capture.pcap -Y tls.handshake.type 1 -T fields -e tls.handshake.extensions_server_name-Y是显示过滤-T fields -e指定输出字段。这两条命令在分析“某 App 到底连了哪些域名”时非常实用输出直接是域名列表可以丢给脚本去重排序。5. 典型场景避坑抓不到、看不懂、解不开5.1 现象网卡有流量但过滤后一个包没有原因显示过滤表达式写错或捕获时用了不兼容的捕获过滤。比如写了http作为捕获过滤而目标走 443或者ip.addr 10.0.0.5用了单等号Wireshark 显示红色表示语法错误。解决先清空过滤看是否有包有包再逐步加条件。捕获过滤用tcp port 443这类 BPF 原语显示过滤用ip.addr 10.0.0.5双等号。不确定时点过滤栏右侧的“表达式”按钮从列表里选字段。5.2 现象手机 App 抓包失败代理装了也没用原因安卓 7 以上用户证书不被 App 信任或 App 用了证书固定SSL Pinning或流量走了 QUICUDP 443不经过 HTTP 代理。解决先确认 App 是否走 QUICWireshark 过滤udp.port 443如果有大量流量说明代理模式无效需要在客户端禁用 QUIC或改用支持 UDP 的代理。证书固定则需要逆向或使用 Frida 等工具绕过这属于另一层工作。普通小程序抓包用 Charles/Fiddler 加系统证书通常够用。5.3 现象Wireshark 中文显示乱码或“用....显示了”原因字符编码不是 UTF-8或该字段被 Wireshark 当作二进制处理。HTTP 响应头里的Content-Type没带charset或者用了 GBK。解决在包详情里右键字段 → “Show Packet Bytes” 查看原始字节再用外部工具按正确编码解码。Wireshark 本身不负责转码它只呈现字节。对于 HTTP可以导出对象后用浏览器或编辑器打开让编辑器按 GBK 解码。5.4 现象python2.7 pyshark 无法抓包原因pyshark 依赖 tsharkpython2.7 已停止维护且新版 tshark 的路径或权限在 Windows 上常出问题。解决换 Python 3安装 pyshark 后确认tshark在 PATH 中。Windows 下需要把 Wireshark 安装目录加入环境变量并确保当前用户有抓包权限Npcap 安装时勾选“允许非管理员抓包”。import pyshark # 指定 tshark 路径避免找不到 cap pyshark.FileCapture(demo.pcap, tshark_pathrC:\Program Files\Wireshark\tshark.exe) for pkt in cap: if IP in pkt: print(pkt.ip.src, pkt.ip.dst)tshark_path在 Windows 上建议显式指定。FileCapture读文件比实时抓包稳定实时抓包用LiveCapture但需要管理员权限。遍历时先判断层是否存在否则访问pkt.ip会抛异常。5.5 现象抓到的包时间戳不对或顺序乱原因多网卡同时抓包时时钟不同步或抓包机系统时间被调整。解决单网卡抓包需要多口关联时用支持硬件时间戳的抓包设备或在分析时用frame.time_relative而非绝对时间。Wireshark 的Time列可以切换为“相对时间”便于看包间隔。6. 进阶用 tshark 和 Lua 把重复劳动自动化抓包分析做多了会发现界面上点来点去只能解决一次性问题。真正省时间的是把常用提取逻辑写成脚本。tshark 自带字段提取配合 shell 就能做批量统计Wireshark 还支持 Lua 插件可以自定义协议解析。# 统计每个源 IP 的包量降序取前 10 tshark -r capture.pcap -T fields -e ip.src | sort | uniq -c | sort -rn | head -10 # 统计 HTTP 状态码分布 tshark -r capture.pcap -Y http.response -T fields -e http.response.code | sort | uniq -c第一条命令把ip.src字段逐行输出uniq -c计数sort -rn按数字降序。第二条同理能快速看出 404、500 的占比。这些命令不需要写代码但能回答“谁在刷流量”“哪个接口在报错”这类问题。如果要更复杂的逻辑比如“提取所有 HTTP 请求的 URL 和耗时”可以用 Lua 写一个 tap。-- save as http_url.lua, run: tshark -r capture.pcap -X lua_script:http_url.lua local tap Listener.new(http, http.request) function tap.packet(pinfo, tvb) local url tostring(pinfo.private[http.request.uri]) print(pinfo.abs_time .. .. url) endListener.new第一个参数是协议名第二个是过滤条件。pinfo.private里存放该协议的字段值。这个脚本会在每个 HTTP 请求时打印绝对时间和 URI。Lua 插件适合把团队里反复用的分析逻辑固化下来比每次手写过滤可靠。注意Lua 脚本在 Wireshark 启动时加载修改后需要重启或重新加载插件。生产环境抓包机建议把常用脚本放在plugins目录避免每次指定路径。我自己的习惯是每接一个新排障任务先花两分钟写一条 tshark 统计命令把“包海”压成一张表再决定要不要打开界面细看。这个习惯帮我省掉了大量无意义的滚动也让我在写报告时能直接贴数字而不是“感觉丢包”。希望帮到你。本文还有配套的精品资源点击获取