php & socks 5

Статус
В этой теме нельзя размещать новые ответы.

funman

Знаток
Регистрация
28 Дек 2007
Сообщения
163
Реакции
26
Добрый день!

Поделитесь примерчиком как средствами php можно использовать socks 5.

можно ли socks 5 использовать в связки с cURL?
 
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему :(

Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?

Заранее Спасибо!
 
Добрый день!

Поделитесь примерчиком как средствами php можно использовать socks 5.

можно ли socks 5 использовать в связки с cURL?

Вот здесь можно взять php socks5 класс:
Там же можно скачать пример использования класса.

Добавлено через 14 минут
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!

Вы можете анализировать переменные окружения:

REMOTE_ADDR - IP адрес клиента
HTTP_VIA - если не пустая, значит используется proxy. Значение - адрес (или несколько адресов) proxy сервера.
HTTP_X_FORWARDED_FOR - если не пустая, значит используется proxy. Значение - реальный IP адрес клиента.

Однако, через прокси может работать и "честный" посетитель. А "накрутчик" вообще может скрыть информацию о прокси. Если вы принимаете решение платить за клик, то для этого решения нужны веские основания, при этом задача выявления накрутчиков будет совсем не тривиальная.
 
Вот нашел код, которым я пользовался
PHP:
// отправка запроса, посл. 3 аргумента передаются по ссылке, результат - страничка без хидера
function submit_request($req_url, $proxy, $req_POST, &$last_error, &$req_referer, &$cookie_ar)
{
        $last_error = '';
        $req_cookie = "";        // подделка куки для данного хоста (д.б. urlencoded)
        if (!empty($cookie_ar)) {
                foreach($cookie_ar as $cki_name => $cki_value)
                        $req_cookie .= (empty($req_cookie)?"":"; ").$cki_name."=".$cki_value;
        }

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $req_url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($ch, CURLOPT_REFERER, $req_referer);
        if ($proxy)
           curl_setopt($ch, CURLOPT_PROXY, $proxy);
        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
        if ($req_cookie)
                curl_setopt($ch, CURLOPT_COOKIE, $req_cookie);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        if ($req_POST) {
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $req_POST);
        }
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept-Language: en"));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $p_string = curl_exec($ch);
        if(!$p_string) {
                //$last_error = "<b>request ERROR: ".curl_error($ch)."</b><br>\r\n";
                $last_error = 'ServerError';
                return false;
        }
        curl_close($ch);
        /*
        // logging
        if (is_dir("inc/logs")) {
                $f = @fopen("inc/logs/".date("Y-m-d_H-i-s").".htm", "w");
                if($f) {
                        fwrite($f, "\$req_url=$req_url<br>\r\n\$req_POST=$req_POST<br>\r\n\$req_referer=$req_referer<br>\r\n".
                                           "\$req_cookie=$req_cookie<br>\r\n\r\n".$p_string);
                        fclose($f);
                }
        }
        */
        // сохр. тек. реферера в переменной, передаваемой по ссылке, разделение хидера и контента
        $req_referer = $req_url;
        $p_content = $p_string;
        do {
                list($p_header, $p_content) = preg_split('/\r\r|\n\n|\r\n\r\n/m', $p_content, 2);
                if (empty($p_header) || !preg_match("/^HTTP\/1\.[01] (\d{3})/ms", $p_header, $sm)) {
                        $last_error = "<b>data ERROR: No header found</b><br>\r\n";
                        return false;
                }
        } while($sm[1] == 100);

        // сохранение полученных cookies с учётом expire date в static $cookie_ar
        if (preg_match_all('/^Set-Cookie:\s*(.*?);?\r?\n?$/msi', $p_header, $ccm)) {
                $cur_time = time();
                foreach($ccm[1] as $cm) {
                        $prt = explode(";", $cm);
                        $cki = explode("=", $prt[0], 2);
                        $cki_name = trim($cki[0]);
                        $cki_value = (isset($cki[1])?$cki[1]:"");
                        $cki_expire = 0;
                        if (!empty($prt[1])) {
                                list($exp_n, $exp_v) = explode("=", $prt[1]);
                                if (strtolower(trim($exp_n)) == "expires") {
                                        $cki_expire = strtotime($exp_v);
                                }
                        }
                        if ($cki_expire == 0 || $cki_expire == -1 || $cki_expire > $cur_time) // if not expired
                                $cookie_ar[$cki_name] = $cki_value;
                        else {
                                if (isset($cookie_ar[$cki_name])) unset($cookie_ar[$cki_name]);
                        }
                }//foreach mm[1]
        }//if for cookie

        if($sm[1] == 404) { //no found
          $last_error = '404';
        }

        if($sm[1] == 301 || $sm[1] == 302 || $sm[1] == 303 || $sm[1] == 307) { //redirect (301 Moved Permanently, 302 Found, 303 See Other, 307 Temporary Redirect
                preg_match('/^Location:\s*(.*?)\r?\n?$/msi', $p_header, $mm);
                $rdr_adr = pr_url($req_url, $mm[1]);
                $req_url = $rdr_adr['scheme']."://".$rdr_adr['host'].$rdr_adr['query'];
                return submit_request($req_url, $proxy, "", $last_error, $req_referer, $cookie_ar);
        }

        return $p_content;
}

