Задать вопрос

Что нужно для работы SOCKS прокси на хостинге?

Добрый вечер. Столкнулся с такой проблемой, не работают SOCKS прокси на хостинге через CURL. На домашнем сервере все нормально, однако на хостинге возникает ошибка "Failed to resolve "сайт" for SOCKS4 connect.
Собственно, сам код:
<?
$start = microtime(true);

$file = 'proxyList.txt';
$proxyList = [];
$fp = fopen ($file, "r+");
$proxy=fread($fp,filesize($file));
$proxys=explode(PHP_EOL,$proxy);
$mh = curl_multi_init();
print_r($proxys);
     foreach($proxys as $proxy){
        $proxy=explode(":",$proxy);
         echo $ip=$proxy[0];
         echo $port=$proxy[1];
         if(isset($proxy[2])){
             $type=$proxy[2];
         }
         if ( !$ip || !$port )
             continue;
         if(isset($proxy[2])){
             $proxy = $ip . ':' . $port. ':' . $type;
         }else{
             $proxy = $ip . ':' . $port;

         }
         $curlh[$proxy]= curl_init();
         curl_setopt($curlh[$proxy],CURLOPT_TIMEOUT, 10); 

         curl_setopt($curlh[$proxy], CURLOPT_URL, 'https://www.google.com');
         curl_setopt($curlh[$proxy], CURLOPT_FOLLOWLOCATION, true);

         curl_setopt($curlh[$proxy], CURLOPT_RETURNTRANSFER, true);

         curl_setopt($curlh[$proxy], CURLOPT_NOBODY, true);  
         curl_setopt($curlh[$proxy], CURLOPT_HEADER, true);

         curl_setopt($curlh[$proxy], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36');


         curl_setopt($curlh[$proxy], CURLOPT_PROXY, $ip . ":" . $port );
         if(isset($type)) {
             if(stripos($type,"SOCKS5")!==false){
                 curl_setopt ($curlh[$proxy], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
             }
             if (stripos($type, "SOCKS4") !== false) {
                 curl_setopt($curlh[$proxy], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
             }
             if (stripos($type, "HTTP") !== false) {
                 curl_setopt($curlh[$proxy], CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
             }
         }
         curl_setopt($curlh[$proxy], CURLOPT_HTTPPROXYTUNNEL, true);
         curl_multi_add_handle($mh, $curlh[$proxy]);
     }
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running);
foreach ($curlh as $key => $value) {
    curl_multi_remove_handle($mh, $curlh[$key]);
    echo curl_error ($curlh[$key]) . "<br>";


}

foreach ($curlh as $key => $value) {
     $response[$key] = curl_multi_getcontent($curlh[$key]);
}
foreach($response as $key=> $out){
    if ( strpos($out, 'Forbidden') == true ){
        continue;}
    if ( strpos($out, '200 OK') == true ){
        array_push($proxyList,$key);}
}

if ( count($proxyList) ) {
    unlink($file);

    if ($fp = fopen ($file, "w")) {
        for ($i=0;$i<count($proxyList);$i++)
            fwrite ($fp, $proxyList[$i] . PHP_EOL);
        fclose ($fp);
    }
}


echo '<pre>';
print_r($proxyList);
echo '</pre>';

$time = microtime(true) - $start;
printf('Скрипт выполнялся %.4F сек.', $time);

Собственно, проблема заключается в хостинге. Что именно необходимо для использования SOCKS прокси? Какие технологии, библиотеки? Благодарю за внимание.
P.S. прокси использую исключительно для сбора и анализа информации, никаких DDOS, воровства данных и прочего.

UPD SOCKS5 тоже не работает, соответственно возникает ошибка Failed to resolve "сайт" for SOCKS5 connect. HTTP прокси работают.
  • Вопрос задан
  • 1069 просмотров
Подписаться 1 Оценить 12 комментариев
Решения вопроса 1
Silert
@Silert Автор вопроса
Хостер помог разобраться с проблемой. По его словам, подобным методом я отправлял DNS запросы через прокси, из-за чего и возникала ошибка. Верным решением оказалось заменить CURLPROXY_SOCKS5 на CURLPROXY_SOCKS5_HOSTNAME, а CURLPROXY_SOCKS4 на CURLPROXY_SOCKS4A, что и помогло.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы