CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

抓包与协议分析:从 Wireshark 到 BPF

分类:计算机基础 · 路径:docs/topics/packet-analysis/README.md

#wireshark#tcpdump#bpf#pcap#tshark

能用 tcpdump BPF 过滤、Wireshark 解码、tshark 命令行分析常见协议与 HTTPS 密钥

父主题

计算机网络:从物理层到 HTTP/3 的全栈协议与排查

子主题(0)

抓包与协议分析:从 Wireshark 到 BPF

0. 元信息

1. 学习路线

抓包位置与权限
  → Ethernet、IP、TCP/UDP 字段
  → pcap 与 PCAPNG
  → tcpdump 采集
  → BPF capture filter
  → Wireshark display filter
  → Follow Stream 与重组
  → tshark 字段导出
  → DNS、HTTP、TLS 分析
  → SSLKEYLOGFILE 与 TLS 解密
  → 性能、丢包与自动化报告

我们先决定在哪抓,再决定抓什么。过滤语法和证据保存都要可复现。

2. 阶段周数分配

阶段4 周方案5 周方案备注
1. 采集基础0.5 周0.75 周接口、权限、snaplen、时间戳
2. pcap 与链路解码0.5 周0.5 周Ethernet、VLAN、Linux cooked capture
3. BPF 过滤0.75 周1 周host、net、port、proto、字节偏移
4. Wireshark 分析0.75 周1 周display filter、stream、Expert Info
5. tshark 自动化0.5 周0.75 周字段、统计、JSON/CSV
6. TLS 与应用协议0.5 周0.5 周DNS、HTTP、TLS 解密
7. 综合案例0.5 周0.5 周采集、分析、报告、脱敏

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1. 抓包边界观察点、镜像口、主机抓包、权限、隐私一张采集拓扑图能说明当前抓包能看到和看不到什么
2. 文件格式pcap、PCAPNG、接口块、时间戳、snaplen两种格式各一份样本能解释多接口场景为何优先 PCAPNG
3. tcpdump-i-nn-s-w-r、轮转可复现采集命令能在不做名称解析时完整保存 payload
4. BPFprimitive、方向、布尔组合、字节偏移10 条过滤表达式能在采集前缩小流量且不漏目标会话
5. Wiresharkdissector、display filter、Follow Stream、重组标注过的分析截图能从帧定位到字段和会话
6. TCP 排障三次握手、重传、乱序、窗口、RST、RTT一份 TCP 故障时间线能区分真正丢包与抓包点造成的假象
7. 应用协议DNS、HTTP、TLS、VoIP 基础三种协议分析记录能写显示过滤器并导出关键字段
8. TLS 解密SSLKEYLOGFILE、密钥日志、会话限制一份已解密 HTTPS 样本能解释私钥为何通常不能解密 TLS 1.3
9. 自动化报告tshark、capinfos、editcap、mergecap、统计一键可重复的分析命令集能从大文件切片、提取字段并保留来源

4. 第一周任务

任务当天交付
Day 1安装 Wireshark、tcpdump、tshark;记录版本、接口和权限工具版本与采集约定
Day 2ip linktcpdump -D 找接口;抓 ARP、ICMP两份短 pcap
Day 3识别 Ethernet、IPv4/IPv6、TCP/UDP 头字段一张逐层字段表
Day 4练习 hostnetportsrcdstand/or/not10 条 BPF 与命中数
Day 5在 Wireshark 中练习 ip.addrtcp.streamdnshttp.request过滤器清单
Day 6用 tshark 导出 DNS 查询和 HTTP Host命令、输出与字段说明
Day 7项目:采集一次 Web 访问并还原时间线pcap、命令、截图、结论

Day 7 拆解

