2016-09-27 92 views
1

运行脚本,我运行一个隧道是这样的:Socat:在双向隧道

socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090 

我想运行一个脚本通过隧道的字符串来执行代码。

该脚本不会更改字符串,只能独立处理字符串,但允许在两端之间不发生更改而通过。

这可能吗?

回答

1

你应该能够使用这种方法,甚至改变通信:

准备一个脚本helper.sh它获取的每个连接执行:

#!/bin/bash 

./inFilter.sh | socat - TCP:192.168.1.3:9090 | ./outFilter.sh 

,并开始利用监听:

socat TCP-LISTEN:9090,fork EXEC:"./helper.sh" 

脚本inFilter.shoutFilter.sh正在处理公司的客户端和服务器部分mmunication。

inFilter.sh

#!/bin/bash 

while read -r l ; do echo "IN(${l})" ; done 

outFilter.sh

#!/bin/bash 

while read -r l ; do echo "OUT(${l})" ; done 

此方法应用于线基于文本的通信工作(如几乎所有的是line-buffered)。

为了使它适用于二进制协议,使用stdbuf -i0 -o0包装所有进程可能会有所帮助(请参阅.e.g here),并且在这种情况下摆脱shell可能是一个好主意。

祝你好运!