2012-03-21 22 views
2

我想從Linux機器獲得本地IP地址但不是得到迴環。
要做到這一點,我用下面的代碼(我不知道我在做什麼是正確的):我怎樣才能得到一個Linux機器的實際IP從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

*「我試圖讓。」 *忘記你正在試圖獲得的那一刻,和描述你所想要達到的目的。我的意思是:你想爲最終用戶實現什麼功能? – 2012-03-21 09:27:01

+1

@AndrewThompson:我期望將該機器的IP地址記錄爲日誌的一部分 – Jim 2012-03-21 09:39:51

+0

從哪裏可以看到IP地址? – 2012-03-21 09:45:57

回答

1

任何現代計算機都有多個IP號碼,127.0.0.1就是其中之一。實際配置並不總是正確地報告到Java層(我的經驗)。

您可能只是想按計劃(或在啓動時)執行/sbin/ifconfig -a並記錄完整輸出。

+0

但我不需要整個列表。只有IP其他用戶用來從他們的瀏覽器訪問我的Web應用程序 – Jim 2012-03-21 12:43:54

+0

然後從HTTPRequest URL中捕獲它。 – 2012-03-21 13:57:05

3

Linux機器可以有多個IP地址,包括環回。沒有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"); 
} 
} 
相關問題