2017-02-10 10 views
5

Witam! Zadałem to pytanie na wielu forach i nikt nie mógł mi odpowiedzieć, więc PROSZĘ pomóc!W jaki sposób urządzenie z Androidem może programowo wywnioskować adres IP urządzenia Linux, z którym jest powiązane?

Mam urządzenie z Androidem podłączone do urządzenia z systemem Linux przez tethering przez USB.

Na urządzeniu z Androidem mam aplikację do przeglądarek front-end (html, js, css), a na urządzeniu z systemem Linux mam back-end (node.js).

Istnieje połączenie między front-end a back-end z określonym adresem IP: PORT.

Brama Androids to urządzenie z systemem Linux. Urządzenie Linux jest podłączone do sieci lokalnej.

Gdy urządzenie z systemem Android jest podłączone do urządzenia z systemem Linux, urządzenie z systemem Linux inicjuje nowy interfejs sieciowy o nazwie usb0 ze statycznym adresem IP.

Gniazda są oparte na tym IP sieci, który jest taki sam dla każdego wystąpienia urządzeń front-end + back-end.

Mam więcej niż 5 wystąpień tego samego urządzenia front-end + zaplecza podłączonego do sieci lokalnej.

Czy istnieje sposób na znalezienie adresu IP urządzenia wewnętrznego bez ustawiania go w sposób statyczny?

Mój problem zaczyna się po uruchomieniu wszystkich urządzeń w tym samym czasie. Czasami urządzenie z Androidem w instancji 1 łączy się z urządzeniem Linux z innej instancji i chcę temu zapobiec przez brak połączenia z usb0 z Androidem, ale z et0 DHCP urządzenia Linux. Nigdy nie wiadomo, który adres IP będzie na urządzeniu z Linuksem, ale aplikacja front-end musi mieć adres IP: PORT, aby się połączyć.

PORT definiuje więc ciąg do podłączenia jest {IP + „: 3000”}

wiem, że mogę zobaczyć wszystkie adresy IP w sieci z ARP lub podobne, ale muszę to zrobić automatyczny w przód- Zakończ aplikację na starcie aplikacji.

Chcę znaleźć pierwszy adres IP urządzenia, do którego jest podłączone urządzenie z Androidem. To zawsze jest urządzenie Linux na przedniej parze.

Jeśli nie jest możliwe uniemożliwienie urządzenia z systemem Android do podłączenia innej instancji za pomocą tabel IP na urządzeniu z systemem Linux.


P.S Wiem, że Android jest również Linux, ale ktoś, kto chce odebrać będzie wiedział, co mówię.

+0

Przy użyciu jakiego stylu programowania? Android Java? Czy chcesz to zrobić z kodu C/C++? – selbie

+0

Myślę, że o to pytasz: * W jaki sposób urządzenie z Androidem może programowo wywnioskować adres IP urządzenia Linux, z którym jest powiązane? * Czy to prawda? Jeśli tak, czy chcesz to zrobić w Javie lub C? – selbie

+0

Używam Java, aby ustalić tether na początku aplikacji (modyfikowana wtyczka cordova). Aplikacja jest hibiskalna i zapisuje adres gniazda w javascript. Tak więc muszę jakoś powiedzieć aplikacji, aby połączyć się z konkretnym IP – Avoid

Odpowiedz

0

Oto rozwiązanie opisujące sposób do nasłuchiwania zmian stanu uwięzi:

pierwsze trzeba znać BroadcastReceiver. Możesz znaleźć wiele samouczków opisujących szczegółowo, jak to działa (spróbuj googlować, jak słuchać zmian łączności w systemie Android).

W celu uzyskania aktualizacji stanu tethering, trzeba użyć ukrytego działania filtra Androida (patrz ConnectivityManager) oraz w swojej klasie BroadcastReceiver:

IntentFilter filter = new IntentFilter("android.net.conn.TETHER_STATE_CHANGED"); 

następnie zarejestrować filtr do BroadcastReceiver:

myApplicationContext.registerReceiver(this, filter);

W swojej onReceive (końcowe ramach kontekstu, końcowe zamiar zamiar) ze sposobów, informacja Intent.extras zawiera 3 tablic wypełniany odpowiednimi sterowanego interfejsu sieciowego:

erroredArray/availableArray/activeArray

To trochę skomplikowane, ale można uzyskać informacje o stanie uwięzi.

Ponadto, można zrobić kilka refleksji na ukrytej funkcji kodu Androida:

Szukaj getTetherableIfaces() w Menedżerze połączeń.

Oto link: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/net/ConnectivityManager.java#L1604

+0

getTetherableIfaces() zwraca dostępne interfejsy na moim urządzeniu z Androidem, które zwykle są rndis0, ale czego szukam to eth0 urządzenia linuxowego – Avoid

+0

, nawet jeśli znajdę to muszę wyeksportować do aplikacji FrontEnd napisanej w JS. Sugeruję również, aby ktoś wiedział, jak kontrolować tabele IP w Linuksie, aby zablokować jakiekolwiek zewnętrzne połączenie z urządzeniem linuxowym usb0, ale tylko do tego konkretnego urządzenia z Androidem, które jest tetheringiem z urządzeniem linuxowym – Avoid

Powiązane problemy