Catturare i risultati di un ping

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
MDS
Linux 2.0
Linux 2.0
Messaggi: 178
Iscritto il: gio mag 20, 2004 0:00

Catturare i risultati di un ping

Messaggioda MDS » mar nov 30, 2004 19:32

Ciao a tutti. <BR>Ho l´esigenza di dover effettuare delle operazioni in base ai risultati di un ping. <BR>Vorrei fare uno script che pinghi un particolare Ip e in base ai risultati di questa operazione spenga la macchina. <BR>Nello Specifico: ho un server attaccato ad un gruppo di continuità non gestibile con Acpusd, ho l´hag di fastweb che ha un ip non attaccato a nessun UPS. <BR>Voglio pingare a ripetizione (ogni 10 min) l´hag e se non risponde (diciamo se i pacchetti ricevuti sono inferiori al 30%) voglio spegnere il pc. <BR>Userei sleep per le ripetizioni, ma non so proprio come catturare i risultati del ping... <BR>Che mi consigliate? <BR> <BR>Ciao e Grazie.<br>

goodchild
Linux 2.6
Linux 2.6
Messaggi: 536
Iscritto il: lun gen 12, 2004 0:00

Catturare i risultati di un ping

Messaggioda goodchild » mar nov 30, 2004 19:44

questa e´ la teoria: <BR>dal man di ping trovi come poter fare N pings del computer e forwardi il risultato su di un file. <BR>dal file estrai attraverso awk il testo 0% packet loss quindi sempre con awk prendi il numero precedente al % e poi esegui un if. <BR>per awk in rete ci sono molte guide. <BR>puoi usare volendo anche sed per "editare" il file in modo da prendere solo la stringa interessante.<br>

MDS
Linux 2.0
Linux 2.0
Messaggi: 178
Iscritto il: gio mag 20, 2004 0:00

Catturare i risultati di un ping

Messaggioda MDS » mar nov 30, 2004 19:47

Grande!!! Ora ci provo. <BR>Ciao ;-)<br>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom ott 12, 2003 0:00
Località: A place where the streets have no name
Contatta:

Catturare i risultati di un ping

Messaggioda useless » mar nov 30, 2004 21:18

forse ti puoi anche semplificare la vita sapendo che se ping riesce a pingare esce con 0, se non riesce esce con 1. <BR> <BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE> <BR>sukko@unholycathedral ~ $ ping 10.0.6.99 -c3 <BR>PING 10.0.6.99 (10.0.6.99) 56(84) bytes of data. <BR>From 10.0.6.1 icmp_seq=1 Destination Host Unreachable <BR>From 10.0.6.1 icmp_seq=2 Destination Host Unreachable <BR>From 10.0.6.1 icmp_seq=3 Destination Host Unreachable <BR> <BR>--- 10.0.6.99 ping statistics --- <BR>3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2009ms <BR>, pipe 3 <BR>sukko@unholycathedral ~ $ echo $? <BR>1 <BR>sukko@unholycathedral ~ $ ping 10.0.6.5 -c3 <BR>PING 10.0.6.5 (10.0.6.5) 56(84) bytes of data. <BR>64 bytes from 10.0.6.5: icmp_seq=1 ttl=64 time=0.416 ms <BR>64 bytes from 10.0.6.5: icmp_seq=2 ttl=64 time=0.396 ms <BR>64 bytes from 10.0.6.5: icmp_seq=3 ttl=64 time=0.396 ms <BR> <BR>--- 10.0.6.5 ping statistics --- <BR>3 packets transmitted, 3 received, 0% packet loss, time 1998ms <BR>rtt min/avg/max/mdev = 0.396/0.402/0.416/0.025 ms <BR>sukko@unholycathedral ~ $ echo $? <BR>0 <BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End --> <BR> <BR>estrarre il packet loss non è banale, xké cambia di posizione se l´host risponde o meno. pare comunque che una roba del genere funzioni: <BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE> <BR>sukko@unholycathedral ~ $ ping 10.0.6.99 -c1 | grep "packet loss" | sed "s/.* \([0-9]*\)% packet loss.*/\1/" <BR>100 <BR>sukko@unholycathedral ~ $ ping 10.0.6.5 -c1 | grep "packet loss" | sed "s/.* \([0-9]*\)% packet loss.*/\1/" <BR>0 <BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End --> <BR> <BR>si potrebbero migliorare i pattern, ma non mi è ancora ben chiaro cosa accetti sed e cosa no. <BR>buon lavoro ;-).<br>

MDS
Linux 2.0
Linux 2.0
Messaggi: 178
Iscritto il: gio mag 20, 2004 0:00

Catturare i risultati di un ping

Messaggioda MDS » gio dic 02, 2004 23:45

Grazie a tutti dell´aiuto. <BR>Grazie in particolare a Usless.... le tue indicazioni mi hanno fornito una via sulla quale ho lavorato.... di certo awk devo impararlo... <BR> <BR>Lo script che ho scritto è il seguente... lo stile è pessimo, però continuava a darmi errori, così ho fatto quanto segue: <BR> <BR>________________________________________________________________________________ <BR> <BR>#!/bin/bash <BR>IP=213.156.54.80 <BR>A=1 <BR>B=2 <BR>sleep 150 <BR>while [ $A -lt $B ]; do <BR> if ping $IP -c 5 >/dev/null <BR> then <BR> echo >/dev/null <BR> else <BR> init 0; <BR> fi <BR>sleep 400 <BR>done <BR>exit <BR>_____________________________________________________________________________ <BR> <BR> <BR>Ciao a tutti e di nuovo GRAZIE!!!! <BR>Ciao ;-) <br>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom ott 12, 2003 0:00
Località: A place where the streets have no name
Contatta:

Catturare i risultati di un ping

Messaggioda useless » ven dic 03, 2004 0:25

if ping $IP -c 5 >/dev/null <BR> then <BR> echo >/dev/null <BR> else <BR> init 0; <BR> fi <BR> <BR>forse suona meglio: <BR>if ! ping $IP -c 5 >/dev/null <BR>shutdown -h now <BR>fi <BR> <BR>cambia niente comunque ;). <BR>se vuoi lavorare sulla percentuale di pacchetti persi comunque usa quella roba in sed qua sopra.<br>

MDS
Linux 2.0
Linux 2.0
Messaggi: 178
Iscritto il: gio mag 20, 2004 0:00

Catturare i risultati di un ping

Messaggioda MDS » sab dic 04, 2004 0:14

Tanx. <BR> <BR>Ciao ;-) <br>