Newsgroup: it.comp.os.linux.iniziare
Titolo: Multiping con bash script

Ciao a tutti,
ho creato un file bash per poter verificare tramite il comando ping 
quali pc siano irraggiungibili, ma nel file filtroping.txt non ï¿œ 
presente nessun risultato.
Potete aiutarmi?
Grazie
 
 
 
#! /bin/bash
for i in `cat /home/pippo/Scrivania/computer.txt`
do
ping -c 5 -i 0.2 $i
done > risultatoping.txt | cat risultatoping.txt | grep 'ping 
statistics\|100% packet loss' > filtroping.txt

 statistics\|100% packet loss' > filtroping.txt
 
Perche' complicarsi la vita ?
nmap -sP 
192.168.100.0/24
 
 
 


 
 
 
 
 
Grazie per il contributo, ma ho bisogno di avere in un file gli host 
down e up :-)
 
 
 

Addi' 06 ott 2014, Smith scrive:

Provo a risponderti, ma nmap me l'ha fatto mettere ieri proprio
Enoquick. Se lo dai senza "-sP" ti da' [host down] quando son giu'. Se
poi ti bastano meno indirizzi da cercare, ci sono tutti gli esempi nella
manpagina, ad esempio per solo 64 tra 192.168.100.30 e 192.168.100.94
dai: nmap 
192.168.100.30/26
 
 
-- 
Tanti saluti
 

Il 06/10/2014 14:48, enoquick ha scritto:

Sono riuscito a risolvere il problema concatenando con il comando "&&".
 

 | grep 'ping statistics\|100% packet loss' > filtroping.txt
 
 
Non so da dove cominciare, sei riuscito a zeppare così tanti errori di 
concetto in una sola riga di codice, da poter andare ad un mondiale di 
"bash alla meno" e vincere a mani basse :)
 
 
Si usa la pipe quando un programma deve usare come input l'output del 
programma che lo precede (nella pipe).
Un ping rediretto su file (done > risultatoping.txt), non produce nessun 
output (che in ogni caso non usi visto che la cat successiva non usa 
stdin, ma un file).
 
ping statistics
Inoltre l'operazione cat file.txt |operazioni |varie > file.txt puo' 
generare una sola cosa: un gran troiaio .
 
Quindi, al massimo, dovresti fare:
 
done |  grep 'ping statistics\|100% packet loss' > filtroping.txt
 
Il problema poi è che questa grep è totalmente sbagliata, almeno per 
l'output di ping che ho sulla mia macchina.
 
io ho :
 
 
blabla
--- 192.168.2.232 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 831ms
 
nel caso di ip non raggiungibile
 
e
 
blabla
--- 192.168.2.233 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 801
 
nel caso di ip raggiungibile
 
quindi la tua grep dovrebbe (anzi vorrebbe, perchè è comunque sbagliata) 
essere
 
grep -E '(ping statistics|100% packet loss)'
 
 
questa è comunque sbagliata, perchgè ti ritroveresti un file con
 
--- 192.168.2.232 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 831ms
 
nel caso di ip non raggiungibile
 
e 
--- 192.168.2.233 ping statistics ---
 
nel caso di ip raggiungibile
 
 
insomma, alla fine una cosa del genere:
 
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.yyy ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 831ms
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.xxx ping statistics ---
--- 192.168.2.zzz ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 831ms
...
...
 
 
insomma, teribbile!
 
 
In casi come questo (cioè, *tutti i casi*) torna utile leggersi il man e 
capire che ping ha come exit code 1 in caso di 100% packet loss
 
quindi:
 
#! /bin/bash
 
echo -n '' > raggiungibili.txt
echo -n '' > nonraggiungibili.txt
 
for i in `cat /home/pippo/Scrivania/computer.txt`
do
ping -c 5 -i 0.2 $i > /dev/null
 
if[ $? -ne 0 ]; then
echo $i >> nonraggiungibili.txt
else
echo $i >> raggiungibili.txt
 
fi
 
done
 
poi, aggiustati le redirezioni, e prenditi quello che ti serve.

 done
 
bash xxxxxxxxxx.sh
xxxxxxxxxx.sh: riga 10: errore di sintassi vicino al token non atteso "then"
xxxxxxxxxx.sh: riga 10: `if[ $i -ne 0 ]; then'

 `if[ $i -ne 0 ]
 
manca uno spazio dopo la if, scusa
 
if [ $i -ne 0 ]
 


 
 
Trova solo quelli raggiungibili.
 
Ma l'espressione "-ne" a cosa serve?


not equal.


cioè?
sei sicuro di aver letto bene il sorgente?
vengono creati due file , non uno

 "bash alla meno" e vincere a mani basse :)
 
Tipo una di tressette a perdere giocato con la bash. Sarebbe una 
ottima ed intelligente spiegazione all'obbrobrio dell'OP ma il 
rasoio di Hanlon spiega meglio la questione.
 
Meglio usare nmap come già suggerito.

 Potete aiutarmi?
 
fping -a -g 
192.168.0.0/24
 2>/dev/null
 
-- 
Flavio Visentin
 
Scientists discovered what's wrong with the female brain: on the left
side, there's nothing right, and on the right side, there's nothing left

 fi
 
  Qui è più semplice scrivere:
 
if ping -c 5 -i 0.2 $i > /dev/null
then echo $i >> raggiungibili.txt
else echo $i >> nonraggiungibili.txt
fi
 
 
  Ciao,
 
 
-- 
Alessandro Selli 
http://alessandro.route-add.net
 
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.


  I nodi che sono up te lo dice nmap, tutti gli altri nella rete che hai
specificato che mancano nell'output sono down.
 
  Se vuoi che sia nmap stesso a dirlo esplicitamente, lo usi su ogni singolo IP:
 
[alessandro@hal9k ~ ]$ nmap -sP 192.168.1.100
 
Starting Nmap 6.45 ( 
http://nmap.org
 ) at 2014-10-06 20:10 CEST
Nmap scan report for adsl0.localdomain (192.168.1.100)
Host is up (0.0011s latency).
^^^^^^^^^^
||||||||||
Nmap done: 1 IP address (1 host up) scanned in 1.23 seconds
                         ^^^^^^^^^
                         |||||||||
 
[alessandro@hal9k ~ ]$ nmap -sP 192.168.1.107
 
Starting Nmap 6.45 ( 
http://nmap.org
 ) at 2014-10-06 20:10 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
^^^^^^^^^^^^^^^^^^^^^^
||||||||||||||||||||||
Nmap done: 1 IP address (0 hosts up) scanned in 3.01 seconds
                         ^^^^^^^^^^
                         ||||||||||
 
Da man nmap(1):
 
	-sP: Ping Scan - go no further than determining if host is online


 Tipo una di tressette a perdere ...
 
Cioè: Tipo una partita di tressette a perdere giocato con la bash
et cetera et cetera...
 
Per quanto riguarda lo script meglio archiviarlo in /dev/null
 

 fi
 
 
Quasi bene, è ancora troppo lenta. Si potrebbe accelerare
facendo i ping in parallelo. Attento però ad evitare un bel 
ping flooding. Ma vale la pena perdere tanto tempo su uno 
script arrangiato quando nmap e fping fanno la stessa cosa, 
più velocemente, e in modo più pulito e sicuro?
 
PS grazie a chi ha suggerito fping

 fping -a -g 
192.168.0.0/24
 2>/dev/null
 
 
"2>" cosa serve?
 
Grazie

 "2>" cosa serve?
 
a reindirizzare lo standard error
 
man bash