socat 中的 sed 与端口转发?

socat 中的 sed 与端口转发?

不确定这是否属于这里、StackOverflow 还是 SuperUser。

我有一个运行反向 telnet 服务器的设备,我需要能够向其发送/接收数据。如果我像这样运行 socat 并 telnet 到端口 8002,我就可以使用它:

sudo socat TCP-LISTEN:8001 TCP-LISTEN:8002

但是,它发送了不应该发送的信息,我正在尝试使用 sed 来过滤掉这些数据。我希望这种通信保持双向(也就是说,我在 localhost:8002 上输入 telnet 的任何内容都会通过 localhost:8001 发送出去,反之亦然)。

我尝试过使用包含以下内容的 bash 脚本:

#!/bin/bash
sed (my regex here) | socat - TCP-LISTEN:8002

然后运行:

sudo socat TCP-LISTEN:8001 SYSTEM:./replace.sh

但这在 telnet 控制台中没有输出任何内容。我也尝试过EXEC:同样的事情,但没有发生任何事情。

我什至尝试过:

sudo socat TCP-LISTEN:8001 "SYSTEM:'sed (my regex here)' || TCP-LISTEN:8002"

没有效果。

答案1

你只是错过了这fork一点。命令行将是:

socat TCP-LISTEN:8002,fork SYSTEM:/path/to/replace.sh

然后,文件 /path/to/replace.sh 应该具有执行权限,并且可以包含类似的内容(这会将所有“a”更改为“b”):

#!/bin/bash

sed -u 's/a/b/g'

如果您使用 sed,添加-u(unbuffered) 标志很重要。

相关内容