class proxycontrol { var $good_proxy = null; var $proxy_file = null; var $DIR = null; var $tproxy_file = null; var $WASPROXY = null; var $timeout = null; var $TO = null; var $FROM = null; var $pc = null; function proxycontrol ($file, $tfile = '') { $this->LoadFromFile ($file); $this->proxy_file = $file; $this->tproxy_file = ($tfile ? $tfile : $file); $this->good_proxy = ''; $this->pc = -1; $this->p_invalid = 5; $this->RPA = 0; if (count ($this->proxy)) { $this->WASPROXY = 1; return null; } $this->WASPROXY = 0; } function stopch () { if (is_file ($this->DIR . 'stop.txt')) { $tmp = file ($this->DIR . 'stop.txt'); $stop = intval ($tmp[0]); if ($stop) { echo '[STOP]'; flush (); exit (); } } } function setcheckurl ($url) { $this->churl = $url; } function setdir ($DIR) { $this->DIR = $DIR; } function setip ($ip) { $this->IP = $ip; } function isproxy () { return count ($this->proxy); } function getmicrotime () { list ($usec, $sec) = explode (' ', microtime ()); return (double)$usec + (double)$sec; } function curlfetch ($url, $params = '', $rurl = '') { $temp = parse_url ($url); if ($temp['port'] != '80') { (true ? $temp['port'] : ':' . $temp['port']); } $url = trim ($temp['scheme'] . '://' . $temp['host'] . '' . $temp['path'] . ($temp['query'] ? '?' . $temp['query'] : '')); $temp = array (); $user_agent = 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'; $ch = curl_init (); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_REFERER, ($rurl ? $rurl : $url)); curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_TIMEOUT, ($this->timeout ? $this->timeout : 7)); if (0 < strlen ($params)) { curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $params); curl_setopt ($ch, CURLOPT_PROXY, $this->proxy[$this->pc]['proxy']); $pre_curl = $this->getmicrotime (); curl_setopt ($ch, CURLOPT_PROXY, $this->proxy[$this->pc]['proxy']); } $result = curl_exec ($ch); curl_close ($ch); $this->proxy[$this->pc]['atime'] = $this->getmicrotime () - $pre_curl; return $result; } function loadfromurl ($url) { $string = strip_tags ($this->CurlFetch ($url)); $num = '([0-9]|[0-9]{2}|1\\d\\d|2[0-4]\\d|25[0-5])'; preg_match_all ('/' . $num . '\\.' . $num . '\\.' . $num . '\\.' . $num . ':([0-9]*)/', $string, $ma); $now = mktime (); while (is_file ($this->DIR . 'tproxy.lock')) { usleep (20); if (180 < mktime () - $now) { return 1; } } $fp = fopen ('tproxy.lock', 'w+'); fclose ($fp); @chmod ('tproxy.lock', 438); $fp = fopen ($this->tproxy_file, 'a+'); for ($i = 0; $i < count ($ma[0]); ++$i) { fputs ($fp, trim ($ma[0][$i]) . ' '); } fclose ($fp); @unlink ('tproxy.lock'); @chmod ($this->tproxy_file, 438); if (count ($ma[0])) { return count ($ma[0]); } return 0; } function writetotfile () { while (is_file ($this->DIR . 'tproxy.lock')) { usleep (20); if (300 < mktime () - $now) { return 1; } } $fp = fopen ('tproxy.lock', 'w+'); fclose ($fp); @chmod ('tproxy.lock', 438); $fp = fopen ($this->tproxy_file, 'a+'); $write = 0; for ($i = 0; $i < count ($this->proxy); ++$i) { if ($this->proxy[$i]['atime'] < 20) { if ($this->proxy[$i]['atime']) { fputs ($fp, $this->proxy[$i]['proxy'] . ' '); ++$write; continue; } continue; } } fclose ($fp); echo 'Write ' . $write . '
'; @unlink ($this->DIR . 'tproxy.lock'); } function writetofile () { while (is_file ($this->DIR . 'proxy.lock')) { usleep (20); if (300 < mktime () - $now) { return 1; } } $fp = fopen ('proxy.lock', 'w+'); fclose ($fp); @chmod ('proxy.lock', 438); $fp = fopen ($this->proxy_file, 'a+'); for ($i = 0; $i < count ($this->proxy); ++$i) { if ($this->proxy[$i]['atime'] < 20) { if ($this->proxy[$i]['atime']) { fputs ($fp, $this->proxy[$i]['proxy'] . ' '); continue; } continue; } } fclose ($fp); } function loadfromfile ($file) { $this->proxy = array (); if (is_file ($file)) { $tmp = file ($file); for ($i = 0; $i < count ($tmp); ++$i) { if (trim ($tmp[$i])) { $this->proxy[$i]['proxy'] = trim ($tmp[$i]); $this->proxy[$i]['invalid'] = 0; $this->proxy[$i]['atime'] = 1; continue; } } if (count ($this->proxy)) { shuffle ($this->proxy); } } $this->pc = 0; } function reload () { if ($this->update_from_url) { if (is_file ($this->tproxy_file)) { @unlink ($this->tproxy_file); } $tmp = file ($this->proxy_url_file); if (!(count ($tmp))) { echo 'No proxy sites: fill files/proxy_sites.txt
'; flush (); exit (); } for ($i = 0; $i < count ($tmp); ++$i) { $url = trim ($tmp[$i]); echo 'Dowbload from ' . $url . ''; if ($cnt = $this->LoadFromUrl ($url)) { echo ' OK [' . $cnt . ']
'; continue; } else { echo ' NO
'; continue; } } } $this->LoadFromFile ($this->proxy_file); } function checkproxy () { $secr = md5 (mktime ()); $params = 'param=' . $secr; $randn = rand (0, 5); $this->churl = str_replace ('[N]', $randn, $this->churl); $answ = $this->CurlFetch ($this->churl, $params); echo '
'; if (strpos (' ' . $answ, $this->IP)) { ++$this->proxy[$this->pc]['invalid']; $this->proxy[$this->pc]['atime'] = 21; return 0; } if ($this->XFF) { if (strpos (' ' . $answ, 'X_FORWARDED_FOR')) { ++$this->proxy[$this->pc]['invalid']; $this->proxy[$this->pc]['atime'] = 21; return 0; } } if (strpos (' ' . $answ, $secr)) { $this->proxy[$this->pc]['invalid'] = 0; return 1; } ++$this->proxy[$this->pc]['invalid']; $this->proxy[$this->pc]['atime'] = 21; return 0; } function set_temp_var ($name, $value) { $q = 'select count(value) as count from siv_temp_vars where name=\'' . $name . '\''; $tmp = mysql_fetch_assoc (mysql_query ($q)); if ($tmp['count']) { $q = 'update siv_temp_vars set value=\'' . $value . '\' where name=\'' . $name . '\''; } else { $q = 'insert into siv_temp_vars values(\'' . $name . '\',\'' . $value . '\')'; } if (!(mysql_query ($q))) { exit ('[Error set temp var]: ' . mysql_error ()); } } function inc_temp_var ($name) { $q = 'select value from siv_temp_vars where name=\'' . $name . '\''; $tmp = mysql_fetch_assoc (mysql_query ($q)); if (isset ($tmp['value'])) { $q = 'update siv_temp_vars set value=\'' . intval ($tmp['value'] + 1) . ('\' where name=\'' . $name . '\''); } else { $q = 'insert into siv_temp_vars values(\'' . $name . '\',\'1\')'; } if (!($r = mysql_query ($q))) { exit ('[Inc temp var]: ' . mysql_error ()); } return $tmp['value']; } function get_temp_var ($name) { $q = 'select value from siv_temp_vars where name=\'' . $name . '\''; if (!($r = mysql_query ($q))) { exit ('[Get temp var]: ' . mysql_error ()); } $tmp = mysql_fetch_assoc ($r); return $tmp['value']; } function proxyerrorthreaddec () { $this->inc_temp_var ('threads'); $this->inc_temp_var ('proxy_err'); echo 'threads dec ok
'; flush (); } function checkall ($mode) { $all_n = count ($this->proxy); for ($i = 0; $i < $all_n; ++$i) { $this->stopch (); $this->pc = $i; echo 'Process complete: ' . ($i + 1) . ('/' . $all_n . '
'); if ($this->CheckProxy ()) { if ($mode == 1) { echo '' . $this->proxy[$this->pc]['proxy'] . ' Resp: [' . $this->proxy[$this->pc]['atime'] . ']
'; } flush (); continue; } else { if ($mode == 1) { echo '' . $this->proxy[$this->pc]['proxy'] . '
'; } flush (); continue; } } } function getproxy () { if (!((!($this->pc + 1 == count ($this->proxy)) AND !(count ($this->proxy) < $this->pc)))) { $this->pc = -1; for ($i = 0; $i < count ($this->proxy); ++$i) { if ($this->p_invalid <= $this->proxy[$i]['invalid']) { unset ($this->proxy[$i]); continue; } } if (!(count ($this->proxy))) { if ($this->WASPROXY) { echo '#Error [No more alive proxy]
'; flush (); $this->ProxyErrorThreadDec (); exit (); } } usort ($this->proxy, 'compare'); } ++$this->pc; echo '[pc: ' . $this->pc . '] #' . $this->proxy[$this->pc]['proxy'] . '
'; flush (); ++$this->check_number; if (500 < $this->check_number) { if ($this->RPA) { echo '#Error [No more alive proxy]
'; flush (); $this->ProxyErrorTheadDec (); exit (); } echo '#Alert [RELOAD FROM FILE]
'; flush (); $this->LoadFromFile ($this->proxy_file); $this->RPA = 1; $this->check_number = 0; } if ($this->CheckProxy ()) { $this->check_number = 0; $this->good_proxy = $this->proxy[$this->pc]['proxy']; return 1; } echo '#Notice [no good proxy ' . $this->check_number . ']
'; flush (); $this->GetProxy (); } } function compare ($left, $right) { if ($left['atime'] < $right['atime']) { return -1; } if ($left['atime'] == $right['atime']) { return 0; } if ($right['atime'] < $left['atime']) { return 1; } } ?>