我目前正在尝试编写一个能够创建稳定的 TCP 连接并完全控制 ISN 编号的程序。我一直在用 C 语言编写,我的知识非常有限,已经达到了极限,我想知道是否有更好的方法来做到这一点。
我尝试的是手动构建标头,使用原始套接字发送和接收数据包,而不需要内核干扰,这是一个挑战。
因此,无论语言如何,您认为最有效和最简单的操作 ISN 的方法是什么?
我目前正在尝试编写一个能够创建稳定的 TCP 连接并完全控制 ISN 编号的程序。我一直在用 C 语言编写,我的知识非常有限,已经达到了极限,我想知道是否有更好的方法来做到这一点。
我尝试的是手动构建标头,使用原始套接字发送和接收数据包,而不需要内核干扰,这是一个挑战。
因此,无论语言如何,您认为最有效和最简单的操作 ISN 的方法是什么?
好吧,ISN 是以随机方式生成的,以防止 ISN 毁灭攻击(http://www.thegeekstuff.com/2012/01/tcp-sequence-number-attacks/)。
Linux网络栈,使用函数tcp_v4_init_sequence
生成ISN(http://lxr.free-electrons.com/source/net/ipv4/tcp_ipv4.c#L101),这个函数调用secure_tcp_sequence_number
函数(http://lxr.free -electrons.com/source/net/core/secure_seq.c#L106)来完成这项工作。看看这个函数并尝试克隆它,以便可以在用户空间的代码中使用它。
如果您有足够的时间,您可以查看( http://www.rfc-editor.org/rfc/rfc6528.txt ) 的第 3 部分,它描述了如何生成 ISN 的算法:RFC 6528
ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
并尝试实现它,如果你愿意:)