IP-адрес устройства, возвращенный из приложения Android, отличается от телефона - PullRequest
0 голосов
/ 03 июля 2019

Мобильный IP-адрес, возвращаемый из приложения Android, отличается от указанного в настройках телефона.

Я попытался использовать следующий пример кода для считывания IP-адреса, назначенного из мобильной сети для телефона Android (под управлением Android 7), подключенного только к мобильной сети. Приложение Android возвращает 10.130.151.51, но IP-адрес, найденный в меню телефона, составляет 49.130.28.201.

Кто-нибудь знает, почему и как я могу получить правильный?

public String Get_Mobile_IP(){
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkinterfaces();
             en.hasMoreElements();) {
            NetworkInterface networkinterface = en.nextElement();
            for (Enumeration<InetAddress> en_IP = networkinterface.getInetAddresses(); en__IP.hasMoreElements();) {
                InetAddress mobile_IPaddr = en_IP.nextElement();
                if (!mobile_IPaddr.isLoopbackAddress() && mobile_IPaddr instanceof Inet4Address) {
                    return mobileIPAddr.getHostAddress();
                }

            }
        }
    } catch (Exception ex) {

    }
    return null;
}

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете попробовать этот код: - Вы можете использовать этот метод, чтобы получить IP-адрес устройства, передавая true для IPv4 и false для IPv6

 public static String getIPAddress(boolean useIPv4) {
try {
    List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
    for (NetworkInterface intf : interfaces) {
        List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
        for (InetAddress addr : addrs) {
            if (!addr.isLoopbackAddress()) {
                String sAddr = addr.getHostAddress();
                //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                boolean isIPv4 = sAddr.indexOf(':')<0;

                if (useIPv4) {
                    if (isIPv4) 
                        return sAddr;
                } else {
                    if (!isIPv4) {
                        int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
                        return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                    }
                }
            }
        }
    }
} catch (Exception ex) { } // for now eat exceptions
return "";

}

...