Java 实现ip 转 cidr
来源:互联网 发布:全年销售额数据报表 编辑:程序博客网 时间:2024/06/03 23:43
自己工作需要,实现ip转cidr
看到网上有人实现,拿来自己用了
import java.util.ArrayList; import java.util.List; public class RangeToCidr { public static List<String> range2cidrlist( String startIp, String endIp ) { long start = ipToLong(startIp); long end = ipToLong(endIp); ArrayList<String> pairs = new ArrayList<String>(); 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 0
- Java 实现ip 转 cidr
- 在java内计算 ip to cidr
- ip地址CIDR分类
- IP地址与CIDR
- IP地址与CIDR
- 751. IP to CIDR
- TCP/IP Illustrated 笔记 CIDR
- 计算IP地址的CIDR
- 计算IP地址以及CIDR
- IP地址子网划分(CIDR)
- leetcode-751. IP to CIDR
- CIDR
- CIDR
- CIDR
- CIDR
- CIDR
- 如何计算IP地址及CIDR
- ip地址,子网掩码,以及cidr记法
- linux16.04+cuda8.0 实现多版本opencv切换,opencv卸载
- yum被锁问题
- Linux下network提示Determining if ip address
- CSS网格模块
- 深度学习 —— 受限玻尔曼机 RBM
- Java 实现ip 转 cidr
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席(折半搜索+类二分枚举)
- 虚拟路由器冗余协议VRRP详解【原理篇】
- 说一个用mkdirs()出现目录建成文件的问题的解决
- 前景检测算法
- 关于spingMVC使用时配置自动扫描出现的路径报错
- 为什么要做接口测试
- 模拟实现atoi
- Centos安装完无法上网的解决方法