【发布时间】:2016-09-27 11:23:10
【问题描述】:
我正在运行这样的隧道:
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想运行一个脚本来执行带有通过隧道的字符串的代码。
脚本不改变字符串,只独立处理字符串,但允许通过,两端之间不改变。
这可能吗?
【问题讨论】:
我正在运行这样的隧道:
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 正在处理通信的客户端和服务器部分。
例如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 包装所有进程的二进制协议可能会有所帮助(请参阅。例如 here)并且在这种情况下摆脱 shell 可能是一个好主意。
祝你好运!
【讨论】: