Linksys WAG120N – zmiana adresu IP z poziomu skryptu

Korzystając z Internetu czasem warto zmienić adres IP pod jakim jesteśmy widziani w sieci. Umożliwi to przykładowo pobranie następnego pliku bez oczekiwania. Oczywiście nasz ISP musi udostępniać taką możliwość (tak jest, dla przykładu z Neostradą).

W ruterze Linksys WAG120N można to zrobić za pomocą panelu kontrolnego dostępnego poprzez protokół HTTP. Czyli trzeba:

  1. wejść w przeglądarce pod właściwy adres
  2. wpisać nazwę użytkownika i hasło (lub zaakceptować zapamiętane przez przeglądarkę)
  3. przejść do Status (co)
  4. kliknąć Disconnect
  5. poczekać chwilkę
  6. kliknąć Connect
  7. poczekać chwilkę

Jak widać jest to sporo pracy. Szczęśliwie można to zautomatyzować za pomocą skryptu. Wystarczy skorzystać z sniffera (ja użyłem Wireshark).

W wyniku tego powstał poniższy skrypt powłoki (testowany w Bashu i Zsh). Mam nadzieję, że się komuś przyda. Wystarczy dokleić poniższy kod do pliku konfiguracyjnego powłoki (odpowiednio .bashrc lub .zshrc). No i należy pamiętać, że działa dużo lepiej jeśli odpowiednio ustawi się zmienne USER i PASS.

my-ip() {
  wget 'http://checkip.dyndns.org/' --quiet -O- | sed -e \
    's/[^0-9]*\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/g'
}

change-ip() {
  router-op() {
    USER="user"
    PASS="password"
    ADDR="http://192.168.1.1/setup.cgi"
    wget --http-user=$USER --http-password=$PASS $ADDR \
      --post-data $1 --quiet -O/dev/null 
  }
  REST='&this_file=Status.htm&next_file=Status.htm&message='
  echo Old IP: `my-ip`
  router-op 'ctype=pppoa&ifstatus=Up&todo=disconnect'$REST
  sleep 4
  router-op 'ctype=pppoa&ifstatus=Up&todo=connect'$REST
  sleep 8
  echo New IP: `my-ip`
}

Yakulo – automatyzacja otwierania sesji w Yakuake

Consuetude altera natura est (Przyzwyczajenie jest drugą naturą człowieka).

Jest kilka programów bez których nie wyobrażam sobie używania komputera. Wiele z nich działa w trybie tekstowym a więc by mieć do nich dostęp potrzebny jest emulator konsoli. Moim ulubionym jest Yakuake. Można o nim przeczytać w jakilinux oraz ubucentrum więc nie nie muszę go osobiście zachwalać.

Lubię mieć porządek w środowisku pracy. Dlatego zawsze otwierałem kilka sesji w tej samej kolejności. Na pierwszej logowałem się na konto roota, na drugiej uruchamiałem IPython… W sumie zdażało mi się dojść do kilkunastu kart (w chwili gdy piszę te słowa mam ich otwarte 15). W efekcie po starcie systemu poświęcałem na to całkiem sporo czasu.

Jako, że jestem leniwy (a lenistwo jest cnotą) postanowiłem coś z tym zrobić. W efekcie powstał skrypt yakulo automatyzujący tą pracę.

Instalacja

Skrypt działa zarówno z wersjami Yakuake przeznaczonymi dla KDE 3 oraz KDE 4.

Instalacja sprowadza się do wykonania następujących poleceń:

git clone git://github.com/kosqx/yakulo.git
sudo cp yakulo/yakulo /usr/bin

Jeśli nie masz w systemie gita możesz pobrać skrypt z https://github.com/kosqx/yakulo/raw/master/yakulo i zainstalować go ręcznie.

Szybki start

Yakulo potrzebuje do pracy plików konfiguracyjnych zawierających informacje jak nazwać nowo tworzone sesje i jakie polecenia w nich uruchomić. Pliki te należy twożyć w katalogu ~/.yakulo/

Przykładowy plik ~/.yakulo/foo może mieć zawartość:

# To jest komentarz
:tab Nazwa pierwszej karty
  uname -a
  ls
:tab Nazwa drugiej karty
  echo druga karta

Teraz można już uruchomić skrypt poleceniem:

yakulo foo

Jeśli stworzy się więcej plików konfiguracyjnych (przykładowo ~/.yakulo/base, ~/.yakulo/project_a oraz ~/.yakulo/project_b)
to można załadować wszystkie zawarte w nich karty jednym poleceniem:

yakulo base project_a project_b

Podsumowanie

Teraz wyrobiłem sobie nowy nawyk. Zaraz po starcie KDE naciskam kolejno F12 (wyświetla Yakuake), y (wpisuje w konsoli literę y), PageUp (w Zsh mam to zmapowane do history-beginning-search-backward czyli wyszykiwania w historii), Enter (uruchamia polecenie). Potem czekam kilka sekund i voilà!