Retea locala

De obicei, servicile pe care le accesam in internet sunt accesibil din internet. Totusi, apar cazuri cand atat dispozitivul mobil cat si server-ul se afla in aceasi retea privata. Cel mai des intalnit caz fiind atunci cand dezvoltam o aplicatie, sau avem o aplicatie de telefon pentru un dispozitiv ce ruleaza local.

In acest caz in care dispozitivele se gasesc in aceasi retea, va fi nevoie sa realizam cateva lucruri in functie de circumstante (e.g. NAT).

Dispozitiv Fizic

O mașină fizică și un dispozitiv fizic pot comunica:

  1. prin plasarea lor în aceeași rețea fără fir (WiFi), având adresele IP furnizate de un server DHCP ce rulează pe un router;
  2. prin stabilirea unei legături punct la punct, folosind Bluetooth;
  3. printr-o conexiune de date realizată prin intermediul portului USB.

Pentru tethering, pe telefon, se accesează SettingsWireless & NetworksTethering & portable hotspot și se selectează opțiunea USB Tethering

Astfel, se va activa (în mod automat) interfața rndis0, pentru care se poate determina adresa Internet:

student@eim-lab:/opt/android-sdk-linux/platform-tools$ ./adb devices
List of devices attached
0019531d59461f    device
student@eim-lab:/opt/android-sdk-linux/platform-tools$ ./adb -s 0019531d59461f shell
shell@n7000:/ $ su
su
shell@n7000:/ # ifconfig rndis0
ifconfig rndis0
rndis0: ip 192.168.42.129 mask 255.255.255.0 flags [up broadcast running multicast]
shell@n7000:/ #

Ulterior, se determină adresa Internet a mașinii fizice, asociată interfeței usb0 (Linux), respectiv Ethernet (Windows).

Linux

student@eim-lab:~$ sudo ifconfig usb0
usb0      Link encap:Ethernet  HWaddr 32:ca:4b:1c:ff:7b 
          inet addr:192.168.42.170  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::30ca:4bff:fe1c:ff7b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:109 errors:0 dropped:0 overruns:0 frame:0
          TX packets:319 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:24103 (23.5 KiB)  TX bytes:64369 (62.8 KiB)

Windows

C:\Program Files (x86)\Android\android-sdk\platform-tools>ipconfig

Windows IP Configuration


Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::18bf:d0be:3625:6b1%44
   IPv4 Address. . . . . . . . . . . : 192.168.42.81
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.42.129

Dispozitiv Virtual (Emulator)

Android Virtual Device

Fiecare instanță a unui dispozitiv virtual Android oferă o pereche de porturi pentru diferite conexiuni:

  • un port de consolă, prin intermediul căruia este permis accesul prin telnet pentru execuția de diverse comenzi;
  • un port pentru adb.

Numerele folosite pentru aceste porturi sunt succesive. Implicit, numerotarea porturilor începe de la 5554 (portul de consolă) / 5555 (portul adb). Determinarea portului poate fi realizată:

  • prin inspectarea ferestrei în care este afișat emulatorul, având forma Android Emulator (55nr), unde nr poate lua valori cuprinse între 54 și 87 (doar valori impare - pentru portul de consolă, valorile pare fiind rezervate pentru portul adb); astfel, sunt suportate maxim 16 instanțe de dispozitive virtuale Android simultan;
android_virtual_device_port.png
  • prin rularea comenzii adb devices
    student@eim-lab:/opt/android-sdk-linux/platform-tools$ ./adb devices
    List of devices attached
    emulator-5554   device
    

Conectarea la consola dispozitivului virtual Android se face prin comanda:

student@eim-lab:~$ telnet localhost 55nr

specificându-se portul pe care rulează emulatorul.

Este necesară și autentificarea pe dispozitivul virtual respectiv, folosind o cheie care a fost instalată odată cu acesta, a cărei locație este indicată. În acest sens, se folosește comanda auth, urmată de cheia dispozitivului virtual. Cheia se află în ~/.emulator_console_auth_token

În consolă, realizarea unei legături între mașina fizică și dispozitivul virtual Android se face prin port forwarding, folosind comanda redir, aceasta suportând mai multe opțiuni:

  • list;
  • add;
  • del.
OPȚIUNE DESCRIERE
list afișează toate redirectările de port folosite la momentul respectiv
add <protocol>:<port_masina_fizica>:<port_dispozitiv_virtual> adaugă o redirectare de port
<protocol> poate avea doar valorile tcp sau udp
<port_masina_fizica> reprezintă numărul portului utilizat pe mașina fizică
<port_dizpozitiv_virtual> reprezintă numărul portului de pe dispozitivul virtual spre care vor fi redirecționate datele
del <protocol>:<port_masina_fizica> șterge o redirectare de port

De exemplu:

student@eim-lab:~$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
redir add tcp:2000:4000
OK
redir list
tcp:2000  => 4000
OK
redir del tcp:2000
OK
redir list
no active redirections
OK
exit
Connection to host lost.
student@eim-lab:~$

Comenzi utile

Mai jos gasiti o serie de comenzi utile pentru a putea afisa adresele IP alocate pe un dispozitiv.

Interfețele, adresele, rutele (mașina de dezvoltare Linux)

student@eg106:~$ ip ro
    default via 172.16.7.254 dev eno1 proto dhcp metric 100 
    169.254.0.0/16 dev eno1 scope link metric 1000 
    172.16.4.0/22 dev eno1 proto kernel scope link src 172.16.7.36 metric 100 
    172.16.101.0/24 dev vmnet1 proto kernel scope link src 172.16.101.1 
    192.168.57.0/24 dev vboxnet1 proto kernel scope link src 192.168.57.1 

OSX

netstat -rn

In telefon sau emulator:

ipconfig