1

我正在尝试编写一个 Java 程序,该程序将与启用 TLS 的服务器建立 Telnet 会话,该服务器只能通过端口转发代理访问。

过去我已经成功地使用 TelnetClient 与非 TLS 服务器和 TLS 服务器建立 telnet 会话,但我从未使用过代理。

我已经为此苦苦挣扎了一段时间,所以是时候请教专家了。

这是一个简单的代码示例,说明了我遇到的问题。在我向读者发表讲话后,我没有得到任何返回,然后读者阻止:

'''公共类 SimpleTest {

public static PrintStream  psout;


static void write(String value) {
    try {
        psout.println(value);
        psout.flush();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

 public static void main(String[] args) {

     TelnetClient telnet;
     TelnetReader tr;

     String host="192.168.82.72";   
     int    port=992;
     
     try {
            // 1. Create the TelnetClient Object 
            telnet = new TelnetClient();
            
            // 2. Set up our own SocketFactory (For SSL)
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            telnet.setSocketFactory(sslsocketfactory);
            
            // 3. Set the proxy
            System.setProperty("socksProxyHost","127.0.0.1");
            System.setProperty("socksProxyPort","6600");
            
            Proxy socksProxy  = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 6600));
            telnet.setProxy(socksProxy);
            
            
            // 4. Connect
            telnet.connect(host, port);
            Thread.sleep(1000);
            
            // 5. Start the reader
            tr = new TelnetReader(telnet.getInputStream());
            Thread reader = new Thread (tr);
            reader.start();
            Thread.sleep(1000);
            
            // 6. Address the output stream
            String r;
            psout = new PrintStream(telnet.getOutputStream());
            Thread.sleep(1000);
            r = tr.get();          // <- r is null!!
            
        } catch (Exception e) {
            e.printStackTrace();
        }
     }

} '''

我究竟做错了什么?

蒂亚约翰

4

1 回答 1

2

这就是我解决问题的方法。我发现 setProxy 方法(在 Apache 代码中)重置了 SocketFactory。我下载了 Apache 代码并注释掉了那一行。当我这样做时,我的代码工作得很好。

于 2020-10-08T22:31:55.923 回答