der henry: vergleiche 2 ip adressen gleiches subnet

Hallo,

ich möchte die $ENV(SERVERADDR) und die $ENV(REMOTE_ADDR) vergleichen ob diese im selben subnet (intranet) sind.

Hierzu suche ich einen "Einzeiler" mit dem ich 2 ip (ipv4) Adressen vergleichen kann.

Mit split und array vergleich ist nicht schön.
Ich dachte an regex, oder noch besser.

gruss
        der henry

  1. Tach!

    ich möchte die $ENV(SERVERADDR) und die $ENV(REMOTE_ADDR) vergleichen ob diese im selben subnet (intranet) sind.

    Das ist heutzutage aus IP-Adressen allein nicht mehr möglich. Das ging vielleicht, als man Netze noch klassenbasiert aufgebaut hat, aber diese Zeiten sind längst vorbei. Du musst die Netzmaske der beiden beteiligten wissen. Die kann aber der Webserver nicht ermitteln.

    dedlfix.

    1. Hallo,

      so exklusive brauche ich es nicht, solche Netz habe ich gar nicht.

      z.B.

      Intranet 192.168.0.1-254

      Wenn nun eine Anfrage von 192.168.0.x kommt, bedeutet das für mich... gleiches Subnet
      alle anderen Anfragen sind bei "mir" "ausserhalb" des Subnet.

      Aber für diesen Fall müsste es doch so gehen, oder denke ich zu simple.

      der henry

      1. Hallo,

        Was hast Du denn mit dem Ergebnis vor, was ist der Sinn und Zweck?

        Per Webinterface können gewisse Einstellungen an Maschinen (mit Webserver) vorgenommen werden (Internet/Intranet)

        Nun ist gedacht das bei einem Zugriff aus dem selben subnet der Maschine (Webserver) kein Passwort zum bestätigen eingegeben werden muss. Einstellungen ausserhalb des subnet sollen wie gewohnt einen usernamen und passwort eingeben.

        gruss
             der henry

        1. hi,

          Nun ist gedacht das bei einem Zugriff aus dem selben subnet der Maschine (Webserver) kein Passwort zum bestätigen eingegeben werden muss. Einstellungen ausserhalb des subnet sollen wie gewohnt einen usernamen und passwort eingeben.

          Kannste auch übern Proxy regeln.

          function FindProxyForURL(url, host)

          gibt entweder einen Proxy zurück wo Credentials will oder macht einen return DIRECT.

          Horst

          1. Hallo

            Kannste auch übern Proxy regeln.

            function FindProxyForURL(url, host)

            gibt entweder einen Proxy zurück wo Credentials will oder macht einen return DIRECT.

            Das klingt gut, aber ich habe absolut keine Ahnung wie du das meinst.
            Wo liegt die Funktion FindProxyForURL... das ist doch keine Standard perl Funktion. Bitte hilf mir kurz auf die Sprünge.

            Gruß
                   Henry

            1. hi,

              Das klingt gut, aber ich habe absolut keine Ahnung wie du das meinst.
              Wo liegt die Funktion FindProxyForURL... das ist doch keine Standard perl Funktion.

              Sorry, klar, ist nicht Perl, die gehört zum wpad-Standard, Beispiel hier.

              Bitte hilf mir kurz auf die Sprünge.

              Ansonsten, ich würds mit wpad lösen. RFC 1819 solltest Du Dir auch mal anschauen. Es gibt sie, die privaten Netze und wenn ordentlich NAT gemacht wird, wenn nicht das halbe Internet ungenattet durch den Campus geroutet wird, ja dann ist ein Request mit einer IP nach RFC 1819, egal mit welcher Subnetzmaske, ohnehin aus dem Intranet denn RFC-1819-IPs werden draußen sowieso nicht geroutet.

              Horst Natter

              1. Hallo,
                so wie ich diese Funktion lese, brauche ich zum testen der URL/IP eine Internetverbindung.
                Das ist unmöglich. Bei Ausfall der Internetverbindung würde meine Funktion nicht mehr funktionieren.

                Gruß
                     Henry

        2. Moin!

          Per Webinterface können gewisse Einstellungen an Maschinen (mit Webserver) vorgenommen werden (Internet/Intranet)

          Nun ist gedacht das bei einem Zugriff aus dem selben subnet der Maschine (Webserver) kein Passwort zum bestätigen eingegeben werden muss. Einstellungen ausserhalb des subnet sollen wie gewohnt einen usernamen und passwort eingeben.

          Eine ganz schlechte Idee. Dann kann jeder, der seinen Rechner ans WLAN oder LAN anstöpselt, an den Einstellungen rumspielen.

          Passworte haben schon ihren Sinn. Entweder darf jeder die Einstellungen ändern, dann muss er dazu aber nicht ins lokale Netz, oder nur die Berechtigten dürfen das - die nutzen dafür aber ihren Useraccount, und zwar immer.

          - Sven Rautenberg

      2. Tach!

        Intranet 192.168.0.1-254
        Wenn nun eine Anfrage von 192.168.0.x kommt, bedeutet das für mich... gleiches Subnet

        Wenn du weißt, welche Netzmaske für dein Netz gilt, dann wird es einfach, aber du musst diese Information selbst bereitstellen. Nimm dann die Bytes der IP und verknüpfe sie bitweise And mit den Bytes der Netzmaske. Das machst du mit der anderen IP und deiner Netzmaske auch und vergleichst dann die beiden Ergebnisse miteinander. Einfach nur die Anfänge und noch dazu byteweise zu vergleichen, geht nur bei den drei Sonderfällen mit den Netzmasken 255.0.0.0, 255.255.0.0 und 255.255.255.0.

        dedlfix.

  2. Hi,

    deine Netze (Campus) müssen serverseitig hinterlegt sein, dann kannst Du das abfragen. Hinterlegt sein heißt, es gibt je Netz einen Range und das ist auch nur ein numerischer Bereich.

    Was hast Du denn mit dem Ergebnis vor, was ist der Sinn und Zweck? Sollte der darin bestehen, einen bestimmten Proxy einzuschalten, würde ich das über den WPAD-Standard lösen (proxy.pac), es ist letztendlich dasselbe Prinzip der Hinterlegung, d.h., Deine Netze sind in der proxy.pac hinterlegt und der Browser kriegt den Proxy automatisch zugewiesen.

    Horst

  3. use Net::CIDR::Set;  
    my $set = Net::CIDR::Set->new('192.168.0.1-192.168.0.254');  
    $set->contains('8.8.8.8');       # false  
    $set->contains('192.168.0.123'); # true