2012-02-13 67 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看看它。