TCP头部中操作ISN编号的最有效方法

4
我目前正在尝试编写一个程序,能够创建稳定的TCP连接并完全控制ISN号码。我已经使用C语言编写了一部分代码,但我的知识非常有限,已经达到了极限,想知道是否有更好的方法。
我尝试手动构建头文件,并使用原始套接字发送和接收数据包而不受内核干扰,这是一个挑战。
所以,无论用什么语言,你认为最有效、最简单的操作ISN的方法是什么?

1
我们在谈论什么操作系统?为什么你需要这个级别的控制权?简而言之:你真正想做什么? - Michael Madsen
@MichaelMadsen 我正在使用Backtrack5,原因是我阅读了一篇有关tcp连接中隐蔽通道的文章,并想尝试所提出的通道。当然,这纯粹只是出于兴趣爱好,看看是否能做到(也就是看看我是否能做到):) - youjustreadthis
1个回答

5

为了防止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)

如果您想尝试实现它,请这样做 :)


谢谢,这些参考资料非常有用。 - youjustreadthis
链接已经失效。 - monolith
1
链接已经失效,截至2021年4月,请查看https://github.com/torvalds/linux/blob/master/net/core/secure_seq.c。 - http8086

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接