
在使用 socat 進行連接埠轉送時,有什麼方法可以監聽並執行命令(對於每個連接)?一個非工作範例可以使它更清楚:
socat TCP-LISTEN:8080,reuseaddr,「exec:ls」 fork tcp:localhost:80
答案1
像這樣?
socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
第一個參數可以
,fork
繼續socat
監聽更多連接system:
優先於exec:
擁有 shell 解釋器並在命令後輕鬆運行附加命令ls
,這是一個新
socat
命令這將使標準輸入/標準輸出連接到遠端客戶端的輸出/輸入,並將其再次雙向轉發到下一個目的地。請注意,其
:
分隔符號(以及其他一些特殊字元)必須使用 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