Archivi tag: sed

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:

mms3.jpg

#!/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 scrip 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 scrip 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.

autovodafone versione 0.2: URL-encoding completo e meccanismi di controllo

Come avevo già preannunciato in questo post, ecco la versione 0.2 dello scrip bash per l’invio di MMS gratis mediante Vodafone.it:

mms2.jpg

#!/bin/bash

#File di log
FILELOG=/var/log/autovodafone

ROOT_UID=0

#Controllo che lo scrip venga eseguito da root
if [ "$UID" -ne "$ROOT_UID" ];then

        ERRORE1="Errore 1: Devi essere root per eseguire lo scrip"
        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 scrip rimane comunque il benvenuto.

A presto.