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) . '"> </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>', ' ', '</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">', ' ', '</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>', ' ', '</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>', ' ', '</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>'; }