Enumeration en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements()) {
NetworkInterface i = (NetworkInterface) en.nextElement();
for (Enumeration en2 = i.getInetAddresses(); en2.hasMoreElements();) {
InetAddress addr = (InetAddress) en2.nextElement();
if (!addr.isLoopbackAddress()) {
if (addr instanceof Inet4Address) {
if (preferIPv6) {
continue;
}
return addr;
}
if (addr instanceof Inet6Address) {
if (preferIpv4) {
continue;
}
return addr;
}
}
}
}
return null;
}
//该方法是从OverStackflow上找到的,编写的很巧妙,输入的两个boolean参数,若想获得IPv4则输入true,false,反之则获得IPv6。
Demo3-4 测试本机的IP地址
package com.upc.upcgrid.guan.network.chapter03;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class NetworkInterfaceTest2 {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
for(;nis.hasMoreElements();)
{
NetworkInterface ni = nis.nextElement();
Enumeration<InetAddress> ias = ni.getInetAddresses();
for(;ias.hasMoreElements();)
{
InetAddress ia = ias.nextElement();
if(ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1"))
{
System.out.println("ip v4 : "+ia);
}else if(ia instanceof Inet6Address && !ia.equals(""))
{
System.out.println("ip v6 : "+ ia);
}
}
}
}
}
Demo3-4的执行结果:
Configuration3-1 下的执行结果:
ip v4 : /202.194.158.128
Configuration3-2下的执行结果:
ip v6 : /fe80:0:0:0:2e0:4cff:fe3d:c273%2
ip v6 : /2001:da8:7006:8003:2e0:4cff:fe3d:c273%2
ip v4 : /202.194.158.184
ip v6 : /0:0:0:0:0:0:0:1%1