我正在运行这样的隧道:
socat TCP-LISTEN:9090,fork TCP:192.168.1.3:9090
我想运行一个脚本来执行带有通过隧道的字符串的代码。
脚本不会更改字符串,只能独立处理字符串,但允许在不改变两端的情况下通过字符串。
这可能吗?
答案 0 :(得分: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.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
所有进程的二进制协议可能有所帮助(参见.e.g here)并且在这种情况下摆脱shell可能是一个好主意。