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/…

7voto

Atakan Yildirim Punkte 386

Sie können LinkProperties verwenden. Es wird für neue Android-Versionen empfohlen.

Diese Funktion ruft die lokale IP-Adresse sowohl für WiFi als auch für mobile Daten ab. Sie erfordert die Berechtigung Manifest.permission.ACCESS_NETWORK_STATE.

@Nullable
public static String getDeviceIpAddress(@NonNull ConnectivityManager connectivityManager) {
    LinkProperties linkProperties = connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork());
    InetAddress inetAddress;
    for(LinkAddress linkAddress : linkProperties.getLinkAddresses()) {
        inetAddress = linkAddress.getAddress();
        if (inetAddress instanceof Inet4Address
                && !inetAddress.isLoopbackAddress()
                && inetAddress.isSiteLocalAddress()) {
            return inetAddress.getHostAddress();
        }
    }
    return null;
}

6voto

matdev Punkte 3672

In Ihrer Aktivität gibt die folgende Funktion getIpAddress(context) die IP-Adresse des Telefons zurück:

public static String getIpAddress(Context context) {
    WifiManager wifiManager = (WifiManager) context.getApplicationContext()
                .getSystemService(WIFI_SERVICE);

    String ipAddress = intToInetAddress(wifiManager.getDhcpInfo().ipAddress).toString();

    ipAddress = ipAddress.substring(1);

    return ipAddress;
}

public static InetAddress intToInetAddress(int hostAddress) {
    byte[] addressBytes = { (byte)(0xff & hostAddress),
                (byte)(0xff & (hostAddress >> 8)),
                (byte)(0xff & (hostAddress >> 16)),
                (byte)(0xff & (hostAddress >> 24)) };

    try {
        return InetAddress.getByAddress(addressBytes);
    } catch (UnknownHostException e) {
        throw new AssertionError();
    }
}

5voto

Jon McClung Punkte 1548

Dies ist eine Überarbeitung von dieser Antwort, bei der irrelevante Informationen entfernt, hilfreiche Kommentare hinzugefügt, Variablen klar benannt und die Logik verbessert wurden.

Vergessen Sie nicht, die folgenden Berechtigungen einzuschließen:

InternetHelper.java:

public class InternetHelper {

    /**
     * IP-Adresse von der ersten nicht-lokalen Schnittstelle abrufen
     *
     * @param useIPv4 true=ipv4 zurückgeben, false=ipv6 zurückgeben
     * @return Adresse oder leerer String
     */
    public static String getIPAddress(boolean useIPv4) {
        try {
            List interfaces =
                    Collections.list(NetworkInterface.getNetworkInterfaces());

            for (NetworkInterface interface_ : interfaces) {

                for (InetAddress inetAddress :
                        Collections.list(interface_.getInetAddresses())) {

                    /* Eine Loopback-Adresse wäre etwas wie 127.0.0.1 (das Gerät selbst). Wir möchten die erste nicht-Loopback-Adresse zurückgeben. */
                    if (!inetAddress.isLoopbackAddress()) {
                        String ipAddr = inetAddress.getHostAddress();
                        boolean isIPv4 = ipAddr.indexOf(':') < 0;

                        if (isIPv4 && !useIPv4) {
                            continue;
                        }
                        if (useIPv4 && !isIPv4) {
                            int delim = ipAddr.indexOf('%'); // ip6-Zonen-Suffix abwerfen
                            ipAddr = delim < 0 ? ipAddr.toUpperCase() :
                                    ipAddr.substring(0, delim).toUpperCase();
                        }
                        return ipAddr;
                    }
                }

            }
        } catch (Exception ignored) { } // Wenn keine Verbindung hergestellt werden kann, einfach leeren String zurückgeben
        return "";
    }

    /**
     * IPv4-Adresse von der ersten nicht-lokalen Schnittstelle abrufen
     *
     * @return Adresse oder leerer String
     */
    public static String getIPAddress() {
        return getIPAddress(true);
    }

}

4voto

public static String getDeviceIpAddress() {
    try {
        for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        ex.printStackTrace();
    }
    return null;
}

3voto

mridul Punkte 1946
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ipAddress = BigInteger.valueOf(wm.getDhcpInfo().netmask).toString();

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