索卡特-這可能嗎?

索卡特-這可能嗎?

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

相關內容