Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Добрый день!
Поделитесь примерчиком как средствами php можно использовать socks 5.
можно ли socks 5 использовать в связки с cURL?
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!
// отправка запроса, посл. 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("&", "&", $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']);
}
}
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!
Сорри за оффтоп, но из-за этого дебильного ограничения на кол-во постов я не могу создать отдельную тему
Как можно защитить сайт от входа через прокси? Хочу написать партнерку, где за переход по ссылке зачисляется копеечка. Проверка идет через IP. Но трабла в том, что накрутить это дело можно будет через прокси (и проги типа topgen). Как можно от них защититься?
Заранее Спасибо!