步骤 A —— 最小可用(60 分钟)

  1. 运行 tcpdump -i any -nn -s 0 -w /tmp/cap.pcap tcp port 443
  2. 在另一终端访问一个测试 HTTPS 站点;
  3. 停止采集,用 capinfos /tmp/cap.pcap 记录包数、时长和大小;
  4. 在 Wireshark 中定位 TCP 握手和 TLS ClientHello;
  5. 保存原始 pcap 和采集命令。

步骤 B —— 补齐四类边界(45 分钟)

5. 阶段通用验收

  1. 不看资料写出 10 条常用 tcpdump BPF;
  2. 能解释 capture filter 与 display filter 的执行位置和语法差异;
  3. 从一个包逐层指出链路、网络、传输、应用字段;
  4. 测试空文件、截断包、多接口 PCAPNG、乱序与重传;
  5. 至少分析 DNS、TCP、HTTP/TLS 三类流量并保存实际输出;
  6. 能说明抓包点、offload、时钟和丢包如何影响判断;
  7. 能把图形界面分析改写成 tshark 命令。

6. 最终验收

7. 综合项目

首选:Web 请求故障分析包。搭建一个可控客户端和服务端。制造 DNS 慢、连接拒绝、服务端延迟、TLS 配置错误中的至少三种故障。

备选:VoIP 通话质量检查 / API 延迟拆分 / 容器东西向流量分析。

项目必做要求:

  1. 场景说明:拓扑、IP、接口、抓包点、时间同步;
  2. 采集命令:完整 tcpdump 命令和 BPF;
  3. 原始证据:未编辑 pcap/PCAPNG 的哈希和保管位置;
  4. 分析步骤:Wireshark 过滤器、tshark 命令、关键帧号;
  5. 故障时间线:DNS、TCP、TLS、HTTP 分段耗时;
  6. 边界测试:截断、丢包、offload、多接口至少各一次;
  7. 安全处理:脱敏 Cookie、Authorization、查询参数、密钥日志;
  8. README:依赖、复现、结论、限制与清理步骤。

本主题贡献

本主题沉淀抓包证据链:tcpdump 采集 + BPF 过滤、Wireshark / tshark 解码、pcap / PCAPNG 文件管理与 SSLKEYLOGFILE TLS 解密,所有结论都必须可复现且带哈希。

职责(3 项)

  1. 写 tcpdump BPF 表达式(host/net/port/proto/字节偏移 + and/or/not),能在采集前缩窄流量且不漏目标会话,能区分 capture filter(采集前执行)与 display filter(解码后执行)的位置差异;
  2. 管理 pcap/PCAPNG 文件(capinfos 看元数据、editcap 切片、mergecap 合并、reordercap 排序),保留只读原始证据 + 哈希,分析副本脱敏后分享;
  3. 用 SSLKEYLOGFILE 在受控客户端导出 TLS 会话秘密,配 Wireshark 解密 TLS 1.3,能解释为什么 TLS 1.3 + ECDHE 通常不能用服务端私钥解密(没有前向保密破解路径)。

交付物(4 项)

  1. 10 条 tcpdump BPF + 命中数(tcp[tcpflags] & tcp-syn != 0udp port 53 and host 1.1.1.1、字节偏移过滤等),能写出 tcpdump -dd 编译后表达式;
  2. Wireshark display filter 清单(ip.addrtcp.streamdnshttp.requesttls.handshake.extensions_server_name),能区分五元组过滤与会话过滤;
  3. tshark 字段导出脚本(tshark -r cap.pcap -Y 'http.request' -T fields -e http.host),可复用于 100+ pcap;
  4. 一份已解密 HTTPS pcap(SSLKEYLOGFILE + Wireshark)+ 未解密 pcap 对照,证明解密边界。

指标(3 项)

  1. 高吞吐抓包丢包率 ≤ 0.1%(-B buffer、-s 0 snaplen、-W 轮转 + dropped by kernel 监控);
  2. BPF 表达式误判率 = 0(先宽后窄,采样验证后再压紧);
  3. pcap 脱敏覆盖率 100%(Cookie/Authorization/查询参数/密钥日志零泄漏,保留原件访问控制)。

