Raul Baumgarten: IP Adresse und Privider auswerten und was ist mit einem Proxi?

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?

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

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
    1. 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

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

        --
        Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
      2. 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

  2. Hallo,

    Ausgabe:
    p5082B878.dip.t-dialin.net

    Die 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

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?