2011-04-23 91 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