Java 带 Socks5 代理的 SSLSocket
Java SSLSocket with Socks5 Proxy
如何将 SSLSocket 与 socks5 代理一起使用?我使用带有代理的普通套接字作为底层。
此代码无效:
public void debugIP(Proxy proxy) throws IOException, NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, null, null);
Socket underlying = new Socket(proxy);
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
underlying.connect(new InetSocketAddress("checkip.amazonaws.com", 80));
SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(
underlying,
proxyAddress.getHostName(),
proxyAddress.getPort(),
true);
printInputStream(socket.getInputStream());
}
private void printInputStream(InputStream inputStream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
此代码抛出异常:
线程 "main" 中出现异常 javax.net.ssl.SSLException:无法识别 SSL 消息,纯文本连接?
没有 SSL,代码可以工作。
您正在将 SSL 与明文端口通信。
正如错误信息所说。
要么修复端口,要么不使用 SSL。
如何将 SSLSocket 与 socks5 代理一起使用?我使用带有代理的普通套接字作为底层。
此代码无效:
public void debugIP(Proxy proxy) throws IOException, NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, null, null);
Socket underlying = new Socket(proxy);
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
underlying.connect(new InetSocketAddress("checkip.amazonaws.com", 80));
SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(
underlying,
proxyAddress.getHostName(),
proxyAddress.getPort(),
true);
printInputStream(socket.getInputStream());
}
private void printInputStream(InputStream inputStream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
此代码抛出异常:
线程 "main" 中出现异常 javax.net.ssl.SSLException:无法识别 SSL 消息,纯文本连接?
没有 SSL,代码可以工作。
您正在将 SSL 与明文端口通信。
正如错误信息所说。
要么修复端口,要么不使用 SSL。