Socat:在双向隧道中运行脚本

时间:2016-09-27 11:23:10

标签: tcp exec socat

我正在运行这样的隧道:

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

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

脚本不会更改字符串,只能独立处理字符串,但允许在不改变两端的情况下通过字符串。

这可能吗?

1 个答案:

答案 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.shoutFilter.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可能是一个好主意。

祝你好运!