首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的SOCKS代理代码从SOCKS服务器抛出SocketException:格式错误的回复?

为什么我的SOCKS代理代码从SOCKS服务器抛出SocketException:格式错误的回复?
EN

Stack Overflow用户
提问于 2014-11-30 23:51:39
回答 2查看 24.6K关注 0票数 5

为什么我的SOCKS代理代码抛出SocketException: Malformed reply from SOCKS server?我尝试在URLConnection或其他地方设置,但这不起作用。唯一有效的东西-儿童图书馆,但这是商业性质的。那么,例如,我如何通过ASOCKS代理发出http请求?也许有一些免费的lib可以做到这一点?

例如,该代码:

代码语言:javascript
复制
    SocketAddress addr = new InetSocketAddress(proxy_ip, proxy_port);
    Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);
    Socket socket = new Socket(proxy);
    InetSocketAddress dest = new InetSocketAddress("google.com", 80);
    try {
        socket.connect(dest);
    } catch (IOException ex) {
        Logger.getLogger(CheckProxy.class.getName()).log(Level.SEVERE, null, ex);
    }

抛出异常:

代码语言:javascript
复制
java.net.SocketException: Malformed reply from SOCKS server
at java.net.SocksSocketImpl.readSocksReply(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at proxychecker.CheckProxy.SocksCheck(CheckProxy.java:86)

其中,第86行是"socket.connect(dest);“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-19 23:41:58

对此错误的解释:bugs.java.com/view_bug.do?bug_id=6964547

您需要使用以下代码手动更改Socket对象中的模式:

代码语言:javascript
复制
Class clazzSocks  = socket.getClass();
Method setSockVersion  = null;
Field sockImplField = null; 
SocketImpl socksimpl = null; 
try {
  sockImplField = clazzSocks.getDeclaredField("impl");
  sockImplField.setAccessible(true);
  socksimpl  = (SocketImpl) sockImplField.get(socket);
  Class clazzSocksImpl  =  socksimpl.getClass();
  setSockVersion  = clazzSocksImpl.getDeclaredMethod("setV4");
  setSockVersion.setAccessible(true);
  if(null != setSockVersion){
      setSockVersion.invoke(socksimpl);
  }
  sockImplField.set(socket, socksimpl);
} catch (Exception e) {

} 
票数 6
EN

Stack Overflow用户

发布于 2014-12-01 07:07:06

代码语言:javascript
复制
SocketException: Malformed reply from SOCKS server

这表明您根本没有SOCKS代理。它可能是一个HTTP代理。

注意你问错了问题。你的代码是正确的,是你的前置错误。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27215053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档