function pr_url(&$this_adr, $rel_adr = null) // parse this_adr and make it real (by link), if rel_adr - return real rel_adr parsing
{                                                                                         // return false or array('host' => 'www.host.com', 'query' => '/folder/file?req=1&a=b')
        static $cache = array(); //cache this_adr parsing results
        if (!isset($cache[$this_adr])) {
                $url = parse_url($this_adr);        // parse url and make it real (http://url)
                if (!empty($this_adr) && empty($url['scheme'])) {
                        $this_adr = "http://".$this_adr; //fix
                        $url = parse_url($this_adr);
                }
                if (empty($this_adr) || empty($url['host']) || ($url['scheme'] != "http" && $url['scheme'] != "https")) {
                        $this_adr = "";
                        return false;
                }
                $url['top_host'] = preg_replace('/.*?([\w\d-]+\.\w+)$/', '$1', $url['host']);
                $cache[$this_adr] = $url;
        } else {
                $url = $cache[$this_adr];
        }
        if ($rel_adr === null) {        // only parse url
                return array("scheme" => $url['scheme'],
                                         "host"  => $url['host'],
                                         "query" => (!empty($url['path'])?$url['path']:"/") . (!empty($url['query'])?"?".$url['query']:""),
                                         "top_host" => $url['top_host']);
        }
        // else (rel_adr !== null) make rel url absolute
        $rel_adr = str_replace("&amp;", "&", $rel_adr);
        $rel = parse_url($rel_adr);
        if (!empty($rel['scheme'])) { //is absolute
                if ($rel['scheme'] != "http" && $rel['scheme'] != "https") return false;
                return array("scheme" => $rel['scheme'],
                                         "host"  => $rel['host'],
                                         "query" => (!empty($rel['path'])?$rel['path']:"/") . (!empty($rel['query'])?"?".$rel['query']:""),
                                         "top_host" => preg_replace('/.*?([\w\d-]+\.\w+)$/', '$1', $rel['host']));
        } elseif (empty($rel['path'])) { // '?req'
                return array("scheme" => $url['scheme'],
                                         "host"  => $url['host'],
                                         "query" => (!empty($url['path'])?$url['path']:"/") . (!empty($rel['query'])?"?".$rel['query']:""),
                                         "top_host" => $url['top_host']);
        } else { // is relative
                $parts = explode("/", $rel['path']);
                if (!empty($url['path']) && $url['path'] != "/" && $rel['path'][0] != "/")
                        $parts = array_merge(array_slice(explode("/", $url['path']), 1, -1), $parts);
                $res = "";
                for($i = count($parts)-1; $i >= 0; $i--) { //from end
                        if ($parts[$i] == "..") $i--; //do not poccess next element
                        elseif ($parts[$i] != "." && $parts[$i] != "") $res = "/".$parts[$i].$res;
                }
                return array("scheme" => $url['scheme'],
                                         "host"  => $url['host'],
                                         "query" => $res . (($rel['path'][strlen($rel['path'])-1] == "/")?"/":"") . (!empty($rel['query'])?"?".$rel['query']:""),
                                         "top_host" => $url['top_host']);
        }

}
 
Всем спасибо, но мне в код хватило добавить
PHP:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

а дальше как через обычную проксю.

Добавлено через 5 минут
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему :(

Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?

Заранее Спасибо!

От Socks или NON-Transperent не как !
если прокси не палит HTTP_X_FORWARDED , то думаю оч проблематично ...
Но существуют способы которые помогают избавиться от накрутки (но не на 100%) Сессии, Кукисы, я думаю можно еще многое придумать чтобы избавиться от ботов...
 
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему :(

Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?

Заранее Спасибо!

Вопрос очень сложный чтобы сделать подобный скрипт нужно быть очень хорошим спецом... но я видел пару красивых реализаций, лучше всего анализировать информацию полученную по каждому партнеру на частоту кликов, на дальнейшие переходы, и т.п. действия и выводить отчеты - где будет понятно что например если у вас за полчаса 500 переходов на одну и туже стрницу и далее посетитель не идет - то это накрутка... кстати а как вы будете бороться с серфингом :) ведь там за 5$ можно и 1000 людей привести сразу :) я так на greenpik.ru в свое время более 20круб срубил... потом спалил тему на денгифоруме и все... :(
 
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему :(

Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?

Заранее Спасибо!

Если Прокси не отдает реального IP того кто лезет то простым способом никак.
 
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему :(

Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?

Заранее Спасибо!

практически никак, если только ставить условие что должно быть 2 захода с одного IP с разницей хотя бы 7 дней, но тебе такой вариант может не подойти.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху