2014-09-07 1 views
0

Я пытаюсь использовать изолированную песочницу pypy для запуска ненадежного кода python у пользователей моего http-сервера. Кодирование python основано мной, и инфраструктуре необходимо поговорить с процессом на другом сервере. Поэтому я пытаюсь создать сокет для связи. Я нашел пост несколько лет назад, как создать соединение TCP на: Using the socket module in sandboxed PypyКак создать сокет в песочнице pypy

Это выглядит очень многообещающим, но, похоже, не работает для меня:

$./sandbox/pypy_interact.py goal/pypy-c 
    >>import os 
    >>fd = os.open("abc", os.O_RDWR|os.O_CREAT) 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
     OSError: [Errno 2] No such file or directory: 'abc' 
    >>fd = os.open("tcp://10.0.0.5:5000", os.O_RDWR|os.O_CREAT) 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
     OSError: [Errno 2] No such file or directory: 'tcp://10.0.0.5:5000' 

Я также попытался построить песочницу с модулем _socket по: PyPy ../../rpython/bin/rpython -O2 --sandbox targetpypystandalone --withmod-_socket

Однако на этом ударил утверждают isinstance (ll_ptrtype, PTR), а затем потерпели неудачу.

Есть ли какое-либо решение для подключения tcp в песочнице pypy 2.3.1, или я сделал что-то не так?

ответ

0

Строка os.open("tcp://10.0.0.5:5000") при запуске внутри песочницы просто запрашивает внешний процесс для этого файла. Этот внешний процесс равен pypy_interact.py. Поэтому, когда песочница обрабатывает os.open(anything), логика в pypy_interact.py получает этот открытый запрос и может обрабатывать его, но он хочет.

Вы можете внести любые изменения в этот внешний процесс управления - например, для анализа строк, начинающихся с "tcp://", и их обработки, открыв настоящий сокет. (Будьте внимательны при разборе строки, чтобы не принимать случайные имена хостов или сбой по неверным строкам.) Это не то, что доступно из коробки.

Обратите внимание, что если вы реализуете эту функцию, пожалуйста, внесите ее обратно в PyPy. Как показывает ссылка на другой вопрос, это не так сложно сделать и делалось раньше (более одного раза), но никто не внес его обратно в PyPy.

0

Решение, которое я получил, фактически просто прекратилось. Короче говоря, он должен играть с файлом pypy_interact.py и включать VirtualizedSocketProc, который уже реализовал парсер tcp.

 Смежные вопросы

  • Нет связанных вопросов^_^