1
运行脚本,我运行一个隧道是这样的:Socat:在双向隧道
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想运行一个脚本通过隧道的字符串来执行代码。
该脚本不会更改字符串,只能独立处理字符串,但允许在两端之间不发生更改而通过。
这可能吗?
运行脚本,我运行一个隧道是这样的:Socat:在双向隧道
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想运行一个脚本通过隧道的字符串来执行代码。
该脚本不会更改字符串,只能独立处理字符串,但允许在两端之间不发生更改而通过。
这可能吗?
你应该能够使用这种方法,甚至改变通信:
准备一个脚本helper.sh
它获取的每个连接执行:
#!/bin/bash
./inFilter.sh | socat - TCP:192.168.1.3:9090 | ./outFilter.sh
,并开始利用监听:
socat TCP-LISTEN:9090,fork EXEC:"./helper.sh"
脚本inFilter.sh
和outFilter.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可能是一个好主意。
祝你好运!