내 워크스테이션에서 다음과 같이 입력을 받는 프로그램이 실행 중입니다.
echo mycommand >/dev/tcp/127.0.0.1/1234
잘 모르는 사람도 쉽게 명령을 실행할 수 있도록 웹 페이지를 클릭하여 "mycommand"를 localhost의 지정된 포트로 보낼 수 있기를 원합니다.
작동하게 하는 방법이 있나요?
답변1
이를 올바르게 수행하는 것은 매우 복잡하며 양식이 포함된 HTML 페이지를 생성하고 올바른 POST
요청을 사용해야 하며 심지어 비밀번호 인증이 필요할 수도 있습니다. 로컬 네트워크에 있고 다른 사람이 연결하는 것을 개의치 않는 경우 socat
간단한 쉘 스크립트를 사용하여 연결을 관리하는 방법을 시연할 수 있습니다.
/tmp/myscript
콘텐츠가 포함된 셸 스크립트 만들기
#!/bin/bash
echo "HTTP/1.0 200 OK
Content-Type: text/plain
running command" |
sed 's/$/\r/'
if echo mycommand >/dev/tcp/127.0.0.1/1234
then echo OK
else echo fail
fi
date
실행 가능하게 만드는 것을 잊지 마십시오 chmod +x /tmp/myscript
. 그런 다음 실행
socat tcp-listen:8001,reuseaddr,fork exec:/tmp/myscript
http://yourhostname:8001/
그리고 브라우저를 연결하여 명령을 실행할 수 있어야 합니다 . 또는 테스트 용도로 curl -v http://localhost:8001/
다음과 같은 내용이 표시되어야 합니다.
* Connected to localhost (127.0.0.1) port 8001 (#0)
> GET / HTTP/1.1
> Host: localhost:8001
> User-Agent: curl/7.43.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/plain
<
running command
OK
Wed Aug 23 21:04:47 CEST 2017
일부 브라우저는 실제로 연결하지 않고 결과를 캐시할 수 있으므로 이는 완벽하지 않습니다. 따라서 날짜는 검사로 출력됩니다. 포트 8001을 사용하면 socat를 루트로 실행할 필요가 없습니다. 일반적으로 사용되는 서버 포트 80(따라서 URL http://yourhostname
) 을 사용하려면 이 작업을 수행해야 합니다 sudo socat ...
.
Python, Ruby, Perl 또는 기타 여러 언어에 익숙하다면 모두 POST 요청을 올바르게 처리할 수 있는 간단한 웹 서버를 제공합니다.