2011-04-23 97 views
5

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

所以我的问题是这样的:是否有一个API可以让我控制一个实时的TCP流,并且最好是在它完成后保持它的有效性?我宁愿不必注入任何DLL。此外,Detours是我使用GCC/Mingw时的一个禁忌。我已经玩弄了WinPCap,我有一些工作代码(我可以收集一个数据包,并从中生成一个适当的数据包发送),但由于它运行在如此低的水平,我不能预期所有的最终用户可能使用的潜在协议。是的,他们很可能会使用以太网IPv4,但那些仍在使用PPP的用户或其他一些难以理解的协议呢?此外,连接完成后客户端应用程序将丢弃该连接,因为数据包中的最新ID值已更改,并且客户端假定它已断开连接。因此,如果任何人都可以提供一个高级TCP流操纵器,我会非常高兴。如果没有,我会继续修补WinPCap,并告诉所有拨号用户去更好的互联网。

目标平台:Microsoft Windows XP中通过Windows 7

+0

您应该阅读Michael Flenov的[Hackish C++:Pranks and Tricks](http://www.amazon.com/Hackish-Pranks-Tricks-Michael-Flenov/dp/1931769389)。这听起来像只是一本以计算机为导向的实用的开玩笑的书,但他有很多适用于这个项目的很好的网络示例 – 2011-04-23 21:41:55

+0

有没有我可以在线阅读免费的任何地方?可悲的是,我的本地图书馆系统没有这个副本。 – Kaslai 2011-04-23 21:50:58

+0

我不知道...也许你可以找到谷歌的东西。我在某处输入了一些代码,如果我找到相关的文件,我会发布一些代码 – 2011-04-23 22:11:30

回答

0

我不认为有任何明智的API,让你劫持TCP流。本质上,这样的事情会成为一个安全问题。

你可以插入你的程序作为有问题的连接代理吗?也就是说,让打开连接的程序打开它到你的程序,然后让你的程序打开连接到真正的目标。

这个想法是,如果所有的数据包无论如何都会通过你的程序,那么修改TCP流就变得相对简单了。

+0

是的,我可以使用WinPCap作为一个嗅探器,它允许我直接修改网卡上的数据流,但由于我对这些东西没有经验,所以它不会像我希望的那样兼容成为。 – Kaslai 2011-05-12 06:18:02

+0

@Aslai - 我在说的是,截取和操纵TCP流时没有'更兼容的API'。这不是一个“正常”的事情要做。 “正常”的做法是做一个明确的代理,这样就不会有什么问题,也不需要低级别的怪异。 – 2011-05-12 11:22:36

2

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

+0

这样做的一个简单方法是使用SOCKS代理,它基本上有一个前导码来告诉服务器进程连接到哪个目的端口,并等待代理进行连接,然后“简单地将数据包从服务器复制到客户端和客户端到服务器“。但是,代理不必简单地复制数据包。它可以跟踪协议协商,并在初始协议级别握手完成时开始修改数据。在Windows下,ProxyCap等工具可用于重定向TCP连接。 OWASP Proxy在服务器端。 – 2014-11-25 11:19:48