nic*_*ame 6 python sockets pypy sandbox
我正在尝试允许使用Pypy沙箱的子进程使用有限协议与父进程进行通信.
在查看pypy/pypy/translator/sandbox/sandlib.pyPypy附带的源代码之后,似乎有一个VirtualizedSocketProc允许os.open调用打开套接字的代码.我已经改变了代码的一些功能(例如,允许在有限端口上进行TCP连接),但很少有变化.但是,我无法实际导入Pypy的socket模块,因为它需要一个不存在的_socket模块,它似乎位于代码的解释器级部分.
我正在努力做到可行吗?如果是这样,我如何导入套接字模块?如果没有,我还能做什么?
我对此进行了进一步调查,看来这是一个相当基本的问题。socket在库级别(目录内部)实现的模块本质lib上是库的空壳_socket,它是目录中定义的解释器级别模块pypy/module。对于那些不熟悉 PyPy 的人来说,可以导入两种类型的模块,大致对应于 CPython 中的纯 Python 和 C 库。在库级别实现的模块可以轻松包含在沙箱中,并且实际上包含在“默认”pypy_interact沙箱中。但是,在解释器级别编写的模块在沙箱内不可用。
由于这种关键的区别,我的方法似乎从根本上来说是有缺陷的。相反,如果您遇到同样的问题,您可以考虑其他一些选项:
os.open以tcp://. 这实际上非常有效,也是我最喜欢的方法。socket库。这当然不是优选的,但我相信可以创建一个相对空的套接字库,它只是与沙箱控制器通信,如上面包装套接字功能一样。甚至可以修改默认套接字库来实现此目的(_socket例如,不包括 )。| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |