首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -使用SSH隧道连接到网页

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

Stack Overflow用户
提问于 2014-05-19 13:55:58
回答 1查看 4.9K关注 0票数 2

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

代码语言:javascript
复制
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 (或assigned_port是什么)。现在我被困住了。如何通过127.0.0.1:3309发送HttpsURLConnection?我尝试将其定义为HTTP、HTTPS或SOCKS代理,但两者都不起作用。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-19 14:25:16

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

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

代码语言:javascript
复制
https://127.0.0.1:3309/

显然,您还需要为URL添加一条路径,具体取决于您要实现的目标。我建议修改您的代码以使用更标准的HTTP端口,首先尝试使用HTTP,一旦使用到HTTPS

int local_port=8080;//远程主机和端口int remote_port=80;

上面的URL将是

代码语言:javascript
复制
http://127.0.0.1:8080

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

使用HTTPS可能遇到的问题之一是证书验证,所以这就是为什么我建议首先测试普通HTTP,以证明您的代码工作正常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23739696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档