PHP: IP-Adresse eines Besuchers ermitteln

Es scheint ganz einfach zu sein: Mit welcher IP-Adresse jemand arbeitet, bekommt man über den Ausdruck $_SERVER[‚REMOTE_ADDR‘] heraus.

Das stimmt meistens – aber eben nicht immer. Verwendet der Besucher einen Proxy-Server, dann liefert diese Systemvariable die IP-Adresse des Servers. In diesem Fall sendet der Proxy-Server allerdings auch die Adresse des Benutzer-Computers mit. Sie ist dann in der Variablen $_SERVER[‚HTTP_X_FORWARDED_FOR‘] abzulesen.

Um die IP-Adresse zu ermitteln, könnte man beispielsweise untenstehenden Code verwenden.

Aber Achtung: Um den Benutzer eindeutig zu identifizieren, eignet sich die IP-Adresse prinzipiell nicht. Denn wenn mehrere Benutzer beispielsweise über einen DSL-Router auf Ihre Webseite zugreifen, erscheinen sie beide mit der Adresse, die der Internet-Provider dem Router bei der Einwahl gibt. Im Fall der Proxy-Benutzung wird obiger Code private Adressen ermitteln, also etwa der Form 192.168.x.x. Nachdem zwei ganz verschiedene Besucher in verschiedenen LANs dieselbe private IP-Adresse haben können, ist auch in diesem Fall eine Verwechslung nicht ausgeschlossen. 




if (! isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

$client_ip = $_SERVER['REMOTE_ADDR'];

}

else {

$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

}

 

Ähnliche Beiträge

6 Gedanken zu “PHP: IP-Adresse eines Besuchers ermitteln

  1. Hi,

    Bei dem obigen Code fehlt eine Klammer!

    if (! isset($_SERVER[‚HTTP_X_FORWARDED_FOR‘]) {

    Muss so aussehen:

    if (! isset($_SERVER[‚HTTP_X_FORWARDED_FOR‘])) {

  2. Wie sollte ein Proxy die private IP mitliefern? Das halte ich für ziemlichen Unsinn. Es sei denn Du redest vom Routing im LAN und dann dürfte der Proxy doch ebenfalls ne private IP besitzen..

  3. Hallo,

    kann es sein, dass vor kurzem ein Update in php gemacht wurde, welches $_SERVER[‚HTTP_CLIENT_IP‘] und $_SERVER[‚HTTP_X_FORWARDED_FOR‘] rausgeschmissen hat? Oder haben die da irgendwo Mist gebaut? Jedenfalls funktioniert das nirgendwo, weder auf meinem Lokalserver, noch bei meinem Provider (wir benutzen beide bereits php 5.3). Ich halte auch für möglich, dass die Funktionen von ‚HTTP_X_FORWARDED_FOR‘ auf ‚HTTP_REMOTE_ADDR‘ übertragen wurden, denn das funktioniert. Wenn man in Zukunft aber nur noch ‚HTTP_REMOTE_ADDR‘ benutzen muss, um die userip auch über einen proxy hinweg ermitteln zu können, kann ich das derzeit gar nicht überprüfen, weil dann alle Befehle zur ip-Ermittlung nur noch über ‚HTTP_REMOTE_ADDR‘ laufen und ich keinen Vergleich habe. (Im Prinzip ist das auch sehr sinnvoll, denn wenn ein Administrator die ip ermitteln will, fragt er eigentlich nie nach der ip des proxys sondern immer nach der des users. Nur mit youtube über proxy ist’s dann essig, jedenfalls wenn man einen seriösen proxy benutzen will. ^^
    Aber das soll jetzt nicht meine Sorge sein.)
    Hat jemand Infos, wieso $_SERVER[‚HTTP_CLIENT_IP‘] und $_SERVER[‚HTTP_X_FOWARDED_FOR‘] in php 5.3 plötzlich nicht mehr funktionieren und welche Alternativen man dafür hat? Ist das wirklich $_SERVER[‚HTTP_REMOTE_ADDR‘]?
    Müsste ein ziemlich aktuelles Problem sein, ich finde dazu nur sehr wenig im Netz und wenn mal jemand eine Frage stellt, dann bekommt er Tips, die darauf hinauslaufen, die Variable zu leeren, sodass nachher einfach keine Fehlermeldung mehr kommt, aber die ip hat er dann auch nicht. (Scheinbar fallen da auch viele drauf rein.)
    Besten Dank schonmal im Vorraus.

  4. das funktioniert nicht ich habe neue inditete4t verwenden geklickt und nochmal die seite wie ist meine ip aktualiesiert und da kommt noch immer meine voherige. was soll ich machen?

  5. Auch wenn sich hier der eine oder andere 200%-ige an einer fehlenden Klammer hochzieht oder sich verbal vergreifen : So sollten Tips aussehen ! Danke !

Kommentare sind geschlossen.