2014-08-29 4 views
1

Как я могу отправить строку (имя файла сценария оболочки) из приложения android в программу python на моем компьютере и запустить python скрипт, названный в указанной строке?Отправлять строку в скрипт python через сервер

У меня есть скрипт python ... doThis (./ openNetflix) будет запускать сценарий ./openNetflix, который, как вы, наверное, догадались, открывает Netflix.

Как настроить python-сервер для получения строки и передать ее в мою функцию doThis (scriptNameString)?

+2

Самый простой способ сделать это будет с интерфейсом REST, поскольку для него есть готовые библиотеки, например, бутылка http://bottlepy.org/docs/dev/index.html –

+1

Нужно ли быть Python? Вы можете сделать это с помощью сценария оболочки one-liner вокруг netcat ... Или, что еще более просто, это именно то, что уже делают telnet, rsh и т. Д. – abarnert

+1

В стороне, вы должны быть очень осторожны, если вы планируете настроить сервер, который принимает любую строку и выполняет ее. Существует много вредоносных способов для этого. (например, кто-то отправляет «rm -rf /» на сервер). Даже если ваш сервер находится в безопасной/изолированной сети, все равно будет хорошей практикой, чтобы убедиться, что сервер может делать только «известные»/«хорошие» вещи. Например. есть список команд, которые ему разрешено запускать. –

ответ

0

Я начал писать немного длинный комментарий к этому делу, но когда вы приближаетесь к лимиту символов для комментария, полезно преобразовать его в ответ, я думаю!

Самый простой способ выполнить эту задачу будет с одной из многих отличных библиотек python для создания служб REST. Мой личный фаворит bottle и реализации данного вида услуг с использованием бутылки будет столь же просто, как:

from bottle import route, run, template 

@route('/execute/<command>') 
def execute(command): 
    if command == "list_blogs": 
     // Do something 1 
    elif command == "format_c": 
     // Do something 2 

run(host='localhost', port=79897) 

Это позволит не только предоставить вам сервис REST, но и поставить железную стену между входом пользователя и фактическое выполнение, поэтому пользовательский ввод не будет искажен с файлом, который вы пытаетесь выполнить. Не забудьте никогда не использовать переменную команды где-либо вне if/else.

Как вы можете заметить, это связано со слабостью - любой, у кого есть эта ссылка, может вызвать эти функции и потенциально вызвать отказ в обслуживании или даже фактический урон. Вот почему было бы неплохо иметь какой-то контроль и дополнительную безопасность, чтобы знать, что запрос был сделан от действительного клиента. Есть много способов решить эту проблему, я настоятельно рекомендую вам глубже изучить доступные. Очень просто один будет храниться на сервере в Dict ключей и солей, как это:

salts["here_you_put_random_hash_as_key"] = "and_here_the_salt" 

И тогда вы также хранить соль и ключ для этого конкретного клиента в коде клиента. Затем, когда клиент делает запрос, он включает в себя его ключ и контрольную сумму (которая состоит из md5, сделанного из команды, ключ солидаля клиентов и, например, текущий час) в качестве дополнительных аргументов. Затем, когда вы получаете запрос и все 3 переменные, вы пытаетесь создать свою собственную контрольную сумму, используя одни и те же данные (поэтому вы выбираете соль для предоставленного ключа клиента и вычисляете md5 для этой соли, текущего часа и команды, поступающей от клиента), и если они то вы знаете, что запрос действителен.

+0

Очень круто. Именно то, что мне нужно. Благодарю вас, вы завершите whacko! – oog

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