Już kilkakrotnie borykałem się z problemami wysyłania smsów z konsoli. Nie mogłem znaleźć nic działającego. Teraz jestem bliski rozwiązania tego problemu. Na jakiejś stronie znalazłem taki kod:
#!/bin/bash
# -*- coding: UTF-8 -*-
#################################################
# sms.priv.pl #
# Wersja: v0.1 #
# Autor: Eryk Rutkowski #
# Licencja: CC by-sa v3.0 #
# Web: http://rryk.jogger.pl #
# SKRYPT NAPISANY NA POTRZEBY Info-SmS #
#################################################
login=$1 # <-Metoda bez logowania....
pass=$2
userAgent="Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.10 (maverick) Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.0.3"
nadawca=$3
siec=`echo "$4"|cut -b-3`
number2=`echo "$4"|cut -b4-`
wiadomosc=`echo "$5"|sed 's/ /+/g'`
post1="login=$login&passwd=$pass&x=8&y=10&status=login"
post2="nr=&siec=$siec&number2=$number2&tresc=$wiadomosc&od=$nadawca&status=send"
wget -q --user-agent="$userAgent" --content-disposition --no-check-certificate --keep-session-cookies --save-cookie=/home/rryk/ciastko11.txt --post-data="$post1" --referer="http://sms.priv.pl/" -O /home/rryk/logowanie.html http://sms.priv.pl/login.php
wget -q --user-agent="$userAgent" --content-disposition --no-check-certificate --keep-session-cookies --load-cookie=/home/rryk/ciastko11.txt --post-data="$post2" --referer="http://sms.priv.pl/" -O /home/rryk/wysylanie.html http://sms.priv.pl/
Niestety nie działał, więc postanowiłem zastanowić się dlaczego, skoro ze strony
http://sms.priv.pl można wysyłać darmowe smsy do wszystkich sieci bez jakichkolwiek tokenów.
Idąc dalej napisałem własny kod (oparty na tym powyżej) pomijający logowanie.
#!/bin/bash
# -*- coding: UTF-8 -*-
userAgent="Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"
referer="http://sms.priv.pl/"
nadawca="jakis nadawca"
siec=`echo "$1"|cut -b-3`
number2=`echo "$1"|cut -b4-`
wiadomosc="$2"
post2="status=send&siec=$siec&number2=$number2&tresc=$wiadomosc&od=$nadawca"
wget --user-agent="$userAgent" --no-check-certificate --keep-session-cookies --save-cookie=ciastko.txt -O logowanie.html http://sms.priv.pl
cat ciastko.txt | sed 's/10d590d95a71c0be69b76b1feb67ab90/87028a8520296148506b59cd246d43fe/g' > ciastko11.txt
rm ciastko.txt
sleep 5
wget --user-agent="$userAgent" --no-check-certificate --keep-session-cookies --load-cookie=ciastko11.txt --post-data="$post2" --referer="http://sms.priv.pl/" -O wysylanie.html http://sms.priv.pl/
rm ciastko11.txt
rm wysylanie.html
rm logowanie.html
Już zabieram się za wyjaśnianie co i jak.
Dwie linijki kodu są tutaj znaczące. Pierwszą jest:
cat ciastko.txt | sed 's/10d590d95a71c0be69b76b1feb67ab90/87028a8520296148506b59cd246d43fe/g' > ciastko11.txt
Kod ten odpowiada za podmienienie w ciasteczku linijki opisanej jako "a", o co tutaj chodzi będzie napisane dalej.
Drugą znaczącą linią kodu jest:
Bez tego również nie ruszy, pewnie strona ma jakieś zabezpieczenie antyspamowe (i słusznie).
Przykładowe ciastko pochodzące z tej strony wygląda tak:
sms.priv.pl FALSE / FALSE 0 a 10d590d95a71c0be69b76b1feb67ab90
.sms.priv.pl TRUE / FALSE 1295740799 PHPSESSID 00fb73e8a9ebd028e324a4745123c721
PHPSESSID jak można się domyślić za każdym razem jest inne, natomiast "a" pozostaje niezmienione w danym dniu, ale tutaj właśnie leży cały problem. Z moich doświadczeń wynika, że pobrane ciasteczko w linuxie ma błędny numer i dlatego smsy się nie wysyłają. Testowałem na kilku windowsach i na każdym "a" było identyczne w danym dniu. Dlatego podmieniam te numery w skrypcie i smsy spokojnie się wysyłają. Niestety jest to rozwiązanie na 24 godziny, codziennie trzeba by było zmieniać te numery.
Teraz pytanie do Was, może ktoś wymyśli dlaczego tak się dzieje? Podszywanie się pod przeglądarkę nic nie daje. Może obliczają ten hash z pobranej rozdzielczości? Niestety nie wiem jak zrobić żeby wget podał jakąś zmyśloną rozdzielczość. Sugestie?