Python TCP堆栈实现

时间:2009-10-17 00:50:53

标签: python tcp network-programming network-protocols raw-sockets

是否有一个实现独立TCP堆栈的python库?

我不能使用通常的python套接字库,因为我在套接字上收到一个数据包流(它们通过这个套接字通过隧道连接到我)。当我收到一个发往特定端口的TCP SYN数据包时,我想接受连接(发送一个syn-ack),然后获取另一端发送的数据(适当地确认)。

我希望已经编写了某种我可以使用的TCP堆栈。有任何想法吗?我过去曾经使用过lwip作为一个C项目 - 在python中沿着这些方向的东西是完美的。

5 个答案:

答案 0 :(得分:7)

您没有说明您正在使用哪个平台,但如果您正在使用Linux,我会打开tun/tap interface并将IP数据包作为真正的网络接口返回内核,以便内核可以做所有那些棘手的TCP事情。

这是(例如)OpenVPN的工作原理 - 它通过UDP或TCP接收原始IP数据包,并通过tun / tap接口将它们隧道传回内核。

我认为现在还有一个用于Windows的tun / tap接口,它是为OpenVPN端口开发的。

答案 1 :(得分:2)

浏览Scapy,看起来它可能能够处理这些低级别的情况。我自己没有用过,所以我无法确认它是否符合您的解释;我只浏览过文档。

答案 2 :(得分:1)

我知道这不是与Python直接相关的,但是如果你想进行繁重的网络处理,你应该考虑使用Erlang而不是Python。只是一个建议真的......你总是可以用Twisted来做这个...如果你觉得冒险(并且有很多时间在你身边); - )

答案 3 :(得分:0)

您可以使用ctypes模块导入lwip并再次使用它。

答案 4 :(得分:0)

如果您已经致力于套接字另一端的软件,即向您转发TCP数据包,那么TCPWatch可能会向您展示如何获取SYN数据包。 SCAPY对于准确发送你想要的数据包肯定很棒,但我不确定它是否可以作为代理。

http://hathawaymix.org/Software/TCPWatch

但是,如果您没有致力于发送端的内容,请考虑使用Twisted Conch或Paramiko进行SSH转发。即使您不需要加密,您仍然可以使用对您的CPU影响较小的blowfish。这并不意味着你需要另一端的Conch,因为SSH是标准化的,所以任何SSH软件都应该工作。在SSH世界中,这通常被称为“端口转发”,人们​​使用SSH终端客户端登录SSH服务器并设置端口转发隧道。 Conch和Paramiko允许您将其构建到Python应用程序中,这样就不需要SSH终端客户端。