IP Range um die Statistiken nicht zu verfälschen
Freitag, Januar 21st, 2011Als ich mein kleines Projekt gestartet habe, baute ich eine Statistik um die User zu zählen. Gezählt wird nach der IP. Mit der Zeit hat sich die Tabelle mit IPs gefühlt und ich stellte fest, dass manche IPs zu oft kamen. Ich hab mir schon gedacht dass es sich um Google & Co und natürlich auch um Facebook handelt. Als ich mir die IP etwas näher ansah stellte ich fest, dass jede 2 IP Facebook war. Ich beschloss eine Liste zu machen um sie aus den Statistiken zu bannen. Doch immer wieder entdeckte ich neue Facebook und Google IPs. Und mir wurde klar das meine Liste ins unendliche geführt werden müsste.
Jeder großer Anbieter wie Google, Facebook oder Microsoft bekommt eine IP Range, eine Liste von-bis IPs. Diese IP Range kann man bei Whois Services herausfinden. So baute ich eine kleine Schleife die über die IPs geht und prüft bin ich in dem Bereich oder nicht. Mit einer kleinen Funktion ip2long kann man eine IP in ein Integer Wert auflösen und mit ihm auch weiter arbeiten.
Hier ist meine mini Lösung:
function ipInRange($ip) { $ipRangeList = array( 'google' => array('1123631104','1123639295'), // 66.249.64.0 - 66.249.95.255 'facebook' => array('1121751040','1121755135'), // 66.220.144.0 - 66.220.159.255 'facebook1' => array('1161801728','1161805823'), // 69.63.176.0 - 69.63.191.255 'yahoo' => array('1136852992','1136918527'), // 67.195.0.0 - 67.195.255.255 'microsoft' => array('1093926912','1094189055') // 65.52.0.0 - 65.55.255.255 ); $ipNum = ip2long($ip); foreach($ipRangeList as $node) { if($ipNum >= $node[0] && $ipNum <= $node[1]) return true; } return false; } if($ipInRange($_SERVER['REMOTE_ADDR'])) echo 'Ich muss nicht in die Statistik rein';
Mit dieser Funktion kann ich schon vorab selektieren und meine Statistiken nicht verfälschen. Es gibt noch eine Möglichkeit die IP in die CIDR umzuwandeln, doch die war für mich zu kompliziert um mit ihr weiter zu beschäftigen.
Natürlich kann jeder diese Liste für sich erweitern falls er noch Anbieter findet die in Massen ihn besuchen.