o_nix
Хранитель порядка
- Регистрация
- 7 Ноя 2007
- Сообщения
- 1.070
- Реакции
- 1.063
- Автор темы
- #1
Есть такой скрипт ProxyChecker 5.1
Весьма тормознутый скрипт но альтернатив нет.
Давно заброшен разработчиком который обещал добавить в него поддержку socks прокси
Пытаюсь добавить эту поддержку получив полные исходники
Для просмотра ссылки Войдиили Зарегистрируйся
Поддержка socks в curl есть изначально
Имеем class.ProxyChecker.php - именно в нём засела функция чека прокси в оригинале файл выглядит вот так
Чуть чуть изменяем код для поддержки socks
Добавлено всего одна строка после этого скрипт перестаёт нормально чекать http но при этом он начинает чекать socks но через раз ... те из 10-30 рабочих соксов скрипт считает рабочими 1-2. Но при этом если прочекать каждый socks поотдельности всё чекается нормально (функция используется таже самая).
Поковыряв исходник скрипта и гугл я так понял что в скрипте идёт проверка через MultiCurl когда прокси http всё работает замечательно а вот при чеке socks с ним начинаются какието непонятки ...
В общем вопрос к php ПРОФИ ... получить MultiCurl на SOCKS прокси вообще реально ??
Пожалуйста помогите дописать функцию чека чтобы она стала универсальной, чтобы сначала проверялась работа прокси как socks если нет ответа тогда http ... Изначально в скрипте неизвестно какого типа поступает прокси для чека.
Update
Поправка ...
В скрипте несовсем MultiCurl - тоесть тот самый готовый класс в нём неиспользуется ... в нём чтото подобное самописное сделано... Проблемму пока так и нерешил
Весьма тормознутый скрипт но альтернатив нет.
Давно заброшен разработчиком который обещал добавить в него поддержку socks прокси
Пытаюсь добавить эту поддержку получив полные исходники
Для просмотра ссылки Войди
Поддержка socks в curl есть изначально
Имеем class.ProxyChecker.php - именно в нём засела функция чека прокси в оригинале файл выглядит вот так
PHP:
<?php
class ProxyChecker extends Requester
{
private $db;
private $Config;
private $Hash;
private $Proxy;
private $Worked;
private $Contime;
private $Time;
private $Speed;
private $Post;
private $Referer;
private $Cookies;
private $Anon;
private $Country;
private $CodeCountry;
public function __construct($Proxy, $Country=null, $CodeCountry=null) {
parent::__construct();
$this->db = Db::Singleton();
$this->Config = DbConfig::Singleton();
$this->Hash = substr(md5(rand(1111,9999)), 0, 10);
$this->Proxy = $Proxy;
$this->Worked = 0;
$this->Country = $Country;
$this->CodeCountry = $CodeCountry;
$this->PrepareRequest();
}
public function GetProxy() {
return $this->Proxy;
}
public function GetWorked() {
return $this->Worked;
}
public function GetContime() {
return $this->Contime;
}
public function GetTime() {
return $this->Time;
}
public function GetSpeed() {
return $this->Speed;
}
public function GetPost() {
return $this->Post;
}
public function GetReferer() {
return $this->Referer;
}
public function GetCookies() {
return $this->Cookies;
}
public function GetAnon() {
return $this->Anon;
}
public function GetCountry() {
return $this->Country;
}
public function GetCodeCountry() {
return $this->CodeCountry;
}
/**
* @return bool $IsWorked
*/
public function Parse() {
// WORKED CHECK
if ($this->IsError()) return false;
$this->Worked = stristr($this->GetResult(), CONF_CHECK_PAGE_ID) ? 1:0;
if (!$this->Worked) return false;
// TIME
$this->Contime = $this->GetInfo(CURLINFO_CONNECT_TIME);
$this->Time = $this->GetInfo(CURLINFO_TOTAL_TIME);
$this->Speed = $this->GetInfo(CURLINFO_SPEED_DOWNLOAD);
// PARAMS CHECK
$Arr = self::ParseCheckPage($this->GetResult());
$Referer = isset($Arr['HTTP_REFERER']) ? $Arr['HTTP_REFERER'] : null;
$Post = isset($Arr['POST']) ? $Arr['POST'] : null;
$Cookies = isset($Arr['COOKIE']) ? $Arr['COOKIE'] : null;
$this->Referer = stristr($Referer, $this->Hash) ? 1:0;
$this->Post = stristr($Post, $this->Hash) ? 1:0;
$this->Cookies = stristr($Cookies, $this->Hash) ? 1:0;
// ANONYMITY CHECK
if (empty($Arr['HTTP_X_FORWARDED_FOR'])
&& empty($Arr['HTTP_X_FORWARDED'])
&& empty($Arr['HTTP_X_COMING_FROM'])
&& empty($Arr['HTTP_FORWARDED_FOR'])
&& empty($Arr['HTTP_FORWARDED'])
&& empty($Arr['HTTP_COMING_FROM'])
&& empty($Arr['HTTP_VIA'])
&& empty($Arr['HTTP_XROXY_CONNECTION'])
&& empty($Arr['HTTP_PROXY_CONNECTION'])) {
$this->Anon = 2;
} else {
$this->Anon = 1;
}
$Sec = $this->Config->GetParam('check_security');
$Sec = explode("\r\n", $Sec);
foreach ($Sec as $ip) {
if (stristr($this->GetResult(), $ip)) {$this->Anon = 0; break;}
}
// CHECK COUNTRY
if ($this->Config->GetParam('check_country')
&& empty($this->Country)
&& empty($this->CodeCountry))
{
$Res = self::GetCountryByIp($this->Proxy);
if ($Res!=false) list($this->Country, $this->CodeCountry) = $Res;
}
return true;
}
/**
* Grabs IP addresses from any text
* @return array
*/
public static function GrabIp($Text) {
if (preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#', $Text, $m)) {
return $m[0];
}
return array();
}
public static function ParseCheckPage($Content) {
if (preg_match_all('#([\w]+)=([^\r\n]*)#', $Content, $m)) {
return array_combine($m[1], $m[2]);
}
return array();
}
/**
* Determine country and country code by IP address or hostname
* @param string $ip - hostname or IP address (with port or not)
* @return array(country, code) or FALSE
*/
public static function GetCountryByIp($ip) {
// Get IP
if (preg_match('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#', $ip, $m)) {
$ip = $m[0];
} else {
$ip = gethostbyname($ip);
if (!preg_match('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#', $ip, $m)) {
return false;
}
}
// Search in database
$db = Db::Singleton();
$longip = sprintf("%u", ip2long($ip));
$db->Query('SELECT * FROM countries'
. ' WHERE ip_start <= '.$longip
. ' AND ip_end >= '.$longip
. ' LIMIT 0,1');
if($db->NumRows()) {
$Row = $db->FetchRow();
return array($Row['name'], $Row['zone2']);
}
return false;
}
private function PrepareRequest() {
$this->SetUrl($this->Config->GetParam('check_url'));
$this->SetOpt(CURLOPT_PROXY, $this->Proxy);
$this->SetPost('body='.$this->Hash);
$this->SetOpt(CURLOPT_REFERER, 'http://'.$this->Hash.'/');
$this->SetOpt(CURLOPT_COOKIE, 'bodyid='.$this->Hash);
$this->SetOpt(CURLOPT_CONNECTTIMEOUT, $this->Config->GetParam('check_connect_timeout'));
$this->SetOpt(CURLOPT_TIMEOUT, $this->Config->GetParam('check_request_timeout'));
$this->SetOpt(CURLOPT_FAILONERROR, true);
}
}
?>
Чуть чуть изменяем код для поддержки socks
PHP:
private function PrepareRequest() {
$this->SetUrl($this->Config->GetParam('check_url'));
$this->SetOpt(CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$this->SetOpt(CURLOPT_PROXY, $this->Proxy);
$this->SetPost('body='.$this->Hash);
$this->SetOpt(CURLOPT_REFERER, 'http://'.$this->Hash.'/');
$this->SetOpt(CURLOPT_COOKIE, 'bodyid='.$this->Hash);
$this->SetOpt(CURLOPT_CONNECTTIMEOUT, $this->Config->GetParam('check_connect_timeout'));
$this->SetOpt(CURLOPT_TIMEOUT, $this->Config->GetParam('check_request_timeout'));
$this->SetOpt(CURLOPT_FAILONERROR, true);
}
Добавлено всего одна строка после этого скрипт перестаёт нормально чекать http но при этом он начинает чекать socks но через раз ... те из 10-30 рабочих соксов скрипт считает рабочими 1-2. Но при этом если прочекать каждый socks поотдельности всё чекается нормально (функция используется таже самая).
Поковыряв исходник скрипта и гугл я так понял что в скрипте идёт проверка через MultiCurl когда прокси http всё работает замечательно а вот при чеке socks с ним начинаются какието непонятки ...
В общем вопрос к php ПРОФИ ... получить MultiCurl на SOCKS прокси вообще реально ??
Пожалуйста помогите дописать функцию чека чтобы она стала универсальной, чтобы сначала проверялась работа прокси как socks если нет ответа тогда http ... Изначально в скрипте неизвестно какого типа поступает прокси для чека.
Update
Поправка ...
В скрипте несовсем MultiCurl - тоесть тот самый готовый класс в нём неиспользуется ... в нём чтото подобное самописное сделано... Проблемму пока так и нерешил