gpt4 book ai didi

Java - 使用 SSH 隧道连接到网页

转载 作者:行者123 更新时间:2023-11-30 08:23:21 25 4
gpt4 key购买 nike

Java 编码员。我最近面临一项有趣的任务——创建使用 SSH 隧道作为浏览网页(通过 HTTPS)代理的软件。在阅读了 JSCH 上的一些文档(http://www.jcraft.com/jsch/,一个 Java SSH 隧道库)之后,它们都以数据库连接为例,我决定自己尝试一下。这是我从 http://kahimyang.info/kauswagan/code-blogs/1337/ssh-tunneling-with-java-a-database-connection-example 复制的连接代码

int assigned_port;   
int local_port=3309;

// Remote host and port
int remote_port=3306;
String remote_host = "<SSH host goes here>";
String login = "<SSH login goes here>";
String password = "<SSH password goes here>";

try {
JSch jsch = new JSch();

// Create SSH session. Port 22 is your SSH port which
// is open in your firewall setup.
Session session = jsch.getSession(login, remote_host, 22);
session.setPassword(password);

// Additional SSH options. See your ssh_config manual for
// more options. Set options according to your requirements.
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("Compression", "yes");
config.put("ConnectionAttempts","2");

session.setConfig(config);

// Connect
session.connect();

// Create the tunnel through port forwarding.
// This is basically instructing jsch session to send
// data received from local_port in the local machine to
// remote_port of the remote_host
// assigned_port is the port assigned by jsch for use,
// it may not always be the same as
// local_port.

assigned_port = session.setPortForwardingL(local_port,
remote_host, remote_port);

} catch (JSchException e) {
System.out.println("JSch:" + e.getMessage());
return;
}

if (assigned_port == 0) {
System.out.println("Port forwarding failed!");
return;
}

现在,我对所有端口转发的东西都不是很熟悉,但是,如果我理解正确的话,代码应该通过 SSH 转发所有传入到 127.0.0.1:3309(或任何分配的端口)的连接服务器。现在我卡住了。我应该如何通过 127.0.0.1:3309 发送 HttpsURLConnection?我尝试将其定义为 HTTP 或 HTTPS 或 SOCKS 代理,但都不起作用。谁能帮帮我?

最佳答案

您发布的代码会将所有流量从 127.0.0.1:3309 转发到您已连接的 SSH 服务器上的端口 3306。

当使用端口转发时,您将监听地址:端口视为实际目的地。因此,如果您需要使用 HttpsURLConnection,您可以使用

的 URL 来构造它
https://127.0.0.1:3309/

显然,您还需要根据您要实现的目标向 URL 附加路径。我会建议修改您的代码以使用更多标准的 HTTP 端口,首先尝试使用 HTTP,一旦成功,就转向 HTTPS

int local_port=8080;
// Remote host and port
int remote_port=80;

上面的 URL 将是

http://127.0.0.1:8080

您始终可以通过将 URL 粘贴到浏览器来测试它。

您在使用 HTTPS 时可能遇到的问题之一是证书验证,因此我建议首先测试纯 HTTP 以证明您的代码正常工作。

关于Java - 使用 SSH 隧道连接到网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23739696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com