如何用Java或Guava工具类判断IP是否属于0/8子网?
判断IP是否属于0/8子网的实现方案
0/8子网对应的IP范围是0.0.0.0到0.255.255.255,可以通过以下两种方式实现判断:
一、使用Java原生InetAddress实现
Java原生API没有直接提供子网匹配方法,但可以通过分析IP地址的字节数组判断:0/8子网的掩码是255.0.0.0,因此IP地址的第一个字节必须为0。
示例代码:
import java.net.InetAddress; import java.net.UnknownHostException; public class NativeIpChecker { public static boolean isIn0_8Subnet(InetAddress ipAddress) { byte[] ipBytes = ipAddress.getAddress(); // 0/8子网的第一个字节固定为0 return ipBytes[0] == 0; } public static void main(String[] args) throws UnknownHostException { // 测试用例 System.out.println(isIn0_8Subnet(InetAddress.getByName("0.0.0.0"))); // true System.out.println(isIn0_8Subnet(InetAddress.getByName("0.255.255.255")));// true System.out.println(isIn0_8Subnet(InetAddress.getByName("1.0.0.1"))); // false } }
二、使用Guava的InetAddresses工具类实现
Guava的InetSubnet类封装了现成的子网包含判断逻辑,实现更简洁且不易出错:
示例代码:
import com.google.common.net.InetAddresses; import com.google.common.net.InetSubnet; import java.net.InetAddress; import java.net.UnknownHostException; public class GuavaIpChecker { // 预定义0/8子网对象 private static final InetSubnet ZERO_EIGHT_SUBNET = InetSubnet.create("0.0.0.0/8"); public static boolean isIn0_8Subnet(InetAddress ipAddress) { return ZERO_EIGHT_SUBNET.contains(ipAddress); } public static void main(String[] args) throws UnknownHostException { // 测试用例 System.out.println(isIn0_8Subnet(InetAddresses.forString("0.10.20.30"))); // true System.out.println(isIn0_8Subnet(InetAddresses.forString("0.255.0.0"))); // true System.out.println(isIn0_8Subnet(InetAddresses.forString("2.0.0.0"))); // false } }
注意:使用Guava工具类需要先引入对应的依赖包。
内容的提问来源于stack exchange,提问作者Dariusz Krynicki
相关产品推荐
相关产品推荐

