InetAddress.getLocalHost (). GetHostAddress () возвращает 127.0.0.1 в Android - PullRequest
5 голосов
/ 03 февраля 2012

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

private void getLocalAddress()
{
    try {
        String localHost = InetAddress.getLocalHost().getHostAddress();
        servers.add(localHost);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
}

Ответы [ 3 ]

13 голосов
/ 04 февраля 2012

Изменено несколько битов, и этот работает так, как нужно для получения адресов IPv4.! inetAddress.isLoopbackAddress () удаляет все петлевые адреса.! inetAddress.isLinkLocalAddress () и inetAddress.isSiteLocalAddress ()) удаляют все адреса IPv6.Я надеюсь, что это поможет кому-то здесь.

    StringBuilder IFCONFIG=new StringBuilder();
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
                IFCONFIG.append(inetAddress.getHostAddress().toString()+"\n");
                }

            }
        }
    } catch (SocketException ex) {
        Log.e("LOG_TAG", ex.toString());
    }
    servers.add(IFCONFIG.toString());
0 голосов
/ 03 февраля 2012

Из моих попыток максимум, что я мог получить, был адрес сети Wi-Fi.

Я не знаю другого способа, кроме фактического вызова веб-сервера, который возвращает IP-адрес.Очевидно, проблема в том, что он использует данные телефона.

0 голосов
/ 03 февраля 2012

Попробуйте это: -

String hostname = args[0];
try 
    {
      InetAddress ipaddress = InetAddress.getByName(hostname);
      System.out.println("IP address: " + ipaddress.getHostAddress());
    }
    catch ( UnknownHostException e )
    {
      System.out.println("Could not find IP address for: " + hostname);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...