如何在双栈操作系统上同时获取IPv4和IPv6

我有双栈机。

我的问题是我只使用IPv4

InetAddress address = InetAddress.getLocalHost(); 

如果我使用网络接口API,那么我将获得所有IP地址,其中包括我的MAC地址以及IP地址的forms。 为什么-DO-I-GET-多全球IPv6的地址上市的function于使用ifconfig

现在有什么方法可以同时获得我的机器的IPv4和IPv6。

在Linux中,InetAddress.getLocalHost()将查找主机名,然后返回通过DNS分配给该主机名的第一个IP地址。 如果文件/ etc / hosts中有该主机名,它将获得该文件中该主机名的第一个IP地址。

如果你注意这个方法只返回一个InetAddress。

如果您尚未分配主机名,则很可能是localhost.localdomain。 您可以使用命令行设置主机名:

 hostname [name] 

或者通过在文件/ etc / sysconfig / network中设置它

如果要获取分配给主机名的所有IP地址(包括IPv6),您可以使用:

 InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); 

如果要获取分配给主机网络接口的所有IP地址(包括IPv6),则必须使用类NetworkInterface。

这里我粘贴一些示例代码:

 import java.net.InetAddress; import java.net.UnknownHostException; import java.net.SocketException; import java.net.NetworkInterface; import java.util.*; public class Test { public static void main(String[] args) { try { System.out.println("getLocalHost: " + InetAddress.getLocalHost().toString()); System.out.println("All addresses for local host:"); InetAddress[] addr = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); for(InetAddress a : addr) { System.out.println(a.toString()); } } catch(UnknownHostException _e) { _e.printStackTrace(); } try { Enumeration nicEnum = NetworkInterface.getNetworkInterfaces(); while(nicEnum.hasMoreElements()) { NetworkInterface ni=(NetworkInterface) nicEnum.nextElement(); System.out.println("Name: " + ni.getDisplayName()); System.out.println("Name: " + ni.getName()); Enumeration addrEnum = ni.getInetAddresses(); while(addrEnum.hasMoreElements()) { InetAddress ia= (InetAddress) addrEnum.nextElement(); System.out.println(ia.getHostAddress()); } } } catch(SocketException _e) { _e.printStackTrace(); } } } 

对于这个例子,我从InetAddress.getLocalHost()中的一个响应中获取代码.getHostAddress()返回127.0.1.1