我目前正在尝试编写一个程序,该程序将能够创建稳定的 TCP 连接并完全控制 ISN 编号。我一直在用 C 语言写作,而我非常有限的知识已经达到了极限,我想知道是否有更好的方法来做到这一点。
我尝试的是手动构建标头,使用原始套接字发送和接收数据包,而不会受到内核干扰,这是一个挑战。
因此,无论使用哪种语言,您认为操纵 ISN 最有效、最简单的方法是什么?
那么,ISN是以随机方式生成的,以防止ISN预测攻击(http://www.thegeekstuff.com/2012/01/tcp-sequence-number-attacks/ 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 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://lxr.free-electrons.com/source/net/core/secure_seq.c#L106)来完成这项工作。看一下这个函数并尝试克隆它,以便可以将它与用户空间的代码一起使用。
如果你时间充裕的话可以看看第3节 of the RFC 6528
(http://www.rfc-editor.org/rfc/rfc6528.txt http://www.rfc-editor.org/rfc/rfc6528.txt),它描述了如何生成 ISN 的算法:
ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
如果你愿意的话,请尝试实现它:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)