Sockets 使用Socks代理的HTTP调用

Sockets 使用Socks代理的HTTP调用,sockets,proxy,socks,Sockets,Proxy,Socks,我想使用socks代理来访问服务器。但有些事情是不对的。我有一份委托书,委托书的所有者声称这是一份socks委托书 我简化了我的问题,现在尝试使用下面的代码访问google.com URL url = new URL("https://www.google.com"); URLConnection connection = null; SocketAddress proxySocketAddress1 = new InetSocketAddress("XXXXXXXXXX", 8

我想使用socks代理来访问服务器。但有些事情是不对的。我有一份委托书,委托书的所有者声称这是一份socks委托书

我简化了我的问题,现在尝试使用下面的代码访问google.com

 URL url = new URL("https://www.google.com");  
 URLConnection connection = null;  
 SocketAddress proxySocketAddress1 =  new InetSocketAddress("XXXXXXXXXX", 8081);  
 Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxySocketAddress1);  
 connection = url.openConnection(proxy);  
 connection.setConnectTimeout(150000);  
 connection.connect();  
无法与google建立连接。但是,如果我使用代理类型作为HTTP,那么它是有效的,也就是说,如果我将上述代码的第4行替换为

Proxy proxy = new Proxy(Proxy.Type.HTTP, proxySocketAddress1);  
我尝试使用浏览器(chrome)访问google.com,并指定了与“socks proxy”和“http proxy”相同的代理,之后就可以打开google了

不确定给定代理何时在浏览器中作为SOCKS代理工作,那么为什么它在代码中不工作

如果我能做到这一点,那么最终我想做如下事情:

SocketAddress socketAddress =  new InetSocketAddress(proxyHostname,proxyPort);  
Proxy socketProxy =  new Proxy(Proxy.Type.SOCKS, socketAddress);  
socket = new Socket(socketProxy);  

InetSocketAddress socketAddress = new InetSocketAddress(hostIP,hostPort);    
socket.connect(socketAddress,100000);  

有什么建议我可以试试吗?

我想这个代理不是socks代理,而是HTTP代理,因为

  • 如果您将它用作http代理,它就可以工作,而不能用作socks代理
  • 如果您在google中将它指定为http和socks代理,它可能只会对其他协议(https、ftp…)使用socks代理设置,并对http使用http代理设置,因此它也可以作为http代理在那里工作
  • 80xx是http代理的典型端口(例如80008001808081),因为80是http的“正常”端口,所以socks代理通常使用类似于1080的端口

实际上它是一个SOCKS4代理。当我尝试通过SOCKS4连接时,我可以通过代码访问google。奇怪的是,java应用程序可以将其用作HTTP代理,但不能用作SOCKS代理。也许你应该做一个tcpdump来看看到底发生了什么。