【网络通信】Wireshark 教程与抓包实战

Wireshark 教程与抓包实战


目录

  • 一、显示过滤器:IP/MAC/端口/协议/组合(速查)
  • 二、捕获过滤器 vs 显示过滤器:本质差异与语法对照
  • 三、追踪流(Follow Stream):重组复杂交互的利器
  • 四、抓包典型案例解析
    • 4.1 TCP 连接异常关闭:重传与 RST
    • 4.2 DHCP 四步交互(DORA)
    • 4.3 OSI/TCP-IP 分层与抓包字段对应
    • 4.4 HTTP 304 缓存验证交互
    • 4.5 ARP 请求包完整解析
    • 4.6 TCP 三次握手 + 四次挥手(状态机对应)
    • 4.7 TLS(RSA)握手流程与抓包对应(含"是不是说反了"的澄清)
    • 4.8 HTTP 请求/响应报文详解(GET、POST)
  • 五、实战过滤规则清单(可直接复制)
  • 六、排障建议与常见问题
  • 七、术语速记与小抄

一、显示过滤器:IP/MAC/端口/协议/组合(速查)

  1. 按 IP 地址过滤
  • 源 IP:ip.src == 192.168.0.17
  • 目标 IP:ip.dst == 223.5.5.5
  • 源或目标 IP:ip.addr == 192.168.0.17
  1. 按 MAC 地址过滤(二层)
  • 源 MAC:eth.src == 00-E0-70-D0-6A-AE
  • 目标 MAC:eth.dst == 00-E0-70-D0-6A-AE
  • 源或目标 MAC:eth.addr == 00-E0-70-D0-6A-AE
  1. 按端口号过滤(四层)
  • TCP:源端口 tcp.srcport == 80、目标端口 tcp.dstport == 443、任一端口 tcp.port == 21
  • UDP:udp.port == 53(DNS)
  1. 按协议类型过滤(多层)
  • httptlsicmparpdnstcpudp
  1. 规则组合
  • 与:ip.src==192.168.0.17 && tcp.dstport==80
  • 或:ip.src==192.168.0.17 || eth.src==00-E0-70-D0-6A-AE
  • 非:!http(排除 HTTP 流量)

场景提示:

  • 针对"客户端 4694 → 服务器 80"的流量:
    • tcp.port==4694(双向)
    • tcp.srcport==4694(仅客户端→服务器)
    • tcp.dstport==4694(仅服务器→客户端)

二、捕获过滤器 vs 显示过滤器:本质差异与语法对照

  1. 核心差异
  • 显示过滤器:事后筛选,作用于"已捕获的数据"。可反复调整,不改变原始 pcap。
  • 捕获过滤器:抓包前设置,限制"捕获范围"。不满足条件的数据包不会被捕获,体量小但不可逆。
  1. 语法对比
  • 显示过滤器(Wireshark 专用,功能更丰富)
    • ip.addr == 192.168.31.145
    • http && tcp.port == 80
    • !arp
  • 捕获过滤器(libpcap 语法,更底层高效)
    • host 192.168.31.145
    • tcp port 80
    • src 192.168.31.145 and dst port 80
  1. 选择建议
  • 不确定目标流量:优先显示过滤器(保留全量,复盘灵活)
  • 流量巨大/性能敏感:优先捕获过滤器(减小 pcap 体量)
  • 目标明确(仅抓某 IP/端口/协议):捕获过滤器更高效

三、追踪流(Follow Stream):重组复杂交互的利器

作用:提取同一连接/会话的所有数据包,按时序重组为完整字节流,避免"逐包阅读"的碎片化低效。

类型与快捷键:

  • TCP 流:基于四元组(源/目 IP 与端口),快捷键 Ctrl+Alt+Shift+T
  • HTTP 流:基于会话标识(Cookie/Session),快捷键 Ctrl+Alt+Shift+H

适用场景:

  • TCP 连接异常(握手失败、重传、乱序、丢包)
  • 明文协议还原(HTTP 请求/响应完整内容)
  • 大量抓包中快速聚焦一条会话

参考配图: <image-4.png> / <image-5.png>

示例:客户端 192.168.0.25:53851 ↔ 服务器 121.40.138.231:80,可通过"追踪 TCP 流"重组三次握手、HTTP 请求与响应的完整对话。


四、抓包典型案例解析

4.1 TCP 连接异常关闭:重传与 RST

现象:

  • 抓包标记大量 [TCP Retransmission]FIN, ACK:客户端多次重传关闭请求
  • 随后出现 RST, ACK:客户端强制重置连接

成因与定位:

  • 网络丢包/延迟:服务端未及时确认 FIN,触发客户端超时重传
  • 服务端异常:HTTP 服务异常/重启导致未按流程应答
  • 结论:未完成"四次挥手",以 RST 强制断开,属于"异常关闭"

