java ip 掩码计算cidr_在java内计算 ip to cidr

由于项目需求 需要用java计算ip to cidr  具体的也不是了解  由于对网络方面的只是不是太了解  就在网上找 好多都只是说把网络知识学好就能写出来,但是时间上不允许,

后来在网上找到一个写好的代码 ,可以直接用的。

import java.util.ArrayList;

import java.util.List;

public class RangeToCidr {

public static List range2cidrlist( String startIp, String endIp ) {

long start = ipToLong(startIp);

long end = ipToLong(endIp);

ArrayList pairs = new ArrayList();

while ( end >= start ) {

byte maxsize = 32;

while ( maxsize > 0) {

long mask = CIDR2MASK[ maxsize -1 ];

long maskedBase = start & mask;

if ( maskedBase != start ) {

break;

}

maxsize--;

}

double x = Math.log( end - start + 1) / Math.log( 2 );

byte maxdiff = (byte)( 32 - Math.floor( x ) );

if ( maxsize < maxdiff) {

maxsize = maxdiff;

}

String ip = longToIP(start);

pairs.add( ip + "/" + maxsize);

start += Math.pow( 2, (32 - maxsize) );

}

return pairs;

}

public static final int[] CIDR2MASK = new int[] { 0x00000000, 0x80000000,

0xC0000000, 0xE0000000, 0xF0000000, 0xF8000000, 0xFC000000,

0xFE000000, 0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000,

0xFFF00000, 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000,

0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000, 0xFFFFF800,

0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,

0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE,

0xFFFFFFFF };

private static long ipToLong(String strIP) {

long[] ip = new long[4];

String[] ipSec = strIP.split("\\.");

for (int k = 0; k < 4; k++) {

ip[k] = Long.valueOf(ipSec[k]);

}

return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];

}

private static String longToIP(long longIP) {

StringBuffer sb = new StringBuffer("");

sb.append(String.valueOf(longIP >>> 24));

sb.append(".");

sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));

sb.append(".");

sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));

sb.append(".");

sb.append(String.valueOf(longIP & 0x000000FF));

return sb.toString();

}

}转自:

点击打开链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值