Forum Doku Wiki Blog

Forumsarchiv 2010, September
Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

archivierte Beiträge lesen

  1. (PHP) Kein oder falsche ip bei $_SERVER['REMOTE_ADDR'] von Ahnungsloser, 20. 09. 2010, 13:08

Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

Der folgende Beitrag wurde am 20. 09. 2010, 13:08 Uhr von Ahnungsloser veröffentlicht.

Also ich wollte ne eingelesen ip mittels ip2long und sprintf in ein unsigned
int(10) konvertieren und speichern, aber wenn ich die ip mit
$_SERVER['REMOTE_ADDR'] auslese und eine Kontrollausgabe mache bekomme ich nur
 folgende Zeichenfolge anstatt eine ip ---> ::1

Das ganze läuft derzeit über xamp, also quasi ein localhost, müsste denn dann
 nicht 127.0.0.l da stehen???

Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

Der folgende Beitrag wurde am 20. 09. 2010, 13:21 Uhr von flowh veröffentlicht.

Hallo Ahnungsloser.
> Also ich wollte ne eingelesen ip mittels ip2long und sprintf in ein unsigned
> int(10) konvertieren und speichern, aber wenn ich die ip mit
> $_SERVER['REMOTE_ADDR'] auslese und eine Kontrollausgabe mache bekomme ich nur
> folgende Zeichenfolge anstatt eine ip ---> ::1
>
> Das ganze läuft derzeit über xamp, also quasi ein localhost, müsste denn dann
> nicht 127.0.0.l da stehen???

::1 ist die IPv6-Loopback-Adresse, analog zu 127.0.0.1 für IPv4.

Anscheinend verbindest du dich per IPv6 mit dem Webserver.

Servus,
Flo

IPv4 und IPv6 unterscheiden

Der folgende Beitrag wurde am 20. 09. 2010, 13:27 Uhr von Ahnungsloser veröffentlicht.

super ich hab xamp mal umgestellt von auto ipv4/ipv6 auf ipv4
gibts da irgendwie ne möglichkeit zu unterscheiden ob ne ipv6 oder ipv4 zurückgegeben wird?
Vor Allem, dann würde mir ja der unsigned int(10) auch nichtmehr reichen für die speicherung der ip bzw ip2long würde dann auch nicht mehr funktionieren, oder?

IPv4 und IPv6 unterscheiden

Der folgende Beitrag wurde am 20. 09. 2010, 13:34 Uhr von fastix® veröffentlicht.

Moin!


> gibts da irgendwie ne möglichkeit zu unterscheiden ob ne ipv6 oder ipv4 zurückgegeben wird?

Das ist doch schon optisch offensichtlich: Eine IP-V4-Adresse enthält unter keinen Umständen einen DOPPELPUNKT. Die IP-V6-Adresse hingegen stets.

