464 Stimmen

Wie man die IP-Adresse des Geräts aus dem Code herausbekommt?

Ist es möglich, die IP-Adresse des Geräts mit einem Code zu erhalten?

6 Stimmen

Vergessen Sie nicht, dass dies eine Sammlung der Größe N ist, und Sie können nicht davon ausgehen, dass N == ( 0 || 1 ). Mit anderen Worten, nehmen Sie nicht an, dass ein Gerät nur eine Möglichkeit hat, mit einem Netzwerk zu kommunizieren, und nehmen Sie nicht an, dass es überhaupt eine Möglichkeit zum Kommunizieren mit einem Netzwerk hat.

0 Stimmen

2 Stimmen

Nicht programmatische Version android.stackexchange.com/questions/2984/…

2voto

Sohel Mahmud Punkte 169

Verwenden Sie einfach Volley, um die IP von dieser Seite zu erhalten

RequestQueue queue = Volley.newRequestQueue(this);    
String urlip = "http://checkip.amazonaws.com/";

    StringRequest stringRequest = new StringRequest(Request.Method.GET, urlip, new Response.Listener() {
        @Override
        public void onResponse(String response) {
            txtIP.setText(response);

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            txtIP.setText("hat nicht funktioniert");
        }
    });

    queue.add(stringRequest);

2voto

zeina Punkte 41

In Kotlin, ohne Formatter

private fun getIPAddress(useIPv4 : Boolean): String {
    try {
        var interfaces = Collections.list(NetworkInterface.getNetworkInterfaces())
        for (intf in interfaces) {
            var addrs = Collections.list(intf.getInetAddresses());
            for (addr in addrs) {
                if (!addr.isLoopbackAddress()) {
                    var sAddr = addr.getHostAddress();
                    var isIPv4: Boolean
                    isIPv4 = sAddr.indexOf(':')<0
                    if (useIPv4) {
                        if (isIPv4)
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            var delim = sAddr.indexOf('%') // ip6-Zonen-Suffix entfernen
                            if (delim < 0) {
                                return sAddr.toUpperCase()
                            }
                            else {
                                return sAddr.substring(0, delim).toUpperCase()
                            }
                        }
                    }
                }
            }
        }
    } catch (e: java.lang.Exception) { }
    return ""
}

2voto

slash33 Punkte 879

Kürzlich wurde trotz fehlender Netzwerkverbindung (kein Servicestatus) immer noch eine IP-Adresse von getLocalIpAddress() zurückgegeben. Das bedeutet, die im Menü Einstellungen> Über das Telefon> Status angezeigte IP-Adresse war anders als von der Anwendung angenommen.

Ich habe einen Workaround implementiert, indem ich diesen Code hinzugefügt habe:

ConnectivityManager cm = getConnectivityManager();
NetworkInfo net = cm.getActiveNetworkInfo();
if ((null == net) || !net.isConnectedOrConnecting()) {
    return null;
}

Klang das für jemanden vertraut?

2voto

Laurent Punkte 13523

Ein Gerät kann mehrere IP-Adressen haben, und diejenige, die in einer bestimmten App verwendet wird, muss nicht die IP sein, die die Server, die die Anfrage erhalten, sehen werden. Tatsächlich nutzen einige Benutzer ein VPN oder einen Proxy wie Cloudflare Warp.

Wenn Ihr Ziel darin besteht, die IP-Adresse zu erhalten, die von den Servern angezeigt wird, die Anfragen von Ihrem Gerät erhalten, dann ist es am besten, einen IP-Geolokalisierungsdienst wie Ipregistry (Haftungsausschluss: Ich arbeite für das Unternehmen) mit seinem Java-Client abzufragen:

https://github.com/ipregistry/ipregistry-java

IpregistryClient client = new IpregistryClient("tryout");
RequesterIpInfo requesterIpInfo = client.lookup();
requesterIpInfo.getIp();

Zusätzlich zu seiner einfachen Anwendung erhalten Sie weitere Informationen wie Land, Sprache, Währung, die Zeitzone für die Geräte-IP und können feststellen, ob der Benutzer einen Proxy verwendet.

2voto

Zia Punkte 575

Dies ist der einfachste und einfachste Weg, der jemals im Internet existiert hat... Zuerst fügen Sie diese Berechtigung Ihrer Manifestdatei hinzu...

  1. "INTERNET"

  2. "ACCESS_NETWORK_STATE"

Fügen Sie dies in die onCreate-Datei der Aktivität ein...

    getPublicIP();

Fügen Sie jetzt diese Funktion Ihrer MainActivity.class hinzu.

    private void getPublicIP() {
ArrayList urls=new ArrayList(); //um jede Zeile zu lesen

        new Thread(new Runnable(){
            public void run(){
                //TextView t; //um das Ergebnis anzuzeigen, bitte deklarieren und in onCreate finden()

                try {
                    // Erstelle eine URL für die gewünschte Seite
                    URL url = new URL("https://api.ipify.org/"); //Mein Textdatei-Standort
                    // Öffne zuerst die Verbindung
                    HttpURLConnection conn=(HttpURLConnection) url.openConnection();
                    conn.setConnectTimeout(60000); // Time-out nach einer Minute

                    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

                    //t=(TextView)findViewById(R.id.TextView1); // idealerweise in onCreate()
                    String str;
                    while ((str = in.readLine()) != null) {
                        urls.add(str);
                    }
                    in.close();
                } catch (Exception e) {
                    Log.d("MyTag",e.toString());
                }

                //Da wir uns im Hintergrundthread befinden, müssen wir zur Anzeige der Ergebnisse zum UI-Thread zurückkehren. Führen Sie dazu folgendes aus

                PermissionsActivity.this.runOnUiThread(new Runnable(){
                    public void run(){
                        try {
                            Toast.makeText(PermissionsActivity.this, "Öffentliche IP:"+urls.get(0), Toast.LENGTH_SHORT).show();
                        }
                        catch (Exception e){
                            Toast.makeText(PermissionsActivity.this, "Schalten Sie das WLAN ein, um die öffentliche IP zu erhalten", Toast.LENGTH_SHORT).show();
                        }
                    }
                });

            }
        }).start();

    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X