Script per inserire gli indirizzi IP numerici in /etc/hosts

Mer, 06/07/2005 - 19:41

Script per inserire gli indirizzi IP numerici in /etc/hosts

Inviato da farthest 8 commenti

Ciao 'Uaglio',

il pc prima di richiedere al server DNS l'indirizzo delle sito che noi cerchiamo guarda prima nel file /etc/hosts, quindi lo scopo di questo script e di velocizzare il caricamento della pagine.

PS: credo che funzioni così!! Thinking

#!/bin/bash<br />#Hi, this script is used for obtaining the numeric IP address of the URL inserited in the prompt<br />#and append into /etc/host<br />#<br />URL=$1<br />RAW_DATA=`ping -w 1 $URL 2> /dev/null`<br />#controllo nel file /etc/hosts se è stato già configurato l'URL<br />checkHosts() {<br />        #rimuove dall'URL 'www.'<br />        local URL=`echo "$URL" | sed 's%www.%%'`<br />        #prende la riga che ci interessa analizzare<br />        local LINE=`grep -E "$ADDRESS" /etc/hosts`<br />        #controlla che corrisponda l'URL<br />        if ! [ -z "$LINE" ]; then<br />                echo $LINE | grep -qE "$URL" && echo "The '$URL' has already set up." && exit 1<br />                echo "It's probably that there is a problem because"<br />                echo "'$LINE'"<br />                echo "not like to"<br />                echo "$ADDRESS          $URL"<br />                echo "Hand on /etc/hosts."<br />                #chiede se vuoi continuare la configurazione nel caso in cui indirizzo numero è già stato usato<br />                #per un altro URL<br />                while read -p "What are you going to do?Do you go on?(y|n)" && [ -n "$REPLY" -a ! "$REPLY" == y ]; do<br />                                        [ "$REPLY" == n ] && exit 1<br />                done<br />        fi<br />}<br />#<br />[ $# -ne 1 ] && echo "Usage: $0 <URL>" && exit 1<br />#controlla se ci sono dati grezzi<br />if ! [ -z "$RAW_DATA" ]; then<br />        #filtra rimanedo solo indirizzo numerico<br />        ADDRESS=$( echo $RAW_DATA | awk '{ print $3 }' | sed 's%(%%g; s%)%%g' )<br />        checkHosts<br />        #aggiunge<br />        echo "$ADDRESS          $URL" >> /etc/hosts<br />        echo "It has appended '$ADDRESS          $URL' into /etc/hosts"<br />else<br />        #caso in cui il ping non riesce ad trovare il server<br />        echo "'$URL' is not traced."<br />        exit 1<br />fi<br />exit 0<br />

bye Wink


In:



Commenti

Ritratto di Moreno
#1

Inviato da Moreno il Mer, 06/07/2005 - 21:40.

Bash Senza Segreti

Ciao

Mi piacciono proprio i tuoi script, continuano a migliorare.
Le tue guide possono diventare un ottimo punto di partenza per conoscere Bash e per esplorare nuove potenzialità

Ciao Ciao Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di farthest
#2

Inviato da farthest il Gio, 07/07/2005 - 00:00.

Re: Bash Senza Segreti

Ciao
da qualche parte ho letto che la bash è morta a favore dei nuovi e più avanzati linguaggi, forse il perl! Thinking
Grazie dell'apprezzamento l'ho fatto oggi pomeriggio e neanche lo volevo pubblicare... poi visto che è venuto carino l'ho postato! Wink
Beh, ancora devo leggere la guida avanzata della bash Laughing ad agosto!!
Lì si che ci saranno delle belle... forse scappa anche la guida per fare un script quasi "professionale" di avvio! 8-)
Cmq ho quello che mi ha reso più felice in assoluto è stato il voto al European Parliament!
Come direbbero gli inglesi Greaaaat! :-P
bye Wink



Ritratto di Pinguino
#3

Inviato da Pinguino il Gio, 07/07/2005 - 01:25.

Re: Bash Senza Segreti

Quote:

da qualche parte ho letto che la bash è morta a favore dei nuovi e più avanzati linguaggi, forse il perl!

E' morta? mah.. Io per quel poco che ho visto del Perl mi è sembrato un linguaggio ambiguo e decisamente limitato (almeno rispetto ai più recenti Java e C#), in più ormai pure lui comincia ad accusare il peso degli anni.. Ovviamente la verità è che non esiste UN linguaggio, ma un diverso linguaggio che può essere più o meno adatto per un particolare ambito o obbiettivo. Non mi demoralizzerei se fossi in te: per semplici "automazioni" (ma anche per meno semplici Wink ) la bash è molto rapida (almeno per la stesura del codice), facile da apprendere ed efficiente. Ovviamente ha molti limiti al di là di questi ambiti, ma dire che è morta... Perl mi pare più adatto per maneggiare stringhe, ma i signori di Mandriva lo utilizzano per costruire (con gli appositi widget GTK) tutto il pacchetto di applicazioni del MCC (e con evidenti problemi di prestazioni, almeno a mio parere): ecco un'altra variabile interessante: un linguaggio viene usato semplicemente perché... è quello che meglio conosci. D'altra parte IBM ha utilizzato Java dal lato client (che ha dei tremendi limiti di prestazioni) ed ha ottenuto quella meraviglia che è Eclipse. Per cui non scoraggiarti e continua così.

