在用socat进行端口转发时,是否有任何方法侦听和执行命令(针对每个连接)?一个不起作用的例子,让它更清楚:
监听:8080,reuseaddr,"exec:ls“叉tcp:localhost:80
发布于 2021-07-26 16:09:40
是像这样吗?
socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
,fork
让socat
继续监听更多的连接system:
比exec:
更倾向于有一个shell解释器,并且在ls
命令之后很容易地运行一个附加命令,socat
命令,它将stdin/stdout连接到远程客户端的输出/输入,并将它双向转发到下一个目的地。注意,它的:
分隔符(以及其他几个特殊字符)必须用\
进行转义,以避免混淆第一个socat
命令。如果这一行变得更复杂,那么简单地执行这样的脚本就变得更容易了: socat listen:8080,reuseaddr,叉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
复制相似问题