java判断IP是否在某个网段中

本文提供了一种使用Java来判断一个IP地址是否位于指定的IP范围内的方法。通过两种不同的实现方式,一种是直接比对IP地址范围,另一种是利用CIDR表示法进行匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java判断IP是否在指定网段中,看代码

[java]  view plain copy
  1. /** 
  2.      * 判断ip是否在指定网段中 
  3.      * @author dh 
  4.      * @param iparea 
  5.      * @param ip 
  6.      * @return boolean 
  7.      */  
  8.     public static boolean ipIsInNet(String iparea, String ip) {  
  9.         if (iparea == null)  
  10.             throw new NullPointerException("IP段不能为空!");  
  11.         if (ip == null)  
  12.             throw new NullPointerException("IP不能为空!");  
  13.         iparea = iparea.trim();  
  14.         ip = ip.trim();  
  15.         final String REGX_IP = "((25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)//.){3}(25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)";  
  16.         final String REGX_IPB = REGX_IP + "//-" + REGX_IP;  
  17.         if (!iparea.matches(REGX_IPB) || !ip.matches(REGX_IP))  
  18.             return false;  
  19.         int idx = iparea.indexOf('-');  
  20.         String[] sips = iparea.substring(0, idx).split("//.");  
  21.         String[] sipe = iparea.substring(idx + 1).split("//.");  
  22.         String[] sipt = ip.split("//.");  
  23.         long ips = 0L, ipe = 0L, ipt = 0L;  
  24.         for (int i = 0; i < 4; ++i) {  
  25.             ips = ips << 8 | Integer.parseInt(sips[i]);  
  26.             ipe = ipe << 8 | Integer.parseInt(sipe[i]);  
  27.             ipt = ipt << 8 | Integer.parseInt(sipt[i]);  
  28.         }  
  29.         if (ips > ipe) {  
  30.             long t = ips;  
  31.             ips = ipe;  
  32.             ipe = t;  
  33.         }  
  34.         return ips <= ipt && ipt <= ipe;  
  35.     }  

  1. public class IpTest {  
  2.     public static void main(String[] args) {  
  3.         System.out.println(isInRange("192.168.1.127""192.168.1.64/26"));  
  4.         System.out.println(isInRange("192.168.1.2""192.168.0.0/23"));  
  5.         System.out.println(isInRange("192.168.0.1""192.168.0.0/24"));  
  6.         System.out.println(isInRange("192.168.0.0""192.168.0.0/32"));  
  7.     }  
  8.     public static boolean isInRange(String ip, String cidr) {  
  9.         String[] ips = ip.split("\\.");  
  10.         int ipAddr = (Integer.parseInt(ips[0]) << 24)  
  11.                 | (Integer.parseInt(ips[1]) << 16)  
  12.                 | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);  
  13.         int type = Integer.parseInt(cidr.replaceAll(".*/"""));  
  14.         int mask = 0xFFFFFFFF << (32 - type);  
  15.         String cidrIp = cidr.replaceAll("/.*""");  
  16.         String[] cidrIps = cidrIp.split("\\.");  
  17.         int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)  
  18.                 | (Integer.parseInt(cidrIps[1]) << 16)  
  19.                 | (Integer.parseInt(cidrIps[2]) << 8)  
  20.                 | Integer.parseInt(cidrIps[3]);  
  21.   
  22.         return (ipAddr & mask) == (cidrIpAddr & mask);  
  23.     }  
  24. }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值