8. 推荐开源资料

角色资料链接用法
工具手册Wireshark User’s Guidehttps://www.wireshark.org/docs/wsug_html_chunked/display filter、统计、TLS 解密
过滤语法pcap-filter(7)https://www.tcpdump.org/manpages/pcap-filter.7.htmlBPF 主参考
采集工具tcpdump manualhttps://www.tcpdump.org/manpages/tcpdump.1.html采集与轮转参数
命令分析tshark manualhttps://www.wireshark.org/docs/man-pages/tshark.html字段导出和统计
文件处理editcap manualhttps://www.wireshark.org/docs/man-pages/editcap.html切片、去重、时间修正
格式规范PCAP Next Generationhttps://datatracker.ietf.org/doc/draft-gharris-opsawg-pcap/PCAPNG 块结构
实战样本Wireshark Sample Captureshttps://wiki.wireshark.org/SampleCaptures已知协议练习
BPF 实现libpcaphttps://github.com/the-tcpdump-group/libpcap编译器与 API 源码

Wireshark 采用 GPL-2.0-or-later。tcpdump 与 libpcap 使用 BSD 风格许可证。引用代码或分发二进制前先看仓库 LICENSE。

9. 学习资料汇聚(v0.3 自包含)

本节由本计划生成。工具行为以官方手册、格式规范和实际样本为准。

9.1 背景与动机

网络故障常跨进程、内核、交换机和远端服务。日志只展示应用看到的结果。抓包保留线上实际传输的帧、时间戳和协议字段,能回答谁先发、对方是否回、延迟出在哪。

1987 年的 tcpdump 把命令行抓包带到 Unix。Van Jacobson、Craig Leres、Steven McCanne 等人的 BPF 设计让过滤在内核侧执行。Gerald Combs 在 1998 年创建 Ethereal,后来更名 Wireshark。今天 libpcap、tcpdump、Wireshark、tshark 仍是协议开发和网络排障常用工具。

抓包也会收集账号、Cookie、业务数据和密钥。我们只抓必要范围。共享前要脱敏,密钥日志按敏感凭据保管。

9.2 概念地图

flowchart LR
  Wire[链路流量] --> Point[抓包点 / 接口]
  Point --> Capture[libpcap / Npcap]
  BPF[BPF capture filter] --> Capture
  Capture --> File[pcap / PCAPNG]
  File --> WS[Wireshark]
  File --> TS[tshark]
  WS --> Dissector[Protocol dissector]
  TS --> Dissector
  Dissector --> DF[display filter]
  Dissector --> Stream[TCP reassembly / Follow Stream]
  Dissector --> Stats[RTT / IO Graph / Expert Info]
  Keys[SSLKEYLOGFILE] --> TLS[TLS 解密]
  TLS --> Dissector
  File --> Tools[capinfos / editcap / mergecap]

BPF 在采集前决定哪些包进入文件。display filter 在解码后筛选视图。pcap 保存包和基础元数据。PCAPNG 还能记录多接口、名称解析和注释。dissector 把字节解释成字段。TCP 重组再把分段还原为应用数据。

9.3 基础知识讲解

经典论文

资料角色评分链接
The BSD Packet Filter: A New Architecture for User-level Packet CaptureBPF 原始架构5https://www.tcpdump.org/papers/bpf-usenix93.pdf
tcpdump: A Packet Analyzertcpdump 设计与实践4https://www.tcpdump.org/papers/tcpdump.pdf
End-to-End Arguments in System Design判断观测层边界4https://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf
Improving Round-Trip Time Estimates in Reliable Transport ProtocolsRTT 与重传计时背景4https://dl.acm.org/doi/10.1145/52325.52356

经典书籍

