我目前正在开发一个程序,该程序可以嗅探发送到特定地址和从特定地址接收的TCP数据包。我试图完成的是用定制的数据包回复某些接收到的数据包。我已经完成了解析。我已经可以生成有效的以太网、IP和TCP数据包。
我唯一不能理解的是seq / ack数字是如何确定的。
虽然这可能与问题无关,但该程序是使用WinPCap用C++编写的。我正在寻求任何可能对我有帮助的提示、文章或其他资源。
发布于 2009-03-28 15:02:37
建立TCP连接时,每一端都会生成一个随机数作为其初始序列号。它是一个强随机数:如果互联网上的任何人都能猜到序列号,那么就存在安全问题,因为他们可以很容易地伪造数据包注入到TCP流中。
此后,对于传输的每个字节,序列号将递增1。ACK字段是来自另一端的序列号,被发回以确认接收。
原始的TCP协议规范RFC 793可以提供很大的帮助。
发布于 2010-07-08 18:49:15
我也有同样的工作要做。首先,随机生成初始seq# (0-4294967297)。然后接收方对接收到的数据长度进行计数,并将seq# + length = x的确认信息发送给发送方。然后,序列将是x,发送者将发送数据。类似地,接收器将计算长度ACK,并将x + length = y作为y发送,以此类推……它是如何生成seq/ack的.
如果你想实际地展示它,尝试在Wireshark中嗅探数据包,然后跟踪TCP流并查看场景……
发布于 2009-03-28 16:16:50
如果我理解正确的话,您正在尝试挂载TCP SEQ prediction attack。如果是这样的话,您将需要研究目标操作系统的Initial Sequence Number生成器的细节。
在相当多的all the major OS's wrt中有广泛宣传的漏洞,它们的ISN生成器是可预测的。我没有密切关注它的后果,但我的理解是,大多数供应商都发布了randomize their ISN increments的补丁。
https://stackoverflow.com/questions/692880
复制相似问题