Wszystko o routerach
Najnowsze artykuły
SMS to email
Na wst?pie podam informacje na jakim sprz?cie testowa?em mój skrypt i co jest niezb?dne do jego dzia?ania.
Sprz?t:
Zestaw nr 1 - Router NETGRAR WNR-3500Lv2 plus modem Huawei E3131 (non-hilink)
Zestaw nr 2 - Router ASUS RT-N18u plus modem Huawei E3372h-153 (hilink)
Modemy zakupione w PLAY bez ?adnych modyfikacji - pod??czone z pó?ki.
Tomato by Shibby 1.38 z zainstalowanym optware i pakietami bash (nie wymaga komentarza), gnokii (odczyt, kasowanie zawarto?ci karty SIM), nail (wysy?ka maili dzia?a dobrze na routerach MIPSEL i na ARM)
Co jest potrzebne na wst?pie:
1. Podpi?ty do routera jaki? zasób: karta SD, dysk twardy itp. aby zainstalowa? OPTWARE i podmontowa? co? co ja nazwa?em ROUTER dla przechowywania danych
1.1. przygotowa? partycj? zgodnie z innymi tutorialami, przyda si? zapewne komenda:
fdisk /dev/sda
poustawia? co trzeba, nast?pnie przycisk w i restart routera. Dla sprawdzenia:
fdisk -l /dev/sda
powinny wy?wietli? si? nasze partycje
Formatowanie partycji
mkfs.ext3 /dev/sda1
mkfs.ext3 /dev/sda2
Nie bior? odpowiedzialno?ci za wynalazki na partycjach ntfs itd.
Ja mam za?o?one dwie partycje wi?c je sobie ponazywa?em:
e2label -L opt /dev/sda1
e2label -L router /dev/sda2
Dla sprawdzenia czy wszystko jest ok:
blkid
powinny oprócz identyfikatorów UUID pojawi? si? LABEL
1.2. Montowanie partycji
mount LABEL=opt /opt
mkdir /mnt/router
mount LABEL=router /mnt/router
1.3. Instalowanie OPTWARE - skrypt instalacyjny optware w wersji 1.38 jest gotowy-czeka na wywo?anie, wi?c:
cd /opt
optware-install.sh
Dla sprawdzenia czy ten krok zosta? poprawnie zako?czony mo?na wyda? polecenie:
ipkg update
ipkg upgrade
1.4. Instalowanie pakietów
ipkg install mc bash gnokii nail
Dla sprawdzenia czy ten krok zosta? poprawnie zako?czony mo?na wyda? polecenie:
ipkg list_installed
powinny wy?wietli? si? pakiety, które mamy zainstalowane na naszym routerze.
1.5. Aby nasze dzia?ania zosta?y poprawnie wykonane po restarcie routera do SCRIPTS na stronie konfiguracyjnej dodajemy:
do skryptu INIT
echo "export PATH=/opt/bin:/opt/sbin:$PATH" > /root/.profile
do skryptu FIREWALL
mkdir /mnt/router
mount LABEL=router /mnt/router -o rw,nodev,noatime,errors=continue,barrier=0,data=ordered
mount LABEL=opt /opt -o rw,nodev,noatime,errors=continue,barrier=0,data=ordered
2. konfigurowanie gnokii
W lokalizacji /mnt/router/ tworzymy konfiguracj? dla gnokii
cd /mnt/router
mkdir gnokii
cd gnokii
touch gnokiirc
mcedit gnokiirc
[global]
model = AT
port = /dev/ttyUSB2
connection = serial
w mcedit F2-zapis i F10-wyj?cie
Uwaga co do linijki: port = /dev/ttyUSB2 - u mnie jest port USB2, u Was mo?e by? inna liczba, najlepiej sprawdzi?:
ls -la /dev/tty*
lub
ls -la /dev/ttyUSB*
Kolejna wa?na uwaga, modem musi by? "u?ywany" w systemie routera. Nie wystarczy go w?o?y? do portu USB. W sekcji BASIC ja mam w??czony WAN w oparciu o modem GSM 3.5 (lub LTE) lub DualWAN w oparciu o modem LTE (lub 3.5G) cho?by z ustawieniem Load Balance Weight: 0 - czyli failover. Wg moich testów to karta mo?e nie mie? aktywnego pakietu danych, nawet modem mo?e mruga?, a nie ?wieci? ?wiat?em sta?ym i tak b?dzie dzia?a?o.
Dla sprawdzenia czy ten etap mamy ok, wydajemy polecenia:
ln -s /mnt/router/gnokii/gnokiirc /opt/etc/gnokiirc
gnokii --config /opt/etc/gnokiirc --getnetworkinfo
Powinni?my dosta? zwrotnie co? takiego:
GNOKII Version 0.6.28
Network : Play (P4) (Poland)
Network code : 260 06
LAC : 014c (332)
Cell id : 00229bf2 (2268146)
Dla ciekawskich odczyt SMSów
gnokii --config /opt/etc/gnokiirc --getsms SM 0 24
3. konfigurowanie nail
Ten pakiet mi si? sprawdzi? na ró?nych architekturach routerów i z ró?nymi serwerami pocztowymi: w tym z gmailem i z pochodz?cym z SYNOLOGY.
Do rzeczy:
cd /mnt/router/gnokii
mcedit .mailrc
wpisujemy - poni?sza konfiguracja zadzia?a?a z serwerem SYNOLOGY:
set smtp-use-starttls
set smtp-auth=login
set smtp=smtp://dokladny.adres.serwera.poczty:587
set smtp-auth-user=login_u?ytkownika
set smtp-auth-password=has?o_u?ytkownika
set from="login_u?ytkownika@domena.pl (Bardzo Wa?ny Router)"
set ssl-verify=ignore
F2-zapis i F10-wyj?cie
z Gmailem zadzia?a?o - nawet z google apps dla firm/szkó?:
set smtp-use-starttls
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set smtp-auth-user=test@mojadomena.pl
set smtp-auth-password=TAJNEhaslo
set from="test@mojadomena.pl (Router TEST)"
set ssl-verify=ignore
F2-zapis i F10-wyj?cie
tworzymy link symboliczny:
ln -sf /mnt/router/gnokii/.mailrc /root/.mailrc
Dla sprawdzenia czy wszystko dzia?a, wysy?amy maila z routera na jaki? znany nam adres:
nail moj.adres@jakasdomena.pl
Subject: Wpisujemy temat maila
Teraz piszemy tre?? maila
Naciskamy Ctrl+D aby wy?wietli? si? nam EOF - end of file
Adresat moj.adres@jakasdoemena.pl powinien odebra? maila z login_u?ytkownika@domena.pl
Je?eli chcemy to zrobi? pro?ciej to:
echo "Tresc naszego probnego maila" | nail -s "SMS z Routera" moj.adres@jakasdomena.pl
Pami?tajmy, ?e szczególnie Gmail jest kapry?ny je?li chodzi o wysy?k? maili z "mniej bezpiecznych klientów", czasem trzeba na nowo za?o?onych kontach najpierw zalogowa? si? do gmail.com i zezwoli? na ró?ne rzeczy; warto te? sprawdzi? czy konto pocztowe dzia?a za po?rednictwem klienta pocztowego takiego jak ThunderBird. Z kolei maj?c konta pocztowe na swoim serwerze bardzo cz?sto zdarza si?, ?e nasze wiadomo?ci trafiaj? do spamu u odbiorców.
4. uruchamianie skryptu emailsms.sh
Je?eli sprawdzili?my dost?p do modemu i wysy?k? mail mo?emy dostosowa? skrypt - wyedytowa? zmienne:
name="TEST" #nazwa routera uzywana w tematach i tresci maili
admin_email="twoj.adres@twoja.domena.pl" #adresat maili
admin_tel="+48505505505" #adresat SMSow
komorka_sim_max=24 #wielkosc karty SIM; jedne maja 20 komorek inne 25
send_on_mobile=1 #czy wysylac SMS z uzyciem GSMa
katalog="/mnt/router/gnokii" #katalog gdzie trzymam pliki konfiguracyjne
a skrypt nazywamy emailsms.sh i nadajemy mu prawa wykonywania:
touch /mnt/router/gnokii/emailsms.sh
po powy?szym poleceniu utworzy nam si? pusty plik - trzeba do niego wklei? zawarto?? skryptu.
chmod a+x /mnt/router/gnokii/emailsms.sh
lub
chmod 755 /mnt/router/gnokii/emailsms.sh
Skopiowa? skrypt mo?na przy u?yciu WinSCP, pami?taj?c ?eby plik mia? linuxowy a nie windowsowy sposób ko?czenia wierszy. Polecam równie? Notepad++ do edycji plików linuxowych w ?rodowisku Windows.
#!/opt/bin/bash
#Autor Jeremi Piela
#email jeremi@post.pl
#Inspiracja SHIBBY
#Wstepna definicja zmiennych
#Zmienne podlegajace konfiguracji przez admina
name="TEST" #nazwa routera uzywana w tematach i tresci maili
admin_email="twoj.adres@twoja.domena.pl" #adresat maili
admin_tel="+48505505505" #adresat SMSow
komorka_sim_max=24 #wielkosc karty SIM; jedne maja 20 komorek inne 25
send_on_mobile=1 #czy wysylac SMS z uzyciem GSMa
katalog="/mnt/router/gnokii" #katalog gdzie trzymam pliki konfiguracyjne, tymczasowe i archiwum SMS
#Tych zmiennych nie modyfikowac, chyba ze admin wie co robi
komorka_sim=0 #pierwsza komorka w karcie SIM
gsm_send=0 #przechowuje status czy przesylano juz cos przez GSM
mobile_online=1 #zmienna na razie nie uzywana
dzis=$(date +%Y.%m.%d) #zapis dzisiejszej daty
czas=$(date +%H:%M:%S) #zapis aktualnego czasu
sim_empty=1 #przechowywanie statusu czy karta sim jest pusta
#Zmiana katalogu domowego uzytkownika wywolujacego skrypt i zmiana katalogu roboczego skryptu
HOME=/root #bez tego skrypt dzial przez SSH poprawnie a przez WWW nie, dlatego ze przez WWW inne byly wartosci zmiennych srodowiskowych
cd $katalog
ln -sf $katalog/gnokiirc /opt/etc/gnokiirc
ln -sf $katalog/.mailrc /root/.mailrc
#Sprawdzenie czy dziala dostep do Internetu
ping 8.8.8.8 -c 2
if [ $? -eq 0 ]
then
echo "Siec Internet dziala";
net_online=1;
echo "----------------------------------";
else
echo "Siec Internet nie dziala";
logger "/\/\/\---/\/\/\ Nie moge wykorzystac sieci Internet do wyslania email do $admin_email";
net_online=0;
echo "----------------------------------";
fi
#Sprawdzenie czy przy poprzednim uruchomieniu skryptu udalo sie skrypt dokonczyc i skasowac plik sms.txt
if [ -f sms.txt ];
then
echo "Plik sms.txt nie zostal poprzednio skasowany";
skasowany=0;
if [ $net_online -eq 1 ]
then
cat sms.txt | nail -s "SMS z Routera $name - ponowna proba dostarczenia SMS na email" $admin_email
#Sprawdzenie czy wysylka maila zakonczyla sie bledem
if [ $? -eq 0 ]
then
echo "Udalo sie przeslac SMS na maila $admin_email przy ponownej probie";
logger "/\/\/\---/\/\/\ Udalo sie przeslac SMS na maila $admin_email przy ponownej probie";
rm sms.txt;
echo "----------------------------------";
else
echo "Nie udalo sie ponownie przeslac SMS na maila $admin_email";
logger "/\/\/\---/\/\/\ Nie udalo sie ponownie przeslac SMS na maila $admin_email";
echo "----------------------------------";
fi
else
#Sprawdzenie czy admin zyczy sobie wysylki SMS za posrednictwem GSM
if [ $send_on_mobile -eq 1 ]
then
if [ $gsm_send -eq 1 ]; then sleep 60; fi #Ta linijka jest tu nie potrzebna poniewaz i tak jest to pierwsza wysylka przez GSM
cat sms.txt | gnokii --config /opt/etc/gnokiirc --sendsms "$admin_tel";
#Sprawdzenie czy wysylka SMS zakonczyla sie bledem
if [ $? -eq 0 ]
then
echo "Udalo sie przeslac SMS na nr telefonu $admin_tel przy ponownej probie";
logger "/\/\/\---/\/\/\ Udalo sie przeslac SMS na nr telefonu $admin_tel przy ponownej probie";
rm sms.txt;
echo "----------------------------------";
gsm_send=1;
else
echo "Nie udalo sie przeslac SMS na nr telefonu $admin_tel przy ponownej probie";
logger "/\/\/\---/\/\/\ Nie udalo sie przeslac SMS na nr telefonu $admin_tel przy ponownej probie";
echo "----------------------------------";
exit 1;
fi
else
echo "Jest SMS w pliku sms.txt, ale admin nie chce wysylac za posrednictwme GSM";
exit 1;
fi
fi
else
echo "Plik sms.txt zostal podczas poprzedniego dzialania skryptu skasowany";
echo "----------------------------------";
skasowany=1;
fi
#Zasadniczy skrypt sprawdzania i wysylania SMSow na maila
echo "Dzialam na zasadniczym skrypcie"
for ((komorka_sim=0;komorka_sim sms.txt
if [ $? -eq 0 ]
then
sim_empty=0
echo "Udalo sie zapisac SMS z karty SIM z komorki $komorka_sim do pliku sms.txt";
#Archiwizacja SMSa do pliku sms_archive.txt
czas=$(date +%H:%M:%S)
echo "------ SMS dopisany z komorki SIM $komorka_sim w dniu $dzis o $czas -----" >> sms_archive.txt
cat sms.txt >> sms_archive.txt
gnokii --config /opt/etc/gnokiirc --deletesms SM "$komorka_sim"
if [ $net_online -eq 1 ]
then
cat sms.txt | nail -s "SMS z Routera $name (SIM komorka $komorka_sim)" $admin_email
if [ $? -eq 0 ]
then
logger "/\/\/\---/\/\/\ Udalo sie wyslac SMS z komorki $komorka_sim na email $admin_email";
rm sms.txt;
echo "----------------------------------";
sleep 5;
else
logger "/\/\/\---/\/\/\ Nie udalo sie wyslac SMS z komorki $komorka_sim na email $admin_email";
echo "----------------------------------";
fi
else
if [ $send_on_mobile -eq 1 ]
then
#Internet jest niedostepny, a admin zyczy sobie wysylki za posrednictwem GSM, wiec sprawdze wysylke SMSem
if [ $gsm_send -eq 1 ]; then sleep 60; fi #ta linijka dodana poniewaz za szybko wysylane SMS nie dochodzily do telefonu admina; a co ciekawe na billingu nadawcy byly widoczne
cat sms.txt | gnokii --config /opt/etc/gnokiirc --sendsms "$admin_tel";
#Sprawdzenie czy wysylka SMS zakonczyla sie bledem
if [ $? -eq 0 ]
then
echo "Udalo sie wyslac SMS z komorki SIM $komorka_sim na nr telefonu $admin_tel";
logger "/\/\/\---/\/\/\ Udalo sie przeslac SMS z komorki $komorka_sim na nr telefonu $admin_tel";
rm sms.txt;
echo "----------------------------------";
gsm_send=1;
else
echo "Nie udalo sie wyslac SMS z komorki SIM $komorka_sim na nr telefonu $admin_tel";
logger "/\/\/\---/\/\/\ Nie udalo sie przeslac SMS z komorki $komorka_sim na nr telefonu $admin_tel";
echo "----------------------------------";
exit 1;
fi
else
echo "Jest SMS w komorce $komorka_sim, ale admin nie chce wysylac za posrednictwem GSM";
exit 1;
fi
fi
else
echo "Komorka $komorka_sim na karcie SIM wyglada na pusta";
rm sms.txt;
fi
done
#Jezeli po przebiegu petli po wszystkich komorkach SIM wartosc zmiennej sim_empty natal wynosi 1 wtedy zapisz komunikat
if [ $sim_empty -eq 1 ]
then
echo "Tym razem nie bylo nowych SMSow w karcie SIM";
logger "/\/\/\---/\/\/\ Tym razem nie bylo nowych SMSow w karcie SIM";
fi
if [ $skasowany -eq 1 ]
then
echo "Plik sms.txt zostal poprzednio skasowany";
else
echo "Plik sms.txt nie zostal poprzednio skasowany";
fi
if [ ! -f sms.txt ]
then
echo "Plik sms.txt tym razem zostal skasowany";
else
echo "Plik sms.txt nie mogl byc tym razem skasowany";
fi
exit 0;
Mam nadziej?, ?e wszystko jest OK, ?e skrypt dzia?a.
4.1. Aby skrypt wykonywa? si? samodzielnie co np. 15 minut wystarczy doda? do WWW w menu SCHEDULER w dowolnej sekcji CUSTOM:
/mnt/router/gnokii/emailsms.sh

Powrót do Artykuły
Strona główna