【问题标题】:Socat: run script in bidirectional tunnelSocat:在双向隧道中运行脚本
【发布时间】:2016-09-27 11:23:10
【问题描述】:

我正在运行这样的隧道:

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

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

脚本不改变字符串,只独立处理字符串,但允许通过,两端之间不改变。

这可能吗?

【问题讨论】:

    标签: tcp exec socat


    【解决方案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 包装所有进程的二进制协议可能会有所帮助(请参阅。例如 here)并且在这种情况下摆脱 shell 可能是一个好主意。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2018-09-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多