Proud linux user # 372467 @ http://counter.li.org
Mandriva Cooker 2008 - Kernel 2.6.17-14mdv - KDE 3.5.7 - Gnome 2.16



Ritratto di farthest
#4

Inviato da farthest il Gio, 07/07/2005 - 07:57.

Piccola modifica

Alla riga numero 5/6 al posto di URL=$1 ho inserito
URL=`echo &quot;$1&quot; | sed -re &quot;s%&quot;http:&quot;%%; s%/%%g&quot;`
, serve a filtrare l' URL, quindi ora potremo inserire http://gmail.google.com/ e l' URL sarà sempre gmail.google.com

bye

Wink



Ritratto di farthest
#5

Inviato da farthest il Gio, 07/07/2005 - 12:02.

Re: Piccola modifica

Ciao
ho ancora aggiunto un altro po' di codice!
ecco
#if the initials URL doesn&#039;t have got &quot;www&quot; and &quot;$RAW_DATA&quot; is empty<br />#it will edit URL putting in &quot;www&quot; and try again<br />if  ! [ &quot;`echo &quot;$URL&quot; | sed -re &quot;s%\.% %&quot; | awk &#039;{ print $1 }&#039;`&quot; == &quot;www&quot; ] &amp;&amp; [ -z &quot;$RAW_DATA&quot; ]; then<br />        URL=&quot;www.$URL&quot;<br />        RAW_DATA=`ping -w 1 $URL 2&gt; /dev/null`<br />fi

Questo è lo script completo
<br />#!/bin/bash<br />#Hi, this script is used for obtaining the numeric IP address of the URL inserited in the prompt<br />#and append into /etc/host<br />#<br />#filtrare l&#039; URL<br />URL=`echo &quot;$1&quot; | sed -re &quot;s%&quot;http:&quot;%%; s%/%%g&quot;`<br />RAW_DATA=`ping -w 1 $URL 2&gt; /dev/null`<br />#controllo nel file /etc/hosts se è stato già configurato l&#039;URL<br />checkHosts() {<br />        #rimuove dall&#039;URL &#039;www.&#039;<br />        local URL=`echo &quot;$URL&quot; | sed &#039;s%www.%%&#039;`<br />        #prende la riga che ci interessa analizzare<br />        local LINE=`grep -E &quot;$ADDRESS&quot; /etc/hosts`<br />        #controlla che corrisponda l&#039;URL<br />        if ! [ -z &quot;$LINE&quot; ]; then<br />                echo $LINE | grep -qE &quot;$URL&quot; &amp;&amp; echo &quot;The &#039;$URL&#039; has already set up.&quot; &amp;&amp; exit 1<br />                echo &quot;It&#039;s probably that there is a problem because&quot;<br />                echo &quot;&#039;$LINE&#039;&quot;<br />                echo &quot;not like to&quot;<br />                echo &quot;$ADDRESS          $URL&quot;<br />                echo &quot;Hand on /etc/hosts.&quot;<br />                #chiede se vuoi continuare la configurazione nel caso in cui indirizzo numero è già stato usato<br />                #per un altro URL<br />                while read -p &quot;What are you going to do? Do you go on?(y|n)&quot; &amp;&amp; [ -n &quot;$REPLY&quot; -a ! &quot;$REPLY&quot; == y ]; do<br />                                        [ &quot;$REPLY&quot; == n ] &amp;&amp; exit 1<br />                done<br />        fi<br />}<br />#<br />[ $# -ne 1 ] &amp;&amp; echo &quot;Usage: $0 &lt;URL&gt;&quot; &amp;&amp; exit 1<br />#if the initials URL doesn&#039;t have got &quot;www&quot; and &quot;$RAW_DATA&quot; is empty<br />#it will edit URL putting in &quot;www&quot; and try again<br />if  ! [ &quot;`echo &quot;$URL&quot; | sed -re &quot;s%\.% %&quot; | awk &#039;{ print $1 }&#039;`&quot; == &quot;www&quot; ] &amp;&amp; [ -z &quot;$RAW_DATA&quot; ]; then<br />        URL=&quot;www.$URL&quot;<br />        RAW_DATA=`ping -w 1 $URL 2&gt; /dev/null`<br />fi<br />#controlla se ci sono dati grezzi<br />if ! [ -z &quot;$RAW_DATA&quot; ]; then<br />        #filtra rimanedo solo indirizzo numerico<br />        ADDRESS=$( echo $RAW_DATA | awk &#039;{ print $3 }&#039; | sed &#039;s%(%%g; s%)%%g&#039; )<br />        checkHosts<br />        #aggiunge<br />        echo &quot;$ADDRESS          $URL&quot; &gt;&gt; /etc/hosts<br />        echo &quot;It has appended &#039;$ADDRESS          $URL&#039; into /etc/hosts&quot;<br />else<br />        #caso in cui il ping non riesce ad trovare il server<br />        echo &quot;&#039;$URL&#039; is not traced.&quot;<br />        exit 1<br />fi<br />exit 0



