是否有实现独立 TCP 堆栈的 python 库?
我不能使用通常的 python 套接字库,因为我正在通过套接字接收数据包流(它们通过这个套接字通过隧道传送给我)。当我收到发往特定端口的 TCP SYN 数据包时,我想接受连接(发送 syn-ack),然后获取另一端发送的数据(适当地确认)。
我希望已经编写了某种我可以使用的 TCP 堆栈。有任何想法吗?我过去曾在 C 项目中使用过 lwip——在 python 中类似的东西会是完美的。
是否有实现独立 TCP 堆栈的 python 库?
我不能使用通常的 python 套接字库,因为我正在通过套接字接收数据包流(它们通过这个套接字通过隧道传送给我)。当我收到发往特定端口的 TCP SYN 数据包时,我想接受连接(发送 syn-ack),然后获取另一端发送的数据(适当地确认)。
我希望已经编写了某种我可以使用的 TCP 堆栈。有任何想法吗?我过去曾在 C 项目中使用过 lwip——在 python 中类似的东西会是完美的。
你没有说你在哪个平台上工作,但如果你在 linux 上工作,我会打开一个tun/tap 接口并将 IP 数据包作为真正的网络接口返回内核,这样内核就可以完成所有这些棘手的 TCP 东西。
这就是(例如)OpenVPN的工作方式——它通过 UDP 或 TCP 接收原始 IP 数据包,并通过 tun/tap 接口将它们传送回内核。
我认为现在也有一个适用于 windows 的 tun/tap 接口,它是为 windows 的 OpenVPN 端口开发的。
瞥了一眼Scapy,它看起来可能能够处理这些低级情况。我自己没有使用过它,所以我无法确认它是否符合您的解释;我只浏览了文档。
我知道这与 Python 没有直接关系,但如果您希望进行繁重的网络处理,您应该考虑使用 Erlang 而不是 Python。真的只是一个建议......你可以随时尝试使用 Twisted 来做这件事......如果你喜欢冒险(并且有很多时间在你身边);-)
您也许可以使用ctypes模块导入 lwip 并再次使用它。
如果您已经致力于套接字另一端的软件,即向您转发 TCP 数据包,那么 TCPWatch 可能会告诉您如何获取 SYN 数据包。SCAPY 确实非常适合发送您想要的数据包,但我不确定它是否可以用作代理。
http://hathawaymix.org/Software/TCPWatch
但是,如果您不致力于发送端的内容,请考虑使用 Twisted Conch 或 Paramiko 进行 SSH 转发。即使您不需要加密,您仍然可以将这些与河豚一起使用,这对您的 CPU 影响很小。这并不意味着您需要在另一端使用 Conch,因为 SSH 是标准化的,因此任何 SSH 软件都应该可以工作。在 SSH 世界中,这通常称为“端口转发”,人们使用 SSH 终端客户端登录 SSH 服务器并设置端口转发隧道。Conch 和 Paramiko 允许您将其构建到 Python 应用程序中,这样就不需要 SSH 终端客户端。