0xcafebabe -- per aspera ad astra

Dokument pobrany z: http://www.anadoxin.org/blog/node/64

Orange Multibox Handler
Tagi:  •    •  
Kolejna wersja tego skryptu, wydana głównie w celach "zwiększenia" kompatybilności z aktualnym wyglądem serwisu orange.pl. Jego webmasterzy wpadli na pomysł kompletnej zmiany mechaniki, więc i poprzedni skrypt przestał działać. Jako, że wykorzystuję go codziennie, musiałem poświęcić trochę czasu na jego poprawę.

Dla zastanawiających się po co ktoś miałby używać tego skryptu, mogę jedynie rzucić sugestię i zarysować przykładową sytuację polegającą na otrzymywaniu smsa podczas gdy na którymś z serwerów wykryto logowanie na root'a ;). Lub też, dla mniejszych paranoików, gdy któryś serwer nie odpowiada na połączenia pod konkretny port (czyt. padnięta usługa), lub też gdy bardzo czekamy na jakiś event, można postawić monitor triggerujący uruchomienie tego skryptu na swój numer komórkowy... (update: można też monitorować zdrowie naszych dysków twardych poprzez monitorowanie tablic SMART i notyfikację przez SMS gdy pojawi się jakiś problem)

Sama idea działania skryptu nie zmieniła się:

  1. 1. Skrypt wchodzi na stronę główną, pobierając ciastko JSESSIONID i inne, charakterystyczne dla CMSa orange.pl,
  2. 2. Następuje logowanie przy użyciu dostarczonego loginu i hasła,
  3. 3. Logowanie przekierowuje na specjalną stronę mającą na celu przekierowanie do faktycznej strony po zalogowaniu. Zapewne ktoś wpadł na pomysł dorobienia kolejnej warstwy analizującej ruch na stronie...
  4. 4. Skrypt wchodzi na stronę główną skrzynki Multibox, aby odczytać pozostałą ilość darmowych SMSów,
  5. 5. Jeśli ilość na to pozwala (czyt. jest większa niż nic ;>), skrypt "wypełnia" formularz i wysyła do serwera. Serwer ponownie przekierowuje na stronę wirtualną, ale na szczęście zakończenie operacji można sprawdzić na podstawie tego, gdzie ta wirtualna strona nas przekieruje; jeśli na stronę z formularzem SMSa, wtedy sms nie zostanie wysłany. Jeśli do listy wysłanych wcześniej sms'ów, wtedy zostanie wysłany.

Aby ułatwić dystrybucję na wszystkie maszyny, postawiłem odpowiednie repozytorium na gitorious.org. Otrzymywanie kodu źródłowego polega na uruchomieniu:

  1. $ git clone git://gitorious.org/orangesms/orangesms.git

Skrypt oczekuje katalogu ~/.orangesms i plików login.conf oraz phonebook.conf, które muszą mieć prawa 0600. Pierwszy z nich zawiera dane konta Orange Online - te, które wpisujesz na stronę, by móc się zalogować. Syntax pliku to (zwróć uwagę na BRAK entera na końcu pliku):

  1. username,password

Plik phonebook.conf zawiera mapę numerów telefonów i ich przyjaznych nazw, czyli np.

  1. alpha=502100100
  2. beta=502102102
  3. gamma=502103103
  4. omega=502104104

Dzięki temu posługując się linią poleceń możesz wpisywać przyjazne nazwy, a skrypt zamieni je na konkretne numery telefonów. Dzięki temu historia poleceń będzie wolna od numerów telefonów, być może są też i inne plusy takiego podejścia ;).

Na koniec krótkie wideo z przykładu użycia skryptu. (upewnij się, że oglądasz wersję HD)

Mógłbyś dorobić ficzer multikonta. Bo jednak 30 smsów to nie wiele, a można przecież użyć kilku kont orange :>
Właściwie to masz rację. Gdy czas pozwoli :)
skrypt na desktopie (debian sid, ruby 1.8.7 (2011-06-30 patchlevel 352) [i486-linux]) działa idealnie, ale na serwerze (freebsd ruby 1.8.7 (2010-08-16 patchlevel 302) [amd64-freebsd8]) Wywala error. "[i] logowanie ok, wysylanie sms... Blad w logice wysylania SMSa. Najprawdopodobniej zmieniono mechanike dzialania serwisu. Opis: Przechodzenie na strone bramki nie powiodlo sie. Wyjatek: BadStep4 nil"

arhu, spróbuj odpalić tą wersję:

http://anadoxin.org/blog/files/u0/smsorange_debug_211111.rb

Może wyświetlić dużo informacji, więc najlepiej skieruj wyjście do pliku i wystaw ten plik. Nie wiem jeszcze gdzie może być problem, ale skrypt strzelał już swoje fochy na Linuxie PLD, być może problem jest podobnej natury ;)


Debug: [...]
Dzięki. Co prawda z samego dumpa wywnioskować jednak wiele nie mogę, ale mam jeszcze jedną teorię. Sugerowałbym jednak przełączenie się na jakieś bardziej ludzkie medium ;)