建议:

  • 检查链路丢包、MTU/分片、服务器日志
  • 抓同时间窗口的服务端抓包对读

4.2 DHCP 四步交互(DORA)

四步流程(IPv4):

  1. Discover:源 IP=0.0.0.0 → 目标 IP=255.255.255.255(广播,发现服务器)
  2. Offer:服务器提出租约(包含候选 IP、掩码、网关、DNS 等)
  3. Request:客户端广播确认选择的 Offer(让其他服务器收回未选的 Offer)
  4. ACK:服务器确认,客户端生效配置

关键细节:

  • 源 IP 0.0.0.0:客户端初始无地址,需广播
  • 广播与单播:Discover/Request 常广播;Offer/ACK 常单播(指向拟分配/最终分配的地址)
  • Transaction ID:关联一次完整交互(不同 Discover 可有不同 ID)

扩展:

  • 续租:T1 ≈ 50% 单播续租;T2 ≈ 87.5% 广播重绑定
  • Relay 中继(Option 82):跨网段时由三层设备转发

4.3 OSI/TCP-IP 分层与抓包字段对应

分层映射(抓包字段示例):

  • 物理层 Frame:Frame LengthArrival Time
  • 数据链路层 Ethernet II:Src/Dst MACType: IPv4
  • 网络层 IPv4:VersionTTLProtocolSrc/Dst IP
  • 传输层 TCP:Src/Dst PortSeq/AckFlags
  • 应用层 HTTP:请求行/响应行、头部、负载

价值:

  • 快速定位问题层次(如仅为二层广播/ARP,还是三层路由/四层重传)
  • 结合 Protocols in frame: eth:ethertype:ip:tcp:http:data 直观理解封装链路

4.4 HTTP 304 缓存验证交互

过滤语句:ip.addr == 52.58.199.22 && http && tcp.port == 80

交互过程:

  • 客户端 GET / HTTP/1.1
  • 服务器 HTTP/1.1 304 Not Modified
  • 说明:服务器判断客户端缓存仍有效(If-Modified-Since / If-None-Match 验证),无需回传实体

价值:减少带宽,提升加载速度,是浏览器/代理缓存体系的关键一环


4.5 ARP 请求包完整解析

字段要点:

  • 目标 MAC:ff:ff:ff:ff:ff:ff(广播)
  • 硬件类型:以太网(1)
  • 协议类型:IPv4(0x0800)
  • 硬件/协议长度:6/4(MAC=6 字节,IPv4=4 字节)
  • 操作码:request(1)
  • Sender MAC/IP:源设备 MAC/IP
  • Target MAC:00:00:00:00:00:00(未知)
  • Target IP:待解析的目标 IP

场景:

  • 本地 ARP 缓存未命中时,发送广播请求获取同网段目标的 MAC
  • 回应为单播,双方缓存 IP→MAC 映射,后续免广播

4.6 TCP 三次握手 + 四次挥手(状态机对应)

三次握手:

  1. SYN(客户端)
  2. SYN+ACK(服务器)
  3. ACK(客户端) → 建立连接 ESTABLISHED

数据传输:Seq/Ack 可靠、有序传递

四次挥手(优雅断开):

  1. 客户端:FIN+ACK → FIN_WAIT_1
  2. 服务器:ACK → FIN_WAIT_2(客户端)/CLOSE_WAIT(服务器)
  3. 服务器:FIN+ACK → LAST_ACK(服务器)
  4. 客户端:ACK → TIME_WAIT(客户端等待 2MSL)

异常关闭:

  • 长时间未确认 → 重传
  • 应用/连接异常 → RST 强制重置

4.7 TLS(RSA)握手流程与抓包对应(含"是不是说反了"的澄清)

理论流程(传统 RSA 套件示意):

  1. Client Hello:客户端随机数、支持套件、SNI
  2. Server Hello(+Certificate):服务器随机数、证书、选定套件
  3. Client Key Exchange:客户端用服务器公钥加密"预主密钥"
  4. 双方基于(客户端随机数、服务器随机数、预主密钥)生成"会话密钥"
  5. Change Cipher Spec + Finished:切换加密,进入加密通信
  • 说明:DoT/DoH/DoQ 为现代加密 DNS;Cloudflare Keyless SSL 为部署形态差异

