简介:《Wireshark网络分析的艺术》配套资源包,面向网络管理员、开发人员及网络安全从业者,帮助读者从抓包入门到协议解析、性能分析与安全检测逐步进阶。资源共5个文件,以pdf电子书为主体,辅以htm网页资料、docx文档与txt说明,压缩包约28.8MB,涵盖Wireshark安装配置、TCP/IP协议栈各层解析、TCP连接建立与关闭、HTTP请求响应细节,以及显示过滤器、延迟丢包定位、嗅探与中间人攻击检测等高级技巧。已有589人学习下载,适合希望系统掌握抓包分析、提升网络排错与安全防护能力的读者对照实践,逐步理解网络通信本质。
1. 从一次“网页打不开”的排查说起:这本《Wireshark网络分析的艺术》到底能给你什么
上周同事甩过来一句“内网某个后台页面时好时坏,重启浏览器也没用”,我第一反应不是去看服务器日志,而是把笔记本网卡接上交换机镜像口,开了 Wireshark。三分钟抓到一次 TCP 重传加一次 RST,问题定位到中间一台负载均衡的空闲超时配置——这种场景,靠 ping 和 curl 是看不出来的。这也是为什么我一直在翻《Wireshark网络分析的艺术》这类偏实战的资料:它不教你背协议字段,而是教你把抓到的包当成证据链去还原一次通信到底发生了什么。
这份资源是一套围绕 Wireshark 抓包与协议分析的电子书加配套资料包,主体是 PDF 文档,另外附带了 Linux 相关书籍和虚拟机下载地址的说明文件。它适合三类人:刚接触抓包、想系统过一遍 TCP/IP 各层怎么在 Wireshark 里对应上的新手;天天和网络延迟、丢包、连接重置打交道的运维和开发;以及需要从流量里判断异常行为的安全分析人员。如果你只是想找个“点一下就能出结论”的工具,那它可能不适合你——Wireshark 本身是显微镜,不是诊断仪,这本书的价值在于教你怎么调焦。
2. 抓包环境怎么搭:从安装到第一个 ICMP 包落地
2.1 安装与网卡选择:为什么你抓不到包
Wireshark 在 Windows 上安装时,会一并装上 Npcap 驱动,这是真正负责从网卡拿数据包的组件。很多人装完打开界面,接口列表里只有一堆“本地连接”“以太网”的名字,分不清该选哪个。我的习惯是先开一个命令行跑ipconfig,把当前活跃网卡的 IP 和接口列表里的描述对上号。如果你用的是无线网卡,注意 Wireshark 默认可能抓不到管理帧,需要在捕获选项里勾选“监控模式”,但普通网卡驱动不一定支持,这是硬件层面的限制,不是软件设置问题。
Linux 下安装更直接,Debian 系一条命令:
sudo apt update sudo apt install wireshark # 安装过程中会询问是否允许非 root 用户抓包,选“是” # 然后把当前用户加入 wireshark 组,避免每次都要 sudo sudo usermod -aG wireshark $USER装完后需要重新登录一次让用户组生效。这里有个常见坑:如果你在服务器上通过 SSH 操作,抓包接口要选对外通信的那块网卡,而不是lo回环口,否则你只能看到本机进程之间的流量。选错接口是新手第一个“抓了半天什么都没有”的原因。
2.2 捕获过滤器与显示过滤器:两套语法别搞混
Wireshark 有两套过滤体系,这是最容易翻车的地方。捕获过滤器(Capture Filter)在抓包之前生效,用的是 BPF 语法,目的是减少抓到的数据量;显示过滤器(Display Filter)在抓包之后生效,用的是 Wireshark 自己的语法,目的是从已有数据里筛出你要看的。我见过有人把tcp.port == 80填进捕获过滤器,结果一个包都抓不到,因为捕获过滤器不认这种写法。
捕获过滤器只抓 ICMP 的写法:
# 在捕获选项的 Capture Filter 输入框里填 icmp # 只抓某台主机的 80 端口流量 host 192.168.1.100 and port 80显示过滤器筛 ICMP 并展开:
# 在顶部 Display Filter 栏输入 icmp # 只看某个 IP 相关的 TCP 重传 tcp.analysis.retransmission and ip.addr == 192.168.1.100参数说明:host后面跟单个 IP 表示源或目的任一匹配,port同理;tcp.analysis.retransmission是 Wireshark 内置的分析字段,只有它识别出重传时才会打上这个标记。如果你抓的是 HTTP,用http.request.method == "GET"比直接http更精准,后者会把所有 HTTP 相关的包都带出来,包括图片和 CSS。
2.3 抓第一个包并读懂三层结构
选好网卡点开始,然后在另一个终端ping一个外网地址。停止捕获后,在显示过滤器里输入icmp,你应该能看到成对的 Echo request 和 Echo reply。点开任意一个包,Wireshark 的分层面板会按帧、以太网、IP、ICMP 逐层展开。这里要建立的习惯是:先看 Frame 层的捕获时间和长度,再看 IP 层的源目地址和 TTL,最后看 ICMP 的 type 和 code。TTL 能帮你判断包经过了多少跳,type 8 是请求、type 0 是应答,这些在书里对应协议基础章节,但你必须自己在真实抓包里点开看一遍才有体感。
提示:抓包时如果看到大量“TCP Previous segment not captured”,通常不是网络问题,而是你抓包开始得太晚,连接已经建立过了。先开 Wireshark 再复现问题,顺序不能反。
3. 用显示过滤器把 TCP 三次握手和 HTTP 请求拆开看
3.1 跟踪一条 TCP 流:Follow TCP Stream 的正确用法
Wireshark 最实用的功能之一是右键任意 TCP 包选择 Follow → TCP Stream,它会把整条会话的载荷按方向拼出来。但很多人不知道,这个操作会自动在显示过滤器里生成一条tcp.stream eq N的过滤条件,N 是这条流的编号。如果你想回到全部包,记得清掉这个过滤器,否则你会以为其他流量消失了。
跟踪一条 HTTP 流的典型步骤:
# 1. 先抓一段浏览器访问页面的流量 # 2. 在显示过滤器输入 http,找到第一条 GET 请求 # 3. 右键该包 → Follow → TCP Stream # 4. 弹出的窗口里,红色是客户端发往服务器,蓝色是服务器返回 # 5. 关闭窗口后,过滤器栏会自动变成 tcp.stream eq 0 之类逻辑说明:Follow TCP Stream 拼的是 TCP 载荷,不解析协议语义,所以如果流量是压缩或加密的,你看到的是乱码。参数上,流编号是 Wireshark 按会话分配的,同一条连接的所有包共享一个编号,这也是为什么它能精确还原一次请求响应。书里讲 HTTP 请求和响应细节时,用的就是这个方法,但你要注意 HTTP/2 和 HTTPS 在默认情况下看不到明文,需要额外配置密钥日志或证书,这是另一个话题。
3.2 三次握手与四次挥手:在包里找状态机
TCP 连接建立的三步在 Wireshark 里表现为三个包:SYN、SYN-ACK、ACK。显示过滤器可以用tcp.flags.syn == 1 and tcp.flags.ack == 0找到第一个 SYN,然后看它的 Seq 和 Ack 号。这里的关键参数是相对序列号,Wireshark 默认把第一个包的序列号显示为 0,后续都是相对值,这样看起来更直观。如果你在 Preferences → Protocols → TCP 里关掉“Relative sequence numbers”,就会看到真实的 32 位序列号,排查某些中间设备改写序列号的问题时需要这样设。
四次挥手同理,用tcp.flags.fin == 1过滤。常见异常是只看到 FIN 没看到对应的 ACK,或者出现 RST 包。RST 通常意味着某一端认为连接已经不存在了,可能是服务进程崩溃,也可能是防火墙或负载均衡主动断开。书里讲连接关闭过程时配了实例图,但你在真实环境里抓到的 RST 往往伴随重传,需要结合tcp.analysis系列字段一起看。
3.3 用 IO Graph 看延迟和丢包趋势
Wireshark 的统计菜单里有个 IO Graph,能把一段时间内的包数量或吞吐画成折线。排查“时快时慢”类问题时,我一般先开 IO Graph 看整体流量有没有突刺,再用显示过滤器叠加tcp.analysis.retransmission的曲线。如果重传曲线和延迟高峰重合,基本可以判断是链路质量或拥塞问题,而不是应用层逻辑。
操作路径:Statistics → IO Graph,在过滤框里输入tcp.analysis.retransmission,点加号添加一条曲线,然后把 Y 轴单位从 Packets 改成 Advanced 里的SUM(Y Field)之类。参数上,Interval 默认是 1 秒,排查短时抖动可以调到 100 毫秒,但太细会导致曲线锯齿严重,反而不好看。这一步在书里属于网络性能分析部分,但很多人跳过统计功能直接看包列表,效率会低很多。
注意:IO Graph 的曲线是基于当前显示过滤器计算的,如果你之前设了
tcp.stream eq 0,那统计的只是这一条流,不是全部流量。画图前先确认过滤器栏是空的或符合你的统计意图。
4. 避坑与排查:抓包现场最容易翻车的五件事
4.1 现象:抓到的包全是“TCP segment of a reassembled PDU”
原因:Wireshark 把分片的 TCP 载荷标记为重组的一部分,真正的完整 PDU 在最后一个分片里。如果你只看单个包,会觉得应用层数据不完整。
解决:在显示过滤器里用tcp.reassembled.length > 0找到重组后的包,或者直接 Follow TCP Stream 看完整载荷。也可以在 Preferences → Protocols → TCP 里调整重组相关选项,但默认设置对大多数场景够用。
4.2 现象:中文内容显示为乱码或省略号
原因:Wireshark 默认按 ASCII 或 UTF-8 解析载荷,如果应用用的是 GBK 或其他编码,就会显示异常。热词里提到的“wireshark抓包为什么中文用....显示了”就是这个问题。
解决:在包详情面板的载荷字段上右键 → Show Packet Bytes,然后手动选择编码。或者在 Preferences → Protocols → HTTP 里指定字符集。注意这只影响显示,不影响原始字节。
4.3 现象:明明有流量,但 Wireshark 接口列表里看不到网卡
原因:Windows 上 Npcap 驱动没装好,或者网卡被其他抓包软件占用。Linux 上可能是权限问题,当前用户不在 wireshark 组。
解决:Windows 重装 Npcap 并勾选“WinPcap API 兼容模式”;Linux 用sudo dpkg-reconfigure wireshark-common重新配置权限,然后重新登录。如果还不行,检查是否有其他进程占用了抓包句柄。
4.4 现象:抓到的包时间戳顺序混乱
原因:多网卡同时抓包时,不同网卡的时钟可能有微小偏差,合并显示时顺序会乱。另外虚拟机里的时间同步也会影响。
解决:尽量只选一个接口抓包;如果必须多接口,在捕获选项里开启“Use pcapng format”并注意时间戳精度设置。虚拟机场景下确保安装了增强工具并同步了时间。
4.5 现象:过滤表达式报红,提示语法错误
原因:捕获过滤器和显示过滤器语法混用,或者字段名拼写错误。比如把ip.addr写成ip.add,或者用了不存在的协议字段。
解决:显示过滤器输入框变红时,看底部状态栏的提示,它会告诉你哪个字段无法识别。捕获过滤器没有实时提示,建议先在显示过滤器里验证逻辑,再翻译成 BPF 语法。书里附的实例分析可以对照检查字段名。
5. 进阶:用 tshark 做批量分析和自动化验证
图形界面适合交互式排查,但如果你要处理几十个抓包文件,或者想把分析步骤固化成脚本,tshark才是效率工具。它是 Wireshark 的命令行版本,安装 Wireshark 时自带。我一般用它做两件事:批量提取字段和自动统计异常包。
批量提取每个包的源 IP、目的 IP 和 TCP 标志位:
tshark -r capture.pcap -T fields -e ip.src -e ip.dst -e tcp.flags \ -Y "tcp.flags.reset == 1" > rst_packets.txt # -r 指定读取文件,-T fields 表示按字段输出 # -e 后面跟要提取的字段名,可以多个 # -Y 是显示过滤器,这里只输出 RST 包逻辑说明:-T fields配合-e是 tshark 最常用的输出模式,适合导入 Excel 或做进一步脚本处理。-Y的语法和图形界面的显示过滤器完全一致,所以你可以在界面上调好过滤器再复制过来。参数上,如果字段不存在,tshark 会输出空值,不会报错,所以检查结果时要注意空行。
统计每个 TCP 会话的重传次数:
tshark -r capture.pcap -q -z conv,tcp \ -Y "tcp.analysis.retransmission" 2>/dev/null | head -20 # -q 表示安静模式,不输出每个包的详情 # -z conv,tcp 是统计选项,输出 TCP 会话汇总 # 结合 -Y 可以只看有重传的会话这里-z后面跟的统计模块有很多种,conv,tcp只是其中之一。书里讲性能分析时提到的“快速定位问题会话”,用这个命令比在界面里一个个点开快得多。注意2>/dev/null是为了屏蔽 tshark 在 stderr 输出的进度信息,让结果更干净。
验证方法:拿一个已知有重传的抓包文件,分别用图形界面的 IO Graph 和 tshark 的统计命令跑一遍,对比重传数量是否一致。如果一致,说明你的过滤条件写对了;如果不一致,检查是否漏了tcp.analysis的某个子字段。从那以后我每次拿到新的抓包文件,都会先用 tshark 跑一遍会话统计和异常包过滤,把可疑会话筛出来再回图形界面细看,这样比从头翻包列表快得多。希望帮到你。
本文还有配套的精品资源,点击获取