Być może korzystając z mojego skryptu rsget-mod lub w innej sytuacji, potrzebowaliście połączyć się z jakimś zewnętrznym urządzeniem w celu - ja wiem? - restartu routera, zmiany konfiguracji itp. Najczęściej - bo najprościej - używa się do takiego celu telnetu, ponieważ to najbanalniejszy protokół i twórcom sprzętu prościej go implementować niż takie SSH. Pojawia się jednak problem - jak z poziomu skryptu połączyć się z urządzeniem?
Pierwsza rzecz, która przyszła mi do głowy to skierowanie strumienia STDIN do programu klienckiego telnet. Niestety, klasyczne przekazanie strumienia nie działa w tym przypadku (trudne, żeby działało). Potem pomyślałem o netcacie - 'szwajcarskim scyzoryku do TCP/IP'. Niestety, on też nie chciał działać jak trzeba. Męczyłem się, kombinowałem, w końcu jednak Michał Górny przypadkowo naprowadził mnie na dobrą drogę. Przypomniałem sobie jak w zenity rozwiązany jest progressbar i mnie olśniło. Trochę kombinowania i mam rozwiązanie.
Na początku należy samodzielnie połączyć się z panelem, żeby zobaczyć jak wygląda proces autoryzacji. W moim przypadku trzeba połączyć się z ip 192.168.2.1 wpisać login (root) i hasło, a następnie wydać polecenie (u mnie: reboot, potem y). Gdy już wiemy jak to wygląda, konstruujemy banalny skrypcik:
( echo "open 192.168.2.1"; sleep 0.5; echo "root"; sleep 0.5; echo "haslo"; sleep 0.5; echo "reboot"; sleep 0.2; echo "y"; ) | telnet
Jak to działa? Uruchamia telnet i po kolei wpisuje mu w ten sam sposób jak wpisywałaby to osoba z klawiatury kolejne polecenia - połączenie z serwerem, następnie wszystko to co powinno pójść do serwera. Zwróćcie uwagę na te wszystkie polecenia sleep - mają one na celu przytrzymania skryptu na czas łączenia się oraz reakcji sprzętu na wpisywane polecenia. Bez nich wszystko wysłałoby się wszystko równocześnie i zostałoby zagubione w trakcie.
Jak widać, napisanie takiego skryptu jest wbrew pozorom banalne. Mam nadzieję, że przyda się ono osobom korzystającym z mojego skryptu oraz tym, które potrzebują takiego rozwiązania u siebie. Happy hacking ;)
Uważajcie, bo to zniszczy wam psychikę: wiecie jak Rapidshare zapamięŧuje użytkowników Premium?
Information about the selected Cookie:
Name: user
Content: {user}:{haslo "zakodowane" hexem w formacie %XX)
Domain: .rapidshare.com
Path: /
Send for: Any type of connection
Expires: 11/13/2024 15:56:15
... ale przynajmniej implementacja ściągania za pomocą kont Premium w rsget-modzie będzie prosta :|
Ten wpis jest z dużą dozą prawdopodobieństwa nieaktualny. Wszelkie informacje dotyczące skryptu rsget-mod znajdziesz na oficjalnej stronie projektu oraz google code
Uh, po wielu ciężkich godzinach pisania i testowania (taa, akurat :P) przenoszę wersję 0.6 do stable. Nie wiem szczerze mówiąc jak skrypt poradzi sobie z aktualizacją 0.5.1 → 0.6, ale mam nadzieję, że bezproblemowo, bo nie mam siły dzisiaj się bawić.
Oprócz tego projekt wylądował na Google Code i posiada wersję SVN, którą oznaczam jako 0.7. Chwilowo to po prostu 0.6 ze zmienionym numerkiem, ale jak wrócę do siły to się tym zajmę :)
Wysłanie HEAD (za pomocą wget --spider) do serwera na dowolny link z Rapidshare zwraca informacje dotyczące pliku, który możesz pobrać, a nie strony poprzedzającej takowe. W jaki więc sposób mogę sprawdzać linki pod kątem pułapek takich jak te ?
Działa już oficjalna strona skryptu rsget-mod. Starałem się, żeby była ładna i przejrzysta, ale ocena efektu końcowego już nie należy do mnie :)
Zapraszam również poraz kolejny do testów wersji unstable.
Reklamy: sklep komputerowy ,
19-letni geek-webdesigner uczęszczający do ZSE w Bydgoszczy. więcej...