我目前正在开发一个程序,该程序可以嗅探从特定地址发送和接收的 TCP 数据包。我想要完成的是用定制的数据包回复某些收到的数据包。我已经完成了解析。我已经可以生成有效的以太网、IP 和——在大多数情况下——TCP 数据包。
我唯一无法弄清楚的是如何确定 seq / ack 数字。
虽然这可能与问题无关,但该程序是使用 WinPCap 用 C++ 编写的。我正在寻求任何可能对我有帮助的提示、文章或其他资源。
我目前正在开发一个程序,该程序可以嗅探从特定地址发送和接收的 TCP 数据包。我想要完成的是用定制的数据包回复某些收到的数据包。我已经完成了解析。我已经可以生成有效的以太网、IP 和——在大多数情况下——TCP 数据包。
我唯一无法弄清楚的是如何确定 seq / ack 数字。
虽然这可能与问题无关,但该程序是使用 WinPCap 用 C++ 编写的。我正在寻求任何可能对我有帮助的提示、文章或其他资源。
当建立 TCP 连接时,每一端都会生成一个随机数作为其初始序列号。它是一个强随机数:如果互联网上的任何人都可以猜出序列号,就会存在安全问题,因为他们可以很容易地伪造数据包以注入 TCP 流。
此后,对于传输的每个字节,序列号将增加 1。ACK 字段是来自另一侧的序列号,发送回以确认接收。
RFC 793,原始的 TCP 协议规范,可以提供很大的帮助。
我有同样的工作要做。首先,初始 seq# 将随机生成(0-4294967297)。然后接收方会统计它接收到的数据的长度,并发送ACKseq# + length = x
给发送方。然后序列将是 x 并且发送方将发送数据。类似地,接收器将计算长度x + length = y
并发送 ACK y
,依此类推……它是如何生成 seq/ack 的……
如果您想实际展示它,请尝试在 Wireshark 中嗅探数据包并跟踪 TCP 流并查看场景...
如果我对您的理解正确 - 您正在尝试安装TCP SEQ 预测攻击。如果是这种情况,您将需要研究目标操作系统的初始序列号生成器的细节。
几乎所有主要的操作系统都存在广泛宣传的漏洞,只要它们的 ISN 生成器是可预测的。我没有密切关注后果,但我的理解是大多数供应商都发布了补丁来随机化他们的 ISN 增量。
似乎其余的答案几乎解释了在哪里可以找到有关 ACK 的详细和官方信息,即TCP RFC
这是我在进行类似实现时发现的一个更实用且“易于理解”的页面,它也可能有助于TCP 分析 - 第 2 节:序列和确认号
RFC 793第 3.3 节涵盖序列号。上次我在那个级别编写代码时,我想我们只是为持续存在的序列号保留了一个单计数器。
这些值引用了数据包的有效负载开始相对于连接的初始序列号的预期偏移量。
序列号(32 位)——具有双重作用 如果设置了 SYN 标志,则这是初始序列号。实际第一个数据字节的序列号将是这个序列号加 1。如果 SYN 标志没有设置,那么这是第一个数据字节的序列号
确认号(32 位)——如果设置了 ACK 标志,则该字段的值是接收器期望的下一个预期字节。
数字是从双方随机生成的,然后增加发送的八位字节(字节)数。
建立连接后,序号递增。理想情况下,新连接上的初始序列号是随机选择的,但许多操作系统都有一些半随机算法。RFC 是查找更多TCP RFC的最佳场所。