TCP连接劫持

时间:2011-04-23 21:31:36

标签: c++ tcp winpcap raw-sockets

我有一个小项目,我一直在使用C ++,由于它的性质,我需要将数据包插入到实时TCP流中。 (目的是无辜的,http://ee.forumify.com/viewtopic.php?id=3299如果你必须知道的话) 我正在为游戏创建一个关卡编辑器,由于握手的性质,我不能简单地建立一个与WinSock等高级库的新连接。到目前为止,它依靠Winsock Packet Editor来完成肮脏的工作,但是如果我让应用程序处理它,它会让每个人都开心。

所以我的问题是:在某个地方是否有一个API可以让我控制一个实时TCP流,最好是一个在完成后保持有效的一个?我宁愿不必注入任何DLL。另外,Detours是禁忌,因为我正在使用GCC / Mingw。

我玩弄了WinPCap并且我有一些工作代码(我可以收集一个数据包,并从中生成一个适当的数据包发送),但由于它运行的水平如此之低,我无法预测所有的潜力最终用户可能使用的协议。是的,很可能他们将使用IPv4 over Ethernet,但那些仍然使用PPP或其他一些模糊协议的人呢?此外,在完成连接后,客户端应用程序会断开连接,因为数据包中的最新ID值已更改,并且客户端认为已断开连接。

所以,如果有人能提供高级TCP流操纵器,我会非常高兴。如果没有,我会继续修补WinPCap并告诉所有拨号用户更好地上网。

目标平台:Microsoft Windows XP到Windows 7

3 个答案:

答案 0 :(得分:2)

创建一个单独的进程以绑定到本地端口。创建初始tcp流时,通过该进程对其进行代理,然后可以将其转发到网络。当您需要“注入”流时,可以让此代理进程执行此操作。只是一个想法。

答案 1 :(得分:1)

你应该看一下ettercap http://ettercap.sourceforge.net/的源代码 或者打猎,tcp劫持者http://packetstormsecurity.org/files/view/21967/hunt-1.5.tgz

这2个软件可以满足您的需求。

答案 2 :(得分:0)

我认为没有任何合理的API可以让你劫持TCP流。这样的事情本来就是一个安全问题。

您可以将程序作为相关连接的代理插入吗?也就是说,获取打开连接的程序将其打开到您的程序,然后让您的程序打开与真实目标的连接。

这个想法是,如果所有数据包都通过你的程序,那么修改TCP流变得相对微不足道。