2012-03-21 1 views
2

Я пытаюсь получить локальный IP-адрес с Linux-машины НО НЕ получить loopback.
Для этого я использую следующий код (я не уверен, что я делаю правильно):Как я могу получить фактический IP-адрес в Linux-машине от Java

NetworkInterface ni = NetworkInterface.getByName("eth0");  
Enumeration<InetAddress> inetAddresses = ni.getInetAddresses(); 
while(inetAddresses.hasMoreElements()) { 
     InetAddress ia = inetAddresses.nextElement(); 
     if(!ia.isLinkLocalAddress()) { 
       //this is not loopback 
     }  
} 

Когда я запускаю это я получаю 2 IP-адреса (я был заинтересован только в одном из них) который когда я делаю ifconfig, я вижу один (тот, который я хочу получить) в записи для eth0, а другой - в записи для eth0:54.
Я даже не знаю, что такое eth0:54.

Как я могу получить IP-адрес, который я хочу?

+1

* «Я пытаюсь получить ..» * Забудьте, что вы пытаетесь получить на данный момент, и описать то, что вы пытаетесь достичь. И я имею в виду: какую функцию вы пытаетесь реализовать для конечного пользователя? –

+1

@AndrewThompson: Ожидается, что я буду регистрировать IP-адрес машины как часть журналов – Jim

+0

Адрес IP-адреса, если смотреть откуда? –

ответ

1

Любой современный компьютер имеет несколько IP-номеров, 127.0.0.1 является одним из них. Фактическая конфигурация не всегда правильно сообщается до уровня Java (в мой опыта).

Возможно, вы просто захотите выполнить /sbin/ifconfig -a по расписанию (или во время запуска) и записать полный вывод.

+0

Но мне не нужен весь список. Только другие пользователи IP используют для доступа к моему веб-приложению из своего браузера. – Jim

+0

Затем закрепите его с URL-адреса HTTPRequest. –

3

Личные машины Linux могут иметь более одного IP-адреса, включая loopback. Нет понятия уникальности для IP-адресов.

Возможно, вы ищете имя хоста (и его IP-адрес). Вы можете получить это, прочитав/etc/hostname и просмотрев его IP-адрес. Примечание: возможно, он не имеет IP-адрес, если машина не настроена обычным образом.

1

У меня был один и тот же вопрос, но с помощью PHP вместо Java:

Simply find the ip address of server

Лучший ответ был, что его вообще не возможно без серьезной назад щелкает, которые на самом деле не нужно делать с вами языка используют и больше связаны с базовой системой.

0

Попробуйте это,

import java.io.*; 
import java.net.*; 
import java.util.*; 
import static java.lang.System.out; 

public class ListNets { 

public static void main(String args[]) throws SocketException, UnknownHostException { 
    System.out.println(System.getProperty("os.name")); 
    Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); 
    for (NetworkInterface netint : Collections.list(nets)) 
     if (netint.getName().equals("wlan0") || netint.getName().equals("en0")) { 
      displayInterfaceInformation(netint); 
     }  
} 

static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { 
    out.printf("Display name: %s\n", netint.getDisplayName()); 
    out.printf("Name: %s\n", netint.getName()); 
    Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); 
    for (InetAddress inetAddress : Collections.list(inetAddresses)) { 

     out.printf("InetAddress: %s\n", inetAddress); 
    } 
    out.printf("\n"); 
} 
} 
Смежные вопросы