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

381
07 августа 2017, 12:46

Добрый вечер. Столкнулся с такой проблемой, не работают 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, воровства данных и прочего.

Answer 1

Хостер помог разобраться с проблемой. По его словам, подобным методом я отправлял DNS запросы через прокси, из-за чего и возникала ошибка. Верным решением оказалось заменить CURLPROXY_SOCKS5 на CURLPROXY_SOCKS5_HOSTNAME, а CURLPROXY_SOCKS4 на CURLPROXY_SOCKS4A, что и помогло.

READ ALSO
Можно ли сортировать БД с внешней переменной

Можно ли сортировать БД с внешней переменной

Вопрос таков, есть БД MySQL, в одном столбце записаны даты, которые должны произойти, в формате UNIXМожно ли через SQL передать текущее время и произвести...

277
Где файл с собранными путями в Symfony 3?

Где файл с собранными путями в Symfony 3?

Существует у меня проблема что в GIT существует файл для UI с собранными путями для чьей-то debug-версии проектаИз-за этого при динамическом переключении...

316
Как создать URL наугад

Как создать URL наугад

Вот например есть сайт siteru/p(

328
Сохранение активной ссылки

Сохранение активной ссылки

Есть меню категорийПри нажатии на определённую категорию нужно, чтобы ссылка стала активной и исчез атрибут href

248