Wireshark 过滤与协议分析
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read301 words

Wireshark 过滤与协议分析

Wireshark 是世界上最流行的网络协议分析工具。它把原始的比特流变成人类可读的协议层次视图——能直接看到 TCP 三次握手、HTTP 请求响应、TLS 握手的每一个细节。


Wireshark 界面速览

┌──────────────────────────────────────────────────────────────┐
│  过滤栏(Display Filter)                                     │  ← 输入过滤条件
├──────────────────────────────────────────────────────────────┤
│  包列表(Packet List)                                        │
│  No.  Time    Source          Destination    Protocol  Info  │  ← 每行一个包
├──────────────────────────────────────────────────────────────┤
│  包详情(Packet Details)                                     │
│  ▼ Frame 1: 74 bytes on wire                                  │  ← 物理层
│  ▼ Ethernet II, Src: aa:bb:cc... Dst: ...                     │  ← 数据链路层
│  ▼ Internet Protocol Version 4, Src: 192.168.1.1, Dst: 8.8.8.8  ← 网络层
│  ▼ Transmission Control Protocol, Src Port: 54321, Dst: 80   │  ← 传输层
│  ▼ Hypertext Transfer Protocol                                │  ← 应用层
├──────────────────────────────────────────────────────────────┤
│  包原始数据(Hex Dump)                                       │  ← 十六进制+ASCII
└──────────────────────────────────────────────────────────────┘

显示过滤器(Display Filter)语法

# 按协议
http
tcp
udp
icmp
dns
tls
arp
ospf
# 按 IP 地址
ip.addr == 192.168.1.100          # 任意方向
ip.src == 192.168.1.100           # 来源
ip.dst == 8.8.8.8                 # 目标
ip.addr == 10.0.0.0/8             # 网段
# 按端口
tcp.port == 80
tcp.dstport == 443
tcp.srcport >= 1024 and tcp.srcport <= 65535
# 按 TCP 标志
tcp.flags.syn == 1                 # SYN 包
tcp.flags.syn == 1 and tcp.flags.ack == 0   # 只有 SYN(新建连接)
tcp.flags.reset == 1               # RST 包
tcp.analysis.retransmission        # TCP 重传
tcp.analysis.duplicate_ack         # 重复 ACK
# 按内容(HTTP 示例)
http.request.method == "POST"
http.response.code == 200
http.request.uri contains "/api/"
# 复合条件
http and ip.addr == 10.0.50.10
not arp and not icmp
tcp.port == 80 or tcp.port == 443

常用分析场景

分析 TCP 连接建立失败

过滤:tcp.flags.syn == 1 or tcp.flags.reset == 1
观察:
✅ 正常:SYN → SYN-ACK → ACK(三次握手完成)
❌ 超时:只有 SYN,没有 SYN-ACK → 对方没收到或防火墙拦截
❌ 拒绝:SYN → RST/ACK → 对方主动拒绝连接(端口关闭)
右键 SYN 包 → Follow → TCP Stream
可以看到整个 TCP 会话的内容

分析 TCP 重传(丢包)

过滤:tcp.analysis.retransmission or tcp.analysis.fast_retransmission
Wireshark 会用红色/黑色标记重传包
大量重传 = 链路质量差或拥塞
Statistics → TCP Stream Graphs → Time-Sequence Graph(Stevens)
可以可视化看到丢包和重传的时间分布

分析 DNS 解析慢

过滤:dns
观察每条 DNS 查询的响应时间:
DNS Query(Type A)← 查询请求
DNS Response(A 记录)← 响应
Statistics → DNS → 查看 Response Time 分布
响应时间 > 200ms → DNS 服务器慢或网络丢包
SERVFAIL / NXDOMAIN → DNS 服务器返回错误

分析 HTTP API 慢

过滤:http
Statistics → HTTP → Request/Response 序列
Time from request to response = API 响应时间
找最慢的请求:
Statistics → HTTP → Packet Counter
或者
Edit → Find Packet → 按时间戳范围过滤
提取 HTTP body:
右键 HTTP 包 → Follow → HTTP Stream
看完整的请求和响应头/体

Wireshark 实用技巧

# 远程抓包(通过 SSH,不需要在远程机器安装 Wireshark GUI)
ssh user@remote-server 'tcpdump -nn -s 0 -w - port 80' | wireshark -k -i -
# 命令行版 Wireshark(tshark)
tshark -i eth0 -nn -Y 'http.request'                   # 实时显示 HTTP 请求
tshark -r capture.pcap -Y 'tcp.flags.reset==1' -T fields \
-e frame.time -e ip.src -e ip.dst -e tcp.srcport      # 提取字段
# 解密 TLS(需要服务器私钥或 SSLKEYLOGFILE)
# 配置 Wireshark:Edit → Preferences → Protocols → TLS
# Pre-Master-Secret log filename: /path/to/sslkeylog.txt
# 生成 SSLKEYLOGFILE(应用层设置)
SSLKEYLOGFILE=/tmp/ssl-keys.log curl https://example.com
SSLKEYLOGFILE=/tmp/ssl-keys.log google-chrome &

颜色规则速查

Wireshark 默认颜色含义:
颜色          含义
────────────────────────────────────────────────
浅绿色         TCP
深绿色         HTTP
浅蓝色         UDP / DNS
蓝色           ICMP
黑色(背景红)  TCP 错误(RST/Checksum Error)
深红色         TCP 重传 / 乱序包
黄色           注意(ARP 广播等)
浅灰色         TCP 连接建立/关闭握手

过滤条件收藏夹

# 保存常用过滤器:
# Wireshark → 过滤栏 → 点击书签图标 → Save This Filter
推荐收藏:
"TCP Problems"   → tcp.analysis.flags && !(tcp.analysis.window_update)
"New TCP Conn"   → tcp.flags.syn==1 && tcp.flags.ack==0
"HTTP Errors"    → http.response.code >= 400
"DNS Failures"   → dns.flags.rcode != 0
"TLS Issues"     → tls.alert_message
"Large Packets"  → frame.len > 1500
"Retransmit"     → tcp.analysis.retransmission

CCNA 对应考点

考纲位置:Domain 6.3 — Describe characteristics of different wireless standards

Wireshark 不在 CCNA 考纲内,但理解包分析是网络工程师的必备技能。在学习 CCNA 过程中,用 Wireshark 抓取自己配置的 OSPF Hello 包、ARP 请求、TCP 握手,是理解协议最直观的方法。


下一章无线网络与企业 Wi-Fi——有线网络排障掌握了,Wi-Fi 有自己特有的问题:信道干扰、漫游不顺畅、WPA3 认证失败——一套独特的排障方法。