Facebook
Twitter
Google+
Kommentare
0

Wo ungefähr ist eine IP Adresse beheimatet? GeoIP in PHP

Manchmal möchte man wissen aus welchem Land oder welcher Region eine IP-Adresse kommt, und dafür gibt es bereits Lösungen die leicht zu benutzen sind. Als erstes schauen wir uns die Geo-IP-Datenbank von MaxMind an, die wir mit der PEAR-Klasse Net_GeoIP ansprechen. Wer nur das Land braucht der sollte sich die kostenlose GeoLite Country Datenbank anschauen, wenn die Stadt bzw. die Region benötigt wird wirft man einen Blick auf die GeoLite City Datenbank. Von beiden gibt es auch noch kostenpflichtige Versionen, die genauer und aktueller sind.

Das erste Beispiel zeigt die Verwendung der Länder-Datenbank:

<?php
require_once "Net/GeoIP.php";

$geoip = Net_GeoIP::getInstance("GeoIP.dat");

$ipAddresses = array(
    '77.177.166.7',
    '41.135.69.4',
    '183.111.12.21',
    '202.127.1.88',
    '174.139.204.218',
    '192.121.32.239',
);
foreach ($ipAddresses as $ipAddress) {
    echo $ipAddress.' '.$geoip->lookupCountryCode($ipAddress)."\n";
}

Die Ausgabe in diesem Fall sieht so aus:

77.177.166.7 DE
41.135.69.4 ZA
183.111.12.21 KR
202.127.1.88 CN
174.139.204.218 US
192.121.32.239 SE

Für die zweite Variante mit der City-Datenbank sieht das Script recht ähnlich aus:

<?php
require_once "Net/GeoIP.php";

$geoip = Net_GeoIP::getInstance("GeoLiteCity.dat");

$ipAddresses = array(
    '77.177.166.7',
    '41.135.69.4',
    '183.111.12.21',
    '202.127.1.88',
    '174.139.204.218',
    '192.121.32.239',
);
foreach ($ipAddresses as $ipAddress) {
    $location = $geoip->lookupLocation($ipAddress);

    echo 'IP Address: '.$ipAddress."\n".
        'CountryCode: '.$location->countryCode."\n".
        'CountryName: '.$location->countryName."\n".
        'City: '.$location->city."\n".
        'PostalCode: '.$location->postalCode."\n".
        'Region: '. $location->region."\n".
        'Lat/Lan: '.$location->latitude."/".$location->longitude."\n\n";
}

Die Ausgabe:

IP Address: 77.177.166.7
CountryCode: DE
CountryName: Germany
City: Spenge
PostalCode:
Region: 07
Lat/Lan: 52.1333/8.4833

IP Address: 41.135.69.4
CountryCode: ZA
CountryName: South Africa
City: Port Elizabeth
PostalCode:
Region: 05
Lat/Lan: -33.9667/25.5833

IP Address: 183.111.12.21
CountryCode: KR
CountryName: Korea, Republic of
City: Seoul
PostalCode:
Region: 11
Lat/Lan: 37.5664/126.9997

IP Address: 202.127.1.88
CountryCode: CN
CountryName: China
City: Beijing
PostalCode:
Region: 22
Lat/Lan: 39.9289/116.3883

IP Address: 174.139.204.218
CountryCode: US
CountryName: United States
City: Spartanburg
PostalCode: 29302
Region: SC
Lat/Lan: 34.8822/-81.8511

IP Address: 192.121.32.239
CountryCode: SE
CountryName: Sweden
City:
PostalCode:
Region:
Lat/Lan: 62/15

Des weiteren gibt es noch eine Region-Datenbank und eine Organisation/ISP-Datenbank, die mit den entsprechenden Methoden lookupRegion() und lookupOrg() in Net_GeoIP ausgelesen werden können.

Alternativ gibt es die Möglichkeit die PECL geoip PHP Extension zu nutzen, die auch die Datenbanken von MaxMind nutzt, das Manual befindet sich auf php.net.

Webserver können auch Geo-Informationen nutzen, beispielsweise Apache GeoIP API und nginx HttpGeoIP Module. Damit ist es super einfach Zugriffe aus bestimmten Ländern zu blocken oder anderen Inhalt zu präsentieren, oder auch die Geo-Information als Parameter an den Backend-Server zu liefern (im Fall von nginx als Reverse Proxy).

Es gibt auch einige Webservices die Geo-Informationen zu IP-Adressen bieten, von denen bekommt man via REST entweder JSON, XML oder CSV. Einige Beispiele:

http://freegeoip.net

http://www.geobytes.com/iplocator.htm

http://www.geoio.com/

http://ipinfodb.com/ip_location_api_json.php

https://simplegeo.com/docs/clients-code-libraries/php

http://www.hostip.info/use.html

Wenn diese Dienste eine bessere Datenbank bieten lohnt sich evtl. ein Blick, aber da man auf die Verfügbarkeit angewiesen ist und Webservices auch langsamer sind als lokale Lookups ist die Verwendung problematisch.

Ähnliche Artikel:

  1. Mit PHP eine eBay-Auktion starten
Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen