Подтвердить что ты не робот

Java получает локальный IP-адрес

Я пытаюсь получить локальный IP. Он должен работать с

System.out.println(Inet4Address.getLocalHost().getHostAddress());

или

InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);

но он всегда возвращает 192.168.178.154 вместо 192.168.178.119 (Это мой настоящий локальный IP (Terminal → ifconfig))

Что мне делать?

4b9b3361

Ответ 1

Похоже, у вас есть два IP-адреса.

На компьютере с одним сетевым адаптером выбранный IP-адрес - это первичный IP-адрес сетевого адаптера на компьютере. Однако на компьютере с несколькими компьютерами стек должен сначала сделать выбор. Стек не может сделать интеллектуальный выбор, пока он не узнает целевой IP-адрес для соединения.

Когда программа отправляет вызов connect() на целевой IP-адрес или отправляет вызов send() в дейтаграмму UDP, стек ссылается на целевой IP-адрес, а затем проверяет таблицу маршрутов IP, чтобы он мог выбрать лучший сетевой адаптер для отправки пакета. После выбора этого сетевого адаптера стек считывает первичный IP-адрес, связанный с этим сетевым адаптером, и использует этот IP-адрес в качестве исходного IP-адреса для исходящих пакетов.

Документ

Если вы хотите активировать второй IP-адрес и его, например, LAN, отключите его от сети и после 10-секундного подключения. Другой IP-адрес может быть выбран в качестве IP-адреса хоста в таблице маршрутизации.

Вы можете получить второй IP-адрес от getNetworkInterfaces.

Попробуйте выполнить следующий код:

public static void main(String[] args) throws Exception
{
    System.out.println("Your Host addr: " + InetAddress.getLocalHost().getHostAddress());  // often returns "127.0.0.1"
    Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
    for (; n.hasMoreElements();)
    {
        NetworkInterface e = n.nextElement();

        Enumeration<InetAddress> a = e.getInetAddresses();
        for (; a.hasMoreElements();)
        {
            InetAddress addr = a.nextElement();
            System.out.println("  " + addr.getHostAddress());
        }
    }
} 

Ответ 2

если ваша система настроена с несколькими ip, тогда сделайте это.

try {
  InetAddress inet = InetAddress.getLocalHost();
  InetAddress[] ips = InetAddress.getAllByName(inet.getCanonicalHostName());
  if (ips  != null ) {
    for (int i = 0; i < ips.length; i++) {
      System.out.println(ips[i]);
    }
  }
} catch (UnknownHostException e) {

}