Nerdblog.pl

Telnetowanie w skryptach

Dodano: 21.05.2009

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 ;)

rsget-mod - wersja 0.6 przeniesiona do stable

Dodano: 17.03.2009

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ę :)

rsget-mod - oficjalna strona

Dodano: 21.02.2009

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.

rsget-mod 0.6

Dodano: 16.02.2009

Ten wpis jest z dużą dozą prawdopodobieństwa nieaktualny. Wszelkie informacje dotyczące skryptu rsget-mod znajdziesz na oficjalnej stronie projektu oraz google code

Rozdzieliłem rsget-moda na dwie gałęzie - stabilną i niestabilną. Obie dostępne są pod adresem http://rs.nerdblog.pl. Osoby korzystające z rsget-moda na różnych 'egzotycznych' systemach (OpenWRT, różnego rodzaju linuksowe routery, itp) proszone są o korzystanie z wersji stabilnej. Chętnych do testowania wersji unstable proszę o opinie i bug-reporty :)