2010-12-08 59 views
0

Lorsque l'appareil téléphonique se connecte sur le réseau 3G, Comment puis-je déterminer Comment déterminer si l'adresse IP de l'appareil Android est publique ou non?Comment déterminer si l'adresse IP de l'appareil Android est publique ou non

public static InetAddress getLocalIpAddress() { 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress address = enumIpAddr.nextElement(); 
       return address; 
      } 
     } 
    } catch (SocketException ex) { 
     Log.e(DEBUG_TAG, ex.toString()); 
    } 
    return null; 
} 
+0

Qu'est-ce que vous essayez de faire? – Falmarri

+2

Un appareil Android n'aura presque jamais d'adresse IP publique, tout comme la plupart des ordinateurs n'ont pratiquement jamais d'adresse IP publique. Tout est derrière NAT, en partie en raison de l'espace d'adresses IPv4 limité, en partie pour la sécurité. Maintenant, si quelqu'un met Android sur un routeur, alors peut-être qu'il aurait une adresse IP publique, mais c'est un cas d'utilisation si marginal que je ne pense pas que ça vaudrait la peine de s'inquiéter. – CommonsWare

+0

J'essaie d'exécuter serversocket – sweetier

Répondre

0

Ecrire une petite page web rapide comme ceci:

<?php echo $_SERVER["REMOTE_ADDR"]; ?> 

Pointez alors que, avec une tâche async:

import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.os.AsyncTask; 

public class NetreadTask extends AsyncTask<String, Void, String> { 
    protected String doInBackground(String... urls) { 
     return netread(urls[0]); 
    } 

    public final String netread(String url) { 
     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      ResponseHandler<String> resHandler = new BasicResponseHandler(); 
      String page; 
      page = httpClient.execute(httpGet, resHandler); 
      return page; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
    } 
} 

appeler comme:

String publicip = new NetreadTask().exec([yourpage]).get(); 

Puis comparer les deux. L'ip que vous obtenez via la méthode ci-dessus est garanti pour vous donner l'adresse IP publique.

Je sais que c'est une vieille question mais j'espère que ça aide quelqu'un!