使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理
Posted
技术标签:
【中文标题】使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理【英文标题】:Using JSch to create a SOCKS proxy tunneled through SSH 【发布时间】:2018-03-23 18:59:58 【问题描述】:据我所知,可以使用 JSch 创建一个 SSH 隧道,然后将设置放在 Firefox 中作为 SOCKS5 代理,所有流量都将通过 JSch 连接的机器。我找到了以下代码,但有一些我不明白的地方。
String host = "my ssh server ip";
String user = "root";
String password = "mypass";
int port = 22;
int tunnelLocalPort = 9080;
String tunnelRemoteHost = "YYY.YYY.YYY.YYY";
int tunnelRemotePort = 80;
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
localUserInfo lui = new localUserInfo();
session.setUserInfo(lui);
session.connect();
session.setPortForwardingL(tunnelLocalPort, tunnelRemoteHost, tunnelRemotePort);
System.out.println("Connected");
tunnelLocalPort
是我的 java 程序要监听的端口吗?这是我放 Firefox SOCKS5 代理设置的端口?
我不明白 tunnelRemoteHost
的用途,我希望它像 SOCKS5 代理一样,就像 PuTTY 在其上设置隧道时所做的那样。
【问题讨论】:
【参考方案1】:JSch 确实允许创建 SSH 隧道。但是 PuTTY 的“动态”端口转发功能(我假设您指的是)不仅仅是 SSH 隧道。它特别实现了 SOCKS 代理(你所追求的)。这是 JSch 没有实现的东西。
对于普通的 SSH 隧道/端口转发,您必须指定目标地址,以将隧道的另一端连接到 (tunnelRemoteHost
)。这在 PuTTY“动态”模式下显然不是必需的,因为有代理协议 (SOCKS) 来处理这种情况。
【讨论】:
以上是关于使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理的主要内容,如果未能解决你的问题,请参考以下文章
android 使用jsch 开启ssh隧道 ssh tunnel