Adres do galerii statystyk:http://toolmaniak.dtfoto.net/index.php?pageid=4&lang=pl
Do najważniejszych zalet systemu należą więc:
- zapisywanie podstawowych informacji o odwiedzającym
- raportowanie jak użytkownik dotarł na naszą stronę ( skąd nastąpiło przekierowanie).
- Jakiego otoczenia systemowego używa tzn. jakiej przeglądarki, jaki OS, jakia głębia kolorów, rozdzielczość ekranu,obsługa JAVY, jaki typ połączenia
- informacje szczegółowe z zapytań whois min.: pula adresowa, nazwa sieciowa,opis właściciela adresu IP, adres, osoba odpowiedzialna, kraj , email, domena, adres DNS, właściciel domeny itp.
- informacje o odwiedzanych lokalizacjach na witrynie z dokładną datą i czasem (możliwe jest pokazywanie pełnych URI lub ucięcie do podkatalogu w którym dana podstrona się znajduje, co pomoże przy analizach popularności różnych tematów naszego serwisu po nazwie folderu)
- podział odwiedzających na nowych i powracającyh
- rozróżnienie również oglądalności strony na wizyty i odsłony
- mapka geolokalizacyjna z google maps, umożłiwiająca graficzne przedstawienie lokalizacji odwiedzającego (domyślnie kraj/państwo) ,ale jeśli to możliwe, również co do miasta i ulicy (w zależności od zapytań whois).
- generator wykresów oparty o klasę jpgraph
- wyszukiwarka według dowolnych danych, po nazwie, adresie itp.
- narzędzia sieciowe takie jak whois (wyświetlający pełne rekordy z zapytań), ping, traceroute
- export wyników do excela lub csv, teraz również w toku jest export do PDF.
DROP TABLE IF EXISTS `ROOT`; CREATE TABLE `ROOT` ( `ID` int(21) NOT NULL AUTO_INCREMENT, `IP_ADDR_32` varchar(16) NOT NULL DEFAULT '000000000000', `HOST_NAME` varchar(110) DEFAULT NULL, `WHOI_VERIFY` enum('Y','N') DEFAULT 'N', PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`IP_ADDR_32`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Table structure for table `EXTENSION` -- DROP TABLE IF EXISTS `EXTENSION`; CREATE TABLE `EXTENSION` ( `ID` int(30) NOT NULL AUTO_INCREMENT, `ID_IP_ADDR_32` int(21) DEFAULT '0', `VISIT_DATA` date DEFAULT '0000-00-00', `SYS_ENVIROMENT` varchar(255) DEFAULT NULL, `HTTP_REFFERER` varchar(255) DEFAULT NULL, `LOCATION` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Table structure for table `ENVIRON` -- DROP TABLE IF EXISTS `ENVIRON`; CREATE TABLE `ENVIRON` ( `VISIT_ID` int(30) NOT NULL DEFAULT '0', `BROWSER` varchar(50) DEFAULT NULL, `CODE_NAME` varchar(20) DEFAULT NULL, `OS_PLATFORM` varchar(30) DEFAULT NULL, `RES_WIDTH` int(5) DEFAULT NULL, `RES_HEIGHT` int(5) DEFAULT NULL, `DEPTH` int(3) DEFAULT NULL, `JAVA_ENABLED` enum('TAK','NIE') DEFAULT NULL, PRIMARY KEY (`VISIT_ID`), UNIQUE KEY `VISIT_ID` (`VISIT_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
Kod głównego modułu działającego w tle:
<? (...) require_once(); $hours = $hours*3600; $mins = $mins*60; $seconds = $seconds; $expire_zone = 86400 - $hours - $mins - $seconds; $visited_count++; //error_reporting(0); //funkcja detekcji adresu IP function getClientIP() { $ip = 0; $ip = $_SERVER['HTTP_CLIENT_IP']; //wykrywa również połączenia przez serwery PROXY if ($ip) { $ip = 0; } foreach ($ipList as $v); return $v; } return $ip ? $ip : $_SERVER['REMOTE_ADDR']; } getClientIP(); /* $ip = ip2long(getClientIP()); $ip = sprintf("%u",$ip); */ //konwertuje IP do postaci czterooktetowej IPv4 $target=$result_ip[0]; //Pobierz nazwe domeny z DNS $target_domainame = gethostbyaddr($target); function reverse_strrchr ($haystack,$needle,$trail) { } $uri_mode = (reverse_strrchr($_SERVER['HTTP_REFERER'], "/", 1)); @mysql_query("INSERT INTO ROOT (IP_ADDR_32,HOST_NAME) values ('".$result_ip[0]."','".$target_domainame."')"); if ($visited_count == 1 ) { $extension_q=mysql_query("INSERT INTO EXTENSION (ID_IP_ADDR_32,VISIT_DATA,SYS_ENVIROMENT,HTTP_REFFERER,LOCATION) values ('".$id_table_root[0]."','".date('Y-m-d')."','".htmlspecialchars($_SERVER['HTTP_USER_AGENT'])."','".htmlspecialchars($_GET['referer'])."','".htmlspecialchars($_SERVER['HTTP_REFERER'])."')"); if (!$extension_q) { } else if ($extension_q) { $environ_q=mysql_query("INSERT INTO ENVIRON (VISIT_ID,BROWSER,CODE_NAME,OS_PLATFORM,RES_WIDTH,RES_HEIGHT,DEPTH,JAVA_ENAB
L D) values ('".mysql_insert_id()."' , '".htmlspecialchars($_GET['browser'])."','".htmlspecialchars($_GET['code_name'])."','".htmlspecialchars($_GET['os_platform'])."','".htmlspecialchars($_GET['res_width'])."','".htmlspecialchars($_GET['res_height'])."','".htmlspecialchars($_GET['depth'])."','".htmlspecialchars($_GET['java'])."')"); if (!$environ_q) { } else if ($environ_q) { $visit_q=mysql_query("SELECT max(ENVIRON.VISIT_ID) FROM ROOT,EXTENSION,ENVIRON WHERE ENVIRON.VISIT_ID = EXTENSION.ID AND EXTE
N ION.ID_IP_ADDR_32 = ROOT.ID AND ROOT.ID = ".$id_table_root[0]); $ident = $visited_ident[0]; } } } ?>
Pobiera on dane z wejściowego skryptu JSCript znajdującego się w stopce każdego dokumentu który ma być raportowany po czym umieszcza takie informacje jak adres IP, nazwa DNS, użyta przeglądarka, system operacyjny,rozdzielczość, obsługa maszyny wirtualnej Javy, strona referująca i jeszcze pare innych w odpowiednich tabelach mysql. Po tym zależnie od ustawień w pliku konfiguracyjnym demona Crontab odpalany jest co jakiś czas (domyślnie co 15 minut) proces sprawdzania rekordów oznaczonych jako niezweryfikowane poprzez zapytania do serwerów WHOIS na podstawie fsockopen().