我正在通过SOCKS代理实现自定义TLS套接字工厂。我应要覆盖的其他方法之一是Socket createSocket()
,它只是创建一个未连接的套接字,该套接字将在代码的稍后位置连接。
因此在TLS套接字工厂中没有的SOCKS代理中,我的实现方式如下:
@Override
public Socket createSocket() throws IOException, UnknownHostException {
// Initialize my SSL Context
SSLContext sslCtx = initializeSSLContext();
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
// Return an unconnected socket
return socketFactory.createSocket();
}
在我的TLS套接字工厂 中,等效项大致如下:
@Override
public Socket createSocket() throws IOException, UnknownHostException {
// proxy is an instance of java.net.Proxy
Socket socks = new Socket(proxy);
// Initialize my SSL context
SSLContext sslCtx = initializeSSLContext();
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
return socketFactory.createSocket(socks, ????, ????, true);
}
正如我之前提到的,我需要能够创建一个无需连接的套接字。 SSLSocketFactory
提供了两种在现有的套接字上创建套接字的方法,但是两种方法都假定您知道要连接的host:port
。
有什么方法可以在现有套接字(代理)上创建TLS套接字,但不提供目标主机吗?
预先感谢