如何使用 ssh 或其他工具将一个端口转发到另一个端口?

如何使用 ssh 或其他工具将一个端口转发到另一个端口?

我有一个旧应用程序监听绑定到本地主机接口(即 127.0.0.1)的端口 5050。此应用程序在 Linux 机器(嵌入式系统)上运行。我有一个在 PC 上运行的应用程序(我们称之为应用程序 C),我想连接到它。但无法连接,因为旧应用程序不接受来自机器外部的连接。我无法更改旧应用程序源代码。有没有办法
运行类似 ssh 的东西来监听嵌入式机器上的端口 7070 并将传入流量转发到端口 5050?我知道 ssh 允许这样做。但它需要来自外部的 ssl 类型连接。我想知道是否可以启动它只是为了进行端口转发,而不需要任何类型的 ssl 隧道。类似 SOCKS 代理的东西。

如果您知道某个工具可以完成这项工作,请随时推荐其他工具。

答案1

您可能还可以通过配置xinetd来执行以下操作:

定义一个在端口 7070 上运行的新服务,并使用重定向(来自man xinetd.conf)进行配置

重定向 允许将 tcp 服务重定向到另一台主机。当 xinetd 在此端口上收到 tcp 连接时,它会生成一个进程,该进程与指定的主机和端口号建立连接,并在两台主机之间转发所有数据。

答案2

SSH 可以做你想做的事。请参阅SSH 手册页,特别是-L-R选项(在本地机器-L上创建一个监听器L,转发到远程机器/网络上的某些内容。 -RR表情端创建一个监听器,转发到本地机器/网络上的某些内容)。

转发的端口-L不需要-R任何特定的协议握手 - 尽管通道通过 SSH 加密,但转发对于连接到该端口的应用程序来说是透明的。

答案3

应该可以。尝试

ssh -R *: 7070:localhost:5050 -N host.example.com

答案4

我发现rinetd可以轻松完成此操作。SSH 需要 sshd 在某处建立加密隧道,传入连接通过该隧道进行连接。rinetd 非常好,因为它不依赖于其他实体。它只进行端口转发。

相关内容