Tor与curl和php - "无法完成SOCKS5连接到0.0.0.0:0"

时间:2015-10-26 23:15:09

标签: php curl tor

我正在使用带有curl和PHP的Vidalia Bridge软件来抓取一些网站。这个网站以某种方式设法给我"无法完成SOCKS5连接到0.0.0.0:0"每次我有11个或更多的并发请求。 3个星期前,当我上次测试它时,它曾经是31个或更多请求,直到我收到上面的错误消息,现在是11。

编辑: 这是一个图表,说明我的(可以控制)什么和远程(无法控制)以及组件之间的完整关系。

Click for diagram

我的问题是: 这是与网站相关的事情(他们可以控制每秒的请求数量,考虑到我为每个请求使用不同的cookie文件),或者它是与vidalia / curl设置相关的东西。

编辑:这是我的配置: 我使用带有多个线程的Java,每个线程都在访问一个本地PHP脚本,该脚本具有抓取作为GET参数给出的网站的作用。 PHP脚本使用CURL和9050作为TOR(Vidalia Bridge)的端口,以便刮掉.onion网站。

编辑2 :(更多细节) 我正在使用: a)XAMPP for windows:

b)Vidalia Bridge Bundle:

以下是PHP中的代码:(curlSample.php)

<?php
        $ch = curl_init();
        /*
        ********************************
        Comment or uncomment below
        */

        $url="http://alphabaywyjrktqn.onion/";
        //$url="http://nucleuspf3izq7o6.onion/";

        /*
        Comment or uncomment above
        ********************************
        */


        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // Set Vidalia Bridge (Tor proxy socks connection)
        curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050");
        curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
        $output = curl_exec($ch);
        $curl_error = curl_error($ch);
        if(strlen($curl_error) > 0){
            echo $curl_error;
            exit();
        }
        echo $output;

以下是Java中的代码: a)AlphaTestConnections.java

import java.util.ArrayList;
public class AlphaTestConnections {

    public static void main(String[] args){
        int start=0;
        int end=20;
        ArrayList<Thread> threads = new ArrayList<Thread>();
        for(int i=start; i<end; i++){
            threads.add(new Thread(new AlphaTestConnectionsThread(i)));
        }
        for(int i=0; i<threads.size(); i++){
            threads.get(i).start();
        }
        for(int i=0; i<threads.size(); i++){
            try {
                threads.get(i).join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("done");
    }
}

b)AlphaTestConnectionsThread.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class AlphaTestConnectionsThread implements Runnable{

    private final static String USER_AGENT = "Mozilla/5.0";
    private static String request() {
        try{
            URL obj = new URL("http://localhost/curlSample.php");
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();

            // optional default is GET
            con.setRequestMethod("GET");

            //add request header
            con.setRequestProperty("User-Agent", USER_AGENT);


            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }

            in.close();

            // Return first 50 characters from source code (enough to test this)
            return response.toString().substring(0, 50);
        }catch(Exception e){
            System.out.println("Exception");
            e.printStackTrace();
        }
        return null;

    }

    private int i;
    public AlphaTestConnectionsThread(int i){
        this.i=i;
    }
    @Override
    public void run() {

        System.out.println("Thread #" + i + ": " + request());

    }
}

要测试代码,您首先需要在Xampp中启动Apache,然后启动Vidalia Bridge软件包,

Start Vidalia Bridge

在Xampp的根目录中创建curlSample.php文件,然后运行AlphaTestConnections.java。 您将看到,对于20个连接,10将返回源代码,10将给出错误&#34;无法完成SOCKS5连接到0.0.0.0:0"。 现在,编辑curlSample.php并注释/取消注释代码以使用第二个URL。它现在将返回所有20个连接的源代码,而不会给出任何错误。 我想知道这怎么可能,为什么特定网站有10个并发连接限制,我怎么能删除它?

0 个答案:

没有答案