Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    7

    Eseguire script in base al ping.

    (Centos)
    Avrei bisogno che venisse eseguito uno script in base alla risposta di un ping:

    Ad esempio spegnere il server se tutti i client sono stati spenti (quindi non rispondono al ping)

    Non so come "onterpretare" la risposta di ping.



    Grazie
    Chi xe ?

  2. #2
    Utente di HTML.it L'avatar di superbubba
    Registrato dal
    Jan 2003
    Messaggi
    1,474
    Dalla man page di ping se ne evince che:

    If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not.
    Potresti strutturare qualcosa del genere

    codice:
    ping -c1 -w1 192.168.0.1 > /dev/null
    Dove con "-c1" dici a ping di mandare un solo pacchetto e con "-w1" imposti un timeout di un secondo (per velocizzare la risposta sugli host spenti). Io lavorerei sul'exit status, magari inserendo tutto in un bel ciclo. Immaginando di dover controllare gli host dal 192.168.0.5 al 192.168.0.15 potrebbe essere:

    codice:
    #!/bin/bash
    
    for TARGET in 192.168.0.{15..25}
    do
            ping -c1 -w1 $TARGET > /dev/null
            if [ "$?" -eq "0" ]; then
                    # Almeno un host acceso, esci
                    exit 1
            fi
    done
    
    # Spegne il server:
    halt
    Ricordati che lo script che ti ho fatto vedere funziona solo se su eventuali client Windows hai abilitato l'echo-reply. Se così non fosse puoi prova ad inserire un test sull'indirizzo MAC.

    Il protocollo arp è una buona idea in quanto se l'host è vivo ha sempre una risposta. Tuttavia essendo un protocollo di livello 2, funziona solo se client e server sono nella stessa sottorete. Lo script diventa quindi:

    codice:
    #!/bin/bash -x
    
    declare -a IPADDR=( $(echo 192.168.0.{5..15}) )
    
    for TARGET in ${IPADDR[@]}
    do
            ping -c1 -w1 $TARGET > /dev/null
            RES=$(arp -a $TARGET | awk '{print $4}')
            if [ "$RES" != "<incomplete>" ]; then
                    # Almeno un host acceso, esci
                    exit 1
            fi
    done
    
    # Spegne il server:
    halt

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    7

    Re: Eseguire script in base al ping.

    Originariamente inviato da acik
    Non so come "interpretare" la risposta di ping.
    Sto pensando di prendere l' output e di passarlo a grep:

    ping -c 1 192.168.200.93 |grep "100% packet loss"


    In questa maniera, se il ping non ha il 100% di packet loss, non mi da nessun output...

    Come proseguo ??
    Chi xe ?

  4. #4
    Utente di HTML.it L'avatar di superbubba
    Registrato dal
    Jan 2003
    Messaggi
    1,474

    Re: Re: Eseguire script in base al ping.

    Originariamente inviato da acik
    Sto pensando di prendere l' output e di passarlo a grep:

    ping -c 1 192.168.200.93 |grep "100% packet loss"


    In questa maniera, se il ping non ha il 100% di packet loss, non mi da nessun output...

    Come proseguo ??
    Nella mia precedente risposta (l'hai vista?) ti ho fatto vedere un paio di esempi su come usare l'output di ping. Nel mondo reale io non utilizzerei ping ma bensì il più potente nmap:

    codice:
    #!/bin/bash
    
    TMP=/tmp/nmap
    nmap -sP 192.168.0.5-15 > $TMP
    grep "0 hosts up" $TMP > /dev/null
    if [ "$?" -ne "0" ]; then
            # Almeno un host acceso, esci
            rm -f $TMP
            exit 1
    fi
    
    rm -f $TMP
    # Spegne il server:
    halt

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    7

    Re: Re: Re: Eseguire script in base al ping.

    Originariamente inviato da superbubba
    Nella mia precedente risposta (l'hai vista?)
    Eh, no !
    Quando ho iniziato a scrivere il mio post, il tuo non e' ancora stato pubblicato !

    Grazie, faro' come hai suggerito tu.
    Chi xe ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.