用JAVA实现了一个判断某个IP是否在指定IP段内的方法,方便网站上使用黑白名单功能,有两种方法,推荐使用方法一。
public class testIP {
/**
* 判断IP是否在指定IP段内,方法一(推荐)
* ipRange IP段(以'-'分隔)
*
* @param ipRange
* @param ip
* @return boolean
*/
public static boolean ipIsInRange(String ip, String ipRange) {
if (ipRange == null)
throw new NullPointerException("IP段不能为空!");
if (ip == null)
throw new NullPointerException("IP不能为空!");
ipRange = ipRange.trim();
ip = ip.trim();
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)";
final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;
if (!ipRange.matches(REGX_IPB) || !ip.matches(REGX_IP))
return false;
int idx = ipRange.indexOf('-');
String[] sips = ipRange.substring(0, idx).split("\\.");
String[] sipe = ipRange.substring(idx + 1).split("\\.");
String[] sipt = ip.split("\\.");
long ips = 0L, ipe = 0L, ipt = 0L;
for (int i = 0; i < 4; ++i) {
ips = ips << 8 | Integer.parseInt(sips[i]);
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
}
if (ips > ipe) {
long t = ips;
ips = ipe;
ipe = t;
}
return ips <= ipt && ipt <= ipe;
}
/*
* 判断IP是否在指定IP段内,方法二
* ipRange IP段(以'-'分隔)
*
* @param ipRange
* @param ip
* @return boolean
*/
public static boolean ipInRange(String ip, String ipRange) {
int idx = ipRange.indexOf('-');
String beginIP = ipRange.substring(0, idx);
String endIP = ipRange.substring(idx + 1);
return getIp2long(beginIP) <= getIp2long(ip)
&& getIp2long(ip) <= getIp2long(endIP);
}
public static long getIp2long(String ip) {
String[] ips = ip.split("\\.");
long ip2long = 0L;
for (int i = 0; i < 4; ++i) {
ip2long = ip2long << 8 | Integer.parseInt(ips[i]);
}
return ip2long;
}
public static void main(String[] args) {
// 判断192.168.1.100 是否在IP段192.168.1.1-192.168.1.254内
String ip = "192.168.18.100";
String ipRange = "192.168.1.1-192.168.1.254";
boolean isInRange = ipIsInRange(ip, ipRange);
//boolean isInRange = ipInRange(ip, ipRange);
System.out.println(isInRange);
}
完!