Java Socks v4代理

时间:2014-02-04 23:21:45

标签: java proxy socks

你可以帮助我,我遇到了与此处描述的问题相同的问题:http://bugs.java.com/view_bug.do?bug_id=6964547

Java适用于Socks 5代理,但使用socks 4代理:

java.net.SocketException: Malformed reply from SOCKS server

来源如下:             URL obj =新网址(网址);

        con = (HttpURLConnection) obj.openConnection(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("host", *port*));


        con.setConnectTimeout(Config.CONNECT_TIMEOUT);
        con.setReadTimeout(Config.READ_TIMEOUT);


        con.setRequestProperty("User-Agent", Config.USER_AGENT);

        con.setDoOutput(false);
        con.setDoInput(true);

        con.setRequestMethod("GET");


        con.connect();

我检查了很多v4代理,它们不起作用。 也无助于添加道具:

System.setProperty("socksProxyVersion", "4");

关于这个问题的任何想法?:D

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

使用JDK 7,他们确实添加了socksProxyVersion属性,但您无法为单个连接设置它。

建议的socksProxyVersion属性对通过java.net.Proxy以编程方式设置的SOCKS代理没有任何影响。

答案 1 :(得分:0)

我用过它,效果非常好:

Socket s;
try {
    s = new Socket(new Proxy(Proxy.Type.SOCKS, proxy));
    s.setSoTimeout(5000);
    s.connect(google);
    s.close();
} catch(Throwable t) {
    s = new Socket(new Proxy(Proxy.Type.SOCKS, proxy));
    Method m = s.getClass().getDeclaredMethod("getImpl");
    m.setAccessible(true);
    Object sd = m.invoke(s);
    m = sd.getClass().getDeclaredMethod("setV4");
    m.setAccessible(true);
    m.invoke(sd);
    s.setSoTimeout(5000);
    s.connect(google);
    s.close();
}