Как я могу получить фактический IP-адрес на машине Linux с Java - PullRequest
2 голосов
/ 21 марта 2012

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

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, который хочу?

Ответы [ 4 ]

3 голосов
/ 21 марта 2012

Linux-машины могут иметь более одного IP-адреса, включая шлейф.Понятия уникальности для IP-адресов не существует.

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

1 голос
/ 21 марта 2012

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

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

1 голос
/ 21 марта 2012

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

Просто найдите IP-адрес сервера

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

0 голосов
/ 03 марта 2016

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

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");
 }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...