8

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

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

我希望已经编写了某种我可以使用的 TCP 堆栈。有任何想法吗?我过去曾在 C 项目中使用过 lwip——在 python 中类似的东西会是完美的。

4

5 回答 5

7

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

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

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

于 2009-10-17T10:19:10.560 回答
2

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

于 2009-10-17T01:01:51.267 回答
0

我知道这与 Python 没有直接关系,但如果您希望进行繁重的网络处理,您应该考虑使用 Erlang 而不是 Python。真的只是一个建议......你可以随时尝试使用 Twisted 来做这件事......如果你喜欢冒险(并且有很多时间在你身边);-)

于 2009-10-17T00:53:09.533 回答
0

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

于 2009-10-17T00:58:34.037 回答
0

如果您已经致力于套接字另一端的软件,即向您转发 TCP 数据包,那么 TCPWatch 可能会告诉您如何获取 SYN 数据包。SCAPY 确实非常适合发送您想要的数据包,但我不确定它是否可以用作代理。

http://hathawaymix.org/Software/TCPWatch

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

于 2009-10-17T16:47:41.383 回答