Tcp
從網頁觸發時發送“TCP 消息”
我的工作站上執行了一個程序,該程序接受如下輸入
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 伺服器。