抓包对应(示例场景:客户端 192.168.31.145,服务器 3.125.197.172:443,TLS 1.2):

  • Client Hello(含 SNI=nginx.org
  • Server Hello, Certificate(服务器发送证书与套件)
  • Server Key Exchange, Server Hello Done
  • Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  • New Session Ticket, Change Cipher Spec, Encrypted Handshake Message

"是不是说反了?"澄清:

  • TLS 必然由客户端先发 Client Hello,服务器回 Server Hello,抓包中源/目的方向与此一致,没有"说反"。

4.8 HTTP 请求/响应报文详解(GET、POST)

  1. HTTP GET(以 curl http://nginx.org/LICENSE 为例)
  • 请求行:GET /LICENSE HTTP/1.1
  • 头部:Host: nginx.orgUser-Agent: curl/8.15.0Accept: */*
  • 抓包关联:[Response in frame: N] 可跳转定位对应响应包
  • GET 特性:幂等、常被缓存、通常无请求体(参数走 URL Query)
  1. HTTP POST/响应对应(示例:/scan 接口)
  • 请求:客户端 → 服务器(Seq/Ack 标注为握手后首段,Len 为请求体大小)
  • 响应:HTTP/1.1 200 OK,含若干数据块(例如 56B)
  • 业务推断:扫描/监控/批量采集类接口(根据路径与重复交互特征)
  • 封装链路:data → http → tcp → ip → eth,Wireshark 中可见 Protocols in frame: eth:ethertype:ip:tcp:http:data
  1. IP/TCP 关键字段(GET 示例)
  • IPv4:Version=4、IHL=20B、Flags=DF(不分片)、Fragment Offset=0、TTL=128(Windows 常见)、Protocol=6(TCP)
  • TCP:Source Port=临时端口、Dest Port=80、Seq=1, Ack=1, Len=573(首个数据段)

五、实战过滤规则清单(可直接复制)

  • 仅看某服务器 HTTP 流量:ip.addr == x.x.x.x && http && tcp.port == 80
  • 仅看 DNS 解析:dns || udp.port == 53
  • 排除 ARP 广播:!arp
  • 同时看 DHCP 与 ARP:dhcp or arp
  • 仅看某设备 DHCP:dhcp and eth.addr == 00-E0-70-D0-6A-AE
  • 过滤客户端某临时端口流量:tcp.port == 4694
  • 精准定位 HTTPS:tls and tcp.dstport == 443
  • 追踪 TCP 流后配合筛选端点:在"追踪流"窗口确认四元组,再用 ip.src/dsttcp.srcport/dstport 组合筛选

捕获过滤器常用(抓包前设置):

  • host 192.168.31.145
  • tcp port 80
  • src host 192.168.31.145 and dst port 80

六、排障建议与常见问题

  • "全是 ARP/广播,业务包很少?"
    • 可能抓在错误接口/镜像口;或过滤条件不当。先用 tcp || udp || icmp 初筛。
  • "TCP 重传/乱序很多?"
    • 检查链路质量(丢包、MTU、双工不匹配、队列拥塞)、服务器负载与应用超时。
  • "UDP 分析困难,很多 open|filtered 场景?"
    • 结合协议脚本/特定负载(DNS/NTP/DHCP 等),使用 -sV/特定脚本(如在服务端侧或配合 Nmap/NSE)。
  • "HTTPS 看不到明文?"
    • 使用服务器 SSLKEYLOGFILE 或代理方式复现;或抓 TLS 握手阶段验证证书/套件/版本是否异常。

七、术语速记与小抄

  • 层级映射:eth → ip → tcp/udp → http/dns/...
  • 常见协议过滤:httptlsdnsarpicmp
  • 端口过滤:tcp.port==80udp.port==53
  • 组合逻辑:and/&&or/||not/!
  • 追踪流快捷键:TCP=Ctrl+Alt+Shift+T,HTTP=Ctrl+Alt+Shift+H
  • DF(Don't Fragment):禁止分片;MTU 不足将触发 ICMP 不可达
  • TTL:每经一跳减 1,Windows 常见 128,Linux 常见 64
  • DHCP DORA:Discover → Offer → Request → ACK(Transaction ID 贯穿一次事务)
相关推荐
云边云科技_云网融合3 小时前
AIoT智能物联网平台:架构解析与边缘应用新图景
大数据·网络·人工智能·安全
若风的雨3 小时前
NCCL 怎么解决rdma 网卡本地send的时候需要对端recv要准备好的问题,或者mpi 怎么解决的?
网络
浩浩测试一下3 小时前
DDOS 应急响应Linux防火墙 Iptable 使用方式方法
linux·网络·安全·web安全·网络安全·系统安全·ddos
2501_915918413 小时前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone
8K超高清4 小时前
回望2025,纷呈超清智能科技影像世界
网络·人工智能·科技·数码相机·智能硬件
2501_941982054 小时前
企微非官方API开发:RPA与协议结合的混合驱动实现
网络·企业微信·rpa
测试界的世清4 小时前
金九银十软件测试面试题(800道)
测试工具·面试·职场和发展
帝落若烟4 小时前
loadrunner {“msg“:“请求访问:/getInfo,认证失败,无法访问系统资源“,“code“:401}
测试工具·压力测试
Henry Zhu1234 小时前
Qt网络编程详解(下):项目实战
网络·qt
Ares-Wang4 小时前
网络》》BGP Border Gateway Protocol,边界网关协议
网络·gateway