Ritratto di farthest
#6

Inviato da farthest il Sab, 09/07/2005 - 10:09.

Re: Piccola modifica

Ciao
ho pensato ma perché non poter inserire un completo url come http://www.190.it/190/trilogy/jsp/homePage.do?tabName=HOME+190&ty_skip_md=true
ecco il risultato
maurizio@localhost ~/$ echo &quot;http://www.190.it/190/trilogy/jsp/homePage.do?tabName=HOME+190&amp;ty_skip_md=true&quot; | sed -re &quot;s%&quot;http://&quot;%%; s%/% %g&quot; | awk &#039;{ print $1 }&#039;<br />www.190.it

quindi
URL=`echo &quot;$1&quot; | sed -re &quot;s%&quot;http://&quot;%%; s%/% %g&quot; | awk &#039;{ print $1 }&#039;`

bye



Ritratto di farthest
#7

Inviato da farthest il Gio, 28/07/2005 - 18:43.

Mi voglio far male!

Ho modificato lo script! Laughing

@Moreno: se funge bene cambiamo la guida?

Ecco cosa ho fatto prima di tutto, prima ho fatto il modo che tutte le pagine html( anche senza estenzione, quindi della cache del broswer ) posso essere estratti tutti i link per richidere i ping, basta indicare al posto dell'URL il path di una dir.
Poi inserito in rc.local il comando seguente:

netstat -c -t > /home/maurizio/.netstat

e se faccio partire in lo script cosi

addr daemon

lo script estrae i link da file suddetto.
Il problema è che per il momento funziona. Laughing Laughing

Si lo so sono impazzito :-P

I'm more mad than Madman!!

bye Wink

