W przypadku telefonów z systemem Android pojawia się pewien problem, jeżeli chcemy użyć go do udostępnienia połączenia z Internetem. Większość „normalnych” telefonów dysponuje wbudowanym modemem z którym można się połączyć z poziomu komputera i nawiązać odpowiednio połączenie. Niestety, nie jest tak w przypadku Androida. Tutaj trzeba korzystać z innych rozwiązań, które pozwalają na udostępnienie już nawiązanego połączenia z siecią.
Z grubsza sposoby można podzielić na wymagające uprzywilejowanego dostępu do telefonu i takie które go nie wymagają. O drugim sposobie więcej można przeczytać w tym artykule: Dostęp do Internetu za pomocą HTC G1 z systemem Android (Proxoid).
Jeżeli natomiast dysponujemy zrootowanym telefonem, otwiera się kilka kolejnych możliwości udostępnienia Internetu poprze telefon. Najciekawsza z nich (wg mnie) to połączenie w przy użyciu sieci bezprzewodowej. Uniezależni ona nas od gniazda USB (chociaż przy dłuższym korzystaniu z takiego połączenia i tak jakoś trzeba rozwiązać problem zasilania telefonu) i jednocześnie pozwala korzystanie z różnych usług sieciowych (np. protokołu SSH).
Konfiguracja telefonu
Konfiguracja telefonu jest stosunkowo prosta, ale trzeba pamiętać, że należy dysponować uprawnieniami użytkownika root
. Wersja systemu Android musi być większa niż 1.5. Mój telefon miał zainstalowaną wersję 2.1.
Pierwszym krokiem będzie zainstalowanie aplikacji Wireless Thether for Root Users, można ją znaleźć w markecie aplikacji:
Po instalacji można przejść do szybkiej konfiguracji. W moim przypadku postanowiłem użyć połączenia szyfrowanego przy użyciu 128 bitowego algorytmu WEP. Po uruchomieniu aplikacji należy wcisnąć klawisz Menu
i wybrać pozycję Setup
.
Włączenie szyfrowania WEP odbywa się poprzez zaznaczenie opcji konfiguracyjnej Enable WiFi-Encryption
. Włącza ona 128 bitową wersję algorytmu WEP.
Kolejnym krokiem będzie ustawienie odpowiedniego hasła korzystając z opcji Change Passphrase
. Standardowo jest ustawione poniższe hasło, które oczywiście należy zmienić. Należy pamiętać, że musi ono posiadać dokładnie 13 znaków (ani mniej, ani więcej).
Teraz kolej jeszcze na dwie opcje: konfiguracja nazwy sieci (pozycja Change SSID
) oraz kanał, na którym będzie pracować nasza sieć (Change Channel
). Ich zmiana nie jest obowiązkowa, ale na jednym obszarze nie powinny znaleźć się dwie sieci o takiej samej nazwie oraz pracujące na tym samym kanale. Wartości te także będę potrzebne podczas konfiguracji komputera, więc należy je przynajmniej zapamiętać, ale najlepiej ustawić na własne.
Ostatnim krokiem będzie konfiguracja zakresu adresów IP, które będę przydzielane komputerom łączącym się z telefonem (nie jest to także konieczne, ale czasem trzeba te wartości zmienić na inne, jeżeli kolidują z jaką inną siecią działającą na naszych maszynach):
Teraz nie pozostaje nic innego jak tylko włączyć sieć bezprzewodową i przystąpić konfiguracji komputera. Aplikację uruchamiamy poprzez naciśniecie zielonego symbolu sieci wifi:
Podczas uruchamiania sieci zostaniemy zapytania, czy aplikacja może uzyskać uprawnienie super-użytkownika (czyli użytkownika root
). Należy wyrazić na to zgodę, w przeciwnym wypadku sieć nie zostanie uruchomiona.
Konfiguracja komputera
Konfiguracja komputera jest prosta. Jeżeli korzystamy np. z narzędzia WiCd lub Network Manager wystarczy wybrać zdefiniowaną sieć, podać klucz do sieci WEP i powinno wszystko działać.
Jest jednak przynajmniej jeden problem z użyciem tych narzędzie: karty Intela identyfikujące się w taki sposób Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)
nie działają tak pięknie i prosto (a ja należę to tych „szczęśliwców is traciłem kilka godzin próbując uzyskać połączenie).
Problem objawia się tym, że nie można pobrać adresu IP przy użyciu serwera DHCP (ustawienie adresu na statyczny nie rozwiązuje problemu). Więcej o tym błędzie można znaleźć na tym zgłoszeniu o błędzie Bug 1689 – iwl3945, ad-hoc mode not working. Błąd powinien już zostać usunięty, więc pewnie w przypadku nowszych wersji jądra wszystko będzie działać.
Istnieje pewne obejście problemów z tą kartą, polega ono na konfiguracji interfejsu sieciowego w określonej kolejności i można to zrobić przy użyciu standardowych narzędzi dostępnych w systemie. Poniżej znajduje się, który wykonuje odpowiednie czynności, pwostał on na podstawie skryptu zaprezentowanego w tym artykule: How-To: Intel Wireless 4965 AGN with Ad-Hoc network + WEP. Oryginalny skrypt ma jednak wg mnie przynajmniej dwie wady:
- próbuje usunąć moduły jądra, które w mojej wersji nie istnieją (prawdopodobnie w jakieś wcześniejszej wersji jądra miało to sens)
- skrypt jest napisany w Pythonie, a jedynym jego celem jest wywoływanie odpowiednich poleceń, wg mnie dużo lepszym rozwiązaniem będzie tutaj prosty skrypt napisany w bashu
Moja wersja nazwa się android_network
i wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/bin/bash INTERFACE="wlan0" ESSID="siec" KEY="abcdefghijklm" CHANNEL=2 RATE="auto" SLEEP=2 INIT_NETWORK_SCRIPT='/etc/init.d/wicd' if [ $1 == "start" ]; then echo "Wyłączam zarządzanie siecią bezprzewodową" $INIT_NETWORK_SCRIPT stop echo "Wyłączam interfejs sieciowy $INTERFACE" ifconfig $INTERFACE down sleep $SLEEP echo "Pierwsza próba połączenia" iwconfig $INTERFACE essid $ESSID channel $CHANNEL mode ad-hoc key s:$KEY rate $RATE sleep $SLEEP ifconfig $INTERFACE up sleep $SLEEP echo "Druga próba połączenia" iwconfig $INTERFACE essid $ESSID channel $CHANNEL mode ad-hoc key s:$KEY rate $RATE sleep $SLEEP echo "Pobieram adres DHCP" dhclient $INTERFACE exit $? fi if [ $1 == "stop" ]; then echo "Zwalniam adres DHCP" dhclient -r $INTERFACE echo "Wyłączam intefejs sieciowy $INTERFACE" ifconfig $INTERFACE down echo "Uruchamiam zarządzanie siecią bezprzewodową" $INIT_NETWORK_SCRIPT start exit $? fi |
Włączenie odbywa się poprzez wydanie polecenia
Wyłączenie sieci poprzez polecenie
Skrypt ten można umieścić np. w katalogu /usr/local/bin
i nadać mu atrybut 700
.
Przed pierwszym uruchomieniem należy jeszcze skonfigurować odpowiednie zmienne:
INTERFACE
– interfejs sieci bezprzewodowej, który będzie konfigurowanyESSID
– nazwa sieci udostępnianej przez telefonKEY
– hasło do sieci WEPCHANNEL
– kanał, który jest wykorzystywany do komunikacjiRATE
– prędkość transmisjiSLEEP
– czas, jaki należy odczekać pomiędzy wywołaniami poszczególnych poleceń, w przedziale od 2 do 10 sekundINIT_NETWORK_SCRIPT
– skrypt, który wyłączy aplikacje zarządzające siecią bezprzewodową, w moim przypadku WiCd
W moim przypadku uruchomienie tego skryptu zaowocowało połączeniem się z siecią WEP udostępnianą przez telefon.