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 ...
随机推荐
- java 面向对象(八):面向对象的特征一:封装性
面向对象的特征一:封装与隐藏1.为什么要引入封装性?我们程序设计追求“高内聚,低耦合”.高内聚 :类的内部数据操作细节自己完成,不允许外部干涉:低耦合 :仅对外暴露少量的方法用于使用. 隐藏对象内部的 ...
- redis(二十四):Redis分布式锁以及实现(python)
阅读目录 什么事分布式锁 基于redis实现分布式锁 一.什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无 ...
- Unity- 小“东西”
菜单栏遍历处理预制体工具 public class GameEditor : Editor { private static void ProcessPrefabs(Action<GameObj ...
- php+mysql如何防止sql注入
方法: 1.预处理.(预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性.) 2.mysql_real_escape_string -- 转义 SQL 语句中使用 ...
- Spring Bean的生命周期 ---附详细流程图及测试代码
一.生命周期流程图: Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点 假设一个Bean实现了所有的接口,大的概况一下Be ...
- Ethical Hacking - Web Penetration Testing(11)
SQL INJECTION Preventing SQLi Filters can be bypassed. Use a blacklist of commands? Still can be byp ...
- O、Θ、Ω、o、ω,别再傻傻分不清了!
前言 本篇文章收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人. 前面几节,我们一起学习了算法的复杂度如 ...
- 细说JavaScript 导出 上万条Excel数据
首先这是个鸡肋的方法 合理的做法是 后端直接生成 前端给个链接就行了 (先说原因与过程最后上代码) 1. 先说说为什么会出现这个需求吧. : 在写运维网站时 自己粗略的看了一下bootstarp-ta ...
- pandas之表格样式
在juoyter notebook中直接通过df输出DataFrame时,显示的样式为表格样式,通过sytle可对表格的样式做一些定制,类似excel的条件格式. df = pd.DataFrame( ...
- MyBatis Plus 导入IdType失败
import com.baomidou.mybatisplus.annotation.IdType; 修正Entity模板IdType引入包名到com.baomidou.mybatisplus.enu ...