demo:
/**
* 2020年9月16日上午10:47:14
*/
package testgetip;
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
/**
* @author XWF
*
*/
public class TestGetIp {
/**
* @param args
*/
public static void main(String[] args) {
//获得本地ip
try {
InetAddress addr1 = InetAddress.getLocalHost();
System.out.println(addr1);
System.out.println(addr1.getHostAddress());
System.out.println(addr1.getHostName());
//是否是通配符地址,ipv4是0.0.0.0,ipv6是0:0:0:0:0:0:0:0
System.out.println("-isAnyLocalAddress:" + addr1.isAnyLocalAddress());
//是否是本地连接,ipv4范围169.254.0.0-169.254.255.255,ipv6范围以FE8开头的
System.out.println("-isLinkLocalAddress:" + addr1.isLinkLocalAddress());
//是否是本地地址,ipv4范围以127开头,ipv6是0:0:0:0:0:0:0:1
System.out.println("-isLoopbackAddress:" + addr1.isLoopbackAddress());
//多播地址是否是全球范围,ipv4范围224.0.0.0-239.255.255.255里去除224.0.0.0和239开头的剩下的全部,ipv6范围第一字节FF第二字节OE-FE
System.out.println("-isMCGlobal:" + addr1.isMCGlobal());
//是否是本地链接范围的多播,ipv4范围224.0.0.0-224.0.0.255,ipv6范围第一字节FF第二字节02-F2
System.out.println("-isMCLinkLocal:" + addr1.isMCLinkLocal());
//是否是本地接口多播,ipv4无,ipv6范围第一字节FF第二字节01-F1
System.out.println("-isMCNodeLocal:" + addr1.isMCNodeLocal());
//是否是组织本地范围的多播,ipv4范围第一字节239第二字节>=192第三字节<=195,ipv6范围第一字节FF第二字节08-F8
System.out.println("-isMCOrgLocal:" + addr1.isMCOrgLocal());
//是否是站点范围的多播,ipv4范围239.255.0.0-239.255.255.255,ipv6范围第一字节FF第二字节05-F5
System.out.println("-isMCSiteLocal:" + addr1.isMCSiteLocal());
//是否为多播地址,ipv4范围224.0.0.0-239.255.255.255,ipv6范围以FF开头
System.out.println("-isMulticastAddress:" + addr1.isMulticastAddress());
//测试地址是否可访问,超时认为无法访问(可抛出IOException)
System.out.println("-isReachable:" + addr1.isReachable(1000));
//测试地址是否可访问,指定网络接口(null为任何接口)、最大跳数、超时时间(可抛出IOException)
System.out.println("-isReachable:" + addr1.isReachable(null, 3, 1000));
//是否是站点本地地址,ipv4范围10.0.0.0-10.255.255.255和172.16.0.0-172.31.255.255和192.168.0.0-192.168.255.255,ipv6范围以FEC开头
System.out.println("-isSiteLocalAddress:" + addr1.isSiteLocalAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//获得网卡和ip信息
try {
Enumeration<NetworkInterface> it = NetworkInterface.getNetworkInterfaces();
while(it.hasMoreElements()) {
NetworkInterface net = it.nextElement();
System.out.println(String.format("--isup:%s, isloopback:%s, isptp:%s, isvirtual:%s, net:%s",
net.isUp(), net.isLoopback(), net.isPointToPoint(), net.isVirtual(), net));
Enumeration<InetAddress> addrs = net.getInetAddresses();
while(addrs.hasMoreElements()) {
InetAddress addr = addrs.nextElement();
System.out.println(" " + addr.getHostAddress());
System.out.println(String.format(" \tanylocal:%s ,linklocal:%s ,loopback:%s ,sitelocal:%s",
addr.isAnyLocalAddress(), addr.isLinkLocalAddress()
, addr.isLoopbackAddress(), addr.isSiteLocalAddress()));
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}