Newsgroup: it.comp.os.linux.sys
Titolo: Controllare una lista di IP, file host

Ho un file host, diverse decine di indirizzi, e mi e' stato dato il
computo di controllare se sono corretti ed eventualmente aggiornarli.
C'e' un programma/sito/script in grado di automatizzare il procedimento
certamente tedioso e lungo?
Grazie.
 


con bash, awk e sed puoi fare certamente tutto. prova a farci un esempio 
di cosa vuoi fare.

 di cosa vuoi fare.
 
Il file hosts completo e' stato generato un po' di tempo fa e non
utilizzato per molto tempo quindi non e' detto che tutti gli ip segnati
corrispondano e/o siano corretti. Nel tempo possono essere variati. Niente
di complicato, dovremmo vedere se l'IP generato e' ancora valido oppure
no. Essendo una quantità notevole dovendo verificarli tutti diventa un
lavoro lungooooo..... poi se riuscissimo a controllarlo su un DNS
autoritativo sarebbe ancora meglio.
Spero di essere stato piu' chiaro.
 
Estratto:
 
212.48.10.177	
aiuto.libero.it
 
92.122.48.129 	
www.televideo.rai.it
 
212.48.11.150	
ricerca.virgilio.it
 
212.48.3.24	
ricerca.virgilio.it
 
68.232.35.129	
cdn-static.sisal.it
 
5.97.112.51	
www.sisal.it
 
5.97.112.62	
verificavincite.sisal.it
 
213.92.16.191	
www.repubblica.it
 
54.230.26.143	
l.repubblica.it
 
213.92.16.91	
video.repubblica.it
 
.
.
.
.
etc...
 

 213.92.16.91	
video.repubblica.it
 
 
 
 
Così, su due piedi e scritto di getto (magari contiene errori, 
verificalo autonomamente),
 
#!/bin/bash
CONTTOT=$( cat /etc/hosts | grep -vw "" | wc -l )
CONT
SERVERDNS="8.8.8.8"
if [ -f /corretti.txt ]; then rm /corretti.txt; fi
if [ -f /NONcorretti.txt ]; then rm /NONcorretti.txt; fi
 
while [ $CONT -ge $CONTTOT ]; do
	IP=$( cat /etc/hosts | grep -vw "" | sed -n $COUNT\p | awk '{ print $1 }' )
	DNS=$( cat /etc/hosts | grep -vw "" | sed -n $COUNT\p | awk '{ print $2 
}' )
	VERIFICA=$( dig +short $DNS @$SERVERDNS )
	if [ "$VERIFICA" == "$IP" ]; then
		echo "$IP $DNS corretto" >> /corretti.txt;
	else
		echo "$IP $DNS NONcorretto" >> /NONcorretti.txt;
	fi
	let CONT=CONT+1
done
exit 0
 
ovviamente avrai i file /corretti.txt e /NONcorretti.txt suddivisi.
 
Ciao,

 Ciao,
 
quelli non corretti ovviamente verificali comunque a mano per i più 
voluminosi, potrebbero essere dei pool.
 
Ciao,

 ha scritto:

Ho provato ma mi da errore. Ho fatto qualche correzione, fin dove sono riuscito.
Allego lo script:
 
#!/bin/bash
CONTTOT=$( cat /etc/hosts | grep -vw "" | wc -l )
CONT=0
SERVERDNS="8.8.8.8"
PATH="/miopath"
echo $CONT
echo $CONTTOT
if [ -f $PATH/corretti.txt ]; then rm $PATH/corretti.txt; fi
if [ -f $PATH/NONcorretti.txt ]; then rm $PATH/NONcorretti.txt; fi
 
while [ $CONTTOT -ge $CONT ]; do
	echo $CONT
	IP=$( cat /etc/hosts | grep -vw "" | sed -n $COUNT\p | awk '{ print $1 }' )
	DNS=$( cat /etc/hosts | grep -vw "" | sed -n $COUNT\p | awk '{ print $2 }' )
	VERIFICA=$( dig +short @$SERVERDNS $DNS )
	echo $VERIFICA r
	if [ "$VERIFICA" == "$IP" ]; then
		echo "$IP $DNS corretto" >> $PATH/corretti.txt;
	else
		echo "$IP $DNS NONcorretto" >> $PATH/NONcorretti.txt;
	fi
	let CONT=CONT+1
done
exit 0
 
Errori:
 
/script-verifica-file-hosts.sh: riga 13: cat: comando non trovato
/script-verifica-file-hosts.sh: riga 13: grep: comando non trovato
/script-verifica-file-hosts.sh: riga 13: sed: comando non trovato
/script-verifica-file-hosts.sh: riga 13: awk: comando non trovato
/script-verifica-file-hosts.sh: riga 14: cat: comando non trovato
/script-verifica-file-hosts.sh: riga 14: grep: comando non trovato
/script-verifica-file-hosts.sh: riga 14: sed: comando non trovato
/script-verifica-file-hosts.sh: riga 14: awk: comando non trovato
/script-verifica-file-hosts.sh: riga 15: dig: comando non trovato
 
Ciao!
 

 /script-verifica-file-hosts.sh: riga 15: dig: comando non trovato
 
 
Debian: apt-get install cat grep sed awk dig
CentOS: yum install cat grep sed awk dig
Suse: zypper in cat grep sed awk dig
 
bhè insomma.. hai capito. vanno installati se non li hai. :-)

 ha scritto:

In debian, ma sono gia' installati.... :( Ho provato a riga di comando e la
stringa funziona.... :(
 

 comando e la stringa funziona.... :(
 
Decidi da che parte continuare la conversazione, non ha senso farlo a 
gruppi unificati visto che su .debian ti hanno già indicato la 
risposta.
La variabile di sistema $PATH (poi mi spieghi perchè l'hai aggiunta e 
soprattutto perchè dargli quel nome, se ho intuito cosa volevi fare) 
dovrebbe contenere qualcosa del tipo:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 
Altrimenti col piffero che ti trova gli eseguibili.
 
Ma ti ripeto, siamo davvero a livello di icoli.


# whereis cat
 
e invece di cat metti il percorso intero (assoluto), ad esempio /bin/cat
 
e così via per grep, sed, awk e dig
 


in una server farm la soluzione si chiama "configuration management": 
puppet, chef, ansible, saltstack, cfengine. 
Ma devi conoscere ruby/python a secondo del caso e mi pare che sei già 
abbastanza inguaiato con gli script shell. 
 
-- 
Massimiliano Adamo