Land einer IP Adresse in PHP ermitteln

Um die IP Adresse des aufrufenden Hosts in PHP zu ermitteln reicht folgendes Skript:

$ip=getenv("REMOTE_ADDR");
echo "Ihre IP ist: " . $ip;

Möchte man nun auch das Land ermitteln wird die ganze Sache schwieriger. Die IP Adresse an sich sagt nämlich nichts über den Standort aus. Also brauchen wir Informationen welche die IP Adresse mit Standortinformationen verknüpft. Eine solche Tabelle können wir unter http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip .

Nachdem wir diese Datei heruntergeladen haben müssen wir sie in eine Datenbank importieren. Dazu müssen wir in der Datenbank erst eine neue Tabelle erstellen. Dies geschieht in phpMyAdmin mittels folgender SQL Anweisung:

CREATE TABLE `IPtoCountry` (
`IP_FROM` DOUBLE NOT NULL ,
`IP_TO` DOUBLE NOT NULL ,
`ISO3166-2` CHAR( 2 ) NOT NULL ,
`ISO3166-1` CHAR( 3 ) NOT NULL ,
`Name` VARCHAR( 255) NOT NULL
)

Danach kann die CSV Datei auch mittels phpMyAdmin in die Tabelle importiert werden. Dabei sollte darauf geachtet werden das das , (Komma) als Trenner eingestellt wird. Um das ganze dann zu nutzen benötigen wir noch eine Funktion welche die Datenbank abfragt und das ganze zurück gibt. Am Ende könnte das so aussehen:

 function IPtoCountry($IP)
{
$db_host="seeseekey.net";
$db_username="geheim";
$db_password="geheim";
$db_name="IpSelectDb";

$IP = sprintf("%u", ip2long($IP));

mysql_connect($db_host, $db_username, $db_password);
mysql_select_db($db_name);

$sql = "SELECT * FROM IPtoCountry WHERE IP_FROM <= $IP AND IP_TO >= $IP LIMIT 1";
$result = mysql_query($sql);

if (mysql_num_rows($result) == 0)
{
return "nicht bekannt";
}
else
{
$row = mysql_fetch_array($result);
return $row['Name'];
}
}

$ip = getenv("REMOTE_ADDR");
echo "Ihre IP ist: " . $ip . "
";
echo "Ihr Standort: " . IPtoCountry($ip);
?>

Die Variablen $db_host, $db_username, $db_password und $db_name müssen natürlich auf die richtigen Werte gesetzt werden. Wer das ganze in echt sehen möchte kann dies unter http://myip.jerilynn.net/ tun.

PHP und AJAX

Da ich mich ein bisschen mit PHP und AJAX beschäftigt habe und ich nach ein paar Codebeispielen gesucht habe bin ich auf die Seite http://www.w3schools.com/ bzw. auf dessen PHP Bereich welcher unter http://www.w3schools.com/PHP/ zu gestoßen. Die Seite bietet viele interessante Beispielcodes. Auf alle Fälle lohnenswert :)

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Ajax_(Programmierung)
http://de.wikibooks.org/wiki/Websiteentwicklung:_PHP

Visual Studio + PHP

Da ich in letzer Zeit ein bisschen PHP Entwicklung betrieben habe, aber das Visual Studio nicht verlassen wollte, suchte ich nach einem Add-In für dasselbe. Und wie das so ist wenn man etwas sucht findet man auch meist etwas :) Fündig geworden bin ich dann auf der Seite http://vsphp.de/. Dort gibt es die gleichnamige IDE VS.Php welche als Standalone oder als Add-In für Visual Studio bezogen werden kann. Die für mich wichtigen Features sind dabei:

– der Debugger
– Projekte auf entfernten Servern

Vom Preis her ist das ganze auch recht angenehm. Also warum nicht :)

UDP Portscanning unter PHP

Vor einigen Tagen wollte ich ein PHP Skript schreiben welches nachschaut ob auf einer bestimmten IP Adresse auf einem bestimmten Port ein Dienst läuft. Dazu wollte ich folgendes Skript benutzen:

function check_server($ip, $port) {
  $fp = fsockopen ($ip, $port, $errno, $errstr, 10);
  $result = "";

  if($fp == false)
  {
   $result = "offline";
  }
  else
  {
   $result = "online";
  }

  fclose($fp);

  return $result;
}

$gameserver= check_server("udp://192.168.0.13", 9604);
$accountserver= check_server("udp://192.168.0.13", 9601);

echo "Gameserver: ",$gameserver,"
"; echo "Accountserver: ",$accountserver,"
";

Das Problem an der Sache ist das bei UDP immer true zurückkommt da das ganze ja ein verbindungsloses Protokoll ist. Bei TCP funktioniert diese Herangehensweise prima, bei UDP kann man es vergessen… Ganz interessant zu diesem Thema ist die Seite http://www.sitepoint.com/article/udp-portscanning-php/. Mal schauen ob sich das Problem lösen läßt.

PHP Eastereggs

In PHP gibt es einige Eastereggs. Diese Eastereggs erreicht man indem man einen der folgenden Parameter als Parameter an eine PHP Datei anhängt:

?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 – PHP Logo
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 – Credits
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 – Zend Logo
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 – PHP Logo

Bei letzerem gab es früher Bilder von Hunden, naja andere Länder andere Sitten :)

Weitere Informationen gibts es unter:
http://shiflett.org/blog/2006/feb/php-easter-eggs
http://meisterluk.me.funpic.de/blog/2007/04/how-to-get-the-php-version-number-easteregg/