【问题标题】:SOCKS5 Proxy using SSLSocket使用 SSLSocket 的 SOCKS5 代理
【发布时间】:2011-04-25 22:09:53
【问题描述】:

我有一个客户端/服务器应用程序,它通过 Java 的 SSLSocket 远程连接到服务器。

我正在尝试实现一种可选模式,该模式通过经过身份验证的 SOCKS v5 代理启用连接。

我尝试使用relevant tutorial,但它没有具体提及 SSL。

我尝试设置系统范围的属性(“socksProxyHost”和“socksProxyPort”),但它似乎没有做任何事情。

我的下一个方法是在 SSLSocketFactory 中使用工厂方法:

            String proxyHost = Config.prefs.get("PROXY_NAME", "localhost");
            int proxyPort = Config.prefs.getInt("PROXY_PORT", 1080);
            InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
            Socket underlying = new SSLSocket(new Proxy(Proxy.Type.SOCKS, proxyAddr));
            underlying.connect(new InetSocketAddress(getHost(), getPort()));
            socket = (SSLSocket) factory.createSocket(
                    underlying,
                    getHost(),
                    getPort(),
                    true);

但是这种方式的问题是createSocket方法要求底层socket已经连接,我的服务器不接受非SSL连接。

使用 SOCKS 连接到远程服务器的最佳方式是什么?另外,我几乎不知道如何在这个系统中为经过身份验证的 SOCKS 提供用户名/密码。

谢谢!

【问题讨论】:

    标签: java sockets ssl proxy socks


    【解决方案1】:
            String proxyHost = Config.prefs.get("PROXY_NAME", "localhost");
            int proxyPort = Config.prefs.getInt("PROXY_PORT", 1080);
            InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
            Socket underlying = new Socket(new Proxy(Proxy.Type.SOCKS, proxyAddr));
            underlying.connect(new InetSocketAddress(getHost(), getPort()));
            socket = (SSLSocket) factory.createSocket(
                    underlying,
                    proxyHost,
                    proxyPort,
                    true);
    

    【讨论】:

    • 即将 proxy 主机和端口传递给套接字构造函数,而不是实际的目标主机和端口。
    猜你喜欢
    • 2018-07-28
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2014-08-06
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多