Skrypty logowania do portali web

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Skrypty logowania do portali web

Post autor: rryk »

Tytułem wstępu:
Wpis pochodzi z forum linux360.pl, gdzie mój poprzedni wątek o "podobnym" temacie zniknął, niektórzy się pewnie domyślają dlaczego, inni niekoniecznie. Tak czy siak moje intencje były dobre i miały szlachetne pobudki. Zaś po krótkiej rozmowie z moderatorem postanowiłem, że napiszę to tak jak powinno być napisane, a że może okazać się to niezwykle przydatne udostępniam to także na innych forach.

Treść właściwa:
Wielu z was chciało by za pomocą skryptu sprawdzać nowe wiadomości na nk czy na innych tego typu serwisach. Mając taki skrypt można byłoby go dodać do conky'ego i być zawsze na bieżąco. Postaram się wam nieco pomóc w napisaniu takiego skryptu.

Co należy wiedzieć:
Zacznijmy od tego, że większość serwisów opiera się na wymianie informacji metodami GET i POST. My skoncentrujemy się na tej drugiej metodzie, a mianowicie POST, gdyż to ona wysyła informacje do serwera.

Co, jak i gdzie?
Wiemy jaka metoda odpowiada za wysyłkę ale co wysyła, gdzie wysyła i jak wysyłać z poziomu konsoli. No to po kolei, co tak właściwie wysyłamy do tego serwera, żeby to sprawdzić szybko, łatwo i przyjemnie, bez babrania się w kodzie, potrzebować będziemy wtyczki do Firefoxa o nazwie Live HTTP Headers. Jej instalacja nie jest jakoś specjalnie trudna więc nikt nie powinien mieć żadnych problemów. Po jej instalacji w zakładce ,,Narzędzia'' mamy nową pozycję (Live HTTP Headers), uruchamiamy ją, i sprawdzamy jak to działa.
Po włączeniu ukazuje się nam proste i przejrzyste okienko z czterema zakładkami, my skorzystamy z dobrodziejstw Generatora i Headers. Generator rejestruje praktycznie wszystko, od GET, poprzez POST aż po redirects. Zaś Headers nagłówki. Zobaczmy jak to działa na przykładzie nk.pl. Pamiętajmy, że aby sprawdzić okienko Live HTTP Headers musi być ciągle otwarte. Wchodząc na nk.pl w Generatorze widzimy masę GET-ów, ale to nas nie interesuje, my potrzebujemy POST-ów więc przechodzimy do logowania, odznaczamy ,,zaloguj bezpiecznie po SSL'' (UWAGA z tego co się orientuje wget nie obsługuje szyfrowania SSL), wpisujemy login, hasło i klikamy zaloguj. Tym razem w generatorze powinno nam śmignąć na początku POST potem same GET. Więc odszukajmy nasze logowanie, które powinno wyglądać mniej więcej tak:

Kod: Zaznacz cały

POST /login login=login&password=haslo
Jak widzimy metodą post została wysłana wiadomość o treści:

Kod: Zaznacz cały

login=login&password=haslo
Ale gdzie ta wiadomość została wysłana? Jak wskazują nam logi wysłano ją na adres /login. Z tym, że to nie jest pełna nazwa, a tylko końcówka, którą dodajemy do adresu. W naszym przypadku pełną nazwą będzie

Kod: Zaznacz cały

[url]http://nk.pl/login[/url]
Dzięki temu wiemy już jak i gdzie, ale zaraz, zaraz to po co nam Header? Otóż Header zawiera informacje takie jak np. User-agent, który identyfikuje przeglądarkę, czy Referer, który wskazuje skąd nastąpiło przekierowanie. Te informacje są czasem swego rodzaju zabezpieczeniem, więc ich stosowanie jest niezwykle ważne. Aby się dowiedzieć jaki mieliśmy Referer i jaki User-agent jest ustawiony wchodzimy w zakładkę Headers i szukamy

Kod: Zaznacz cały

[url]http://nk.pl/login[/url]
tam wszystko będzie ładnie napisane. W ten sposób mamy już wszystko co potrzebne, aby się zalogować. Do logowania użyjemy znanego wszystkim programu wget.
Można też co prawda użyć cURL-a czy Lynxa, ale o tym parę wersów niżej.
Oto magiczne polecenie:

