Host: ec2-54-80-137-187.compute-1.amazonaws.com
HostIP : 54.80.137.187
Land :v=spf1 redirect=vhost.r4l.com


1. IP-Geoposition oder IP-Location-Finder

Es geht darum anhand der IP die Geo-Position heraus zufinden. Überall bekommt man Halbinformationen oder Angebote sich SoftWare herunterzuladen. Meistens soll man etwas bezahlen oder Werbung schalten. Und so hab ich weiter gesucht und auch einiges zusammen bekommen.
Gleich vorne weg, bei dynamischen IPs gibt es (noch) keinen Weg sie Geografisch genau zuzuordnen. Und überhaupt gibt es diverse Tools mit denen man seine Herkunft maskieren kann.
Wen das jetzt aber nicht scheut, der kann sich seine Web-Kenntnisse ein bißchen aufbessern.
Die Grundlage ist erstmal die IP des Besuchers festzustellen.
  $testIP = $_SERVER['REMOTE_ADDR'];
  echo "IP : ".$testIP."<br />";
  
Und dann sich damit die Hostadresse zuholen.
  $testHost = gethostbyaddr($testIP);
  echo "Host: ".$testHost."<br />";
  
Mit der Hostadresse kann man sich auch wieder die IP holen.
  $HostIP = gethostbyname($testHost);
  echo "HostIP : ".$HostIP."<br />";
  
Aber wie kann ich jetzt so ein schönes Länderfähnchen für den Benutzer anzeigen?
Das haben sich die Leute von NetOp etwas Nettes ausgedacht: IP geolocation via DNS.
Sie haben sich gedacht was für den Mailversand die DNSBL (Realtime Blackhole List) ist, kann man auch einfach für die IP geolocation umsetzen. Zumindest was die Länderzuordnung betrifft.
Dafür braucht man erstmal die Reverse-IP. Dazu wandelt man die IP in ein Array (explode) dreht das Array um (reverse) und wandelt es dann wieder zurück in einen String:
  $HostIP_rev = implode('.', array_reverse(explode('.',$HostIP)));
  
Jetzt ist deine IP (54.80.137.187) umgedreht worden (187.137.80.54) Damit kann jetzt bei NetOp angefragt werden ob diese IP bekannt ist.
Leider ist bis heute in PHP (5.2.7) die Funktion dns_get_record() unter Windows nicht umgesetzt worden, so das diese Funktion den PHP script dort abbricht. Darum teste ich erstmal ob die Funktion vorhanden ist:
  if (function_exists('checkdnsrr')){
  
und hole mir den TXT Record
    $testCountry = dns_get_record($HostIP_rev.'.country.netop.org',DNS_TXT);
  
extrahiere die Länderinformation
    $testCountry =  strtolower($testCountry[0]['txt']);
  
und zeige die Landesfahne an
    echo "Land :<img src=\"/images/flags/".$testCountry.".gif\" alt=\"".$testCountry."\" border=\"0\" /><br />";
  }
  
Die Fahnen kann man von Ip2Location frei herunterladen.
Das komplette PHP-Code Snippet:
<?php 
  $testIP = $_SERVER['REMOTE_ADDR'];
  echo "IP : ".$testIP."<br />";
  $testHost = gethostbyaddr($testIP);
  echo "Host: ".$testHost."<br />";
  $HostIP = gethostbyname($testHost);
  echo "HostIP : ".$HostIP."<br />";
  $HostIP_rev = implode('.', array_reverse(explode('.',$HostIP)));
  if (function_exists('checkdnsrr')){
    $testCountry = dns_get_record($HostIP_rev.'.country.netop.org',DNS_TXT);
    $testCountry =  strtolower($testCountry[0]['txt']);
    echo "Land :<img src=\"/images/flags/".$testCountry.".gif\" alt=\"".$testCountry."\" border=\"0\" /><br />";
  }
?>