当前位置: 首页 > news >正文

IP地址工具,判断IP是否在指定范围内(支持ipv6)

常用方法,判断一个ip是否在指定的ip范围内,范围可能包括起始ip范围或者掩码形式,无其它依赖,

package com.yk.ip;import java.math.BigInteger;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;public class IpUtil {/*** 判断目标ip是否在ip范围内(起始ip范围),支持ipv6* @param ipAddress 目标ip* @param startIp 开始ip* @param endIp 结束ip* @return boolean* @throws UnknownHostException 异常*/public static boolean isInRange(String ipAddress,String startIp,String endIp) throws UnknownHostException {InetAddress address = InetAddress.getByName(ipAddress);InetAddress startAddress = InetAddress.getByName(startIp);InetAddress endAddress = InetAddress.getByName(endIp);BigInteger start = new BigInteger(1, startAddress.getAddress());BigInteger end = new BigInteger(1, endAddress.getAddress());BigInteger target = new BigInteger(1, address.getAddress());int st = start.compareTo(target);int te = target.compareTo(end);return (st <= 0) && (te <= 0);}/*** 判断目标ip是否在ip范围内(掩码),支持ipv6* @param ipAddress 目标ip* @param ipWithMask 带掩码ip* @return boolean* @throws UnknownHostException 异常*/public static boolean isInRange(String ipAddress,String ipWithMask) throws UnknownHostException {if (ipWithMask.contains("/")) {String addressPart = ipWithMask.substring(0, ipWithMask.indexOf("/"));String networkPart = ipWithMask.substring(ipWithMask.indexOf("/") + 1);ByteBuffer maskBuffer;int targetSize;InetAddress inetAddress = InetAddress.getByName(addressPart);if (inetAddress.getAddress().length == 4) {maskBuffer = ByteBuffer.allocate(4).putInt(-1);targetSize = 4;} else {maskBuffer = ByteBuffer.allocate(16).putLong(-1L).putLong(-1L);targetSize = 16;}BigInteger mask = (new BigInteger(1, maskBuffer.array())).not().shiftRight(Integer.parseInt(networkPart));ByteBuffer buffer = ByteBuffer.wrap(inetAddress.getAddress());BigInteger ipVal = new BigInteger(1, buffer.array());BigInteger startIp = ipVal.and(mask);BigInteger endIp = startIp.add(mask.not());byte[] startIpArr = toBytes(startIp.toByteArray(), targetSize);byte[] endIpArr = toBytes(endIp.toByteArray(), targetSize);InetAddress startAddress = InetAddress.getByAddress(startIpArr);InetAddress endAddress = InetAddress.getByAddress(endIpArr);return isInRange(ipAddress, startAddress.getHostAddress(), endAddress.getHostAddress());} else {throw new IllegalArgumentException("not an valid CIDR format!");}}private static byte[] toBytes(byte[] array, int targetSize) {int counter = 0;List<Byte> newArr = new ArrayList<Byte>();while (counter < targetSize && (array.length - 1 - counter >= 0)) {newArr.add(0, array[array.length - 1 - counter]);counter++;}int size = newArr.size();for (int i = 0; i < (targetSize - size); i++) {newArr.add(0, (byte) 0);}byte[] ret = new byte[newArr.size()];for (int i = 0; i < newArr.size(); i++) {ret[i] = newArr.get(i);}return ret;}
}

相关文章:

IP地址工具,判断IP是否在指定范围内(支持ipv6)

常用方法&#xff0c;判断一个ip是否在指定的ip范围内&#xff0c;范围可能包括起始ip范围或者掩码形式&#xff0c;无其它依赖&#xff0c; package com.yk.ip;import java.math.BigInteger; import java.net.InetAddress; import java.net.UnknownHostException; import jav…...

Redis 之六:Redis 的哨兵模式(Sentinel)

Redis 哨兵&#xff08;Sentinel&#xff09;模式是一种高可用性解决方案&#xff0c;用于监控和自动故障转移的集群系统。 在 Redis Sentinel 架构中&#xff0c;哨兵是一组运行在特殊模式下的 Redis 进程&#xff0c;它们可以监控一个或多个主从复制结构中的 Redis 主服务器以…...

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …...

RK3566 linux iperf网络测试