Kod: Zaznacz cały

wget -q --user-agent="Tutaj podajemy naszego User-agenta" --keep-session-cookies --save-cookies=zapisane_ciastka.txt --referer=http://nk.pl/ --post-data="wiadomość POST którą wyłuskaliśmy z logów" -O zalogowany.html http://nk.pl/login
Oczywiście trzeba uzupełnić to polecenie odpowiednimi parametrami, tak aby końcowy efekt był np. taki:

Kod: Zaznacz cały

userAgent="Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3"
wget -q --user-agent="$userAgent" --keep-session-cookies --save-cookies=zapisaneciastka.txt --referer=http://nk.pl/ --post-data="login=login&password=haslo" -O zalogowany.html http://nk.pl/login
Następnie, za pomocą dowolnej przeglądarki, otwieramy plik zalogowany.html i sprawdzamy czy rzeczywiście działa, jeśli tak to kolejne kroki, jak wysyłanie wiadomości, możecie zrobić sami pamiętając tylko, że tym razem otwieramy ciasteczka, a nie zapisujemy. Czyli przyszłe polecenia powinny wyglądać mniej więcej tak:

Kod: Zaznacz cały

wget -q --user-agent="$userAgent" --keep-session-cookies --load-cookies=zapisaneciastka.txt --referer=http://naszreferer.pl/ --post-data="msg=nasza+wiadomosc" -O wiadomosc.html http://nk.pl/login
Oczywiście można też przypisać cały kod html do zmiennej np.

Kod: Zaznacz cały

logowanie=`wget -q --user-agent="$userAgent" --keep-session-cookies --save-cookies=zapisaneciastka.txt --referer=http://nk.pl/ --post-data="login=login&password=haslo" -O - http://nk.pl/login`
Na zakończenie
Mam nadzieje, że poradnik się podobał i nie przynudzałem. Więcej o opcjach użytych przy wget macie w podręczniku systemowym. Informacje tutaj zawarte powinny wam pomóc w sprawdzaniu poczty nk czy nawet wysyłaniu wiadomości nk przez konsolę. Przypominam, że na podobnej zasadzie działa większość portali web...

Pozdrawiam Eryk Rutkowski.

PS. Zakaz kopiowania tekstu bez zgody autora.

Edycja:
Przypominam, że spam jest określony w Kodeksie Karnym oraz w Ustaawie o świadczeniu usług drogą elektroniczną.
Art. 269a kk Kto, nie będąc do tego uprawnionym, przez transmisję, zniszczenie, usunięcie, uszkodzenie lub zmianę danych informatycznych, w istotnym stopniu zakłóca pracę systemu komputerowego lub sieci teleinformatycznej, podlega karze pozbawienia wolności od 3 miesięcy do lat 5.
Art. 24 ustawy o świadczeniu usług drogą elektroniczną
1. Kto przesyła za pomocą środków komunikacji elektronicznej niezamówione informacje handlowe, podlega karze grzywny.
2. Ściganie wykroczenia, o którym mowa w ust. 1, następuje na wniosek pokrzywdzonego.
Więc proszę niech nikt nie wykorzystuje zdobytej tu wiedzy do spamowania jakiegokolwiek serwisu.

Edycja2
Jak napisałem wcześniej w cURL też się da, więc, jakby ktoś był zainteresowany.

Do zapisywania ciastek, czyli takie polecenie jakby do logowania:

Kod: Zaznacz cały

userAgent="Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3"
curl --user-agent "$userAgent" --cookie-jar zapisaneciastka.txt --referer "http://nk.pl" --data "login=login&password=haslo" http://nk.pl/login
I do wczytywania ciasteczek czyli ewentualnie dalszych działań jak np. wysyłanie wiadomości.

Kod: Zaznacz cały

userAgent="Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3"
curl --user-agent "$userAgent" --cookie zapisaneciastka.txt --referer "http://nk.pl" --data "msg=nasza+wiadomosc" http://nk.pl/wiadomosc_add
Zablokowany