我目前正在开发一个程序,它可以嗅探从特定地址发送和接收的TCP数据包.我想要完成的是回复定制的数据包到某些收到的数据包.我已经完成了解析.我已经可以生成有效的以太网,IP和 - 大部分 - TCP数据包.
我唯一无法弄清楚的是如何确定seq/ack数.
虽然这可能与问题无关,但程序是使用WinPCap用C++编写的.我要求任何可能对我有帮助的提示,文章或其他资源.
建立TCP连接时,每一方都生成一个随机数作为其初始序列号.这是一个强随机数:如果互联网上的任何人都可以猜测序列号,就会出现安全问题,因为他们可以轻松伪造数据包以注入TCP流.
此后,对于发送的每个字节,序列号将递增1. ACK字段是来自另一侧的序列号,被发送回确认接收.
RFC 793(最初的TCP协议规范)将会有很大帮助.
我有同样的工作要做.首先,初始seq#将随机生成(0-4294967297).然后,接收方将计算它收到的数据的长度,并将ACK发送seq# + length = x
给发送方.然后序列将为x,发送方将发送数据.类似地,接收器将计算长度x + length = y
并发送ACK y
等等......它是如何生成seq/ack的......
如果你想显示它实际上尝试在Wireshark中嗅探数据包并遵循TCP流并查看方案......