一、开发环境 系统:buildroot&#xff1b; 在Linux目标板和Windows PC上运行iperf进行测试&#xff1b; 二、调试 1、查询目标板上的iperf 使用终端助手连接目标板&#xff0c;然后输入命令查询iperf的版本&#xff1a; rootrk3566-buildroot:~# iperf -v iperf version …...

【无标题】计算机主要应用于哪些领域

科学计算&#xff08;或称为数值计算&#xff09;、数据处理&#xff08;信息管理&#xff09;、辅助工程、生产自动化、人工智能。1、科学计算&#xff08;或称为数值计算&#xff09;&#xff1a;早期的计算机主要用于科学计算。目前&#xff0c;科学计算仍然是计算机应用的一…...

力扣精选算法100道——颜色分类(双指针和三指针俩种方法解决此题)

目录 &#x1f6a9;了解题意 &#x1f6a9;算法分析 第一种方法&#xff1a;双指针 &#x1f6a9;代码实现一 第二种方法&#xff1a;三指针 &#x1f6a9;代码实现二 &#x1f6a9;了解题意 本题将整数0&#xff0c;1&#xff0c;2代表红白篮&#xff0c;nums中的整数并…...

基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java SSM springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐…...

01——什么是人工智能

学习形式分类 1) 有监督学习 有监督学习&#xff08;supervised learning&#xff09;&#xff0c;需要你事先需要准备好要输入数据&#xff08;训练样本&#xff09;与真实的输出结果&#xff08;参考答案)&#xff0c;然后通过计算机的学习得到一个预测模型&#xff0c;再用…...

AI国漫女神这样画!傻瓜式的云端SD(stable diffusion)部署教程 - 白嫖4090、无需代码、一键启动

一、前言&#xff1a;为什么要云端部署stable diffusion? 前段时间一直在用midjourney进行Ai绘画&#xff0c;但是发现Midjourney绘画的限制有点多很死板&#xff0c;很多图都不能画&#xff0c;懂得都懂。想使用Midjourney可以看这个&#xff1a;&#xff08; 【推荐】Midjo…...

消息队列、共享内存、信号灯

IPC&#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09; 常用的 IPC 对象包括管道&#xff08;pipe&#xff09;、消息队列&#xff08;message queue&#xff09;、信号量&#xff08;semaphore&#xff09;和共享内存&#xff08;shared memory&…...

K次取反后最大化的数组和 加油站 分发糖果 柠檬水找零

1005.K次取反后最大化的数组和 力扣题目链接(opens new window) 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&a…...

Standoff: 独特的基于真实商业基础架构的网络战

Standoff 网络战通常每年进行两次&#xff08;5 月和 11 月&#xff09;。该公共活动的核心是由多个良心黑客团队&#xff08;也称为威胁研究团队、白帽队或红队&#xff09;对虚拟地区的基础架构进行系列攻击。 下一届 Standoff 将在 2024 年 5 月 23 日至 26 日举行的 Posi…...

如何成为fpga工程师

FPGA的应用领域非常的广&#xff0c;尤其再人工智能&#xff0c;大数据&#xff0c;云计算等等方向非常吃香。加上国家这两年的政策支持&#xff0c;整个芯片行业相比较其他的传统行业来说会好很多&#xff0c;总之前景是光明的&#xff0c;道路是曲折的&#xff0c;想要在人才…...

基础算法(二)#蓝桥杯

文章目录 8、双指针8.1、挑选子串8.2、聪明的小羊肖恩8.3、神奇的数组 9、二分9.1、跳石头9.2、可凑成的最大花朵数9.3、最大通过数9.4、妮妮的月饼广场9.5、基德的神秘冒险9.6、体育健将 10、倍增10.1、快速幂10.2、最近公共祖先LCA查询10.3、理想之城10.4、数的变换 8、双指针…...

运筹学_1.1.4 线性规划问题-解的概念

1.1.4 线性规划问题-解的概念 一、可行解与最优解二、基的概念三、基变量、基向量&#xff1b;非基变量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最优解与可行解、基可行解的关系五、用例题&#xff08;枚举法&#xff09;巩固基解、基可行解、最优解三个概念1、例…...

物联网主机:为智能交通赋能

物联网&#xff08;IoT&#xff09;技术的发展为智能交通领域带来了许多创新的解决方案。而在物联网应用中&#xff0c;物联网主机起着关键的作用。本文将为大家介绍一款名为E6000的物联网主机&#xff0c;它是一种多协议、多接口的物联网主机&#xff0c;为智能交通系统的建设…...

