15/12/2011
autovodafone versione 0.3: esecuzione senza privilegi di root e riduzione del numero di file temporanei
Dopo le versioni 0.1 e 0.2 di autovodafone, ecco la versione 0.3 ulteriormente ottimizzata rispetto alle precedenti:
#!/bin/bash
#File di log
FILELOG=/var/log/autovodafone
data=$(date)
echo "Inserisci il destinatario:"
read destinatario
if [[ ! $destinatario =~ "+39" ]]; then
destinatario="+39$destinatario"
fi
echo "Inserisci l'oggetto del messaggio:"
read oggetto
echo "Inserisci il testo del messaggio:"
read testo
echo "$testo" > text
cat text | sed -f urlencoding.sed > encoded
enc=$(cat encoded)
curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out
sed -n -e s/"//g -e "s/ /+/g" -e "2p" out > out1
url="http://mmsviaweb.net.vodafoneomnitel.it"
url1=$(cat out1)
url2=$(echo "$url$url1")
curl -b cookiev.txt $url2 > result
if grep -q "SendMessage=1" result;then
echo "messaggio inviato"
echo "$data: messaggio inviato" >> $FILELOG
else
echo "il messaggio non e' stato inviato"
echo "$data: il messaggio non e' stato inviato" >> $FILELOG
fi
rm out*
rm cookiev.txt
rm text
rm encoded
rm result
exit 0
In particolare, mediante il comando:
sed -n -e s/"//g -e "s/ /+/g" -e "2p" out > out1
ho ridotto il numero di file temporanei, grazie all'utilizzo ottimizzato di sed (espressioni multiple).
Per poter eseguire lo script senza i privilegi di root, dovete prima identificare il proprietario dei seguenti file:
autovodafone
urlencoding.sed
/var/log/autovodafone
e nel caso in cui ce ne fosse bisogno, potete modificare il loro owner mediante il comando:
nightfly@nightbox:~$ sudo chwon vostrouser:vostrogruppo nomefile
A questo punto l'esecuzione dello script senza privilegi di root dovrebbe filare liscia.
Bye.
Aggiornamento
Il servizio Vodafone MMS gratis da Web non esiste più (ne è la riprova il timeout che ci becca ad ogni tentativo di contattare la URL http://mmsviaweb.net.vodafoneomnitel.it). Per maggiori informazioni potete consultare questo 3d.
20:52 Scritto da: nazarenolatella in SO: Linux | Link permanente | Commenti (0) | Segnala | Tag: mms gratis, vodafone mms, sed, root, chown, regex | OKNOtizie |
Facebook
23/11/2011
autovodafone versione 0.2: URL-encoding completo e meccanismi di controllo
Come avevo già preannunciato in questo post, ecco la versione 0.2 dello script bash per l'invio di MMS gratis mediante Vodafone.it:
#!/bin/bash
#File di log
FILELOG=/var/log/autovodafone
ROOT_UID=0
#Controllo che lo script venga eseguito da root
if [ "$UID" -ne "$ROOT_UID" ];then
ERRORE1="Errore 1: Devi essere root per eseguire lo script"
echo $ERRORE1
echo "$(date) $ERRORE1" >> $FILELOG
exit 1
fi
data=$(date)
echo "Inserisci il destinatario:"
read destinatario
echo "Inserisci l'oggetto del messaggio:"
read oggetto
echo "Inserisci il testo del messaggio:"
read testo
echo "$testo" > text
cat text | sed -f urlencoding.sed > encoded
enc=$(cat encoded)
curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out
sed -n '2p' out > out1
sed -e s/"//g out1 > out2
sed -e "s/ /+/g" out2 > out3
url="http://mmsviaweb.net.vodafoneomnitel.it"
url1=$(cat out3)
url2=$(echo "$url$url1")
curl -b cookiev.txt $url2 > result
if grep -q "SendMessage=1" result;then
echo "$data: messaggio inviato" >> $FILELOG
else
echo "$data: il messaggio non e' stato inviato" >> $FILELOG
fi
rm out
rm cookiev.txt
rm text
rm encoded
rm result
exit 0
Nella fattispecie, ho creato il file urlencoding.sed per la codifica del testo relativo all'MMS, il cui contenuto è il seguente:
s/%/%25/g
s/ /%20/g
s/ /%09/g
s/!/%21/g
s/"/%22/g
s/#/%23/g
s/$/%24/g
s/&/%26/g
s/'''/%27/g
s/(/%28/g
s/)/%29/g
s/*/%2a/g
s/+/%2b/g
s/,/%2c/g
s/-/%2d/g
s/./%2e/g
s///%2f/g
s/:/%3a/g
s/;/%3b/g
s//%3e/g
s/?/%3f/g
s/@/%40/g
s/[/%5b/g
s//%5c/g
s/]/%5d/g
s/^/%5e/g
s/_/%5f/g
s/`/%60/g
s/{/%7b/g
s/|/%7c/g
s/}/%7d/g
s/~/%7e/g
s/ /%09/g
Ho voluto avvalermi di sed per omogeneità, ciò non significa che tale operazione non sia fattibile attraverso linguaggi di scripting esterni (ad esempio perl).
Inoltre, mediante le seguenti righe di codice:
if grep -q "SendMessage=1" result;then
echo "$data: messaggio inviato" >> $FILELOG
else
echo "$data: il messaggio non e' stato inviato" >> $FILELOG
fi
ho previsto dei controlli (molto basilari) relativi all'esito dell'operazione di inoltro degli MMS, il cui risultato verrà salvato sul file di log (con data e ora).
Qualunque suggerimento per estendere e/o migliorare lo script rimane comunque il benvenuto.
A presto.
09:00 Scritto da: nazarenolatella in SO: Linux | Link permanente | Commenti (0) | Segnala | Tag: mms gratis, bash, script, scripting, vodafone, url-encoding, sed | OKNOtizie |
Facebook
25/09/2009
Script Bash per l'invio tramite SMS dei risultati delle partite
Vi è mai capitato di aver giocato una o più schedine e di non poter controllare i risultati aggiornati perchè ci si trova fuori casa? Ebbene, questo è lo script che fa per voi. Basta avere a disposizione una macchina Linux ed un numero Vodafone abilitato alla ricezione degli MMS.
Per prima cosa andiamo ad individuare quali software sono necessari per il corretto funzionamento dello script:
1) Lynx, ovvero un browser testuale. Per installarlo basta digitare il comando (su Kubuntu 9.04)
sudo apt-get install lynx
2) MoioSMS, ovvero un client da linea di comando che ci permette di inviare gratuitamente MMS verso i numeri Vodafone. Per installarlo occorre aggiornare la lista dei repository aggiungendo la seguente stringa al file /etc/apt/sources.list
deb http://www.moioli.net/files/repository ubuntu beta
e successivamente lanciando il comando
sudo apt-get update
Bene, una volta completata l'installazione dei software sopra elencati possiamo procedere con la creazione di una nuova directory, che nella fattispecie chiameremo partite, all'interno della quale salvare tutti i file necessari al nostro script. Digitiamo quindi:
mkdir partite
dopo esserci posizionati sulla nostra home.
Adesso creiamo il file controlla_partite, all'interno del quale andremo ad inserire il nome di una o più squadre impegnate nei match di nostro interesse.
touch controlla partite
Apriamo il file in scrittura usando un editor di testo ed aggiungiamo ad esempio la stringa AS Roma. Salviamo e chiudiamo il file. Di seguito è presente un esempio del contenuto relativo al file controlla_partite:
Juventus
As Roma
Lazio
Creiamo il file di log che chiameremo matchlog in cui verranno salvati tutti gli eventuali errori generati durante l'esecuzione del nostro script. Tale file dovrà essere posizionato all'interno della dir /var/log:
sudo touch /var/log/matchlog
Ora creiamo un altro file chiamato match all'interno del quale andremo ad inserire il seguente codice:
#!/bin/bash
#File di log
FILELOG=/var/log/matchlog
#Numero di Telefono a cui inviare
NUMERO=<numero di cell al quale inviare gli MMS>
#Account MMS
ACCOUNT="Vodafonemms"
ROOT_UID=0 #necessario per MoioSMS e per scrivere nella cartella /var/log
#Controllo che lo script venga eseguito da root
if [ "$UID" -ne "$ROOT_UID" ];then
ERRORE1="Errore 1: Devi essere root per eseguire lo script"
echo $ERRORE1
echo "$(date) $ERRORE1" >> $FILELOG
exit 1
fi
if [ -s controlla_partite ];then
lynx -dump www.livescore.com > risultati.txt
while read line
do
cat risultati.txt | grep "${line}" >> cambiamenti;
sed -i 's/[[0-9a-zA-Z.]*]//g' cambiamenti; #rimuovo i marcatori generati da lynx
done < controlla_partite
if [ -s cambiamenti ];then
sed -i 's/ */ /g' cambiamenti; #sostituisco gli spazi multipli con un unico spazio
cut -d" " -f 3- cambiamenti > cambiamenti_temp;
if [ -f cambiamenti_temp ];then
sed -i 's/^[ t]*//g' cambiamenti_temp; #elimino gli spazi vuoti ad inizio riga
if [ -f cambiamenti_backup ];then
#confronto i due file e salvo le differenza all'interno di notifica
diff cambiamenti_temp cambiamenti_backup > notifica
else
touch cambiamenti_backup;
cp cambiamenti_temp cambiamenti_backup
rm cambiamenti
exit 1
fi
else
ERRORE3="Errore 3: Il file cambiamenti_temp non esiste."
echo $ERRORE3
echo "$(date) $ERRORE3" >> $FILELOG
exit 1
fi
else
if [ -f cambiamenti ];then
rm cambiamenti #nel caso in cui cambiamenti sia vuoto
else
ERRORE2="Errore 2: Il file cambiamenti non esiste. Controlla i permessi"
echo $ERRORE2
echo "$(date) $ERRORE2" >> $FILELOG
fi
exit 1
fi
#se il file notifica esiste e non risulta vuoto, ovvero ci sono differenze
if [ -s notifica ];then
#aggiorno il file di backup usato per il confronto
cp cambiamenti_temp cambiamenti_backup
#individuo i parametri da inviare con l'SMS
TESTOSMS=$(cat cambiamenti)
ESITO=$(sms $NUMERO "$TESTOSMS" $ACCOUNT) #invio le informazioni
#ora posso rimuovere il file notifica in quanto il messaggio risulta inviato
rm notifica
#elimino il file cambiamenti in quanto il messaggio risulta inviato
rm cambiamenti
else
rm notifica
rm cambiamenti
fi
else
if [ -f cambiamenti_temp ];then
rm cambiamenti_temp;
fi
if [ -f cambiamenti_backup ];then
rm cambiamenti_backup;
fi
exit 1
fi
exit 0
Come potete notare lo script è ampiamente commentato, quindi vi sarà certamente possibile capirne il senso. Ho inoltre inserito parecchi controlli (aumentando inevitabilmente le righe di codice) per evitare comportanenti inaspettati.
Digitiamo, inoltre, il comando:
sudo chmod +x match
per rendere eseguibile il nostro file.
Non ci resta che mandare in esecuzione lo script ogni 5 minuti in modo che venga effettuato un monitoraggio costante delle partite. Per fare ciò basta aggiungere la seguente regola a cron, editando il file /etc/crontab:
*/5 * * * * root cd /home/nightfly/partite && ./match > /dev/null 2>&1
A presto.
PS: ovviamente lo script non è immune da eventuali errori o miglioramenti, nel caso in cui ne individuaste qualcuno non esitate a contattarmi.
PPS: se non volete controllare l'esito di alcun match rimuovete il file controlla_partite oppure svuotatelo completamente mediante il comando:
sudo cat /dev/null > controlla_partite
e successivamente, per verificare che il file sia effettivamente vuoto basta digitare:
stat -c %s controlla_partite
20:23 Scritto da: nazarenolatella in SO: Linux | Link permanente | Commenti (3) | Segnala | Tag: bash, scommesse, kubuntu 9.04, script, mms gratis | OKNOtizie |
Facebook

















