问题描述:AAA.BBB.CCC.DDD根据DDD每255个进行划分网段,并且每个网段AAA.BBB.CCC相同
代码:
/**
* AAA.BBB.CCC.DDD根据DDD每255个进行划分页
* @param startIp
* @param endIp
* @return
*/
public static long getNetPageBetweenIps(String startIp,String endIp){
String[] start=startIp.split("\\.");
String[] end=endIp.split("\\.");
String startZero=start[0]+"."+start[1]+"."+start[2]+"."+"0";//网段补齐
String end255=end[0]+"."+end[1]+"."+end[2]+"."+"255";
System.out.println("---startIp is:"+startIp+"---endIp is:"+endIp);
System.out.println("---startZero is:"+startZero+"---end255 is:"+end255);
long startL=ipToLong(startZero);
long endL=ipToLong(end255);
long scopBetween=endL-startL+1;
long page=scopBetween/256;
if(scopBetween%256 != 0){
//log.error("produce problem when operator pageNum");
System.out.print("operator have problem:"+scopBetween%256);
}
System.out.println("pageNum is:"+page);
return page;
}
/**
* 获取当前页网段
* @param startIp 被划分网段的开始Ip
* @param endIp 被划分网段的结束Ip
* @param total 被划分网段按照255进行网段划分的总页码
* @param currentPage 当前页码
* @return
*/
public static String getCurrentPageNetSegments(String startIp,String endIp,long total,long currentPage){
String result="";
System.out.println("CurrentPage is:"+currentPage);
if(total==1){
result=startIp+"-"+endIp;
}else if(total>1 && currentPage<total){//
if(currentPage==1){
String[] curIpA=startIp.split("\\.");
result=startIp;
result+="-"+curIpA[0]+"."+curIpA[1]+"."+curIpA[2]+"."+"255";
}else{
long curIpL=ipToLong(startIp)+256*(currentPage-1);
System.out.println("curIpL is:"+curIpL);
String curIpS=getIpFromLong(curIpL);
String[] curIpA=curIpS.split("\\.");
result=curIpA[0]+"."+curIpA[1]+"."+curIpA[2]+"."+"0";
result+="-"+curIpA[0]+"."+curIpA[1]+"."+curIpA[2]+"."+"255";
}
}else{//currentPage==total
String[] curIpA=endIp.split("\\.");
result=curIpA[0]+"."+curIpA[1]+"."+curIpA[2]+"."+"0";
result+="-"+endIp;
}
return result;
}
/**
* Ip地址转化为long型 data>>num 二进制向右移num位 =data/2的num次方
* @param ipAddr
* @return
* @throws IllegalArgumentException
*/
public static long ipToLong(String ipAddr) throws IllegalArgumentException {
if (!ipCheck(ipAddr)) {
throw new IllegalArgumentException("Illegal ip address: " + ipAddr);
}
long result = 0;
String[] tmp = ipAddr.split("\\.");
for (String part : tmp)
result = result << 8 | Integer.parseInt(part);
return result;
}
/**
* 判断是否为Ip
* @param text
* @return
*/
public static boolean ipCheck(String text) {
if (text != null && !text.isEmpty()) {
// 定义正则表达式
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)$";
// 判断ip地址是否与正则表达式匹配
if (text.matches(regex)) {
// 返回判断信息
return true;
} else {
// 返回判断信息
return false;
}
}
return false;
}
/**
* 把long类型的Ip转为一般Ip类型:xx.xx.xx.xx
* @param ip
* @return
*/
public static String getIpFromLong(Long ip){
String s1 = String.valueOf((ip & 4278190080L) / 16777216L);
String s2 = String.valueOf((ip & 16711680L) / 65536L);
String s3 = String.valueOf((ip & 65280L) / 256L);
String s4 = String.valueOf(ip & 255L);
return s1 + "." + s2 + "." + s3 + "." + s4;
}