一、
在Wireshark中使用“tcp协议”
过滤后,仍出现TLSv1.2协议的数据包,原因如下:
1. 协议层次关系
- TCP是传输层协议,而TLS属于应用层协议,后者直接运行于TCP之上28。因此,所有TLS流量(如HTTPS通信)均会通过TCP传输。当过滤TCP协议时,实际上会显示所有基于TCP的应用层协议流量,包括TLS。(如:HTTP等基于TCP的应用层协议)
2. 显示过滤器的逻辑
tcp
过滤器仅筛选传输层协议为TCP的数据包,但不会排除TCP上层承载的具体应用协议。例如,TLS握手过程(如ClientHello、ServerHello)均通过TCP报文传输,因此会被tcp
过滤器命中。
3. 解决方案
- 排除TLS流量:通过组合过滤器
tcp and not tls
,可仅显示非TLS的TCP流量37。 - 明确过滤目标:若需分析纯TCP行为(如连接建立、流量控制等),需手动排除应用层协议干扰;若需分析TLS,可直接使用
tls
过滤器。
4. 示例场景
- HTTP与HTTPS对比:HTTP直接基于TCP,而HTTPS需先完成TLS握手。因此,过滤
tcp
时会同时显示两者,但过滤http
则仅显示HTTP流量。
总结:TCP过滤器的设计是捕获所有基于TCP的流量(含TLS)。若需精确分离TCP与TLS,需通过逻辑运算符组合过滤条件。
二、
在Wireshark中使用tcp.port
过滤后,仍出现其他端口的数据包,原因及解决方案如下:
1、核心原因
-
tcp.port
的过滤逻辑问题tcp.port
仅匹配源端口或目标端口包含指定值的TCP数据包,但不会排除其他传输层或应用层协议的流量。例如,若过滤tcp.port == 80
,可能同时显示HTTP协议(端口80)和复用该端口的其他TCP应用协议数据包。
-
协议层次嵌套
- TCP为传输层协议,应用层协议(如HTTP、TLS、FTP等)均通过TCP端口传输。过滤
tcp.port
会显示所有基于该端口的应用层协议流量(如HTTPS/TLSv1.2流量使用TCP 443端口)。
- TCP为传输层协议,应用层协议(如HTTP、TLS、FTP等)均通过TCP端口传输。过滤
-
多协议复用同一端口
- 某些场景下,同一端口可能承载多种协议(如SSH和自定义TCP服务复用22端口)。此时仅过滤端口无法区分具体协议。
2、解决方案
-
精确过滤端口方向
- 使用
tcp.srcport
或tcp.dstport
明确区分源/目标端口,避免因双向端口匹配引入干扰流量68。 - 示例:
tcp.dstport == 80
(仅显示目标端口80的TCP数据包)
- 使用
-
结合应用层协议过滤
- 若需排除特定应用协议(如TLS),需添加
and not
条件。 - 示例:
tcp.port == 443 and not tls
(过滤443端口但排除TLS协议)
- 若需排除特定应用协议(如TLS),需添加
-
检查过滤语法有效性
- 确认过滤器输入框显示为绿色(语法正确)。若为红色,需修正语法错误(如多余空格、运算符错误)。
-
验证协议实际使用端口
- 通过
Statistics > Protocol Hierarchy
查看各协议的真实端口分布,避免因端口复用导致误判。
- 通过
3、示例场景
需求 | 过滤器 | 效果 |
---|---|---|
仅分析目标端口80的HTTP流量 | tcp.dstport == 80 and http | 排除非HTTP协议及源端口80的干扰 |
抓取443端口但排除TLSv1.3 | tcp.port == 443 and tls.handshake.version != 0x0304 | 精确过滤TLS版本 |
分离SSH与自定义TCP服务(复用22端口) | tcp.port == 22 and (ssh or tcp.payload contains "CUSTOM_HEADER") | 通过负载特征区分协议 |
4、总结
tcp.port
仅作用于传输层端口,无法自动隔离应用层协议。需通过组合过滤条件(端口+协议)或细化端口方向实现精准过滤。对复杂场景,建议结合统计工具验证流量分布。