首页 / 资讯中心 / 文章详情

Wireshark抓包教程:从界面到过滤器与TCP流分析实战

Wireshark抓包教程:从界面到过滤器与TCP流分析实战 ★ FEATURED ARTICLE
简介这份PDF教程面向网络协议分析与网络运维的入门及进阶学习者围绕Wireshark这一抓包工具展开系统讲解帮助读者理解TCP/IP中各协议的实际工作过程并掌握抓包、协议分析与网络监控的基本方法。资源包内仅含1个PDF文件压缩后约2.26MB篇幅紧凑、便于随身查阅与打印学习。教程从启动界面与抓包界面讲起依次介绍菜单栏、工具栏、过滤工具栏、封包列表、封包详细信息与十六进制数据查看面板等核心模块并重点区分捕捉过滤器与显示过滤器的用途、设置时机及语法规则配合实例说明如何从庞杂结果中快速定位所需记录。目前已有556人学习下载适合希望借助实践方式理解协议交互、提升排错效率的开发者与运维人员参考。1. 抓包这件事从一份 2011 年的 PDF 教程说起很多人第一次接触网络协议分析都是从 Wireshark 开始的。但真正让人卡住的往往不是软件怎么装而是打开界面之后那一屏密密麻麻的封包列表——源地址、目的地址、协议、端口、长度、十六进制数据全堆在一起根本不知道从哪看起。这份《wireshark的使用教程[整理].pdf》就是冲着这个问题来的它不讲空泛的理论而是用实践的方式帮你理解 TCP/IP 四层模型里各个协议到底是怎么工作的。教程从启动界面、抓包界面讲起把菜单栏、工具栏、过滤工具栏、封包列表、封包详情、十六进制数据面板逐一拆开再落到捕捉过滤器和显示过滤器这两套核心机制上。适合刚入门网络工程、安全分析、后端排障的从业者也适合已经会用 Wireshark 但一直靠“肉眼翻包”的老手——因为过滤器的语法和逻辑才是把抓包从体力活变成技术活的分水岭。2. 界面不是摆设六个面板各管什么2.1 主窗口的六个区域与它们的分工Wireshark 的主界面看起来复杂但拆开之后其实就六个部分每个部分负责一件事。理解这个分工比记住菜单位置重要得多。菜单栏是总入口File 管打开、合并、保存、导出捕捉文件Edit 管查找包、标记包、设置预设参数View 控制显示方式比如颜色和字体缩放GO 用来跳到指定包Analyze 处理显示过滤和协议解码Statistics 出统计窗口Help 是参考内容。工具栏是菜单里高频操作的快捷方式过滤工具栏则是你后面用得最多的地方——输入过滤表达式背景绿色表示语法正确红色表示有问题改完记得点 Apply 或者回车才生效。封包列表面板显示每个包的摘要你能看到发送方和接收方的 MAC/IP 地址、TCP/UDP 端口号、协议类型。这里有个细节值得注意如果捕获的是 OSI 第二层的封包Source 和 Destination 列显示的是 MAC 地址Port 列会是空的如果是第三层或更高层显示的就是 IP 地址Port 列只在第四层或更高层才出现。封包详情面板按 OSI 层次分组展示选中包的详细信息可以逐层展开。十六进制数据面板显示的是同一个包的数据只是换成十六进制格式。状态栏在底部显示当前程序状态和捕捉数据的补充信息。提示封包列表的列可以增删和改颜色路径是 Edit 菜单下的 Preferences。别小看这个把关键列调出来能省很多翻包时间。2.2 从选网卡到抓到第一个包启动 Wireshark 后抓包界面的入口在 File 菜单下。点开之后会列出本机所有网卡如果你装了虚拟机会看到虚拟网卡也在列表里。这里第一个容易翻车的地方就是选错网卡——虚拟网卡上抓不到真实流量反之亦然。选真实网卡点右边的 Start 开始抓包。抓包过程中封包列表会实时刷新。如果你想验证 TCP/IP 四层模型里各层协议的实际表现可以按下面的步骤做一个最小实验# 第一步在过滤工具栏输入显示过滤器只看 ICMP 协议 icmp # 第二步另开一个终端ping 一个可达地址 ping -c 4 8.8.8.8 # 第三步回到 Wireshark观察封包列表 # 你应该能看到 4 组 Echo request / Echo reply # 点开任意一个包在封包详情里展开 # Frame - Ethernet II - IP - ICMP # 这就是第二层到第三层的完整封装过程这段操作背后的逻辑是ICMP 是 ping 工具使用的协议它工作在第三层。你在封包详情里展开的层次结构正好对应 TCP/IP 四层模型自上而下的封装关系。Ethernet II 是第二层帧头IP 是第三层包头ICMP 是第三层载荷。参数方面-c 4表示只发 4 个包方便你数如果不加这个参数ping 会一直发下去封包列表会不断刷新反而不好观察。常见做法是先用一个简单的、已知行为的协议比如 ICMP 或 DNS来熟悉界面再去抓 HTTP 或 TCP 这种交互复杂的流量。我一般会建议新手先抓一次 ping再抓一次 DNS 查询最后再碰 TCP 流——这个顺序能让你的理解曲线平滑很多。3. 两套过滤器捕捉过滤器和显示过滤器3.1 捕捉过滤器在抓之前就砍掉噪音捕捉过滤器是数据经过的第一层过滤器它决定什么样的信息被记录在捕捉结果中。这意味着它必须在开始捕捉之前设置好一旦开始抓包就没法改了。它的语法和 TCPdump 一样因为底层用的是同一套库——Linux 上是 LibpcapWindows 上是 Winpcap。设置步骤是选择 Capture 菜单下的 Options在 Capture filter 栏填写表达式或者点 Capture filter 按钮给过滤器起个名字保存下来方便以后复用然后点 Start 开始捕捉。捕捉过滤器的语法结构是Protocol Direction Host(s) Value Logical Operations Other expression。举个例子tcp dst 10.1.1.1 80 and tcp dst 10.2.2.2 3128意思是只抓目的地址是 10.1.1.1 的 80 端口以及目的地址是 10.2.2.2 的 3128 端口的 TCP 包。各字段的取值规则需要记一下。Protocol 可以是 ether、fddi、ip、arp、rarp、decnet、lat、sca、moprc、mopdl、tcp、udp不指定就默认所有支持的协议。Direction 可以是 src、dst、src and dst、src or dst不指定就默认 src or dst。Host(s) 可以是 net、port、host、portrange不指定就默认 host。Logical Operations 有 not、and、ornot 优先级最高or 和 and 优先级相同从左到右运算。# 捕捉过滤器示例只抓特定主机的 TCP 80 端口流量 tcp dst port 80 and host 192.168.1.100 # 排除 ICMP避免 ping 干扰 not icmp # 抓取端口范围在 2000 到 2500 之间的 UDP 或 TCP 包 src portrange 2000-2500 # 组合条件来源是 10.7.2.12但目的地不是 10.200.0.0/16 src host 10.7.2.12 and not dst net 10.200.0.0/16这里有个容易踩的坑当关键字被用作值时需要用反斜杠转义。比如ether proto \ip和ip proto \icmp反斜杠的作用是告诉解析器这里的 ip 和 icmp 是值而不是关键字。另外可以在 ip 或 ether 后面使用 multicast 和 broadcast 关键字想排除广播请求时no broadcast会很有用。3.2 显示过滤器抓完之后精细查找显示过滤器是在捕捉结果中进行详细查找的它比捕捉过滤器更强大而且修改条件时不需要重新抓包。这是它和捕捉过滤器最本质的区别——捕捉过滤器是“抓之前决定不抓什么”显示过滤器是“抓之后决定看什么”。显示过滤器的语法结构是Protocol String1 String2 Comparison operator Value Logical Operations Other expression。Protocol 可以是 OSI 模型第二到第七层的协议点 Expression 按钮能看到完整列表。String1 和 String2 是协议的子类点父类旁边的展开箭头就能选。比较运算符有六种英文写法和 C 语言写法对应关系是eq 对应 ne 对应 !gt 对应 lt 对应 ge 对应 le 对应 。逻辑运算符有四种and 对应 or 对应 ||xor 对应 ^^not 对应 !。其中 xor 是逻辑异或只有当两个条件中恰好一个满足时才显示结果。# 显示过滤器示例显示 SNMP 或 DNS 或 ICMP 封包 snmp || dns || icmp # 显示来源或目的 IP 为 10.1.1.1 的封包 ip.addr 10.1.1.1 # 显示来源不为 10.1.2.3 或者目的不为 10.4.5.6 的封包 ip.src ! 10.1.2.3 or ip.dst ! 10.4.5.6 # 显示包含 TCP SYN 标志的封包 tcp.flags.syn 0x02 # 显示目的 TCP 端口为 25 的封包 tcp.dstport 25参数说明方面ip.addr匹配来源或目的 IPip.src只匹配来源ip.dst只匹配目的。tcp.port匹配来源或目的端口tcp.dstport只匹配目的端口。tcp.flags匹配包含 TCP 标志的封包tcp.flags.syn 0x02则精确匹配 SYN 标志。如果表达式语法正确输入框背景是绿色如果错误背景是红色。这个颜色反馈是实时的不用等回车。注意ip.src ! 10.1.2.3 or ip.dst ! 10.4.5.6这个表达式的实际含义容易理解错。它显示的是来源 IP 除了 10.1.2.3 以外的任意包加上来源任意但目的 IP 除了 10.4.5.6 以外的包。如果你想要的是“来源不是 10.1.2.3 且目的不是 10.4.5.6”应该用 and 而不是 or。4. 追踪 TCP 流把散包拼成完整对话4.1 Follow TCP Stream 的操作与参数抓包时最让人头疼的场景之一是你要分析一个 TCP 会话但封包列表里成百上千个包混在一起根本看不出哪几个属于同一个流。Wireshark 的 Follow TCP Stream 功能就是解决这个问题的。操作路径是在封包列表里选中一个你感兴趣的 TCP 包然后点 Analyze 菜单下的 Follow TCP Stream或者直接在包上右键选这个选项。Wireshark 会自动创建一个合适的显示过滤器并弹出一个对话框把整个 TCP 流的所有数据按顺序展示出来。从 A 到 B 的通信标记为红色从 B 到 A 的通信标记为蓝色颜色可以在 Edit 菜单的 Preferences 里改。对话框里可以做的操作包括Save As 保存流数据Print 打印流数据Direction 选择显示方向Entire conversation、data from A to B only、data from B to A onlyFilter out this stream 应用一个显示过滤器把当前流排除掉Close 关闭对话框并移除过滤器影响。# 手动复现 Follow TCP Stream 的过滤逻辑 # 假设你选中了一个源 IP 为 192.168.1.10、目的 IP 为 93.184.216.34、 # 源端口 54321、目的端口 80 的 TCP 包 # 对应的显示过滤器是 tcp.stream eq 0 # 如果你想看这个流里所有 HTTP 请求 tcp.stream eq 0 and http.request # 如果你想看这个流里所有 HTTP 响应 tcp.stream eq 0 and http.response参数说明tcp.stream eq 0里的数字是 Wireshark 自动分配的流编号每个 TCP 连接一个编号。这个编号在封包详情的 TCP 层里能看到。用流编号过滤比用 IP 和端口组合更准确因为同一个 IP 和端口之间可能有多个 TCP 连接。4.2 流数据的五种查看格式Follow TCP Stream 对话框支持五种数据查看格式每种适合不同场景。ASCII 格式适合基于 ASCII 的协议比如 HTTP你能直接读到请求头和响应体。EBCDIC 是 IBM 的字符二进制编码标准一般用不到。HEX Dump 显示所有数据的十六进制形式适合二进制协议但会占用大量屏幕空间。C Arrays 把流数据导出成 C 语言数组格式方便嵌入程序。RAW 加载原始数据到其他应用做进一步分析Save As 会保存为二进制文件。我一般会先用 ASCII 看一遍确认是文本协议还是二进制协议。如果是 HTTP直接就能看到请求方法、路径、头部字段和响应状态码。如果是二进制协议切到 HEX Dump对照协议文档逐字段解析。这个习惯能帮你快速判断一个流值不值得深入分析。提示在捕捉过程中TCP 流不能实时更新。想看到最新内容需要重新打开对话框。这是很多人第一次用的时候会困惑的地方——明明还在抓包为什么流内容不刷新。5. 避坑与排查五个血泪经验5.1 抓不到包先查网卡选对没有现象点 Start 之后封包列表一直空白或者只有零星几个包。原因选错了网卡。装了虚拟机的机器上虚拟网卡和真实网卡同时存在选虚拟网卡抓不到物理网络流量。解决在 Capture Options 里确认网卡名称或者先禁用虚拟网卡再抓。另一个常见原因是权限不够Linux 下需要 root 或加入 wireshark 用户组。5.2 过滤器语法正确但结果不对现象输入框背景是绿色说明语法没问题但过滤出来的结果和预期不符。原因逻辑运算符优先级理解错了。and 和 or 优先级相同从左到右运算not tcp port 3128 and tcp port 23实际等价于(not tcp port 3128) and tcp port 23而不是not (tcp port 3128 and tcp port 23)。解决用括号明确优先级别依赖默认顺序。5.3 捕捉过滤器写了但没生效现象在 Capture filter 栏填了表达式开始抓包后发现过滤没起作用。原因捕捉过滤器必须在开始捕捉前设置而且设置的位置是 Capture Options 对话框不是主界面的过滤工具栏。主界面那个过滤工具栏是显示过滤器两者容易搞混。解决记住一个口诀——捕捉过滤器在 Capture 菜单的 Options 里显示过滤器在主界面工具栏。5.4 Follow TCP Stream 看不到最新数据现象抓包还在进行中打开 Follow TCP Stream 对话框发现内容不更新。原因这是设计行为TCP 流在捕捉过程中不会实时刷新。解决关闭对话框重新打开或者先停止抓包再分析。如果你需要实时看流内容可以改用显示过滤器tcp.stream eq N在主界面看虽然不如对话框直观但会实时刷新。5.5 十六进制面板看不懂以为抓错了现象封包详情里明明显示的是 HTTP 协议但十六进制面板里全是数字和字母看不出内容。原因十六进制面板显示的是原始字节不是解析后的文本。HTTP 是文本协议但传输时仍然是字节流。解决在十六进制面板里右侧通常有 ASCII 对照列直接看那一列就能读到文本内容。如果右侧没有在 View 菜单里打开“显示 ASCII 对照”选项。6. 从看懂一个包到看懂一个协议Wireshark 用起来不难难的是看懂这些包。这句话是那份 PDF 教程里最实在的一句。界面和过滤器只是工具真正的门槛在于你得知道 TCP/IP 四层模型里每一层负责什么每一层的头部字段是什么含义协议之间怎么交互。我的习惯是每学一个新协议先用 Wireshark 抓一次真实流量然后对照协议文档逐字段拆。比如学 TCP 三次握手就抓一次完整的连接建立过程在封包详情里展开 TCP 层看 Sequence Number、Acknowledgment Number、Flags 这几个字段怎么变化。学 DNS就抓一次域名解析看 Query 和 Response 的 Transaction ID 是否匹配看 Flags 里的 QR、Opcode、RCODE 字段。# 验证 TCP 三次握手的显示过滤器 tcp.flags.syn 1 and tcp.flags.ack 0 # 这是第一个 SYN 包 tcp.flags.syn 1 and tcp.flags.ack 1 # 这是第二个 SYN-ACK 包 tcp.flags.syn 0 and tcp.flags.ack 1 # 这是第三个 ACK 包也可能是后续的数据确认包 # 需要结合 tcp.stream 和包序号来判断进阶用法方面Statistics 菜单下的 Flow Graph 能把 TCP 流的交互过程画成时序图比逐个看包直观得多。Protocol Hierarchy 能按协议层次统计流量占比快速定位哪个协议在占带宽。Conversations 能按会话统计流量找出通信量最大的 IP 对。这几个功能配合显示过滤器用基本能覆盖日常排障的大部分场景。从那以后我每次抓包都强制走一遍先确认网卡再设捕捉过滤器砍噪音抓完用显示过滤器定位最后用 Follow TCP Stream 或 Flow Graph 看全貌。这套流程走下来翻车的概率会低很多。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站