if (false===strrpos($_SERVER['REMOTE_HOST'], ":") {
   print "Das ist eine IP-V4-Adresse.";
} else {
   print "Das ist eine IP-V4-Adresse.";
}


MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 13:36 Uhr von fastix® veröffentlicht.

Moin!


if (false===strrpos($_SERVER['REMOTE_ADDR'], ":") {
   print "Das ist eine IP-V4-Adresse.";
} else {
   print "Das ist eine IP-V6-Adresse.";
}

Und ja. Die Idee, diese Adresse in eine Nummer umzuwandeln ist nur begrenzt eine gute. Was willst Du damit bezwecken?


MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 13:41 Uhr von suit veröffentlicht.

> if (false===strrpos($_SERVER['REMOTE_ADDR'], ":") {
>    print "Das ist eine IP-V4-Adresse.";
> } else {
>    print "Das ist eine IP-V6-Adresse.";
> }

Ich würds mit filter_var() versuchen - in diesem Kontext (wenn man als Quelle REMOTE_ADDR verwendet) ist das zwar OK, aber allgemein mit einer derart simplen Prüfung arbeiten ist ggf. etwas fahrlässig.

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 15:29 Uhr von fastix® veröffentlicht.

Moin!

> Ich würds mit filter_var() versuchen - in diesem Kontext (wenn man als Quelle REMOTE_ADDR verwendet) ist das zwar OK, aber allgemein mit einer derart simplen Prüfung arbeiten ist ggf. etwas fahrlässig.

Natürlich. Würde ich ganz allgemein eine Klasse "ipaddr" schreiben, deren Objekte IP-Adressen aufnehmen, dann würde ich schon schauen, dass die darin enthaltene Methode setIP(str) andere Verifikationen vornimmt und dass ich mit der Methode "getTyp()" oder der Objekt-Variable $typ auch nur dann eine "4" oder "6" und kein false herausbekomme, wenn dieses nach allem erdenklichen Dafür- und Dagegenhalten auch eine solche gültige IP-Adresse ist.

Das beschreibt dann auch gleich ein Problem der OOP: Performance. Ich führe sehr oft einen Haufen Prüfungen durch, derer es im tatsächlichen Kontext nicht bedarf, weil es "einfacher" (Wozu habe ich die Dokumentation der Klassen meines Kollegen gelesen) ist etwas wie

ipaddr $ip=&new ipaddr();
$ip->setIP($_SERVER['REMOTE_ADDR']);
print " Es handelt sich um eine IP-V" . $ip->typ . "-Adresse.";


zu notieren. Das ggf. schon die Methode setIP() einen Resolver aufruft um eine reverse Bestimmung des Hostnamens zu versuchen und das Ergebnis in der Klassenvariable hostname abzulegen (was auch mal mehrere Sekunden dauern kann) weiß ich nicht unbedingt...

Damit sind wir bei einem weiteren Problem: Die Klasse (und damit das Objekt) ist für mich eine Black-Box, jedenfalls so lange ich nicht weiß, was diese wirklich macht  - ich weiß nur was diese machen soll, genau das steht ja in der (hoffentlich verfügbaren) Dokumentation. Aber das gehört in einen ganz anderen Thread.



MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 15:51 Uhr von suit veröffentlicht.

Man muss es nicht übertreiben, man kann prozedural arbeiten und trotzdem fertige Funktionen zur Prüfung bestimmter Zeichenketten verwenden ohne gleich für alles eigene Klassen zu schreiben.

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 15:57 Uhr von fastix® veröffentlicht.

Moin!

> Man muss es nicht übertreiben, man kann prozedural arbeiten

Ja. Aber dann kenne ich doch auch den Kontext. Vorliegend weiß ich, ich bekomme eine IP-Adresse. Ich habe ja auch nicht grundlos:

if (false===strrpos($_SERVER['REMOTE_ADDR'], ":") {

notiert und nicht etwa: if (false===strrpos($str, ":") {

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

Korrektur und Rückfrage

Der folgende Beitrag wurde am 20. 09. 2010, 16:54 Uhr von suit veröffentlicht.

> Ja. Aber dann kenne ich doch auch den Kontext.

Darum schrieb ich ja "in diesem Kontext [...] ist das [...] OK" :)

Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

Der folgende Beitrag wurde am 20. 09. 2010, 13:27 Uhr von fastix® veröffentlicht.

Moin!

> Das ganze läuft derzeit über xamp, also quasi ein localhost, müsste denn dann
> nicht 127.0.0.l da stehen???

"::1" ist die IP-V6 Adresse für den localhost.

Wie rufst Du Die denn Seite denn ab? Etwa "http://localhost/"?

Was steht denn zuletzt (!) in der hosts-Date für localhost?
Was passiert, wenn Du die Seite unter Angabe einer IP-V4-Adresse oder eines hostnamens abrufst, für den nur eine IP-V4 Adresse geliefert wird?



MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

Der folgende Beitrag wurde am 20. 09. 2010, 13:35 Uhr von Ahnungsloser veröffentlicht.



ja ich rufe die seite über localhost/page.php auf

hab es jetzt mal mit 127.0.0.1 probiert jetzt bekomm ich auch die ipv4 übergeben anstatt die andere

Kein oder falsche ip bei $_SERVER['REMOTE_ADDR']

Der folgende Beitrag wurde am 20. 09. 2010, 13:38 Uhr von fastix® veröffentlicht.

Moin!

> hab es jetzt mal mit 127.0.0.1 probiert jetzt bekomm ich auch die ipv4 übergeben anstatt die andere

Wenn Dir dieses Verhalten nicht gefällt, weil einzelne Anwendungen nicht IP-V6-fähig sind, aber den localhost brauchen, dann sorge dafür, dass in der hosts-Datei auf Deinem System der Eintrag für IP-V4, also

127.0.0.1 localhost

ganz unten steht.

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix

--
Des fastix kleines CMS

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4