mermshaus: Array-Work

Beitrag lesen

Spontane Idee: So ein Array…

$a = array(
    '192.168.11.12/24',
    '62.10.11.12/32',
    '128.10.11.12/8',
    '96.50.51.52/16'
);

…in diese Form überführen…

$a2 = array(
    '192.168.11' => true,
    '62.10.11.12' => true,
    '128' => true,
    '96.50' => true
};

…und dann für jeden Eintrag aus $b in der Form w.x.y.z prüfen, ob w, w.x, w.x.y oder w.x.y.z als Index in $a2 existieren (isset).

Mal zusammengehackt:

<?php

$a = array(
    '192.168.11.12/24',
    '62.10.11.12/32',
    '128.10.11.12/8',
    '96.50.51.52/16'
);

$b = array(
    '192.168.128.0',   // kein Treffer
    '192.168.11.255',  // Treffer
    '62.10.11.255',    // kein Treffer
    '62.10.11.12',     // Treffer
    '128.255.255.255', // Treffer
    '129.255.255.255', // kein Treffer
    '96.50.255.255',   // Treffer
    '97.50.51.52'      // kein Treffer
);

function f(array $a)
{
    $new = array();

    foreach ($a as $item) {
        list($ipv4, $cidr) = explode('/', $item);
        $index = implode('.', array_slice(explode('.', $ipv4), 0, $cidr >> 3));
        $new[$index] = true;
    }

    return $new;
}

function g(array $a2, array $b)
{
    foreach ($b as $item) {
        $parts = explode('.', $item);
        $tmp = '';

        for ($i = 0; $i <= 3; $i++) {
            $tmp .= (('' !== $tmp) ? '.' : '') . $parts[$i];

            if (isset($a2[$tmp])) {
                echo $item . '- Treffer' . "\n";
                continue 2;
            }
        }

        echo $item . ' - kein Treffer' . "\n";
    }
}

$a2 = f($a);
g($a2, $b);

Demo

0 74

Array-Work

TS
  • php
  1. 1
    Christian Kruse
    1. 0

      geschachtelte Arrays, IP-Listen aufeinander abgleichen, LÖSUNG und Dank

      TS
  2. 1
    mermshaus
    1. 0
      dedlfix
      1. 0
        mermshaus
        1. 0
          dedlfix
          1. 0
            mermshaus
            1. 0
              dedlfix
              1. 0
                mermshaus
                1. 0
                  Rolf b
                  1. 0
                    mermshaus
                    1. 0
                      Rolf b
                      1. 0
                        mermshaus
                        1. 0
                          TS
                          • netzwerk
                          • routing
                          1. 0
                            Christian Kruse
                            • netzwerk
                          2. 0
                            Auge
                            • netzwerk
                            • zu diesem forum
                            1. 0
                              TS
                              1. 0
                                Christian Kruse
                                1. 0
                                  TS
                                  1. 0
                                    Auge
                                    1. 0
                                      TS
                                      • menschelei
                              2. 0
                                Auge
                                1. 0
                                  Christian Kruse
                        2. 0
                          Rolf b
                          1. 0
                            TS
                            • php
                            • programmiertechnik
                            • sicherheit
                            1. 0
                              Christian Kruse
                          2. 0
                            mermshaus
                            1. 0
                              TS
                2. 0
                  TS
                  1. 0
                    TS
                  2. 0
                    Rolf b
  3. 0
    pl
    • perl
    1. 1
      Christian Kruse
      1. 0
        pl
        1. 0
          Christian Kruse
      2. 0
        TS
        • php
        1. 0
          pl
          1. 0
            TS
  4. 0

    Wertebreich Integer contra IPv4 in Long

    TS
    1. 0
      Matthias Apsel
      1. 0
        Der Martin
        1. 0
          Matthias Apsel
        2. 0
          TS
          1. 0
            Matthias Apsel
            1. 0
              TS
          2. 0
            Christian Kruse
            1. 0
              TS
              1. 0
                Christian Kruse
                1. 0
                  TS
      2. 0
        TS
        1. 0
          Matthias Apsel
          1. 0
            TS
            1. 0

              Lösung übersehen?

              Tagwächter
              1. 0
                Tagwächter
              2. 0
                TS
        2. 1
          Tagwächter
    2. 1
      Rolf b
      1. 0
        TS
      2. 0
        TS
        1. 0
          Tagwächter
          1. 0
            TS
            1. 0
              Tagwächter
  5. 1
    Tagwächter
    • php
    • programmiertechnik
    1. 0
      TS
      1. 0

        fail2ban kann das selbst!

        Tagwächter
        1. 0
          TS
          1. 0
            Tagwächter
            1. 0
              TS
        2. 0
          TS
          • php
          • programmiertechnik
          • webserver
          1. 0

            fail2ban - multible logfiles

            Tagwächter
            • linux
            • webserver
            1. 0
              TS
              1. 0
                Tagwächter
                1. 0
                  TS