gpt4 book ai didi

python - 在沙盒 Pypy 中使用套接字模块

转载 作者:太空狗 更新时间:2023-10-30 00:08:22 25 4
gpt4 key购买 nike

我正在尝试允许使用 Pypy 沙箱的子进程使用有限的协议(protocol)与父进程进行通信。

在查看 Pypy 附带的 pypy/pypy/translator/sandbox/sandlib.py 的源代码后,似乎有一个 VirtualizedSocketProc 允许 os.open 调用打开套接字。我更改了代码的某些功能(例如,允许在有限端口上建立 TCP 连接),但几乎没有更改。但是,我无法实际导入 Pypy 的 socket 模块,因为它需要一个不存在的 _socket 模块,它似乎位于代码的解释器级部分.

我想做的事情可行吗?如果是这样,我如何导入套接字模块?如果没有,我还能做什么?

最佳答案

我对此进行了进一步调查,看来这是一个相当基本的问题。 socket 模块在库级别(在 lib 目录内)实现,本质上是 _socket 库的空壳,它是在 pypy/module 目录中定义的解释器级模块。对于不熟悉 PyPy 的人,可以导入两种类型的模块,大致对应于 CPython 中的纯 Python 和 C 库。在库级别实现的模块可以很容易地包含在沙箱中,实际上包含在“默认”pypy_interact 沙箱中。但是,在解释器级别编写的模块在沙箱内不可用。

由于这一关键区别,我的方法似乎存在根本性缺陷。相反,如果您遇到同样的问题,您可以考虑其他一些选择:

  1. 直接使用os.open,文件名以tcp:// 开头。这实际上非常有效,是我最喜欢的方法。
  2. 实现您自己的socket 库。这当然不是可取的,但我相信可以创建一个相对空的套接字库,它可以像上面包装套接字功能一样简单地与沙箱 Controller 通信。甚至可以修改默认套接字库来实现这一点(例如,不包括 _socket)。

关于python - 在沙盒 Pypy 中使用套接字模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6655258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com