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:

Andorid Market - Wireless Thether

Andorid Market - Wireless Thether

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.

Wireless Thether - Włączenie szyfrowania WEP

Wireless Thether - Włączenie szyfrowania 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).

Wireless Thether - Zmiana hasła

Wireless Thether - Zmiana hasła

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.

Wireless Thether - Zmiana SSID

Wireless Thether - Zmiana SSID

Wireless Thether - Zmiana kanału

Wireless Thether - Zmiana kanału

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

Wireless Thether - Zmiana kanału

Wireless Thether - Zmiana kanału

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:

Wireless Thether - Włączenie sieci wifi

Wireless Thether - Włączenie 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

# android_network start

Wyłączenie sieci poprzez polecenie

# android_network stop

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 konfigurowany
  • ESSID – nazwa sieci udostępnianej przez telefon
  • KEY – hasło do sieci WEP
  • CHANNEL – kanał, który jest wykorzystywany do komunikacji
  • RATE – prędkość transmisji
  • SLEEP – czas, jaki należy odczekać pomiędzy wywołaniami poszczególnych poleceń, w przedziale od 2 do 10 sekund
  • INIT_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.

Źródła