2013-02-09 49 views
0

我在网上找到两个例子来获取路由器给我的电脑的IP地址。 下面是代码:Java:在我的家庭网络中获取我自己的IP地址

import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class tryNet { 

public static void displayStuff(String whichHost, InetAddress inetAddr) { 
    System.out.println("---------------------"); 
    System.out.println("host: " + whichHost); 
    System.out.println("Canonical host name: " + inetAddr.getCanonicalHostName()); 
    System.out.println("Host Name: " + inetAddr.getHostName()); 
    System.out.println("Host Address: " + inetAddr.getHostAddress()); 
    System.out.println("---------------------"); 
} 


public static void main(String argv[]) { 
    try { 
     InetAddress inetAddr = InetAddress.getLocalHost(); 
     displayStuff("localhost", inetAddr); 
    } 

    catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 

} 

我已阅读,在已经初始化 的InetAddress的InetAddr = InetAddress.getLocalHost(); 我可以使用方法 inetAddr.getHostAddress() 获取我的IP地址,我的路由器给出的IP地址(例如在ubuntu的终端中写入ifconfig或在Windows中使用ipconfig) 取而代之,它返回我的回送地址。 ..(127.0.0.1) 为什么?

+0

如果存在安全管理器,则使用本地主机名和-1作为其参数调用其checkConnect方法,以查看是否允许执行该操作。如果操作不被允许,代表环回地址的InetAddress被返回....也许它的这个安全管理器给我127.0.0.1 ...是否有可能避免它? – user1576208 2013-02-09 17:09:42

+0

除非您确定您的代码运行所在的主机永远不会多宿主(即具有多个IP地址),否则您不能依赖'InetAddress.getLocalHost()'。在生产代码中应该避免使用'InetAddress.getLocalHost()'。 – peterh 2013-10-03 07:22:38

回答

4

您的电脑有多个接口(至少两个)和多个IP地址(如果它插入网络,当然)。通常,localhost将解析为127.0.0.1(在回送接口上),并且您正在使用的各种方法将返回该结果。

下面将告诉你分配给他们的机器上的所有接口和IP地址:

public static void main(String[] args) throws InterruptedException, IOException 
{ 
    Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); 
    while (e.hasMoreElements()) 
    { 
     NetworkInterface n = e.nextElement(); 
     System.out.println(n.getName()); 
     Enumeration<InetAddress> ee = n.getInetAddresses(); 
     while (ee.hasMoreElements()) 
     { 
      InetAddress i = ee.nextElement(); 
      System.out.println(i.getHostAddress()); 
     } 
    } 
} 
1

通常,您的主机有一个指向Loopback接口的名称。 DHCP服务器分配了一个IP地址。根据您的DHCP客户端配置主机也可能会采用一个新名称。

相关问题