使用 SSH 的动态端口转发知道请求要去哪里并将其发送到那里,据说这是由于使用了SOCKS协议。
使用 SSH 的本地和远程端口转发将请求转发到固定目的地,而不是请求指示自己要去的地方。
动态端口转发和本地/远程端口转发之间的上述区别是因为本地和远程端口转发工作在较低级别的协议上,并且没有能力了解请求要去哪里,或者因为本地和远程端口转发工作具有能够知道请求想去哪里但就是不去执行吗?
例如,我们可以讨论以下情况:HTTP 客户端向 SSH 发送 HTTP 请求,该请求用于动态或本地/远程端口转发。
谢谢。
答案1
区别在于客户认为正在交谈的对象。以HTTP为例:
SSH 静态(本地和远程)端口转发对于使用它们的应用程序来说是透明的。使用 HTTP,应用程序(浏览器)根本不知道它正在与端口转发通信。对于本地前锋来说想它在说话直接地到在客户端(“localhost”)上运行的 Web 服务器。 SSH 通过将所有流量传递到真实的网络服务器来伪造网络服务器。
SSH 动态端口转发不透明。应用程序(浏览器)认为它正在与“SOCKS 代理服务器”而不是网络服务器进行通信。该应用程序使用 SOCKS 代理服务器来请求与 Web 服务器的连接。然后它认为它正在通过socks代理与Web服务器(不在SSH服务器或客户端上)通信。
顺便说一句,可以在服务器上下载并安装 SOCKS 代理,创建一个转发到它的本地端口,结果将与动态转发相同。