资料角色评分链接
《TCP/IP Illustrated, Volume 1》W. Richard Stevens用包理解 TCP/IP5https://www.informit.com/store/tcp-ip-illustrated-volume-1-the-protocols-9780321336316
《Practical Packet Analysis》Chris SandersWireshark 实战入门5https://nostarch.com/packetanalysis3
《Wireshark Network Analysis》Laura Chappell系统化分析方法4https://www.chappell-university.com/books
《Network Analysis Using Wireshark Cookbook》Yoram Orzach常见分析配方4https://www.packtpub.com/product/network-analysis-using-wireshark-cookbook/9781849517645

优秀博客

资料角色评分链接
Wireshark Wiki — CaptureSetup抓包位置与平台配置5https://wiki.wireshark.org/CaptureSetup
Wireshark Wiki — TLSSSLKEYLOGFILE 与 TLS 解密5https://wiki.wireshark.org/TLS
SharkFest Retrospective官方社区演讲资料4https://sharkfest.wireshark.org/retrospective/
Packet-FooWireshark 与网络取证案例4https://blog.packet-foo.com/
Cloudflare — BPF, eBPF, XDP and BpfilterBPF 家族关系4https://blog.cloudflare.com/bpf-the-forgotten-bytecode/

核心人物

人物贡献关键出处
Van Jacobsontcpdump、libpcap 与 BPF 共同作者tcpdump 与 BPF 论文
Steven McCanneBPF 共同设计者1993 USENIX BPF 论文
Craig Lerestcpdump 早期作者tcpdump 项目历史
Gerald CombsEthereal/Wireshark 创建者Wireshark 项目历史
Guy Harrislibpcap、Wireshark 与 PCAPNG 长期维护Wireshark 与 pcapng 规范工作

开发方法

方法适用关键点
先写观测假设所有抓包任务写清预期包、抓包点和能推翻假设的字段
先宽后窄不确定流量特征短时宽抓,确认五元组后收紧 BPF
保留原始证据线上与安全分析原文件只读保存;分析副本可切片、脱敏
时间线驱动延迟和超时按 frame time、stream、方向排列事件,不只看 Expert Info
双端抓包丢包与中间链路问题对比相同序列号在两端是否出现,校正时钟误差
命令化复现重复分析和交接把 GUI 过滤器转成 tshark,记录工具版本和字段

9.4 经典问题与经典案例

#问题为什么重要最简答案
1capture filter 和 display filter 有何区别写错会漏包或过滤无效BPF 在采集前执行;display filter 在解码后执行
2为什么建议 -nn名称解析会制造额外流量和等待禁用主机名与端口名解析,保留原始数值
3snaplen 太小会怎样payload 和后续头部可能被截断-s 0 捕获完整包,空间受限时再明确设值
4-i any 为什么没有普通 Ethernet 头Linux 聚合多接口需要统一链路类型常见为 Linux cooked capture,逐接口抓可保留原链路头
5TCP Retransmission 是否一定代表网络丢包抓包点也可能漏包查 capture drop、双端包和序列号时间线
6checksum bad 是否真坏包网卡 offload 可能在抓包后才填校验和在接收端复核,或临时关闭 offload 对照
7如何定位一次 HTTP 请求同一连接有多个请求tcp.stream、请求字段、时间和响应关联
8TLS 1.3 如何解密服务器私钥通常不够在受控客户端导出 SSLKEYLOGFILE,再配置 Wireshark
9大 pcap 怎么处理GUI 容易慢或耗尽内存用 BPF 重抓,或用 editcap 切片、tshark 流式筛选
10VoIP 声音卡顿怎么看包到达不等于播放平滑看 RTP sequence、jitter、loss,并结合端点缓冲

9.5 学习难点

概念难点

难点为什么会卡突破路径
帧、包、段、流混用不同协议层名称相近每次写结论都标 Ethernet frame、IP packet、TCP segment 或 stream
BPF 与 display filter 混淆两套语法表达相似配对练习:tcp port 443tcp.port == 443
抓包视角同一会话在不同位置长得不同画 NAT、隧道、容器和 offload 的观察点
pcap 与 PCAPNG扩展名不总能说明内部格式capinfos 检查文件类型、接口和精度

