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

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. 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

    1. 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?

      1. 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

        1. 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

          1. 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.

            1. 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

              1. 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.

                1. 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

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

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

  2. 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

    1. 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

      1. 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