2015-09-02 2 views
0

Здравствуйте, у меня есть настройка сокета, и я хочу отправить команды python для выполнения на втором компьютере. Пока могу отправить команду s.send('print "hello world"') и с m.recv(1024) на второй машине. Могу ли я сделать что-то вроде x = m.recv(1024), а затем на следующей строке всего лишь x, чтобы выполнить то, что было получено? Обратите внимание: у меня есть сокеты, которые устанавливаются и работают с одной машиной в качестве сервера, а другой - как клиент. Но я никогда не был уверен, правильно ли я использовал recv и send, потому что у меня не было возможности их проверить.Python скрипт через сокет

Благодаря

+0

Вы можете, но убедитесь, что кодируете и декодируете, если используете Python3. Также посмотрите функцию eval(), возможно, это поможет;) –

+0

Вы пытались использовать функцию 'exec()'? –

+0

Вы можете протестировать их на одной машине с использованием разных портов. –

ответ

0

Если вы используете Eval вы можете выполнить код питона в виде строки:

eval('print "Hello world"') 

Это напечатает Привет мир.

Для прямой печати на вход в Python 3 (!):

eval(m.recv(1024).decode('utf-8')) 

Python 2:

exec(m.recv(1024)) 

! Как сказал Питер Вуд в комментарии, вы должны быть осторожны с тем, что получаете; все, у кого есть доступ к вашему серверу, могут отправить любой код, который они хотят, они могут создавать файлы, просто отправив код.

У вас есть только у вас есть, и вы можете быть в безопасности, сделать черный список функций или даже лучше, белый список.

+1

Очевидно, что вам нужно быть осторожным, что вы получаете. –

+0

@PeterWood включил его, не думал об этом! –

+0

Как вы можете быть уверены в содержимом входящего пакета? – dsgdfg

0

В случае, если вы используете Python 2.x, используйте EXEC функцию:

x = m.recv(1024) 
exec(x) 

И в случае питона 3.x, используйте функцию Eval:

x = m.recv(1024).decode('utf-8') 
eval(x) 

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

+0

Так что я должен быть осторожен? – ferret249

+0

Функции 'eval' и' exec' могут использоваться для выполнения вредоносного кода на сервере, если клиент отправляет такой код через запрос. –

+0

Команда могла что-то сделать; искать свой аппарат, отправлять электронную почту, удалять данные, включать регулятор громкости, открывать веб-браузер на каком-то громком веб-сайте, что угодно. –

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

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