#!/bin/bash<br />#Hi, this script is used for obtaining the numeric IP address of the URL inserited in the prompt<br />#and append into /etc/host<br />#<br />#controllo nel file /etc/hosts se è stato già configurato l&#039;URL<br />checkHosts() {<br />        #prende la riga che ci interessa analizzare<br />        local LINE=`grep -E &quot;$ADDRESS&quot; /etc/hosts`<br />        #controlla che corrisponda l&#039;URL<br />        if ! [ -z &quot;$LINE&quot; ]; then<br />                echo $LINE | grep -qE &quot;$URL&quot; &amp;&amp; echo &quot;The &#039;$URL&#039; has already set up.&quot; &amp;&amp; exit 1<br />                echo &quot;It&#039;s probably that there is a problem because&quot;<br />                echo &quot;&#039;$LINE&#039;&quot;<br />                echo &quot;not like to&quot;<br />                echo &quot;$ADDRESS          $URL&quot;<br />                echo &quot;You could need to hand on /etc/hosts.&quot;<br />                #chiede se vuoi continuare la configurazione nel caso in cui indirizzo numero è già stato usato<br />                #per un altro URL<br />                while read -p &quot;What are you going to do? Do you go on?(y|n)&quot; &amp;&amp; [ -n &quot;$REPLY&quot; -a ! &quot;$REPLY&quot; == y ]; do<br />                                        [ &quot;$REPLY&quot; == n ] &amp;&amp; exit 1<br />                done<br />        fi<br />}<br />#<br />[ $# -ne 1 ] &amp;&amp; echo &quot;Usage: $0 &lt;URL&gt;, &lt;PATH/dir&gt; or &#039;daemon&#039;.&quot; &amp;&amp; exit 1<br />#if the initials URL doesn&#039;t have got &quot;www&quot; and &quot;$RAW_DATA&quot; is empty<br />#it will edit URL putting in &quot;www&quot; and try again<br />#se &#039;$1&#039; è una dir continua se no va ad else<br />if [ -d &quot;$1&quot; ]; then<br />        cd &quot;$1&quot;<br />        FILES=&quot;`ls`&quot;<br />        for i in $FILES; do<br />                if [ &quot;`file -b $i`&quot; == &quot;HTML document text&quot; ]; then<br /><br />                        if ! cat .addr | grep -qE &quot;$i&quot;; then<br />                                #per ogni file estrae degli URL<br />                                URLS=&quot;$( echo `cat &quot;$i&quot; | sed /&quot;http:\/\/&quot;/p | awk -F &quot;http://&quot; &#039;{ print $2 }&#039; | sed -e &#039;s%/% %g;  s%&quot;% %g&#039; -e &quot;s%&#039;% %g; s%&lt;% %g; s%&gt;% %g&quot; | awk &#039;{ print $1 }&#039;` )&quot; &amp;&amp; echo &quot;$i&quot; &gt;&gt; .addr<br />                                #ricorvivamente viene cercato il ping per ogni URL<br />                                for url in $URLS; do<br />                                        #check if it has been matched &#039;$url&#039;<br />                                        if ! echo $MEM | grep -qE &quot;$url&quot;; then<br />                                                #append the new &#039;$url&#039;<br />                                                MEM=&quot;$MEM $url&quot;<br />                                                addr $url<br />                                        fi<br />                                done<br />                        fi<br />                fi<br />        done<br />elif [ &quot;$1&quot; == daemon ]; then<br />        #filtra il file /home/maurizio/.netstat ottenendo degli URLS<br />        URLS=&quot;$( echo `cat /home/maurizio/.netstat | grep -E &quot;SYN_SENT&quot; | awk &#039;{ print $5 }&#039; | grep -vE &quot;localhost&quot; | awk -F &quot;:&quot; &#039;{ print $1 }&#039;` )&quot;<br />        for url in $URLS; do<br />                #se un URL è totalmente numerico salta<br />                if echo $url | grep -q &quot;[A-Za-z]&quot;; then<br />                        #check if it has been matched &#039;$url&#039;<br />                        if ! echo $MEM | grep -qE &quot;$url&quot;; then<br />                                #append the new &#039;$url&#039;<br />                                MEM=&quot;$MEM $url&quot;<br />                                addr $url<br />                        fi<br />                fi<br />        done<br />else<br />        #filtraggio<br />        URL=`echo &quot;$1&quot; | sed -re &quot;s%http[s]?://%%; s%ftp://%%; s%/% %g&quot; | awk &#039;{ print $1 }&#039;`<br />        #check l&#039;esitenza di &#039;$URL&#039; in /etc/hosts<br />        LINE=`grep -E &quot;$URL&quot; /etc/hosts`<br />        if [ -n &quot;$LINE&quot; ]; then<br />                echo &quot;The &#039;$URL&#039; has already set up.&quot; &amp;&amp; exit 0<br />        fi<br />fi<br />#dati grezzi ottenuti dal comando ping<br />if [ -n &quot;$URL&quot; ]; then<br />        RAW_DATA=`ping -w 1 &quot;$URL&quot; 2&gt; /dev/null`<br />        if [ &quot;`echo &quot;$URL&quot; | sed -re &quot;s%\.% %&quot; | awk &#039;{ print $1 }&#039;`&quot; != &quot;www&quot; -a -z &quot;$RAW_DATA&quot; ]; then<br />                #riprova ad fare il ping con &#039;www.&#039; davanti a $URL<br />                URL=&quot;www.$URL&quot;<br />                RAW_DATA=`ping -w 1 &quot;$URL&quot; 2&gt; /dev/null`<br />        fi<br />        #controlla se ci sono dati grezzi<br />        if [ -n &quot;$RAW_DATA&quot; ]; then<br />                #filtra rimanedo solo indirizzo numerico<br />                ADDRESS=$( echo $RAW_DATA | awk &#039;{ print $3 }&#039; | sed &#039;s%(%%g; s%)%%g&#039; )<br />                URL=$( echo $RAW_DATA | awk &#039;{ print $2 }&#039; )<br />                checkHosts<br />                #aggiunge<br />                echo &quot;$ADDRESS          $URL&quot; &gt;&gt; /etc/hosts<br />                echo &quot;It has appended &#039;$ADDRESS          $URL&#039; into /etc/hosts&quot;<br />        else<br />                #caso in cui il ping non riesce ad trovare il server<br />                echo &quot;&#039;$URL&#039; is not traced.&quot;<br />                exit 1<br />        fi<br />else<br />        echo &quot;WARNING! There is no URL.&quot;<br />fi<br />exit 0



Ritratto di farthest
#8

Inviato da farthest il Ven, 29/07/2005 - 06:48.

Re: Mi voglio far male!

purtroppo ho riscontrato un problema proprio con netstat...
esso tronca gli URL se troppo lunghi, es. fedoraitalia.org
diventa 'fedoraitalia.o' !!

Cavolo Thinking

quindi meglio la cache del broswer Wink