Linux
Socat - 有可能嗎?
在使用 socat 進行埠轉發時,有什麼方法可以監聽和執行命令(對於每個連接)?一個不工作的例子使它更清楚:
socat TCP-LISTEN:8080,reuseaddr, “exec:ls” fork tcp:localhost:80
像這樣?
socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
- 第一個參數
,fork
保持socat
監聽更多連接system:
最好exec:
有一個 shell 解釋器並在命令之後輕鬆執行附加ls
命令,- 這是一個新
socat
命令它將 stdin/stdout 連接到遠端客戶端的輸出/輸入,並將其再次雙向轉發到下一個目的地。請注意,它的
:
分隔符(和一些其他特殊字元)必須用 a 轉義,\
以免混淆第一個socat
命令。如果這一行變得更複雜,那麼簡單地執行如下腳本會變得更容易:socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
與
/path/to/myscript.sh
:#!/bin/sh ls exec socat - tcp:localhost:80
exec
在 shell 命令中是可選的,但可以避免無用地離開 shell。
socat
還導出了一些可以在腳本中重用的自己的變數,您可以像這樣檢查這些變數(建立連接):$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv SOCAT_PID=1057351 SOCAT_PPID=1057284 SOCAT_VERSION=1.7.4.1 SOCAT_SOCKADDR=127.0.0.1 SOCAT_SOCKPORT=8080 SOCAT_PEERADDR=127.0.0.1 SOCAT_PEERPORT=42970