
简介这份PDF教程面向网络运维、安全分析及协议学习方向的初学者与中级开发者系统讲解Wireshark抓包工具的使用方法帮助读者理解TCP/IP中各协议的实际工作过程。内容涵盖启动界面、菜单栏、工具栏、过滤工具栏、封包列表、封包详细信息与十六进制数据查看面板等核心模块并重点区分捕捉过滤器与显示过滤器的语法与适用场景便于在真实网络环境中定位问题、分析协议或监控流量。资源包共1个PDF文件压缩后约2.26MB单文件结构便于随时查阅与打印。目前已有556人学习下载适合需要快速上手抓包分析、对照界面理解各面板功能并掌握过滤表达式的读者参考。1. 从一份《wireshark的使用教程[整理].pdf》说起抓包到底在抓什么很多人第一次打开 Wireshark看到满屏滚动的彩色数据包第一反应是关掉它。这份《wireshark的使用教程[整理].pdf》之所以被反复整理、转发恰恰说明一件事抓包工具的门槛不在安装而在“看懂”。Wireshark 做的是把网卡上的原始比特流翻译成人类可读的协议树从以太网帧头一路展开到 TCP/IP 四层模型里的应用层载荷。它能解决的核心问题是——当你的服务“偶尔超时”“上传 PDF 失败”“接口返回 200 但数据不对”时日志给不出答案只有链路上的真实报文不会撒谎。这篇内容适合三类人刚接触抓包、想按步骤跑通第一个过滤器的运维和测试需要排查 TCP 重传、握手异常的后端工程师以及做协议对接比如 Modbus、MQTT、SECS/GEM 这类工业协议时想确认帧结构的现场实施人员。下面按“装好能抓 → 抓得准 → 看得懂 → 排得动”的顺序推进中间会给出可直接抄的命令和过滤器表达式。2. 装好就能抓Wireshark 安装与第一包捕获2.1 安装时那两个必须勾选的组件Windows 上从官网下载安装包后安装向导走到组件选择页时有两个东西不能省Npcap和USBPcap。Npcap 是实际负责从网卡驱动层拷贝数据的抓包驱动没有它 Wireshark 只能看到一张空网卡列表USBPcap 用于 USB 抓包做 USB 设备协议分析比如某些加密狗、工业采集卡时才用得上不装不影响普通网络抓包但装了以后不用重装。安装过程中 Npcap 会单独弹出一个窗口里面有个选项叫“Restrict Npcap drivers access to Administrators only”。如果你只是自己机器上排查问题可以不勾否则每次抓包都要以管理员身份启动 Wireshark。Linux 下则是另一套逻辑Debian/Ubuntu 系直接装sudo apt update sudo apt install wireshark # 安装过程中会问是否允许非 root 用户抓包选 Yes # 然后把当前用户加入 wireshark 组避免每次 sudo sudo usermod -aG wireshark $USER # 重新登录后生效这里的关键参数是wireshark用户组。dumpcap 这个底层抓包程序带有 setuid 权限组内成员可以调用它而不需要 root。很多人装完发现普通用户看不到网卡就是这一步没做或者没重新登录。2.2 选网卡与第一次捕获的正确姿势打开 Wireshark 后主界面列出所有网卡每张网卡后面有实时的迷你波形图。选错网卡是新手第一大坑笔记本同时有 Wi-Fi 和有线虚拟机还有一堆虚拟网卡VMware、VirtualBox、Docker 的 veth。判断方法很简单——看波形图有流量跳动的那张就是当前在用的。选中网卡后不要急着点开始先点一下工具栏那个蓝色鲨鱼鳍旁边的“捕获选项”确认两件事混杂模式是否开启默认开捕获过滤器是否为空。第一次抓包建议什么都不填直接开始抓 10 秒左右停止目的是建立“正常流量长什么样”的基线。停止后你会看到三栏包列表、协议树、十六进制。先别管协议树在包列表里随便点一个 TCP 包看协议树里Transmission Control Protocol下面的Flags。如果看到Syn、Ack这些标志位说明你抓到的确实是完整的 TCP 握手报文链路没问题。提示抓包时如果只想看某个网段可以在捕获选项的“捕获过滤器”里填host 192.168.1.100这是 BPF 语法和后面要讲的显示过滤器是两套完全不同的东西别混用。3. 过滤器是分水岭捕获过滤器与显示过滤器的分工3.1 两套语法的本质区别Wireshark 的过滤器分两层这是它最容易让人翻车的地方。捕获过滤器Capture Filter工作在抓包之前用的是 BPFBerkeley Packet Filter语法内核层面就把不匹配的包丢掉所以它省内存、省磁盘但一旦抓完就再也找不回被丢掉的包。显示过滤器Display Filter工作在抓包之后对已经抓到的包做筛选语法是 Wireshark 自己的功能强得多可以按协议字段、按字节偏移、按逻辑组合筛选。一句话记住捕获过滤器是“只抓我要的”显示过滤器是“从抓到的里面挑我要的”。生产环境长时间抓包必须用捕获过滤器控制体积临时排查直接全抓再用显示过滤器灵活得多。3.2 显示过滤器的高频表达式与字段名显示过滤器输入框在包列表上方输入时背景变绿表示语法正确变红就是写错了。下面这些是我日常用得最多的# 按 IP 过滤双向 ip.addr 192.168.1.100 # 只看某个源 ip.src 10.0.0.5 # 按 TCP 端口双向 tcp.port 8080 # 只看 SYN 包排查连接建立问题 tcp.flags.syn 1 tcp.flags.ack 0 # 只看重传网络质量差时必看 tcp.analysis.retransmission # 按 HTTP 方法过滤 http.request.method POST # 按 HTTP 响应码过滤 http.response.code 400 # 按包含关键字的载荷过滤注意大小写敏感 frame contains application/pdftcp.analysis.retransmission这个字段值得单独说。它不是协议里真实存在的字段而是 Wireshark 的分析引擎根据序列号推断出来的“专家信息”。看到大量重传基本可以判定链路丢包或对端处理不过来。frame contains是按原始字节匹配比http contains更底层抓非 HTTP 协议比如自定义二进制协议里嵌了 PDF 文件头时特别有用。3.3 用捕获过滤器把体积压下来长时间抓包如果不过滤一个千兆口几分钟就能写出几个 GB。捕获过滤器写在捕获选项里常用写法# 只抓某台主机 host 192.168.1.50 # 只抓某网段 net 192.168.1.0/24 # 只抓某端口 port 443 # 排除某台主机比如排除自己 not host 192.168.1.50 # 组合抓 80 和 443且来自某网段 (net 192.168.1.0/24) and (port 80 or port 443)BPF 语法里and、or、not是关键字、||、!也支持。注意捕获过滤器不支持按应用层内容过滤比如你不能写http.request.method POST因为 BPF 在抓包时还没解析到 HTTP 层。这是两套过滤器最实际的差异。4. 看懂 TCP/IP 四层从帧到载荷的逐层拆解4.1 四层模型在 Wireshark 里的对应关系TCP/IP 四层模型自上而下是应用层、传输层、网络层、网络接口层。Wireshark 的协议树几乎就是按这个顺序展开的点开一个包从上往下依次是协议树层级对应 TCP/IP 层典型协议Wireshark 里的字段前缀Frame物理/链路元信息无frameEthernet II网络接口层以太网ethInternet Protocol网络层IPipTransmission Control Protocol传输层TCPtcpHypertext Transfer Protocol应用层HTTPhttp这个对应关系不是巧合Wireshark 的解析器就是按封装顺序逐层剥离的。理解这一点你就能预判“我想看的字段大概在哪一层”而不是在协议树里乱翻。4.2 用 Follow TCP Stream 还原一次完整会话排查应用层问题时单个包看不出所以然需要把一次 TCP 会话的所有载荷拼起来。右键任意一个 TCP 包选Follow → TCP StreamWireshark 会把双向数据按顺序还原成一个文本窗口客户端数据默认红色服务端蓝色。这个功能在排查“上传 PDF 文件时 XSS 攻击”这类安全问题时极其好用。比如后端做了全局过滤器处理上传但你不确定过滤器有没有在正确的阶段生效Follow TCP Stream 能让你看到原始请求体里到底有没有被转义的脚本标签。如果过滤器是在 SpringMVC 层做的而攻击载荷在更底层的 multipart 解析阶段就已经落盘那抓包看到的原始字节和最终存储的内容可能不一致——这正是很多“过滤器看起来生效了但漏洞还在”的根因。4.3 用 IO Graph 看流量趋势定位异常时间点菜单Statistics → IO Graph能把抓包文件里的流量按时间画成曲线。默认是每秒所有包的数量你可以改成只统计某个过滤器的结果。比如排查“接口偶尔超时”先设一个显示过滤器tcp.port 8080再看 IO Graph超时的时间点往往对应曲线上的一个尖峰或断崖。更实用的是把 Y 轴单位从“包数”改成“字节数”这样能看出是不是某个大包比如 PDF 上传把带宽占满导致其他请求排队。配合tcp.analysis.retransmission过滤器如果重传曲线和超时时间点重合基本可以锁定是链路问题而不是应用代码问题。5. 避坑与排查抓包现场最常见的五个翻车点5.1 抓不到包网卡列表是空的现象打开 Wireshark 看不到任何网卡或者只有一张“Adapter for loopback traffic capture”。原因Npcap 没装成功或者安装时没勾选“Install Npcap in WinPcap API-compatible Mode”Linux 下则是当前用户不在 wireshark 组。解决Windows 重新运行安装包修复 NpcapLinux 执行sudo usermod -aG wireshark $USER后必须重新登录不是重开终端就行。5.2 抓到的包全是自己的看不到目标流量现象过滤器写了目标 IP但一个包都没有。原因选错了网卡。在虚拟机或 Docker 环境里流量走的是虚拟网桥物理网卡上看不到。解决先不加任何过滤器全抓看包列表里有没有目标 IP 的 ARP 或 DNS 请求确认流量到底走哪张网卡。Docker 环境通常要抓docker0或对应的 veth 对。5.3 显示过滤器语法正确但结果为空现象输入http.request.method POST背景是绿的但一个包都不显示。原因抓包时用的捕获过滤器已经把非目标流量丢了或者流量本身是 HTTPS 加密的Wireshark 解析不出 HTTP 层。解决确认捕获过滤器没有过度限制HTTPS 需要配置 SSLKEYLOGFILE 环境变量才能解密否则只能看到 TLS 记录层看不到 HTTP。5.4 大文件抓包导致 Wireshark 卡死现象抓了几分钟Wireshark 界面无响应内存飙升。原因全量抓包且没有设置环形缓冲区几百万个包同时加载到内存。解决在捕获选项里勾选“输出到多个文件”并设置环形缓冲区比如每个文件 100MB、最多 10 个文件。这样磁盘占用可控也不会一次性加载全部。5.5 时间戳对不上排查时序问题被误导现象抓包看到请求和响应的时间差和日志里对不上。原因Wireshark 默认显示的是抓包主机的本地时间而服务端日志可能是 UTC或者跨机器抓包时两台机器时钟不同步。解决菜单View → Time Display Format可以切换成 UTC跨机抓包前先对时NTP否则时序分析没有意义。6. 进阶用 tshark 和 pyshark 把抓包变成可自动化的数据管道图形界面适合交互排查但要做批量分析或集成到监控系统里就得靠命令行。Wireshark 自带的tshark是同一套解析引擎的命令行版本安装 Wireshark 时默认就有。6.1 tshark 提取字段并导出 CSV下面这条命令抓 100 个包只提取时间、源 IP、目的 IP、TCP 目的端口和 HTTP 请求方法输出成 CSVtshark -i eth0 -c 100 \ -T fields \ -e frame.time_relative \ -e ip.src \ -e ip.dst \ -e tcp.dstport \ -e http.request.method \ -E headery \ -E separator, \ -E quoted \ capture.csv-T fields表示按字段输出而不是完整协议树-e指定要提取的字段名和显示过滤器里的字段名一致-E headery输出表头-E separator,用逗号分隔-E quoted用双引号包裹字段防止内容里有逗号。这条命令可以直接塞进定时任务把抓包结果喂给后续的日志分析或告警系统。6.2 pyshark 做条件触发式抓包Python 里用 pyshark 可以在抓到特定包时触发自定义逻辑。注意热词里提到的“python2.7pyshark 无法抓包”是个经典问题——pyshark 依赖 tshark 可执行文件Python 2.7 环境下路径解析和编码问题特别多现在一律建议用 Python 3。import pyshark # 只抓 8080 端口避免全量 capture pyshark.LiveCapture(interfaceeth0, bpf_filtertcp port 8080) for packet in capture.sniff_continuously(packet_count50): try: # 判断是否是 HTTP 请求且方法为 POST if hasattr(packet, http) and packet.http.request_method POST: # 检查载荷里是否包含可疑脚本标签 if frame_raw in packet.frame.field_names: raw packet.frame_raw.value if script in raw.lower(): print(f[告警] 可疑 POST 载荷源 {packet.ip.src}) except AttributeError: # 非 HTTP 包没有 http 层跳过 continue这段代码的逻辑是用 BPF 过滤器tcp port 8080在抓包阶段就限制范围然后逐包检查是否有 HTTP 层、是否是 POST、原始字节里是否含script。packet.frame_raw.value拿到的是十六进制字符串实际匹配前可能需要转成字节再解码这里为了可读性做了简化。AttributeError的捕获是必须的因为不是每个包都有 HTTP 层直接访问会抛异常。6.3 一个我自己的习惯我现在排查线上问题第一步永远是tshark -i any -f port 目标端口 -w /tmp/cap.pcap -a duration:30先抓 30 秒存成文件再用 Wireshark 打开慢慢看。这样做的好处是现场只留一个命令不占用交互界面抓完的文件可以反复分析、可以发给同事、可以留作证据。图形界面是给“看”用的命令行是给“抓”用的把这两件事分开排查效率会高很多。抓包这件事工具只是入口真正值钱的是你对 TCP/IP 四层模型和协议行为的理解。过滤器写得再花看不懂 SYN 重传和窗口滑动照样定位不了问题。希望帮到你。本文还有配套的精品资源点击获取