思维难点

难点为什么会卡突破路径
从症状到可证伪假设容易先认定“网络慢”写出 DNS、建连、TLS、服务处理四段预期时间
区分线上异常与采集异常抓包也会丢包、乱序和截断同时检查 drop counter、snaplen、时钟与双端证据
相关不等于因果Expert Info 标签很醒目回到序列号、ACK、时间和端点行为
加密流量边界能看到握手却看不到业务字段列出元数据可见范围,再决定是否能安全取得密钥日志

工程难点

难点为什么会卡突破路径
权限配置root 抓包权限过大Linux 用 dumpcap capabilities 或受控抓包组,避免长期 root GUI
高吞吐丢包磁盘、缓冲区和解码跟不上用 BPF、增大缓冲、只写文件、轮转并检查 dropped packets
字段名变化tshark 版本间 dissector 字段会变tshark -G fields 查询当前版本,报告中记版本
脱敏payload 常含凭据和个人数据在副本上处理,删除敏感包或字段,保留原件访问控制
TLS 密钥管理SSLKEYLOGFILE 可解密会话限定测试环境、最小授权、完成后删除并记录处置

9.6 技术标准与接口

9.6.1 Entity

名称版本发布组织状态许可证 / 可访问性
libpcap file formatpcap savefiletcpdump/libpcap project广泛使用规范公开;libpcap BSD 风格许可证
PCAP Next Generationdraft-gharris-opsawg-pcap-06IETF OPSAWG Internet-Draft草案,生态广泛支持免费公开
Classic BPF1993 BPF / libpcap filter languageBSD/tcpdump project稳定、广泛使用论文与手册公开
Wireshark display filterWireshark 4.xWireshark Foundation活跃实现接口文档公开;GPL-2.0-or-later
tcpdump4.xtcpdump group活跃BSD 3-Clause
TSharkWireshark 4.xWireshark Foundation活跃GPL-2.0-or-later

9.6.2 Scope

9.6.3 Structure

pcap 由全局头和一串 packet record 组成。每条记录含时间戳、捕获长度、线上长度和包字节。PCAPNG 使用块结构,常见块包括 Section Header Block、Interface Description Block、Enhanced Packet Block、Name Resolution Block。

必须掌握的接口与字段:

真实命令:

tcpdump -i any -nn -s 0 -w /tmp/cap.pcap tcp port 443
tshark -r cap.pcap -Y 'http.request' -T fields -e http.host
editcap -c 1000 cap.pcap split.pcap

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级名称必须看到什么
L0知道存在知道 tcpdump 负责采集,Wireshark/tshark 负责解码,文件常见 pcap/PCAPNG
L1看得懂示例能读五元组、时间戳、长度和基本协议树,能使用简单 BPF 与 display filter
L2能正确调用能选接口、完整采集、组合 BPF、Follow Stream、用 tshark 导出字段
L3能解释与排错能处理重传、乱序、offload、截断、抓包丢失,并用 SSLKEYLOGFILE 分析授权 HTTPS
L4能设计与扩展能设计高吞吐采集方案、写 dissector 或 libpcap 程序、管理证据链与数据保留策略

本计划要求达到:L3。做协议工具、网络取证平台或高吞吐探针时进入 L4。

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础:链路层、IP、TCP/UDP、协议字段、抓包格式
  4. 工程技术:tcpdump、Wireshark、tshark、自动化分析
  5. Web 与后端:DNS、HTTP、TLS、API 故障排查
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力:证据记录、故障报告、协作交接
  9. 安全与可靠性:流量脱敏、TLS 密钥、网络取证

本计划归属:计算机基础 主 + 工程技术 辅。


直接依赖(3)

查看知识图谱