Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка прокси на живучесть и анонимность
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Проверка прокси на живучесть и анонимность

Страниц (1): [1]
 

1. vsll - 13 Апреля, 2011 - 17:10:13 - перейти к сообщению
Источник: http://forum[dot]asechka[dot]ru/showthread.php?t=6060

блуждая по просторам интернета нашла этот код, который показался мне наиболее компактным, удобным и понятным, на работоспособность ещё не проверяла, и конечно встаёт вопрос о безопасности (кстати почему spellchecker против слова "встаёт", три раза проверила, вроде ошибки нет, или я уже русский забыла?)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //полный путь ко второму скрипту
  3. $webpage = "http://your_server/some/path/detect.php";
  4.  
  5. //таймаут для коннекта к проксику
  6. $timeout = 10;
  7.  
  8. $head="GET $webpage HTTP/1.1\r\n\r\n";
  9. //proxy.txt - файл с проксиками
  10. $fcontents = file ('proxy.txt');
  11.  
  12. while (list ($line_num, $line) = each ($fcontents)) {
  13.     echo $line_num.") Проверка <b>$line</b>.......";
  14.     $server = explode(":",trim($line));
  15.     $fp = @fsockopen($server[0], $server[1], $errno, $errstr, $timeout);
  16.     if($fp) {
  17.         unset($result);
  18.         fputs($fp,$head);
  19.         while(!feof($fp)) {
  20.            $returndata.=fread($fp,1024);
  21.         }
  22.         $result = explode("|||",$returndata);
  23.         echo "Прокси живой";
  24.         if (trim($result[1])=="") {
  25.           echo "и анонимный... \n\n";
  26.         } else {
  27.          echo "но не анонимный...\n\n";
  28.         }
  29.         fclose($fp);
  30.    } else {
  31.       echo "(".$errno.") ".$errstr."\n\n";
  32.    }
  33. }
  34. ?>

detect.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. echo $_SERVER['REMOTE_ADDR']."|||".$_SERVER['HTTP_X_FORWARDED_FOR']."|||";
  3. ?>


а именно не могу осмыслить эту строчку:
PHP:
скопировать код в буфер обмена
  1. $head="GET $webpage HTTP/1.1\r\n\r\n";
расшифруйте пожалуйста, кто понял
2. Мелкий - 13 Апреля, 2011 - 17:15:26 - перейти к сообщению
Vasiliya пишет:
а именно не могу осмыслить эту строчку:

HTTP протокол в голом виде.
3. vsll - 13 Апреля, 2011 - 17:17:27 - перейти к сообщению
а это что:\r\n\r\n
4. Мелкий - 13 Апреля, 2011 - 17:26:54 - перейти к сообщению
\r\n - перевод строки. (именной такой используется в HTTP, как и windows)
протокол состоит из заголовков, каждый из которых завершается \r\n.
Между заголовками и телом документа всегда расположена пустая строка. Так и получается, что для отправки единственного заголовка в конце получается 2 конца строки - один непосредственно заголовка, а другой - метка окончания заголовков.
5. vsll - 13 Апреля, 2011 - 17:33:07 - перейти к сообщению
Мелкий спасибо, здесь по этому поводу такая жуть написана:
http://forum[dot]dklab[dot]ru/viewtopic.php?t=11170
что я просто потерялась, как же правильно писать чтоб перенос строки был и в windows и в *nix?
6. EuGen - 13 Апреля, 2011 - 17:40:12 - перейти к сообщению
Об этом не Вам заботиться, можете оставить как есть (все-таки запрос Вы серверу отсылаете)
7. Мелкий - 13 Апреля, 2011 - 17:40:24 - перейти к сообщению
Vasiliya пишет:
как же правильно писать чтоб перенос строки был и в windows и в *nix?

На самом деле, всё ещё веселее:
win - \r\n
*nix - \n
Mac - \r
Поэтому вопрос корректного переноса строк довольно интересный Подмигивание

Но в HTTP именно \r\n, без разницы для какой ОС.
8. EuGen - 13 Апреля, 2011 - 17:41:51 - перейти к сообщению
Да, кстати, а что именно в плане безопасности Вас интересует в этом коде?
9. vsll - 13 Апреля, 2011 - 17:43:56 - перейти к сообщению
так вот это именно и насторожило, я не подвешу сервак-то )))) а то выгонят с хостинга )))
10. EuGen - 13 Апреля, 2011 - 17:47:12 - перейти к сообщению
Не думаю. В крайнем случае можете сделать sleep на наждые 100-1000 и т.п. итераций
11. vsll - 13 Апреля, 2011 - 17:51:15 - перейти к сообщению
EuGen пишет:
сделать sleep на наждые 100-1000 и т.п. итераций
ох, мне бы это сделать, зря я вообще связалась с этими прокси...
12. EuGen - 13 Апреля, 2011 - 18:00:06 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $iIterationsMax=1000;
  3. $iSleepTime=2;
  4. $iCurrent=0;
  5. while (list ($line_num, $line) = each ($fcontents)) {
  6.     $iCurrent++;
  7.     echo $line_num.") Проверка <b>$line</b>.......";
  8.     $server = explode(":",trim($line));
  9.     $fp = @fsockopen($server[0], $server[1], $errno, $errstr, $timeout);
  10.     if($fp) {
  11.         unset($result);
  12.         fputs($fp,$head);
  13.         while(!feof($fp)) {
  14.            $returndata.=fread($fp,1024);
  15.         }
  16.         $result = explode("|||",$returndata);
  17.         echo "Прокси живой";
  18.         if (trim($result[1])=="") {
  19.           echo "и анонимный... \n\n";
  20.         } else {
  21.          echo "но не анонимный...\n\n";
  22.         }
  23.         fclose($fp);
  24.    } else {
  25.       echo "(".$errno.") ".$errstr."\n\n";
  26.    }
  27.    if(!$iCurrent%$iIterationsMax)
  28.    {
  29.       sleep($iSleepTime);
  30.    }
  31. }
  32.  
13. vsll - 13 Апреля, 2011 - 18:03:28 - перейти к сообщению
EuGen спасибо, вот так на душе намного спокойней

 

Powered by ExBB FM 1.0 RC1