![socat 中的 sed 与端口转发?](https://linux22.com/image/13169/socat%20%E4%B8%AD%E7%9A%84%20sed%20%E4%B8%8E%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%EF%BC%9F.png)
不确定这是否属于这里、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) 标志很重要。