Нужен скрипт чекания HTTP прокси

Discussion in 'PHP' started by Stingers, 18 Jun 2009.

  1. Stingers

    Stingers Elder - Старейшина

    Joined:
    28 Aug 2007
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Сабж нужен чекер который будет разделять на анонимные и не анонимные и одновременно чекать (многопоточно)

    нужен бесплатно - т.к. хачу сделать простенький сайт для людей которые ищут проксики

    у меня они (прокси) есть каждый час около 6000 штук но их нужно чекать и чтобы разделялись!

    Буду признателен тем кто сделает
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    пошарьте в теме "Полезные скрипты", там какие-то чекеры выкладывались
     
  3. Gaus

    Gaus Member

    Joined:
    8 Feb 2009
    Messages:
    136
    Likes Received:
    36
    Reputations:
    3
    google.com
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Искать совсем не хочите, тут всё есть, вот, немногопоточный, ибо нах не нужен, нех много сразу проверять, вроде от Енота:

    PHP:
    <?php  

    // Ensure that the timeouts from fsockopen don't get reported as errors (possible, depends on the php server config)  
       
    error_reporting(0);  
    // Limit the amount of proxies that can be tested at any one time  
       
    $maximum_proxies_to_test 50;  
    // Enter a password (if required) to protect the page  
       
    $password '';  

    // Actual proxyjudge part of the page  
       
    function return_env_variables()  
       {  
          echo 
    '<pre>'."\n";  
          foreach (
    $_SERVER as $header => $value )  
          {  
            if ((
    strpos($header 'REMOTE')!== false || strpos($header 'HTTP')!== false || strpos($header 'REQUEST')!== false) && ( strpos($header 'HTTP_HOST') !== 0))  
            {  
            echo 
    $header.' = '.$value."\n";  
            }  
          }  
          echo 
    '</pre>';  
       }  

    // Function to go away and get the page (calls through the proxy back to itself)  
       
    function get_judge_page($proxy)  
       {  
       
    // Depending on the server environment, this timeout setting may not be available.      
          
    $timeout 15;  
          
    $proxy_cont '';  
          list(
    $proxy_host$proxy_port) = explode(":"$proxy);  
          
    $proxy_fp fsockopen($proxy_host$proxy_port$errornumber$errorstring$timeout);  
          if (
    $proxy_fp)  
          {  
             
    stream_set_timeout($proxy_fp$timeout);  
             
    fputs($proxy_fp"GET " $_SERVER['SCRIPT_NAME'] . "?test HTTP/1.0\r\nHost: " $_SERVER['SERVER_NAME'] . "\r\n\r\n");  
             while(!
    feof($proxy_fp))  
             {  
                   
    $proxy_cont .= fread($proxy_fp,4096);  
             }  
             
    fclose($proxy_fp);  
             
    $proxy_cont substr($proxy_contstrpos($proxy_cont,"\r\n\r\n")+4);  
          }  
          return 
    $proxy_cont;     
       }  

    // Check for the control string to see if it's a valid fetch of the judge  
       
    function check_valid_judge_response($page)  
       {  
          if(
    strlen($page) < 5)  
             return 
    false;  
          return 
    strpos($page'REMOTE_ADDR') !== false;  
       }  

    // Check for the IP addresses  
       
    function check_anonymity($page)  
       {  
          if(
    strpos($page$_SERVER['LOCAL_ADDR']) !== false)  
             return 
    false;  
          return 
    true;  
       }  

    // Takes and tests a proxy  
    // 0 - Bad proxy  
    // 1 - Good (non anon) proxy  
    // 2 - Good (anonymous) proxy  
       
    function test_proxy($proxy)  
       {  
          
    $page get_judge_page($proxy);  
          if(!
    check_valid_judge_response($page))  
             return 
    0;  
          if(!
    check_anonymity($page))  
             return 
    1;  
          return 
    2;  
       }  

    ////////// Main Page ////////////  

    // If this is a judge request, just return the environmental variables  
       
    if(getenv('QUERY_STRING') == "test")  
       {  
          
    return_env_variables();  
       }  
    // Else check whether we have been passed a list of proxies to test or not  
    // Should really use $_POST but it's been left as $HTTP_POST_VARS for older versions of php (3.x)  
       
    elseif( (isset($HTTP_POST_VARS['action']) && $HTTP_POST_VARS['action'] === 'fred') &&  
               (isset(
    $HTTP_POST_VARS['proxies']) && $HTTP_POST_VARS['proxies'] != '') &&  
               ( (
    strlen($password) == 0) || (isset($HTTP_POST_VARS['password']) && $HTTP_POST_VARS['password'] === $password) ))  
       {  
          
    $proxies explode("\n"str_replace("\r"""$HTTP_POST_VARS['proxies']), $maximum_proxies_to_test 1);  
            
       
    // Set the overall time limit for the page execution to 10 mins  
          
    set_time_limit(600);  
            
       
    // Set up some arrays to hold the results  
          
    $anon_proxies = array();  
          
    $nonanon_proxies = array();  
          
    $bad_proxies = array();  
         
       
    // Loop through and test the proxies  
          
    for($thisproxy 0$thisproxy < ($maximum_proxies_to_test count($proxies) ? count($proxies) : $maximum_proxies_to_test); $thisproxy += 1)  
          {  
               
    $draculalol htmlspecialchars($proxies[$thisproxy]); 
             echo 
    '' $draculalol '';  
             
    flush();  
             switch(
    test_proxy($proxies[$thisproxy]))  
             {  
                case 
    2:  
                  echo 
    ' - <font color="green">Анонимная</font><br>' "\n";  
                   
    $anon_proxies[count($anon_proxies)] = $proxies[$thisproxy];  
                   break;  
                case 
    1:  
                  echo 
    ' - <font color="yellow">Не анонимная</font><br>' "\n";  
                   
    $nonanon_proxies[count($nonanon_proxies)] = $proxies[$thisproxy];  
                   break;  
                case 
    0:  
                  echo 
    ' - <font color="red">Не рабочая</font><br>' "\n";  
                   
    $bad_proxies[count($bad_proxies)] = $proxies[$thisproxy];  
                   break;  
             }  
          }  
         
          echo 
    '<pre>';  
          echo 
    '<br><b><font color="green" size="2">Анонимные прокси:</font></b>' "\n";  
          for(
    $thisproxy 0$thisproxy count($anon_proxies); $thisproxy += 1)  
             echo 
    $anon_proxies[$thisproxy] . "\n";  
          echo 
    '<br><b><font color="yellow" size="2">Не анонимные прокси:</font></b>' "\n";  
          for(
    $thisproxy 0$thisproxy count($nonanon_proxies); $thisproxy += 1)  
             echo 
    $nonanon_proxies[$thisproxy] . "\n";  
          echo 
    '<br><b><font color="red" size="2">Не рабочие прокси:</font></b>' "\n";  
          for(
    $thisproxy 0$thisproxy count($bad_proxies); $thisproxy += 1)  
                
    $xek htmlspecialchars($bad_proxies[$thisproxy]); 
             echo 
    $xek "\n";  
          echo 
    '</pre>';  
       }  
    // Just a blank call of the page - show the form for the user to fill in  
       
    else  
       {   
          
          echo 
    '<form method="POST" action="' $_SERVER['SCRIPT_NAME'] . '">' "\n";  
          echo 
    '<input type="hidden" name="action" value="fred">' "\n";  
          echo 
    '<textarea name="proxies" cols=50 rows=10></textarea><br>' "\n"
          if(
    strlen($password) > 0)     
             echo 
    'Password: <input type="password" name="password" size="15"><br>' "\n";  
          echo 
    '<input type="submit" value="Старт">' "\n";  
          echo 
    '</form>' "\n";  
       }  
    ?>
     
    1 person likes this.
  5. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    PHP:
    // Limit the amount of proxies that can be tested at any one time   
       
    $maximum_proxies_to_test 50;
    по мне это глупость! ИМХО
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Выставь =51 и не считай глупостью
     
    1 person likes this.
  7. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    хз на перле 10 строчек - напиши сам - поттоки и в них через команду proxy подрубаешь проксик и делаешь get запрос на whatismyip.com для проверки на анонимность и все