Sascha Müller: IP-Adressen vergleichen

Hallo zusammen,

ich habe in meinem Gästebuch einen IP-Blocker eingebaut. Dazu wird die IP-Adresse des Eintragers zusammen mit einem Timestamp in einer Logdatei auf dem Server gespeichert. Nun stellte ich heute durch Zufall fest, dass die Abfrage auf Gleichheit der IP-Adresse nicht funktioniert. Folgende Konstellation war gegeben:

Meine IP-Adresse : 80.128.115.70
Andere IP-Adresse: 80.128.178.50

Der Eintrag war von Andere nicht möglich, obwohl eine andere IP-Adresse vorhanden ist. Ich frage auf Gleichheit wie folgt ab:

if $ip == $saved_ip

Dabei vergleicht er scheinbar nur die ersten zwei Bytes der IP-Adresse, da der Punkt als Dezimaltrenner gesehen wird, und es da logischerweise auch nur einen gibt, da hat er Recht. Ein Vergleich mit "eq" erzeigt gar keinen Erfolg. Die Überlegung von mir, die Punkte aus dem String zu entfernen, ist auch nicht gut, man stelle sich folgende IP-Adressen vor:

80.128.112.10
80.128.11.210

Da käme in beiden Fällen folgende Zahl heraus:
8012811210

Wie kann ich nun die IP-Adressen vergleichen, so dass das immer funktioniert?

Vielen Dank für alle Tipps.

MfG
Sascha Müller

  1. Hallo

    Der Eintrag war von Andere nicht möglich, obwohl eine andere IP-Adresse vorhanden ist. Ich frage auf Gleichheit wie folgt ab:
    if $ip == $saved_ip

    Bei Stringvergleichen ist der Vergleichsoperator definitiv: eq
    Also:
    if ($ip eq $saved_ip)

    Larry Wall gibt für if explizit die Syntax
      if (EXPR)
    an.

    Du solltest also Klammern verwenden.

    Wie kann ich nun die IP-Adressen vergleichen, so dass das immer funktioniert?

    s.o.

    Gruss,

    Vinzenz

    1. Hallo Vinzenz,

      ja, die Klammern verwende ich schon. ;-) Klar ... Und das mit eq habe ich auch schon funktioniert, da bekommt er als Antwort immer false, auch wenn die IP-Adressen gleich sind. Er sieht die zwei Werte also schon irgendwie als Zahl an ... Komisch, komisch, aber so kann's ja auch net bleiben ...
      Hat noch jemand eine Idee?

      MfG
      Sascha Müller

      1. Hi,

        ja, die Klammern verwende ich schon. ;-) Klar ... Und das mit eq habe ich auch schon funktioniert, da bekommt er als Antwort immer false, auch wenn die IP-Adressen gleich sind. Er sieht die zwei Werte also schon irgendwie als Zahl an ... Komisch, komisch, aber so kann's ja auch net bleiben ...
        Hat noch jemand eine Idee?

        Also
        my $ip1 = "80.128.11.210";
        my $ip2 = "80.128.112.10";
        my $ip3 = $ip1;

        if ($ip1 eq $ip2)
        {
           print "true\n";
        }
        else
        {
           print "false\n";
        }
        if ($ip1 eq $ip3)
        {
           print "true\n";
        }
        else
        {
           print "false\n";
        }

        spuckt bei mir
        false
        true
        aus. Wie zu erwarten war, die ersten beiden ips sind unterschiedlich, die erste und die dritte sind identisch.

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.