Socat-可能吗?

Socat-可能吗?

在使用 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:比使用 shell 解释器更可取exec:,因为这样可以在命令后轻松运行其他命令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

相关内容