2010-12-08 5 views
0

Wenn das Telefongerät im 3G-Netzwerk eine Verbindung herstellt, wie kann ich feststellen, ob die IP-Adresse des Android-Geräts öffentlich ist oder nicht?So ermitteln Sie, ob die IP-Adresse des Android-Geräts öffentlich ist oder nicht

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

Was versuchen Sie zu tun? – Falmarri

+2

Ein Android-Gerät wird praktisch nie eine öffentliche IP-Adresse haben, so wie die meisten PCs nie eine öffentliche IP-Adresse haben. Alles liegt hinter NAT, teilweise aufgrund des begrenzten IPv4-Adressraums, teilweise wegen der Sicherheit. Nun, wenn jemand Android auf einen Router setzt, dann hätte er vielleicht eine öffentliche IP-Adresse, aber das ist jetzt so ein Randfall, dass ich kaum denke, dass es sich lohnt, sich darüber Gedanken zu machen. – CommonsWare

+0

ich versuche Serverserver zu starten – sweetier

Antwort

0

eine schnelle kleine Webseite wie folgt schreiben:

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

Dann, dass holen mit einem Asynchron-Aufgabe:

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); 
    } 
} 

es wie Call:

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

Dann die Zwei. Die IP-Adresse, die Sie über die obige Methode erhalten, gibt Ihnen garantiert die öffentliche IP-Adresse.

Ich weiß, das ist eine alte Frage, aber ich hoffe, es hilft jemandem!