Пример #1
0
 public static function setOptions(array $options = array())
 {
     if (isset($options['api_key'])) {
         self::$api_key = $options['api_key'];
     }
     if (isset($options['max_age'])) {
         self::$max_age = $options['max_age'];
     }
 }
Пример #2
0
 public static function index()
 {
     require dirname(__FILE__) . "/lib/browser.php";
     require dirname(__FILE__) . "/lib/os.php";
     require dirname(__FILE__) . "/lib/robot.php";
     require_once dirname(__FILE__) . '/Rules/Basic.php';
     require_once dirname(__FILE__) . '/Rules/Fingerprint.php';
     require_once dirname(__FILE__) . '/Rules/Httpbl.php';
     $filters = array();
     if (!empty($_GET['filter'])) {
         foreach (explode(' ', $_GET['filter']) as $f) {
             if (strpos($f, ':')) {
                 $filters[] = explode(':', trim($f));
             }
         }
     }
     foreach ($filters as $filter) {
         list($filterKey, $filterValue) = $filter;
         if ($filterKey == 'fingerprint') {
             $agents = Bouncer::getAgentsIndexFingerprint($filterValue, self::$_namespace);
             break;
         }
         if ($filterKey == 'addr') {
             $agents = Bouncer::getAgentsIndexHost(md5($filterValue), self::$_namespace);
             break;
         }
     }
     if (empty($agents)) {
         $agents = Bouncer::getAgentsIndex(self::$_namespace);
     }
     $cssRules = array();
     $cssRules['unknown'] = 'background-image:url(' . self::$_base_static_url . '/images/os/question.png)';
     $count = 0;
     echo '<table class="bouncer-table">' . "\n";
     $linkify = true;
     echo '<tr>';
     foreach (self::$_keys as $key) {
         if ($key == 'fingerprint') {
             echo '<th style="width:14px">', '', '</th>';
             echo '<th colspan="3">', ucfirst($key), '</th>';
         } elseif ($key == 'host') {
             if (self::$_detailed_host) {
                 echo '<th colspan="3">', ucfirst($key), '</th>';
             } else {
                 echo '<th>', ucfirst($key), '</th>';
             }
         } elseif ($key == 'features') {
             echo '<th colspan="3">', ucfirst($key), '</th>';
         } else {
             echo '<th>', ucfirst($key), '</th>';
         }
     }
     echo '</tr>' . "\n";
     foreach ($agents as $time => $id) {
         $identity = Bouncer::getIdentity($id);
         if (empty($identity)) {
             continue;
         }
         if (in_array($identity['addr'], self::$_ignore_ips)) {
             continue;
         }
         $last = Bouncer::getLastAgentConnection($id, self::$_namespace);
         if (empty($last)) {
             continue;
         }
         $first = Bouncer::getFirstAgentConnection($id, self::$_namespace);
         $status = isset($last['result']) ? $last['result'][0] : 'neutral';
         $user = isset($last['request']['COOKIE']['user']) ? $last['request']['COOKIE']['user'] : '******';
         $fingerprint = $identity['fingerprint'];
         $fgtype = Bouncer_Rules_Fingerprint::getType($identity);
         $fgtype = empty($fgtype) ? 'none' : $fgtype;
         $time = $last['time'];
         $hits = Bouncer::countAgentConnections($id, self::$_namespace);
         $addr = $identity['addr'];
         $host = $identity['host'];
         $useragent = isset($identity['headers']['User-Agent']) ? $identity['headers']['User-Agent'] : 'none';
         $extension = isset($identity['country']) ? $identity['country'] : (isset($identity['extension']) ? $identity['extension'] : 'numeric');
         $type = $identity['type'];
         $signature = $identity['signature'];
         $agent = $name = $identity['name'];
         $version = isset($identity['version']) ? $identity['version'] : null;
         $system = $system_name = isset($identity['os']) ? $identity['os'][0] : 'unknown';
         $system_version = isset($identity['os']) ? $identity['os'][1] : '';
         $referer = isset($first['request']['headers']['Referer']) ? $first['request']['headers']['Referer'] : 'none';
         $cookie = isset($last['request']['headers']['Cookie']) ? $last['request']['headers']['Cookie'] : '';
         $hascookie = isset($last['request']['headers']['Cookie']) ? 1 : 0;
         $score = isset($last['result']) ? round($last['result'][1]) : 0;
         $server = isset($last['request']['server']) ? $last['request']['server'] : '';
         $method = isset($last['request']['method']) ? $last['request']['method'] : 'GET';
         $kb = in_array($name, Bouncer::$known_browsers) ? 1 : 0;
         $te = isset($last['request']['headers']['TE']) ? 1 : 0;
         $via = isset($last['request']['headers']['Via']) ? $last['request']['headers']['Via'] : 'none';
         $cc = isset($last['request']['headers']['Cache-Control']) ? $last['request']['headers']['Cache-Control'] : 'none';
         $pragma = isset($last['request']['headers']['Pragma']) ? $last['request']['headers']['Pragma'] : 'none';
         $range = isset($last['request']['headers']['Range']) ? 1 : 0;
         $wap = isset($last['request']['headers']['x-wap-profile']) ? 1 : 0;
         $bluecoat = isset($last['request']['headers']['X-BlueCoat-Via']) ? 1 : 0;
         $squid = isset($last['request']['headers']['Via']) && isset($last['request']['headers']['Cache-Control']) && $last['request']['headers']['Cache-Control'] == 'max-age=259200' ? 1 : 0;
         $proxy1 = isset($last['request']['headers']['FORWARDED_FOR']) && isset($last['request']['headers']['Client-ip']) ? 1 : 0;
         $proxy = $bluecoat || $squid || $proxy1 ? 1 : 0;
         $xmoz = isset($last['request']['headers']['X-Moz']) ? $last['request']['headers']['X-Moz'] : 'none';
         $xpurpose = isset($last['request']['headers']['X-Purpose']) ? $last['request']['headers']['X-Purpose'] : 'none';
         $ka = isset($last['request']['headers']['Keep-Alive']) ? $last['request']['headers']['Keep-Alive'] : 'none';
         $conn = isset($last['request']['headers']['Connection']) ? $last['request']['headers']['Connection'] : 'none';
         $pc = isset($last['request']['headers']['Proxy-Connection']) ? $last['request']['headers']['Proxy-Connection'] : 'none';
         $pa = isset($last['request']['headers']['Proxy-Authentication']) ? $last['request']['headers']['Proxy-Authentication'] : 'none';
         $prefetch = isset($xmoz) && $xmoz == 'prefetch' || isset($xpurpose) && $xpurpose == 'prefetch' ? 1 : 0;
         $accept = isset($identity['headers']['Accept']) ? $identity['headers']['Accept'] : 'none';
         $ae = isset($identity['headers']['Accept-Encoding']) ? $identity['headers']['Accept-Encoding'] : 'none';
         $al = isset($identity['headers']['Accept-Language']) ? $identity['headers']['Accept-Language'] : 'none';
         $ac = isset($identity['headers']['Accept-Charset']) ? $identity['headers']['Accept-Charset'] : 'none';
         $java = isset($identity['headers']['Accept']) && $identity['headers']['Accept'] == 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2' ? 1 : 0;
         $libwww = isset($last['request']['headers']['TE']) && $last['request']['headers']['TE'] == 'deflate,gzip;q=0.3' ? 1 : 0;
         $lwp = isset($last['request']['headers']['Cookie2']) && $last['request']['headers']['Cookie2'] == '$Version="1"' ? 1 : 0;
         $ie = $name == 'explorer' || in_array($name, Bouncer_Rules_Browser::$explorer_browsers) ? 1 : 0;
         $gecko = $name == 'firefox' || in_array($name, Bouncer_Rules_Browser::$gecko_browsers) ? 1 : 0;
         $webkit = in_array($name, Bouncer_Rules_Browser::$webkit_browsers) ? 1 : 0;
         $rss = in_array($name, Bouncer_Rules_Browser::$rss_browsers) || isset($xmoz) && $xmoz == 'livebookmarks' ? 1 : 0;
         $js = isset($identity['features']['javascript']) && $identity['features']['javascript'] != 0 ? (int) ($identity['features']['javascript'] > 0) : '';
         $img = isset($identity['features']['image']) && $identity['features']['image'] != 0 ? (int) ($identity['features']['image'] > 0) : '';
         $iframe = isset($identity['features']['iframe']) && $identity['features']['iframe'] != 0 ? (int) ($identity['features']['iframe'] > 0) : '';
         $ref = 0;
         if (!empty($first['request']['headers']['Referer'])) {
             $preferer = @parse_url($first['request']['headers']['Referer']);
             if (isset($preferer['host']) && $first['request']['server'] != $preferer['host']) {
                 $referer = $first['request']['headers']['Referer'];
                 $ref = 1;
             }
         }
         $partialKeys = array('addr', 'host', 'referer', 'useragent', 'cookie', 'via');
         foreach ($filters as $filter) {
             list($filterKey, $filterValue) = $filter;
             $filterValue = str_replace('_', ' ', $filterValue);
             if (strpos($filterKey, '-') === 0) {
                 $filterKey = substr($filterKey, 1);
                 if (isset(${$filterKey})) {
                     if (in_array($filterKey, $partialKeys)) {
                         if (strpos(${$filterKey}, $filterValue) !== false) {
                             continue 2;
                         }
                     } else {
                         if (${$filterKey} == $filterValue) {
                             continue 2;
                         }
                     }
                 }
             } else {
                 if (isset(${$filterKey})) {
                     if (in_array($filterKey, $partialKeys)) {
                         if (strpos(${$filterKey}, $filterValue) === false) {
                             continue 2;
                         }
                     } else {
                         if (${$filterKey} != $filterValue) {
                             continue 2;
                         }
                     }
                 }
             }
         }
         if ($linkify) {
             $id = '<a href="?agent=' . $id . '">' . (strlen($id) == 32 ? substr($id, 0, 8) : $id) . '</a>';
         } else {
             $id = substr($id, 0, 16);
         }
         if (isset($user) && $user != 'none' && $linkify) {
             $user = '******' . $user . '">' . $user . '</a>';
         }
         $fingerprint = substr($identity['fingerprint'], 0, 6);
         if ($linkify) {
             $fingerprint = '<a href="?filter=fingerprint%3A' . $identity['fingerprint'] . '">' . $fingerprint . '</a>';
         }
         $time = date("d/m/Y.H:i:s", $last['time']);
         if ($type == 'browser' && isset($os[$system])) {
             if (empty($cssRules[$system])) {
                 $cssRules[$system] = 'background-image:url(' . self::$_base_static_url . '/images/os/' . $os[$system]['icon'] . '.png)';
             }
             $system = $os[$system]['title'] . ' ' . $system_version;
         } else {
             $system = '';
             $system_name = '';
         }
         if (empty($cssRules[$extension])) {
             $cssRules[$extension] = 'background-image:url(' . self::$_base_static_url . '/images/ext/' . $extension . '.png)';
         }
         if ($linkify) {
             $host = '<a href="?filter=addr%3A' . $addr . '">' . $host . '</a>';
         }
         if ($type == 'browser') {
             if (empty($cssRules[$name])) {
                 $cssRules[$name] = 'background-image:url(' . self::$_base_static_url . '/images/browser/' . $browser[$name]['icon'] . '.png)';
             }
             $agent = $browser[$name]['title'] . ' ' . $version;
         } else {
             if ($type == 'robot') {
                 if (empty($cssRules[$name])) {
                     $cssRules[$name] = 'background-image:url(' . self::$_base_static_url . '/images/robot/' . $robot[$name]['icon'] . '.png)';
                 }
                 $agent = $robot[$name]['title'] . ' ' . $version;
             }
         }
         if (!empty($referer)) {
             $preferer = parse_url($referer);
         }
         if (!empty($referer) && isset($preferer['host']) && $first['request']['server'] != $preferer['host']) {
             if ($linkify) {
                 $referer = '<a href="' . htmlspecialchars($referer) . '">' . $preferer['host'] . '</a>';
             } else {
                 $referer = $preferer['host'];
             }
         } else {
             $referer = '';
         }
         echo '<tr class="', $status, '">';
         foreach (self::$_keys as $key) {
             if ($key == 'fingerprint') {
                 echo '<td style="background:#' . substr($identity['fingerprint'], 0, 6) . '">&nbsp;</td>';
                 echo '<td>' . $fingerprint . '</td>';
                 echo '<td>' . (isset($fgtype) && $fgtype != 'none' ? $fgtype : '') . '</td>';
                 if (method_exists('Bouncer', 'countAgentsFingerprint')) {
                     echo '<td>' . Bouncer::countAgentsFingerprint($identity['fingerprint'], self::$_namespace) . '</td>';
                 } else {
                     echo '<td>', '&nbsp;', '</td>';
                 }
             } elseif ($key == 'features') {
                 if (isset($identity['features'])) {
                     echo '<td>' . $identity['features']['image'] . '</td>';
                     echo '<td>' . $identity['features']['iframe'] . '</td>';
                     echo '<td>' . $identity['features']['javascript'] . '</td>';
                     // echo '<td>' . $identity['features']['link'] . '</td>';
                 } else {
                     echo '<td colspan="3">', '&nbsp;', '</td>';
                 }
             } else {
                 if ($key == 'host') {
                     echo '<td class="ic ' . $extension . '">', $host, '</td>';
                     if (self::$_detailed_host) {
                         echo '<td>', Bouncer_Rules_Httpbl::getType($identity), '</td>';
                         if (method_exists('Bouncer', 'countAgentsHost')) {
                             $hcount = Bouncer::countAgentsHost(md5($identity['addr']), self::$_namespace);
                             echo '<td>' . ($hcount ? $hcount : 1) . '</td>';
                         } else {
                             echo '<td>', '&nbsp;', '</td>';
                         }
                     }
                 } else {
                     if ($key == 'agent') {
                         echo '<td class="ic ' . $name . '">', $agent, '</td>';
                     } else {
                         if ($key == 'system') {
                             echo '<td class="ic ' . $system_name . '">', $system, '</td>';
                         } else {
                             if (isset(${$key}) && ${$key} != 'none') {
                                 echo '<td>', ${$key}, '</td>';
                             } else {
                                 echo '<td>', '&nbsp;', '</td>';
                             }
                         }
                     }
                 }
             }
         }
         echo '</tr>' . "\n";
         $count++;
         if ($count >= self::$_max_items) {
             break;
         }
     }
     echo '</table>';
     echo '<style type="text/css">' . "\n";
     foreach ($cssRules as $class => $content) {
         echo ".{$class} { {$content}; }\n";
     }
     echo '</style>';
 }