网络通讯:Wireshark常用的报文过滤指令

一、只想看"有 TCP 载荷(数据)的包"
也就是:TCP payload 长度 > 0。
1)最简单写法(推荐)
tcp.len > 0
含义:显示所有 TCP 载荷字节数大于 0 的包(也就是有应用层数据的)。【turn0search2】【turn0search4】
2)非零负载的另一种写法
tcp.len != 0
效果同上,语义是"不等于 0"。
3)只要纯确认包(无数据)
tcp.len == 0
显示所有只有 TCP 头、没有载荷的包(比如 ACK 确认、很多握手的中间包)。
二、按"TCP 载荷长度"的大小范围筛选
常见几个阈值你可以直接改:
1)只看"长 TCP 包"(比如 >= 1000 字节)
tcp.len >= 1000
适用于看大包(大文件传输、大数据块等)。
2)只看"小包"(比如 < 100 字节)
tcp.len < 100
常见用于:- 看大量小报文(比如频繁心跳、短请求)
- 排查"很多小包"性能问题
3)指定一个长度区间
比如:载荷长度在 100~1000 字节之间的 TCP 包:
tcp.len >= 100 and tcp.len <= 1000
三、按"IP 总长度"/"TCP 段总长度"来筛选
有时候你说"TCP 长度"可能指的是"整个 TCP 报文长度(含 TCP 头)"。
1)看 IP 总长度(等于整个 IP 报文,含 IP 头+TCP 头+TCP 载荷)
ip.len == 1500// 以太网常见 MTU 1500 的 IP 报文ip.len > 1400// 看接近 MTU 的大包ip.len < 100// 看特别小的 IP 包(多为控制报文、握手包等)【turn0search8】【turn0search11】
2)估算 TCP 段总长度(含 TCP 头)
TCP 段总长 = IP 总长度 − IP 头长
用显示过滤器写出来就是:
ip.len - ip.hdr_len == 1500ip.len - ip.hdr_len > 1400ip.len - ip.hdr_len < 100
注意:- 这是"IP 数据部分长度",对 TCP 来说,基本就是 TCP 段总长(TCP 头 + 载荷)。
- 如果 IP 头不是标准的 20 字节(有 Options),这样算仍然正确。【turn0search11】
3)用另一种方式得到"TCP 载荷长度"
TCP 载荷长度 = IP 总长度 − IP 头长 − TCP 头长
显示过滤器:
ip.len - ip.hdr_len - tcp.hdr_len > 0// 有载荷ip.len - ip.hdr_len - tcp.hdr_len == 0// 无载荷(纯控制/确认)ip.len - ip.hdr_len - tcp.hdr_len >= 1000// 大载荷包【turn0search11】
等价于tcp.len,更直观的写法还是用tcp.len。
四、顺带澄清几个容易混淆的字段
Wireshark 里关于"长度"有好几个字段,新手经常混在一起:
frame.len
整个抓到的帧长度,含以太网头 + IP 头 + TCP 头 + 载荷等。【turn0search8】ip.len
IP 层的总长度(IP 头 + 后面的数据部分)。如果 IP 装的是 TCP,那"后面的数据"就是 TCP 段(TCP 头 + 载荷)。【turn0search8】【turn0search11】tcp.len
TCP 段中的数据(payload)长度,不包含 TCP 头。【turn0search4】【turn0search6】tcp.data/tcp.segment_data
不是数值字段,是原始载荷数据的字节序列,用于按内容匹配,不能写> 100这种比较,只能contains "xxxx"或匹配字节。【turn0search4】
简单一句话区分:- 想看"整个帧多大":用
frame.len - 想看"IP 报文多大":用
ip.len - 想看"TCP 载荷多大":用
tcp.len(最常用)【turn0search6】【turn0search4】
五、一些实际可用的"套路"组合
1)看某台服务器发出的所有大数据 TCP 包(载荷 >= 1024)
ip.src == 10.0.0.10 and tcp.len >= 1024
2)看某个端口的长请求/长响应
比如看 HTTP 请求/响应里数据较大的包:
tcp.port == 80 and tcp.len > 500tcp.port == 443 and tcp.len >= 1200
3)排查"大量小包"性能问题
- 某条连接(IP 对)的包很多、但都很小:
ip.addr == 10.1.1.5 and ip.addr == 10.1.1.6 and tcp.len < 100
- 某个服务端端口的小包:
tcp.dstport == 8080 and tcp.len < 50
4)只看有数据(非纯 ACK)的 TCP 流
tcp.len > 0
如果想排除某些端口,比如只看业务端口:tcp.len > 0 and not (tcp.port == 22 or tcp.port == 3389)
六、简单速查(可复制直接用)
- 有载荷的 TCP 包:
tcp.len > 0
- 无载荷(纯 ACK/控制):
tcp.len == 0
- 载荷长度大于等于 1000:
tcp.len >= 1000
- 载荷长度小于 100:
tcp.len < 100
- IP 总长度等于 1500(满 MTU):
ip.len == 1500
- TCP 段总长(含头)接近 1500:
ip.len - ip.hdr_len >= 1480
- TCP 载荷长度用原始 IP/TCP 头长计算:
ip.len - ip.hdr_len - tcp.hdr_len > 0【turn0search11】
你可以先说下你说的"TCP 长度"到底是指:
- "TCP 数据部分长度(tcp.len)",还是
- "整个 TCP 报文(含头)长度(IP 数据部分)",还是
- "整个抓包帧的长度(frame.len)",