IPv4地址段、地址掩码、可用地址等常用方法
package com.xxx.iptools;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class IPv4Util {
public static void main(String[] args){
String ipAddr="15.10.44.60";
System.out.println("判断字符串是否为IPv4地址:"+isIPv4("24"));
System.out.println("IPv4地址转换为数字:"+ipToInt(ipAddr));
System.out.println("数字转换为IP地址:"+intToIP(252324924));
System.out.println("数字串转换为IP地址:"+intToIP("252324928"));
System.out.println("将掩码位转换为地址:"+maskToIP("8"));
System.out.println("将掩码转换为掩码位:"+maskToBit("255.0.0.0"));
System.out.println("根据IP和掩码计算首地址:"+IPmap("192.168.1.2/24"));
System.out.println("根据IP和掩码计算所有IP地址:"+IPAll("192.168.1.15/28"));
System.out.println("根据IP和掩码计算所有IP十进制值:"+IPnums("192.168.1.15/32"));
System.out.println("两组IP判断包含(bIsContA:B包含A;aIsContB:A包含B)、交集(retainAll)、并集(all)、去重并集(disAll)、差集(diffAll,A有B没有):"+IPColl("192.168.1.1/30","192.168.1.1/31"));
} /**
* 根据IP地址和掩码,获取全量IP列表
* @param ipAddra,ipAddrb
* @return map
*/
public static Map IPColl (String ipAddra,String ipAddrb){
//根据地址信息获取全量十进制IP
List lista=IPnums(ipAddra);
List listb=IPnums(ipAddrb);
Map map=new HashMap();
List list = new ArrayList();
//包含关系判断
Boolean aIsContB=lista.containsAll(listb);
map.put("aIsContB",aIsContB);
Boolean bIsContA=listb.containsAll(lista);
map.put("bIsContA",bIsContA);
//并集,包含重复数据
list = lista;
list.addAll(listb);
map.put("all",listNuToIP(list));
list=null;
//差集,lista对listb的差集,a有b没有的意思
list=lista;
list.removeAll(listb);
map.put("diffAll",listNuToIP(list));
//去重并集:根据上一步的差集,合并第二集合,得到去重并集
list.addAll(listb);
map.put("disAll",listNuToIP(list));
list=null;
//交集:两个list集合的交集
list=lista;
list.retainAll(listb);
map.put("retainAll",listNuToIP(list));
list=null;
return map;
} /**
* 根据十进制IP list列表,获取点分制IP地址
* @param listint
* @return list
*/
public static List listNuToIP (List listint){
List list=new ArrayList();
for (Object ip:listint){
String ips = intToIP(Long.parseLong(ip.toString()));
list.add(ips);
}
return list;
} /**
* 根据IP地址和掩码,获取全量IP列表
* @param ipAddr
* @return list
*/
public static List IPnums (String ipAddr){
List list=new ArrayList();
if (!ipAddr.contains("/")){
list.add(ipToInt(ipAddr));
return list;
}
if (ipAddr.split("/")[1].equals("32") || ipAddr.split("/")[1].equals("255.255.255.255")){
list.add(ipToInt(ipAddr.split("/")[0]));
return list;
}
Map mapIP=IPmap(ipAddr);
Long startIP=ipToInt(mapIP.get("netIP").toString());
Long endIP=ipToInt(mapIP.get("broadIP").toString());
for (Long i=startIP;i<=endIP;i++){
list.add(i);
}
return list;
} /**
* 根据IP地址和掩码,获取全量IP列表
* @param ipAddr
* @return list
*/
public static List IPAll (String ipAddr){
List list=new ArrayList();
if (!ipAddr.contains("/")){
list.add(ipAddr);
return list;
}
if (ipAddr.split("/")[1].equals("32") || ipAddr.split("/")[1].equals("255.255.255.255")){
list.add(ipAddr.split("/")[0]);
return list;
}
Map mapIP=IPmap(ipAddr);
Long startIP=ipToInt(mapIP.get("netIP").toString());
Long endIP=ipToInt(mapIP.get("broadIP").toString());
for (Long i=startIP;i<=endIP;i++){
list.add(intToIP(i));
}
return list;
} /**
* 根据IP地址和掩码计算掩码、网络、广播、起始IP地址
* @param ipAddr
* @return map
*/
public static Map<String,String> IPmap(String ipAddr){
Map<String,String> map=new HashMap<>();
if (!ipAddr.contains("/")){
map.put("startIP",ipAddr);
map.put("maskBit","32");
map.put("maskIP","255.255.255.255");
return map;
}
String ip=ipAddr.split("/")[0];
String maskIP=ipAddr.split("/")[1];
String maskBit="";
if(isIPv4(maskIP)){
maskBit=maskToBit(maskIP);
if (maskBit.equals("32")){
map.put("startIP",ip);
map.put("maskBit","32");
map.put("maskIP","255.255.255.255");
return map;
}
}else{
maskBit=maskIP;
if (maskBit.equals("32")){
map.put("startIP",ip);
return map;
}
maskIP=maskToIP(maskBit);
}
String ip1st = "";
int ipArray[] = new int[4];
int netMaskArray[] = new int[4];
for (int i = 0; i <4; i++) {
ipArray[i] = Integer.parseInt(ip.split("\\.")[i]);
netMaskArray[i] = Integer.parseInt(maskIP.split("\\.")[i]);
ipArray[i] = ipArray[i]&netMaskArray[i];
}
for (int i = 0; i < 4; i++){
if(i == 3){
ipArray[i] = ipArray[i];
}
if ("" == ip1st){
ip1st +=ipArray[i];
} else{
ip1st += "." + ipArray[i];
}
}
map.put("maskBit",maskBit);
map.put("maskIP",maskIP);
map.put("netIP",ip1st);
String broadIP=intToIP(ipToInt(ip1st)+(int)Math.pow(2,32-Integer.parseInt(maskBit))-1);
String end=intToIP(ipToInt(ip1st)+(int)Math.pow(2,32-Integer.parseInt(maskBit))-2);
map.put("broadIP",broadIP);
map.put("endIP",broadIP);
ip1st="";
for (int i = 0; i < 4; i++){
if(i == 3){
ipArray[i] = ipArray[i]+1;
}
if ("" == ip1st){
ip1st +=ipArray[i];
} else{
ip1st += "." + ipArray[i];
}
}
map.put("startIP",ip1st);
return map;
} /**
* 将掩码位转换为地址,入参为字符串
* @param maskIP
* @return String
*/
public static String maskToBit(String maskIP) {
String bitMask="-1";
switch (maskIP){
case "128.0.0.0" : bitMask = "1" ; break;
case "192.0.0.0" : bitMask = "2" ; break;
case "224.0.0.0" : bitMask = "3" ; break;
case "240.0.0.0" : bitMask = "4" ; break;
case "248.0.0.0" : bitMask = "5" ; break;
case "252.0.0.0" : bitMask = "6" ; break;
case "254.0.0.0" : bitMask = "7" ; break;
case "255.0.0.0" : bitMask = "8" ; break;
case "255.128.0.0" : bitMask = "9" ; break;
case "255.192.0.0" : bitMask ="10" ; break;
case "255.224.0.0" : bitMask ="11" ; break;
case "255.240.0.0" : bitMask ="12" ; break;
case "255.248.0.0" : bitMask ="13" ; break;
case "255.252.0.0" : bitMask ="14" ; break;
case "255.254.0.0" : bitMask ="15" ; break;
case "255.255.0.0" : bitMask ="16" ; break;
case "255.255.128.0" : bitMask ="17" ; break;
case "255.255.192.0" : bitMask ="18" ; break;
case "255.255.224.0" : bitMask ="19" ; break;
case "255.255.240.0" : bitMask ="20" ; break;
case "255.255.248.0" : bitMask ="21" ; break;
case "255.255.252.0" : bitMask ="22" ; break;
case "255.255.254.0" : bitMask ="23" ; break;
case "255.255.255.0" : bitMask ="24" ; break;
case "255.255.255.128" : bitMask ="25" ; break;
case "255.255.255.192" : bitMask ="26" ; break;
case "255.255.255.224" : bitMask ="27" ; break;
case "255.255.255.240" : bitMask ="28" ; break;
case "255.255.255.248" : bitMask ="29" ; break;
case "255.255.255.252" : bitMask ="30" ; break;
case "255.255.255.254" : bitMask ="31" ; break;
case "255.255.255.255" : bitMask ="32" ; break;
}
return bitMask;
} /**
* 将掩码位转换为地址,入参为字符串
* @param maskBit
* @return String
*/
public static String maskToIP(String maskBit) {
String ipMask="-1";
switch (maskBit){
case "1" : ipMask = "128.0.0.0"; break;
case "2" : ipMask = "192.0.0.0"; break;
case "3" : ipMask = "224.0.0.0"; break;
case "4" : ipMask = "240.0.0.0"; break;
case "5" : ipMask = "248.0.0.0"; break;
case "6" : ipMask = "252.0.0.0"; break;
case "7" : ipMask = "254.0.0.0"; break;
case "8" : ipMask = "255.0.0.0"; break;
case "9" : ipMask = "255.128.0.0"; break;
case "10" : ipMask = "255.192.0.0"; break;
case "11" : ipMask = "255.224.0.0"; break;
case "12" : ipMask = "255.240.0.0"; break;
case "13" : ipMask = "255.248.0.0"; break;
case "14" : ipMask = "255.252.0.0"; break;
case "15" : ipMask = "255.254.0.0"; break;
case "16" : ipMask = "255.255.0.0"; break;
case "17" : ipMask = "255.255.128.0"; break;
case "18" : ipMask = "255.255.192.0"; break;
case "19" : ipMask = "255.255.224.0"; break;
case "20" : ipMask = "255.255.240.0"; break;
case "21" : ipMask = "255.255.248.0"; break;
case "22" : ipMask = "255.255.252.0"; break;
case "23" : ipMask = "255.255.254.0"; break;
case "24" : ipMask = "255.255.255.0"; break;
case "25" : ipMask = "255.255.255.128"; break;
case "26" : ipMask = "255.255.255.192"; break;
case "27" : ipMask = "255.255.255.224"; break;
case "28" : ipMask = "255.255.255.240"; break;
case "29" : ipMask = "255.255.255.248"; break;
case "30" : ipMask = "255.255.255.252"; break;
case "31" : ipMask = "255.255.255.254"; break;
case "32" : ipMask = "255.255.255.255"; break;
}
return ipMask;
} /**
* 将掩码位转换为地址,入参为数字
* @param maskBit
* @return String
*/
public static String maskToIP(int maskBit) {
String ipMask="-1";
switch (maskBit){
case 1 : ipMask = "128.0.0.0"; break;
case 2 : ipMask = "192.0.0.0"; break;
case 3 : ipMask = "224.0.0.0"; break;
case 4 : ipMask = "240.0.0.0"; break;
case 5 : ipMask = "248.0.0.0"; break;
case 6 : ipMask = "252.0.0.0"; break;
case 7 : ipMask = "254.0.0.0"; break;
case 8 : ipMask = "255.0.0.0"; break;
case 9 : ipMask = "255.128.0.0"; break;
case 10 : ipMask = "255.192.0.0"; break;
case 11 : ipMask = "255.224.0.0"; break;
case 12 : ipMask = "255.240.0.0"; break;
case 13 : ipMask = "255.248.0.0"; break;
case 14 : ipMask = "255.252.0.0"; break;
case 15 : ipMask = "255.254.0.0"; break;
case 16 : ipMask = "255.255.0.0"; break;
case 17 : ipMask = "255.255.128.0"; break;
case 18 : ipMask = "255.255.192.0"; break;
case 19 : ipMask = "255.255.224.0"; break;
case 20 : ipMask = "255.255.240.0"; break;
case 21 : ipMask = "255.255.248.0"; break;
case 22 : ipMask = "255.255.252.0"; break;
case 23 : ipMask = "255.255.254.0"; break;
case 24 : ipMask = "255.255.255.0"; break;
case 25 : ipMask = "255.255.255.128"; break;
case 26 : ipMask = "255.255.255.192"; break;
case 27 : ipMask = "255.255.255.224"; break;
case 28 : ipMask = "255.255.255.240"; break;
case 29 : ipMask = "255.255.255.248"; break;
case 30 : ipMask = "255.255.255.252"; break;
case 31 : ipMask = "255.255.255.254"; break;
case 32 : ipMask = "255.255.255.255"; break;
}
return ipMask;
} /**
* 将数字转换为IPv4地址
* @param intIPv4
* @return String
*/
public static String intToIP(long intIPv4) {
return ((intIPv4 >> 24) & 0xFF) +
"." + ((intIPv4 >> 16) & 0xFF) +
"." + ((intIPv4 >> 8) & 0xFF) +
"." + (intIPv4 & 0xFF);
} /**
* 将数字转换为IPv4地址
* @param intIPv4
* @return String
*/
public static String intToIP(String intIPv4) {
Long ip=Long.parseLong(intIPv4);
return ((ip >> 24) & 0xFF) +
"." + ((ip >> 16) & 0xFF) +
"." + ((ip >> 8) & 0xFF) +
"." + (ip & 0xFF);
} /**
* 将IPv4地址转换为数字
* @param ipAddr
* @return long
*/
public static Long ipToInt(String ipAddr){
long ipInt = 0;
String[] ipAddrArray = ipAddr.split("\\.");
for (int i = 3;i>=0;i--){
long ip=Long.parseLong(ipAddrArray[3-i]);
ipInt |=ip<<(i*8);
}
return ipInt;
} /**
* 判断IPv4地址是否合法
* @param ipAddr
* @return boolean
*/
public static boolean isIPv4(String ipAddr){
boolean isIP=ipAddr.matches("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}");
return isIP; } /**
* 判断IPv4掩码是否合法
* @param mask
* @return boolean
*/
public static boolean isMask(String mask){
String isMask=maskToBit(mask);
if ("-1".equals(isMask)){
return false;
}
return true;
}
}
IPv4地址段、地址掩码、可用地址等常用方法的更多相关文章
- ipv4理论知识1-ipv4介绍,ipv4记法,地址段个数算法
定义 在TCP/IP协议中,用于在IP层识别连接到因特网设备的标识符称为因特网地址或IP地址.IPv4地址是一个32位的地址. 地址空间 像IPv4这种定义了地址的协议都有一个地址空间.地址空间就是协 ...
- JAVA和C#检测IP地址段是否交叉和获取地址段IP列表的方法
一.说明 我们经常编程时,需要对一个DIDR地段计算其可用IP地址,或者验证某个IP是否被包含在一个地址段中. 二.工具 1.Java 可以使用 cidr-ip-trie库解决. https://gi ...
- 【网络基础】【TCP/IP】私有IP地址段
私有IP地址段 Class A:10.0.0.0 - 10.255.255.255 Class B:172.16.0.0 - 172.31.255.255 Class C:192.168.0. ...
- 实例讲解ip地址、子网掩码、可用地址范围的计算
关于ip以及相关的掩码.网络号等概念可以查看相关的博客.资料,这些东西很容易找着,一搜一大片.本文主要记录通过实例进行ip相关的计算. 我自己使用的在线网络计算器地址:https://www.sojs ...
- 分享dubbo.xsd和idubbo.xsd的可用地址
dubbo.xsd和idubbo.xsd的官方地址不可用 http://code.alibabatech.com/schema/dubbo/dubbo.xsd似乎挂了,真是淡淡的忧伤啊,然后就各种报错 ...
- 手机号段、ip地址归属地大全,最新手机号段归属地,IP地址归属地数据库
百事通:http://www.114best.com/dh/114.aspx?w=17097232323,联通识别为电信的,1349错 二三四五:http://tools.2345.com/frame ...
- 封了1000多个IP地址段,服务器现在坚如磐石,对付几个小毛贼还是很轻松的
封了1000多个IP地址段,服务器现在坚如磐石 root登陆权限取消,防火墙装上,关闭所有没必要的端口,外层加装路由器映射, 修改常用端口,将常用端口改成陷阱程序,只要访问我这些陷阱端口,程序直接dr ...
- 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了
这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了 建议大家在自己的服务器上也封杀这些瘪三的地址 iptables -I INPUT -s 123.44.55.0/24 -j DROP ...
- ArcGIS Desktop 10.1+ArcEngine10.1完全破解安装教程(含下载地址+亲测可用!)
最近在二次开发中用到了VS2010+ArcGIS的二次开发模式,因为之前的某些原因,对ArcGIS的接触甚少.初次安装也遇到了很多问题,这里做一个总结. 系统环境 win732位操作系统 需要文件 ( ...
- cidr地址段
CIDR采用各种长度的"网络前缀"来代替分类地址中的网络号和子网号,其格式为:IP地址 = {<网络前缀>,<主机号>}.为了区分网络前缀,通常采用&quo ...
随机推荐
- scrapy 基础组件专题(二):下载中间件
下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量.底层的系统. 1.激活Downloader Mi ...
- java 面向对象(二十二):关键字:final
final:最终的1.可以用来修饰:类.方法.变量 2.具体的: 2.1 final 用来修饰一个类:此类不能被其他类所继承. * 比如:String类.System类.StringBuffer类 * ...
- 数据可视化之powerBI基础(九)Power BI中的“新表”,你会用吗?
https://zhuanlan.zhihu.com/p/64413703 通常情况下,在PowerBI进行分析的各种数据表都是从外部的各种数据源导入进来的,但并不总是如此,某些情况下在PowerBI ...
- 前端09 /jQuery标签操作、事件、补充
前端09 /jQuery标签操作.事件.补充 目录 前端09 /jQuery标签操作.事件.补充 1.标签内文本操作 1.1 html标签元素中的所有内容 1.2 text 标签元素的文本内容 2.文 ...
- Elasticsearch备份数据
Elasticsearch备份数据 1.建立备份目录 POST _snapshot/my_backup/ { "type": "fs", "setti ...
- bzoj2648SJY摆棋子&&bzoj2716[Violet 3]天使玩偶*
bzoj2648SJY摆棋子 bzoj2716[Violet 3]天使玩偶 题意: 棋盘上有n个棋子,现在有m个操作,一种是加棋子,一种是查询离某个点最近的棋子.n,m≤500000. 题解: 先将已 ...
- 关于git,无论是命令使用还是深入学习,看我总结就够了
周五了,又是划水的一下午,无意中在某号上发现了这样一张图,说的内容很简单,就是我们日常离不开的git,可能因为最近github宕机,网传服务器被盗的新闻把,让我瞬间产生了兴趣,就点进去看一下 大家能看 ...
- IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line...
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- 仔细想想SpringAOP也不难嘛,面试没有必要慌
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! LOGO SpringAOP 一.什么是AOP AOP(As ...
- VS code 的集成终端Integrated terminal 的颜色问题
其实是默认终端的配色问题在使用vs code时,运行代码时,控制台是这样子的,搞得我很难受 一块一块的 其实是默认终端的配色问题 默认终端一般是powershell,还可以是cmd,或者git bas ...