Accedere a dispositivo Android da remoto

di il
7 risposte

Accedere a dispositivo Android da remoto

Buongiorno.

Ho tra le mani un'applicazione Android del tipo "server" perfettamente funzionante, la quale ottiene indirizzo IP e numero porta dalla rete wifi. Questo è il codice in questione.


    private String getLocalIpAddress() throws UnknownHostException {
        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        assert wifiManager != null;
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ipInt = wifiInfo.getIpAddress();
        return InetAddress.getByAddress(
                ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array())
                .getHostAddress();
    }
    
Volevo sapere se è possibile fare la stessa cosa (quindi ottenere indirizzo IP e numero porta) anche dalla rete cellulare. La modifica in questione mi serve per fare in modo che il dispositivo Android (in questo caso un cellulare), o meglio, che l'aplicazione "server" installata su di esso, sia raggiungibile da un computer remoto, attraverso la rete cellulare.

7 Risposte

  • Re: Accedere a dispositivo Android da remoto

    Che intendi che "ottieni la porta"? La porta la decidi tu in base a dove deve ascoltare l'applicazione server.
  • Re: Accedere a dispositivo Android da remoto

    In effetti si... Riformulo meglio la domanda. E' possibile ottenere l'inidirzzo IP dalla rete dati del cellulare ?
  • Re: Accedere a dispositivo Android da remoto

    Il problema non è l'IP ma se il tuo carrier telefonico ti permette di accettare connessioni in ingresso sull'indirizzo e sulla porta che utilizzi. In pratica, quasi sempre non è possibile.

    Il tuo IP con cui ti connetti alla rete è quello che vedi se ti colleghi a http://www.ilmioip.it
  • Re: Accedere a dispositivo Android da remoto

    Per ottenere una lista di indirizzi IP prova a guardare la classe NetworkInterface, in particolare il metodo getInetAddress: https://developer.android.com/reference/java/net/NetworkInterface#getInetAddresses()
    Occhio che per poter ottenere la lista completa potresti aver bisogno di richiedere specifici permessi tramite il manifest
  • Re: Accedere a dispositivo Android da remoto

    @Della stai confondendo l'autore.
    La lista di IP locali del cellulare non c'entrano un picchio (povero picchio) con la possibilita' di un client remoto di accedere al cellulare visto come "server".

    @vindro: mettila in questo modo: IN GENERALE NON E" POSSIBILE.

    In casi particolare si, ma, appunto, sono casi mooooooolto particolari: in casa si, sulla rete cellulare tim/vodafone/.. al 99.999999% NO.

    La ""filosofia"" del terminale ""mobile'" e':

    E' il TERMINALE che si connette al server e con il quale apre un canale di cominicazione bidirezionale.
    NESSUNO si collega al cellulare di sua (NON del cellulare ovviamente) iniziativa.

    Il perche', a spiegarlo, e' un bel pasticcio, ma, fondamentalmente, il tutto ha a che fare con come un terminale e' riconosciuta da internet.

    i ""server"" hanno un IP pubblico fisso ben definito, i terminali mobili, per loro natura, NON HANNO un ip fisso, ma puo' cambiare di momento in momento.
    Quindi, MENTRE il terminale sa SEMPRE come collegarsi al server (l'ip del serve NON CAMBIA), la controparte NON HA MODO di tenere traccia dei cambiamenti di IP del terminale, a meno che non sia il terminale stesso a dirglielo.

    MA se' il terminale a dirglielo, ALLORA e' il terminale che si puo' connettere al server e non viceversa.

    A casa la cosa funziona perche TU sai quale e' l'IP del tuo cellulare. Ma appena ti colleghi ad un'altra rete wifi o al 3g/4g/5g/lte/umts/gsm/... l'IP cambia.
  • Re: Accedere a dispositivo Android da remoto

    migliorabile ha scritto:


    @Della stai confondendo l'autore.
    La lista di IP locali del cellulare non c'entrano un picchio (povero picchio) con la possibilita' di un client remoto di accedere al cellulare visto come "server".
    Scusa, ma non capisco la tua risposta.

    Per espandere sulla mia risposta precedente:

    Tramite la classe indicata sopra è possibile conoscere l'indirizzo IP assegnato al dispositivo. Poi se il tuo cellulare è collegato alla rete WiFi di casa, gli verrà assegnato un IP privato, che tendenzialmente sarà raggiungibile solo da altri dispositivi interni alla stessa LAN (a meno di non conoscere l'IP pubblico del router e di aver configurato firewall e port forwarding correttamente).

    Se sei collegato ad un operatore invece... tendenzialmente la questione rimane la stessa. Gli operatori infatti fanno uso di NAT per limitare gli IP pubblici da acquistare, per cui di fatto l'IP che riesci a ottenere dal dispositivo è di nuovo un IP privato. Anche conoscendo il proprio IP pubblico (ed esempio tramite servizi come https://www.ipify.org) non riusciresti a connetterti al tuo cellulare dall'esterno perché non potresti fare port forwarding (la configurazione di rete è fatta dall'operatore). In linea puramente teorica credo che (forse) riusciresti a "vedere" il tuo dispositivo solo da altri dispositivi connessi allo stesso operatore, e solo se sono assegnati alla stessa sottorete (cosa che sinceramente non so quanto probabile/possibile sia)
  • Re: Accedere a dispositivo Android da remoto

    Certo, di solito è il terminale (in questo caso il cellulare) che si connette al server.
    Volevo solo capire se era possibile fare l'opposto ma a questo punto non mi sembra una buona soluzione.
    Farò in un'altro modo. Grazie.
Devi accedere o registrarti per scrivere nel forum
7 risposte