Linux

Socat - 有可能嗎?

  • July 27, 2021

在使用 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

引用自:https://serverfault.com/questions/1070714