是否有一个实现独立TCP堆栈的python库?
我不能使用通常的python套接字库,因为我在套接字上收到一个数据包流(它们通过这个套接字通过隧道连接到我)。当我收到一个发往特定端口的TCP SYN数据包时,我想接受连接(发送一个syn-ack),然后获取另一端发送的数据(适当地确认)。
我希望已经编写了某种我可以使用的TCP堆栈。有任何想法吗?我过去曾经使用过lwip作为一个C项目 - 在python中沿着这些方向的东西是完美的。
答案 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终端客户端。