使用 Scapy 时非常大的序列和确认数字

网络工程 ip tcp 包分析 网络 第 4 层
2022-02-03 00:52:43

我正在使用 Scapy 尝试使用以下示例代码读取 tcp 数据包的 seq 和 ack 号:

packet = sniff(iface=argv[1], prn=scan, filter="", count=1)[0]
print "Found SEQ " + str(packet.getlayer(TCP).seq) +" ACK " + str(packet.getlayer(TCP).ack)

但是,我发现这些数字非常大,例如 3786938882 和 298237083。当我在 Wireshark 中查看数据包时,它们的值只有 65 和 150 之类的。我应该将值放入某种格式吗?

1个回答

TCP 实际上以一个大的、随机的 32 位序列号开始。Scapy 似乎在向您展示序列号实际上是什么。Wireshark 正在将 TCP 序列号转换为相对序列号。TCP_Relative_Sequence_Numbers

TCP 相对序列号和 TCP 窗口缩放

默认情况下,Wireshark 和 TShark 将跟踪所有 TCP 会话并将所有序列号(SEQ 编号)和确认编号(ACK 编号)转换为相对编号。这意味着,Wireshark 不会在显示中显示真实/绝对的 SEQ 和 ACK 编号,而是显示与该对话的第一个看到的片段相关的 SEQ 和 ACK 编号。

这意味着对于每个对话中看到的第一个数据包,所有 SEQ 和 ACK 编号始终从 0 开始。

这使得数字比通常在 SYN 阶段初始化为 0 - (2^32)-1 范围内随机选择的数字的实数更小、更容易阅读和比较。

此可用性功能依赖于 TCP_Analyze_Sequence_Numbers 的功能,因此要使用此功能,您还必须启用 TCP_Analyze_Sequence_Numbers。

使用相对序列号是一种可用性增强,使数字更易于阅读和比较。为了将解剖与来自无法处理相对序列号的不太高级的分析器的数据进行比较,可能需要在 Wireshark 中暂时禁用此功能。

对于 1.5 之前的 Wireshark 版本:启用“相对序列号”首选项时,Wireshark 还将启用“窗口缩放”。

对于 Wireshark 1.5 及更高版本:“窗口缩放”是默认启用的单独 TCP 首选项。

如果启用“窗口缩放”,Wireshark 将尝试监视在 SYN 阶段协商的 TCP 窗口缩放选项,如果检测到此类 TCP 窗口缩放,Wireshark 还将缩放窗口字段并将其转换为有效窗口大小。这可能会影响解析和报告的窗口,并可能使 Wireshark 以不同方式解码数据包,但比其他工具更准确。

要禁用相对序列号并将它们显示为真实的绝对数字,请转到 TCP 首选项并取消选中框

在此处输入图像描述

相对序号。