Tcp

從網頁觸發時發送“TCP 消息”

  • August 23, 2017

我的工作站上執行了一個程序,該程序接受如下輸入

echo mycommand >/dev/tcp/127.0.0.1/1234

我希望能夠通過點擊網頁將“mycommand”發送到 localhost 機器上的指定埠,以便不精通的人可以輕鬆地執行命令。

有什麼辦法可以讓它工作嗎?

正確執行此操作非常複雜,生成帶有表單的 html 頁面並使用正確的POST請求,甚至可能通過密碼授權。如果您在本地網路上並且不介意任何人連接,您可以通過某種方式展示使用簡單的 shell 腳本socat來管理連接可以做什麼。

創建一個 shell 腳本,比如/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,您無需以 root 身份執行 socat。如果你想使用通常的伺服器埠 80(所以你的 url 只是http://yourhostname)你需要做sudo socat ....

如果您熟悉 python、ruby、perl 或許多其他語言,它們都提供了可以正確處理 POST 請求的簡單 Web 伺服器。

引用自:https://unix.stackexchange.com/questions/387951