我目前正在尝试编写一个程序,能够创建稳定的TCP连接并完全控制ISN号码。我已经使用C语言编写了一部分代码,但我的知识非常有限,已经达到了极限,想知道是否有更好的方法。
我尝试手动构建头文件,并使用原始套接字发送和接收数据包而不受内核干扰,这是一个挑战。
所以,无论用什么语言,你认为最有效、最简单的操作ISN的方法是什么?
我尝试手动构建头文件,并使用原始套接字发送和接收数据包而不受内核干扰,这是一个挑战。
所以,无论用什么语言,你认为最有效、最简单的操作ISN的方法是什么?
为了防止ISN预测攻击(http://www.thegeekstuff.com/2012/01/tcp-sequence-number-attacks/),ISN以随机方式生成。
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) 来完成任务。请查看此函数并尝试克隆它,以便在用户空间中使用。
如果您有足够的时间,请查看RFC 6528
的第3节(http://www.rfc-editor.org/rfc/rfc6528.txt),其中描述了一种生成ISN的算法。
ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
如果您想尝试实现它,请这样做 :)