/**
* @author Linging
* @version 1.0.0
* @since 1.0
*/
public class IPUtils {
/**
* 功能:判断一个IP是不是在一个网段下的
* 格式:isInRange("192.168.8.3", "192.168.9.10/22");
*
* 原理:
* AIP和BIP,AIP是需要进行判断的IP,BIP是某个网段中的任意一个IP,接着判断AIP和BIP是否处于同一网段,
* 如果AIP和BIP处于同一网段,由于BIP是在网段中,所以AIP也在网段中,否则不在。
*
* 如何判断两个IP是否处于同一网段中:
* AIP的二进制 & 子网掩码的二进制 == BIP的二进制 & 子网掩码的二进制
*
*/
public static boolean isInRange(String ip, String cidr) {
String[] ips = ip.split("\\.");
int ipAddr = (Integer.parseInt(ips[0]) << 24)
| (Integer.parseInt(ips[1]) << 16)
| (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);
int type = Integer.parseInt(cidr.replaceAll(".*/", ""));
int mask = 0xFFFFFFFF << (32 - type);
String cidrIp = cidr.replaceAll("/.*", "");
String[] cidrIps = cidrIp.split("\\.");
int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)
| (Integer.parseInt(cidrIps[1]) << 16)
| (Integer.parseInt(cidrIps[2]) << 8)
| Integer.parseInt(cidrIps[3]);
return (ipAddr & mask) == (cidrIpAddr & mask);
}
/**
* 功能:判断一个IP是否合法的
* @param ip
* @return
*/
public static boolean ipCheck(String ip) {
if (StringUtils.isNotEmpty(ip)) {
String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
return ip.matches(regex);
}
return false;
}
}
IP工具类
最新推荐文章于 2024-02-21 09:00:00 发布