繁体   English   中英

Python TCP堆栈实现

[英]Python TCP stack implementation

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

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

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

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

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

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

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

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

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

如果您已经致力于套接字另一端的软件,即将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终端客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM