Listen vergleichen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von satriani, 11.01.2013.

  1. #1 satriani, 11.01.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Hallo liebe Community,

    ich stehe wohl auf dem Schlauch und weiss nicht mehr weiter, vielleicht weil ich besser penne gehen sollte :D
    Wie auch immer, ich baue einen Script der die eingeloggte User mit der Whiteliste abgleichen soll, das ganze sieht so aus:

    Code:
            logged_host="$(who | awk '{print $6}' | sed s/"("// | sed s/")"//)"
             WHITELIST="123.12.34.23 211.45.65.87 87.65.34.76 45.87.345.43"
              for host in $logged_host
              do
              ip_addr="$(dig +short $host)"
              done
            for ip in $WHITELIST
            do
              if [ "$ip_addr" = "$WHITELIST" ]
                then
                  logged_stat="OK"
                else
                  logged_stat="Nicht gelistet!"
                fi
             echo $logged_stat
            done
    Dabei muss natürlich beachtet werden, dass es viele User eingelogt werden können.

    Danke im Voraus und schöne Träume :D
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 returnNULL, 11.01.2013
    returnNULL

    returnNULL Mitglied

    Dabei seit:
    28.09.2012
    Beiträge:
    32
    Zustimmungen:
    0
    Sehr gute Idee. Ich glaube sowas mach ich auch :D ich setze mich später auch mal dran.
     
  4. #3 satriani, 11.01.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Danke für die Antwort, hilft mir aber nicht weiter :P
     
  5. #4 HeadCrash, 11.01.2013
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Na ausgeschlaffen? :D

    der Host steht bei mir im Feld 5 (Debian Squeeze).

    Code:
    headcrash@atlantis:~/skriptEcke$ who
    headcrash    pts/0        2013-01-11 16:00 (sokrates.#######.##)
    headcrash@atlantis:~/skriptEcke$ who | awk '{print($5) }'
    (sokrates.#######.##)
    
    Willst du es einfach nur wissen, wenn eine ungwöhnliche Verbinung existiert oder willst du es verhindern?

    Falls du es verhindern willst würde ich dir /etc/hosts.allow bzw. /etc/hosts.deny empfehlen.

    mfg
    HeadCrash
     
  6. #5 satriani, 11.01.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Hey HeadCrash,

    Nicht wirklich :(
    Die Kids machen mich wahnsinnig, schon um 8:00 Uhr war der Lärm unerträglich :D

    Ah ok, ich fahre mit FreeBSD ;)

    Ich möchte es einfach überwachen, kleiner Monitorigscript halt :)
     
  7. #6 HeadCrash, 11.01.2013
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Versuchs mal so:

    Code:
    headcrash@atlantis:~/skriptEcke$ cat check_loggedin.sh
    #!/bin/bash
    
    logged_host="$(who | awk '{print $5}' | sed s/"("// | sed s/")"//)"
    WHITELIST="10.0.0.12"
    
    for host in $logged_host
    do
            ip_addr="$(dig +short $host)"
    #done  ### ist hier falsch
    
            for ip in $WHITELIST
            do
                    #if [ "$ip_addr" = "$WHITELIST" ]  ### wir wollen nach IP schauen
                    if [ "$ip_addr" = "$ip" ]
                    then
                            logged_stat="OK"
                    else
                            logged_stat="Nicht gelistet!"
                    fi
                            echo $logged_stat
            done
    done
    
    ######################
    
    headcrash@atlantis:~/skriptEcke$ bash -x check_loggedin.sh
    ++ awk '{print $5}'
    ++ sed 's/(//'
    ++ sed 's/)//'
    ++ who
    + logged_host='sokrates.######.##
    sokrates.######.##
    10.0.0.60'
    + WHITELIST=10.0.0.12
    + for host in '$logged_host'
    ++ dig +short sokrates.######.##
    + ip_addr=10.0.0.12
    + for ip in '$WHITELIST'
    + '[' 10.0.0.12 = 10.0.0.12 ']'
    + logged_stat=OK
    + echo OK
    OK
    + for host in '$logged_host'
    ++ dig +short sokrates.######.##
    + ip_addr=10.0.0.12
    + for ip in '$WHITELIST'
    + '[' 10.0.0.12 = 10.0.0.12 ']'
    + logged_stat=OK
    + echo OK
    OK
    + for host in '$logged_host'
    ++ dig +short 10.0.0.60
    + ip_addr=
    + for ip in '$WHITELIST'
    + '[' '' = 10.0.0.12 ']'
    + logged_stat='Nicht gelistet!'
    + echo Nicht 'gelistet!'
    Nicht gelistet!
    
    Das Feld im awk nicht vergessen ;), und du bekommst kein Ergebnis zurück wenn "who" eine IP-Adresse anzeigt, zumindes hier bei der Debianmühle nicht.

    mfg
    HeadCrash
     
  8. #7 satriani, 11.01.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Danke HeadCrash,

    wird klar was für ein Keks ich da gebaut habe, das komplette Script stimmt nicht.
    das Ergebnis sieht so aus:
    Code:
    Nicht gelistet!
    OK
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    
    und so sieht aus wenn sich zwei User aus der Whitelist einloggen.
    Code:
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    OK
    Nicht gelistet!
    Nicht gelistet!
    Nicht gelistet!
    
    Jede einzelne IP aus der Whitelit wird ausgewertet und ausgegeben, wobei ein OK ausreichen würde.
    Und wenn eine unberechtigte IP gefunden wurde, dann soll die IP angezeigt werden mit der Meldung "Nicht gelistet!"
    Ich glaube da soll "diff" mit ins Spiel.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 floyd62, 11.01.2013
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    ob eine IP-Adresse $IP in deiner $WHITELIST enthalten ist, kannst du ohne die for-Loop auch einfach mit grep, etwa
    Code:
    if echo $WHITELIST | tr " " "\n" | grep "^$IP$" >/dev/null; then
            echo $IP ist in Whitelist
    else
            echo $IP ist nicht in Whitelist
    fi
    
    oder einem String-Match, etwa
    Code:
    case $(echo " " $WHITELIST " ") in
    *" $IP "*)      echo $IP ist in Whitelist ;;
    *)              echo $IP ist nicht in Whitelist ;;
    esac
    
    überprüfen ... Wenn die Schleife doch gewünscht sein sollte, kannst du sie ja im Erfolgsfall mit "break" verlassen, ungefähr so
    Code:
    logged_stat="nicht gelistet!"
    for ip in $WHITELIST
    do
            if [ "$ip_addr" = "$ip" ]
            then
                    logged_stat="OK"
            break
    fi
    done
    echo $ip_addr $logged_stat
    
    Gruss, A.
     
  11. #9 satriani, 12.01.2013
    satriani

    satriani SysLion

    Dabei seit:
    20.04.2011
    Beiträge:
    39
    Zustimmungen:
    0
    Danke floyd62,

    das mit dem case hat super geklappt :)
     
Thema:

Listen vergleichen

Die Seite wird geladen...

Listen vergleichen - Ähnliche Themen

  1. Hundertserver sucht Dich: Linux Spezialisten in Berlin.

    Hundertserver sucht Dich: Linux Spezialisten in Berlin.: Hundertserver sucht einen Linuxspezialiten in Berlin Hundertserver über sich: "Hundertserver bietet Unternehmen die Möglichkeit, digitale...
  2. Rogue Wave übernimmt PHP-Spezialisten Zend

    Rogue Wave übernimmt PHP-Spezialisten Zend: Der PHP-Spezialist Zend Technologies wurde durch Rogue Wave aufgekauft. Mit der Übernahme will sich der US-Cross-Plattform-Hersteller verstärkt in...
  3. Mailinglistenarchive

    Mailinglistenarchive: Hallo, ich nutze rege Mailinglisten um mich mit der Community austauschen zu können. Nun ist es aber nicht selten der Fall, dass jeder...
  4. Finalisten des linux.com-T-Shirt-Design-Wettbewerbs stehen fest

    Finalisten des linux.com-T-Shirt-Design-Wettbewerbs stehen fest: Die Linux Foundation hat bekannt gegeben, dass die Finalisten ihres vor zwei Monaten ausgeschriebenen Design-Wettbewerbs für T-Shirts feststehen....
  5. [python] Einträge in Listen subtrahieren

    [python] Einträge in Listen subtrahieren: Hallo, ich will eine recht einfache Formel in Python umsetzen: delta T = t_(n+1) - t_(n) (Es soll die Differenz zwischen n+1-ten und n-ten Wert...