Web ページでトリガーされると「TCP メッセージ」を送信

Web ページでトリガーされると「TCP メッセージ」を送信

私のワークステーションでは、次のように入力を受け取るプログラムが実行されています。

echo mycommand >/dev/tcp/127.0.0.1/1234

わからない人も簡単にコマンドを実行できるように、Webページをクリックして「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をrootとして実行する必要はありません。よく使用されるサーバーポート80(したがってURL http://yourhostname)を使用するには、これを行う必要がありますsudo socat ...

Python、Ruby、Perl、または他の多くの言語に精通している場合は、すべてPOSTリクエストを正しく処理できるシンプルなWebサーバーを提供しています。

関連情報