2014-08-29 2 views
1

어떻게 안드로이드 응용 프로그램의 문자열 (쉘 스크립트 파일 이름)을 내 PC의 Python 프로그램에 보내고 Python에서 해당 문자열에 지정된 스크립트를 실행할 수 있습니까?서버를 통해 Python 스크립트에 문자열 보내기

난 파이썬 스크립트를 마쳤습니다. doThis (./ openNetflix)는 ./openNetflix 스크립트를 실행합니다.이 스크립트는 아마도 Netflix를 열 것이라고 추측합니다.

파이썬 서버가 문자열을 받아서 doThis (scriptNameString) 함수에 전달하도록 구성하려면 어떻게해야합니까?

+2

가장 쉬운 방법은 REST 인터페이스를 사용하는 것입니다. 예를 들어, 병 http://bottlepy.org/docs/dev/index.html 병을 사용할 준비가되었습니다. –

+1

파이썬이되어야합니까? netcat 주위에 한 줄짜리 셸 스크립트를 사용하여이 작업을 수행 할 수 있습니다 ... 또는 더 간단히 말하자면 이것은 telnet, rsh 등이 이미 수행하는 작업입니다. – abarnert

+1

설정을 계획하는 경우 매우주의해야합니다. 어떤 문자열을 받아들이고 그것을 실행하는 서버. 이를 설명 할 수있는 많은 악의적 인 방법이 있습니다. (예 : 누군가 "rm -rf /"를 서버에 보냄). 서버가 보안/격리 된 네트워크에 있더라도 서버가 '알려진'/ '좋은'작업 만 수행 할 수 있는지 확인하는 것이 좋습니다. 예 : 실행할 수있는 명령 목록이 있어야합니다. –

답변

0

이 케이스에 약간 긴 코멘트를 쓰기 시작했는데, 글자 수 제한이 가까워지면 답을 알아 냈습니다.

이 작업을 수행하는 가장 쉬운 방법은 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 바깥에서 명령어 변수를 절대 사용하지 마십시오.

약점이 있음을 알 수 있습니다.이 링크가있는 사람은 누구나 해당 기능을 호출 할 수 있으며 잠재적으로 서비스 거부가 발생하거나 실제 피해가 발생할 수 있습니다. 따라서 요청이 유효한 클라이언트에서 이루어진 것임을 알기 위해 일종의 제어 기능과 보안 기능을 추가하는 것이 좋을 것입니다. 이 문제를 해결할 수있는 방법은 여러 가지가 있으므로 사용 가능한 정보를 자세히 살펴 보시기 바랍니다.

salts["here_you_put_random_hash_as_key"] = "and_here_the_salt" 

을 그리고 당신은 또한 클라이언트 코드에서이 특정 클라이언트에 대한 소금과 키를 저장 : 아주 간단한 하나는 같은 서버에 키와 소금의 딕셔너리를 저장하는 것입니다. 그런 다음 클라이언트가 요청을하면 추가 인수로 자신의 키와 체크섬 (명령에서 만든 md5, 클라이언트 솔트 키 및 현재 시간 등으로 구성됨)을 포함합니다. 그런 다음 요청과 3 개의 변수를 모두 받으면 동일한 데이터를 사용하여 자체 체크섬을 만들려고합니다 (제공된 클라이언트 키에 대한 소금을 선택하고 클라이언트에서 나오는 소금, 현재 시간 및 명령에 대한 md5를 계산합니다). 일치하면 요청이 유효하다는 것을 알게됩니다.

+0

매우 근사합니다. 정확히 내가 필요로하는 것. 고마워, 너 완코! – oog

관련 문제