IP Adresse und Privider auswerten und was ist mit einem Proxi?
Raul Baumgarten
- php
0 Mike0 Raul0 Mike0 Sven Rautenberg
0 Erwin
Hallo,
ich habe folgendes Script:
echo $remotehost = gethostbyaddr(getenv('REMOTE_ADDR'));
echo $remotehost_proxy = gethostbyaddr(getenv('HTTP_X_FORWARDED_FOR'));
Ausgabe:
p5082B878.dip.t-dialin.net
Die Frage ist nur wieso die IP falsch dargstellt wird?
Moin Raul,
echo $remotehost = gethostbyaddr(getenv('REMOTE_ADDR'));
echo $remotehost_proxy = gethostbyaddr(getenv
dieses Konstrukt ist etwas "sicherer":
if (isSet($_SERVER))
{
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif
(isSet($_SERVER["HTTP_CLIENT_IP"]))
{
$realip = $_SERVER["HTTP_CLIENT_IP"];
}
else
{
$realip = $_SERVER["REMOTE_ADDR"];
}
}
else
{
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) )
{
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
}
elseif
( getenv( 'HTTP_CLIENT_IP' ) )
{
$realip = getenv( 'HTTP_CLIENT_IP' );
}
else
{
$realip = getenv( 'REMOTE_ADDR' );
}
}
Gruß
Mike
Hi
ja super!!!
HTTP_CLIENT_IP das ist aber auch die IP Adresse ich ich vom Provider zugewiesen bekomme?
Aber wieso hast Du da soviele Abfragen reingebaut geben die Provider soviele Unterschiedliche Angaben zurück?
Ich dachte es reicht der IP und gegebenfalls nach dem Proxy zu fragen?
Und wieso fragst Du if (isSet($_SERVER)) ab? Ich dachte es wäre immer $_SERVER wann trifft das denn nicht zu?
Gruß Raul
Moin Raul,
Und wieso fragst Du if (isSet($_SERVER)) ab? Ich dachte es wäre immer $_SERVER wann trifft das denn nicht zu?
<schäm> diesen Code habe ich von http://www.php.net/manual/de/</schäm>
Ich habe ihn nie ausgewertet, sondern nur genutzt. Die Erklärung dazu erschien mir damals plausibel. Leider kann ich sie nicht mehr wieder geben.
Gruß
Mike
Moin!
Aber wieso hast Du da soviele Abfragen reingebaut geben die Provider soviele Unterschiedliche Angaben zurück?
Du kriegst sowieso nicht die tatsächliche IP des Anfragers, wenn der oder sein Proxy es nicht will.
Ich dachte es reicht der IP und gegebenfalls nach dem Proxy zu fragen?
Richtig. Diese ganzen Abfragen sorgen dafür, nach besten Möglichkeiten die wahre IP ausfindig zu machen.
Und wieso fragst Du if (isSet($_SERVER)) ab? Ich dachte es wäre immer $_SERVER wann trifft das denn nicht zu?
Es ist guter Programmierstil, das Vorhandensein vorher nicht definierter Variablen per isset() abzufragen und sich auf deren Vorhandensein erst im Erfolgsfall zu verlassen, weil ansonsten PHP soviele unnötige Notice-Meldungen auswirft, die man ebenfalls nach Möglichkeit vermeiden sollte (eben guter Programmierstil - außerdem hilft das Vermeiden von Notices dabei, dass man potentielle Sicherheitslücken und andere vielleicht problematische Programmzustände erkennen kann - kurz: Sich Notices ausgeben zu lassen, um diese dann loszuwerden, hilft enorm beim Debugging).
- Sven Rautenberg
Hallo,
Ausgabe:
p5082B878.dip.t-dialin.netDie Frage ist nur wieso die IP falsch dargstellt wird?
Du benutzt wahrscheinlich nicht das passende Werkzeug.
Mit ping hast du es:
C:>ping p5082B878.dip.t-dialin.net
PING wird ausgeführt für p5082B878.dip.t-dialin.net [80.130.184.120] mit 32 Byte
s Daten:
Antwort von 80.130.184.120: Bytes=32 Zeit=127ms TTL=59
Antwort von 80.130.184.120: Bytes=32 Zeit=128ms TTL=59
Antwort von 80.130.184.120: Bytes=32 Zeit=130ms TTL=59
Antwort von 80.130.184.120: Bytes=32 Zeit=126ms TTL=59
Ping-Statistik für 80.130.184.120:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 126ms, Maximum = 130ms, Mittelwert = 127ms
...sofern ping einen Nameserver verwendet der sich auskennt *g
/Erwin