You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scapy嗅探器无法捕获带SYN/FIN标志的IPv6 TCP数据包问题

问题原因及解决方案

核心原因

你使用的过滤规则tcp[tcpflags] & (tcp-syn|tcp-fin) != 0基于libpcap过滤语法,默认仅适配IPv4数据包结构:

  • 对于IPv4,libpcap会自动计算TCP头部相对于IPv4头部的偏移,所以tcp[tcpflags]能准确定位到TCP标志位字段。
  • 但IPv6数据包的TCP头部偏移位置与IPv4完全不同,libpcap不会自动为tcp[tcpflags]适配IPv6结构,导致这条规则无法匹配到IPv6的TCP包,自然抓不到对应流量。

而单纯用tcp过滤时,libpcap会自动识别IPv4(通过proto字段)和IPv6(通过next header字段)中的TCP协议,因此能正常捕获两种协议的流量。

解决方法

修改过滤规则,同时明确匹配IPv4和IPv6下的TCP SYN/FIN包,用逻辑或连接两种场景:

def testing(pkt):
    if IPv6 in pkt:
        print(pkt[IPv6].show())

# 同时适配IPv4和IPv6的过滤规则
sniff(filter="(ip and tcp[tcpflags] & (tcp-syn|tcp-fin) != 0) or (ip6 and tcp[tcpflags] & (tcp-syn|tcp-fin) != 0)", iface="eth0", prn=testing)

这条规则会同时捕获两种协议中带有SYN或FIN标志的TCP包,满足你的需求。

内容的提问来源于stack exchange,提问作者Mnemosyne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:01:01