Andreas-Lindig: IP-Adresse ermitteln

Hallo Forum,

wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?

Ich habe nur Funktionen gefunden, die die IP aufgrund einer Adresse ermitteln, aber die muß ich ja erstmal wissen.

vielen Dank und Gruß,
Andreas

--
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
http://was-ist-das.andreas-lindig.de
  1. Hallo,

    wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?

    $ip = getenv('REMOTE_ADDR');
    oder
    $ip = $_SERVER['REMOTE_ADDR'];

    Siehe auch ein paar Threads weiter unten: [pref:t=74115&m=427195]

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. Hallo Thomas,

      vielen Dank, hab ich mal wieder nicht aufmerksam genug mitgelesen ;)

      Gruß, Andreas

      --
      <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
      http://was-ist-das.andreas-lindig.de
  2. Moin Andreas,

    wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?

    Ich nutze diese Version, die IP sollte in $realip stehen:

    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' );
            }
       }

    Grüße
    Mike

    1. Hallo Mike,

      also bei mir funktioniert es mit einem einfachen '$_SERVER["REMOTE_ADDR"]'. Hat es einen bestimmten Grund, daß Du so viel abfragst?

      Gruß, Andreas

      --
      <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
      http://was-ist-das.andreas-lindig.de
      1. hi,

        also bei mir funktioniert es mit einem einfachen '$_SERVER["REMOTE_ADDR"]'. Hat es einen bestimmten Grund, daß Du so viel abfragst?

        es "funktioniert" bei dir in dem sinne, dass du eine IP-adresse angezeigt bekommst.
        ob diese aber auch wirklich die IP des client-rechners ist, kannst du nicht sagen.

        wenn z.b. ein proxy dazwischen hängt, bekommst du vielleicht die IP des proxies stattdessen.
        oder aber der proxy ist sehr freundlich eingestellt, dann bekommst du neben der IP des proxies als REMOTE_ADDR auch noch die eigentliche client-IP unter der kennung HTTP_X_FORWARDED_FOR oder HTTP_CLIENT_IP mitgeteilt.
        diese information kann der proxy in zusätzlichen HTTP-headern mitliefern, muss er aber nicht.

        der rest aus mikes script dient dann nochmal extra zur unterscheidung, ob der wert jetzt aus dem superglobalen array $_SERVER geholt werden soll, oder per funktion getenv().
        dies dient dazu, unterschiedliche PHP-versionen zu berücksichtigen - wenn du also weisst, dass du nur für (eine) aktuelle PHP-version(en) programmierst, kannst du dir diese abfrage sparen, und nur den zugriff üer $_SERVER verwenden.

        gruss,
        wahsaga

        1. Hallo wahsaga,

          vielen Dank für die Ausführungen. Also ich benutze, in diesem Falle die IP, um Mehrfachabsendungen eines Formulars innerhalb kurzer Zeit zu verhindern. Ich speichere also die IP und den dazugehörigen Timestamp. Wenn mir jetzt, trotz Script von Mike, der Proxy nur seine IP übermittelt, kann es doch _theoretisch_ so sein, daß zwei verschiedene Clients über den selben Proxy kurz nacheinander kommen und der zweite dann gesperrt wird oder?

          Ich wollte das nicht mit einer Session machen, weil die Nummer ja genauso bzw. leichter manipulierbar ist von einem, der wirklich übles im Sinn hat.

          Gruß, Andreas

          --
          <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
          http://was-ist-das.andreas-lindig.de
          1. hi,

            Wenn mir jetzt, trotz Script von Mike, der Proxy nur seine IP übermittelt, kann es doch _theoretisch_ so sein, daß zwei verschiedene Clients über den selben Proxy kurz nacheinander kommen und der zweite dann gesperrt wird oder?

            ja, durchaus.
            du musst also abschätzen, wie hoch dieses "risiko" sein dürfte, und ob du mit ein paar dadurch verärgerten besuchern leben kannst.

            dabei solltest du beachten, dass z.b. nicht nur vom arbeitsplatz aus surfende leute oftmals hinter einem proxy sitzen, sondern auch manche ISP bei dial-up-verbindungen zwangsproxies einsetzen, über die die requests dann laufen ...

            Ich wollte das nicht mit einer Session machen, weil die Nummer ja genauso bzw. leichter manipulierbar ist von einem, der wirklich übles im Sinn hat.

            na ja, wenn dich jemand wirklich ärgern will, ist die IP-sperre eigentlich auch eher witzlos.
            trenne ich meine verbindung, und wähle mich anschliessend neu ein, gibt mir mein provider mit allergrösster wahrscheinlichkeit eine anders lautende IP aus seinem fundus an dynamischen IPs.

            und selbst wenn nicht, dann suche ich mir irgendein scriptkiddie-tool, welches das fälschen der IP-adresse ermöglicht (sog. "IP-spoofing IIRC). dann kommen die antworten deines servers zwar nicht mehr bei mir an, aber so what? mir ging's ja nur um den POST-request zum erstellen eines neuen eintrages ...

            gruss,
            wahsaga

            1. na ja, wenn dich jemand wirklich ärgern will, ist die IP-sperre eigentlich auch eher witzlos.
              trenne ich meine verbindung, und wähle mich anschliessend neu ein, gibt mir mein provider mit allergrösster wahrscheinlichkeit eine anders lautende IP aus seinem fundus an dynamischen IPs.

              das ist mir schon bekannt, aber es geht ja auch nur um eine Zeitsperre - in meinem Beispiel 3 Minuten, dann kann auch die gleiche IP wieder posten. Nur daß einer nicht einfach immer wieder daraufklickt. Ich gehe davon aus, daß keiner Lust hat für jedes Posting sich neu einzuwählen. Dann kann er auch 3 Minuten warten, zumal die Neueinwahl immer extra kostet - bei einem by-call-Anbieter jedenfalls.

              und selbst wenn nicht, dann suche ich mir irgendein scriptkiddie-tool, welches das fälschen der IP-adresse ermöglicht (sog. "IP-spoofing IIRC).

              Hast Du einen anderen Vorschlag?

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              http://was-ist-das.andreas-lindig.de