「Vue3系列」Vue3简介及安装

文章目录 一、Vue3简介二、Vue3安装三、Vue3应用案例四、package.json详解五、相关链接 一、Vue3简介 Vue3是Vue.js框架的第三个主要版本&#xff0c;于2020年9月18日发布&#xff0c;代号为“One Piece”。Vue3在性能、体积、TypeScript支持、API设计等方面都有显著的提升和改…...

Javascript:分支语句

一、前言 关于分支语句的介绍来啦&#xff0c;开始记笔记。 二、正文 1.分支语句if 分支语句就是通过判断已给的表达式的条件来执行语句&#xff0c;表达式为真才能执行. if(条件){满足条件才要执行的代码} 条件为true时&#xff0c;才能进行大括号的代码。 除了空字符串&am…...

从零开始学习PX4源码2(PX4姿态误差计算)

目录 文章目录 目录摘要1.源码1.1源码路径1.2源码程序1.3源码功能 2.源码分析 摘要 本节主要记录PX4姿态误差计算过程&#xff0c;欢迎批评指正。 1.源码 1.1源码路径 PX4-Autopilot/src/modules/mc_att_control/AttitudeControl/AttitudeControl.cpp1.2源码程序 matrix::…...

git安装与使用4.3

一、git的安装 1、下载git包 下载git包url&#xff1a;https://git-scm.com/download/win 下载包分为&#xff1a;64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处&#xff0c;右键…...

番茄小说下载器:3分钟打造个人专属离线图书馆

番茄小说下载器&#xff1a;3分钟打造个人专属离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款专为小说爱好者设计的强大开源工具&#xff0c;…...

对比直接使用官方 API,Taotoken 在计费透明性上的优势体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用官方 API&#xff0c;Taotoken 在计费透明性上的优势体验 对于需要调用多种大语言模型的开发者而言&#xff0c;成本控…...

智能硬件适配引擎:92%成功率重构OpenCore EFI配置标准

智能硬件适配引擎&#xff1a;92%成功率重构OpenCore EFI配置标准 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统定制领域&#xff0c;硬件…...

告别手动排班!明日方舟智能基建助手Arknights-Mower五分钟上手指南

告别手动排班&#xff01;明日方舟智能基建助手Arknights-Mower五分钟上手指南 【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower 还在为《明日方舟》繁琐的基建管理而头疼吗&#xff1f;每天重复的…...

从零开始学大模型Agent:收藏这份反向学习路线,助你避开99%小白踩坑!

本文揭示当前大模型Agent学习路线普遍顺序错误&#xff0c;建议反向学习&#xff1a;先理解底层机制&#xff08;动手写最小Agent&#xff09;&#xff0c;再掌握LangGraph流程建模&#xff08;重点StateGraph、条件边、Checkpointer&#xff09;&#xff0c;深入核心模块工程&…...

Multiverse 引擎3.0:大屏、移动、AR三端覆盖,AR交互功能详解

在Multiverse 3.0版本中&#xff0c;我们首次实现了移动端、大屏端与AR端的全覆盖。基于“一模双擎”架构&#xff0c;用户在Web端可视化编辑器&#xff08;支持“拖、拉、拽”搭建场景&#xff09;中创建的数字孪生场景&#xff0c;可在像素流中直接加载&#xff0c;自动适配到…...

终极二维码修复指南:免费在线工具QrazyBox完整使用教程

终极二维码修复指南&#xff1a;免费在线工具QrazyBox完整使用教程 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过重要二维码因为打印模糊、咖啡渍或物理磨损而无法扫描的困扰&a…...

如何快速实现无人机合规飞行:基于ESP32的完整远程识别解决方案

如何快速实现无人机合规飞行&#xff1a;基于ESP32的完整远程识别解决方案 【免费下载链接】ArduRemoteID RemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 在FAA和欧盟无人机法规日益严格的背景下&#xff0c;远程识别已…...

Steam创意工坊模组下载神器:跨平台游戏玩家的必备工具

Steam创意工坊模组下载神器&#xff1a;跨平台游戏玩家的必备工具 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你知道吗&#xff1f;作为一名游戏爱好者&#xff0c;你是否曾…...

比特币钱包密码恢复神器:如何用btcrecover找回遗忘的数字资产密码

比特币钱包密码恢复神器&#xff1a;如何用btcrecover找回遗忘的数字资产密码 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance i…...