2012-02-13 69 views
0

我想我總結了它的標題。關於這個問題,我一直在評估我的工具選項,這些工具允許我製作,捕獲和分析TCP/IP數據包。我對網絡編程非常陌生,而且我仍然在學習,但在這一點上,我想編寫一個建立TCP連接的程序。(推薦):圖書館的數據包製作,捕獲和分析

這裏是我的目標(長期到短期):

  1. 部署和代碼系統,可以建立NAT後面兩臺計算機給出其本地主機名之間建立SSH連接(即feynman.home到feynman.work)和他們路由器的IP地址。如果可能/必要的話,我還希望能夠在一組跳中指導連接。 不使用任何第三方或封閉的源代碼。 @

  2. 重寫(也可能是修改)pwnat在一個「乾淨」的格式(即使用一些發達庫高級語言。)

  3. 建立相同的NAT後面的兩個主機之間的SSH連接(使用我自己當然的代碼。)

  4. 建立相同的NAT後面的兩個主機之間的TCP連接(用我自己當然代碼。)

我設法找到netexpect,它似乎非常有希望,直到它未能建立在我的Mac OS X上(我的電腦正在經歷一個令人毛骨悚然的時期。)Netexpect可能是最好的選擇,但我遇到了很多其他的問題。 scapy以及perl和ruby的實現。)其中很多都沒有得到很好的維護(例如scapy及其perl和ruby實現)。

所以,我認爲最好把問題帶到stackoverflow(除非有一個更好的stackexchange我不知道。)

*鑑於我的電腦的當前狀態(不要問)可移植性很重要。

*我更願意保持良好的維護狀態/處於積極的發展狀態,以便最好地保證我將擁有所有我需要的工具來實現我的短期和長期目標。

*最後,我更喜歡某些使用解釋型語言的東西,其原因從我的經驗到我的偏好。

@是的我完全意識到有更簡單的方法。我想按照自己的方式去做,因爲這樣的學習體驗和實用性一樣。

回答

0

你描述的大多數涉及在多跳/ NAT之間路由連接 - 在SSH客戶端根本沒有完成。這將涉及訪問多個網絡路由器並預先設置所有這些NAT,然後這些翻譯將在連接路由時自動發生。

您是否在討論通過多個服務器代理您的連接?這可以通過登錄到服務器A的宏來完成,然後再自動從服務器A調用ssh到達服務器B等等。

你能更詳細地描述一下你試圖完成什麼嗎?

編輯:我只是讀了pwnat的描述。這是非常專有的(並且無論如何不會在任何情況下工作,因爲許多配置完全阻止了ICMP)。如果你真的想嘗試一下,你可能會被卡在C/C++中。出於安全原因,我不認爲Java或.NET爲您提供了需要打包工藝所需的低級靈活性。你看過Ostinato:http://code.google.com/p/ostinato/wiki/Downloads?tm=2或Nemesis:http://nemesis.sourceforge.net/

在windows上幾乎所有的東西都會使用winpcap和* nix它會使用libpcap。

+0

好吧,我真的不喜歡被綁定到C或跟蹤這些shell綁定程序的所有-abcdepqstz標誌,但感謝回覆。此外,我偶然發現:http://search.cpan.org/~saper/Net-RawIP-0.25/lib/Net/RawIP.pm,這似乎值得研究。 – 2012-02-14 00:17:52

0

雖然我還沒有嘗試過,這可能工作:http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET

它說,它SharpPcap處理與WinPcap的接口...所以這取決於他們實現的是什麼,或者是否可以擴展功能,你可能會能夠把東西放在一起。

或者,在Java中,你也許能夠使用的東西像這樣爲出發點:http://jpcap.sourceforge.net/

+0

對於C#,packet.net看起來也不錯:http://sourceforge.net/apps/mediawiki/packetnet/index.php?title=Main_Page – David 2012-02-14 16:06:17

1

我知道你正在尋找的一種解釋語言庫,但libcrafter是非常容易使用。是一個用於製作和解析網絡數據包的C++庫。未來,它將支持更多的協議。

+1

謝謝,很好記住。 – 2012-03-28 19:03:58

0

libtins是我過去一年開發的一個開源的多平臺C++庫。您可以使用它僞造,嗅探並解釋來自網絡接口的數據包。它使用起來非常簡單,它提供了高級接口,因此您不必擔心字節序,內部協議實現等。

您可以在library's website看看它。