ip网段根据255划分网段并获取划分个数

问题描述: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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三知之灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值