java判断ip是否为指定网段

server/2024/10/20 11:45:21/

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

一、IP地址介绍

1.1 IP(IPv4)

IP是Internet Protocol的缩写,即网际协议,它是计算机网络体系结构中的网络层协议。IPv4使用32位地址(IPv6为128位),通常采用点分十进制表示,例如:192.168.1.47。这个地址由两部分组成:网络位主机位

  • 网络位:用于标识设备所属的网络。
  • 主机位:用于标识该网络中的具体设备。

1.2 IP地址分类

传统的IPv4地址被分为A、B、C、D、E五类:

  • A类地址:用于大型网络,网络位为8位,主机位为24位。
    • 地址范围:1.0.0.0126.255.255.255
  • B类地址:用于中型网络,网络位为16位,主机位为16位。
    • 地址范围:128.0.0.0191.255.255.255
  • C类地址:用于小型网络,网络位为24位,主机位为8位。
    • 地址范围:192.0.0.0223.255.255.255
  • D类地址:用于组播。
  • E类地址:保留地址,未分配使用。

1.3 私有地址

某些地址被保留作为私有网络使用,无法在公网访问:

  • A类私有地址10.0.0.010.255.255.255
  • B类私有地址172.16.0.0172.31.255.255
  • C类私有地址192.168.0.0192.168.255.255

1.4 子网划分 & 子网掩码

子网掩码也是32位长,用于区分网络位和主机位。掩码网络位用1表示,主机位用0表示。

子网掩码的表示方式:

  • 点分十进制表示法:例如255.255.255.0
  • 位计数表示法:例如/24,表示网络位占24位。

作用
子网掩码的作用是确定一个IP地址的网络位长度,从而识别出IP所属的子网。

二. 判断IP是否在网段中(Java)

以下是一个用于判断给定IP是否属于指定网段的Java代码示例:

java">public static boolean ipIsInNet(String ip, String ipArea) {if ("127.0.0.1".equals(ip)) {return true;}if(StringUtils.isBlank(ipArea)){return false;}String[] ipArray = ipArea.split(",");for (String s : ipArray) {if (!s.contains("/")) {if (s.equals(ip)) {return true;}continue;}String[] ips = ip.split("\\.");int ipAddress = (Integer.parseInt(ips[0]) << 24)| (Integer.parseInt(ips[1]) << 16)| (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);int type = Integer.parseInt(s.replaceAll(".*/", ""));int mask = 0xFFFFFFFF << (32 - type);String cidrIp = s.replaceAll("/.*", "");String[] cidrIps = cidrIp.split("\\.");int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)| (Integer.parseInt(cidrIps[1]) << 16)| (Integer.parseInt(cidrIps[2]) << 8)| Integer.parseInt(cidrIps[3]);if ((ipAddress & mask) == (cidrIpAddr & mask)) {return true;}}return false;
}

这个代码可以用来判断某个IP地址是否属于指定的IP网段。

参考文章:java判断ip是否为指定网段

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连


http://www.ppmy.cn/server/127403.html

相关文章

英语不好可以学编程吗?

目录 一、编程语言的词汇学习二、错误调试与英文阅读能力三、技术文档的翻译问题四、编程英文难度有限 在探讨编程学习与英语能力提升之间的关系时&#xff0c;我们可以从多个维度来分析这一现象。 一、编程语言的词汇学习 编程语言的构建往往基于英语&#xff0c;因此&#x…

C#中的结构

结构是几个数据组成的数据结构 1&#xff09;结构是一种值类型&#xff0c;用来封装一组相关的变量 2&#xff09;想方法传递结构时候&#xff0c;通过值传递的方式进行传递 3&#xff09;结构的实例化可以不用new 4&#xff09;结构的构造函数必须带参数 5&#xff09;不…

iOS--RunLoop原理

前言 曾经在写项目的时候遇到过这么一个问题。&#xff1a; 项目中添加了一个tableview&#xff0c;然后还有一个计时器&#xff0c;当滑动tableview的时候会阻塞计时器&#xff0c;你得执行这么一段代码后&#xff0c;计时器才能正常运行。 RunLoop.current.add(timer, for…

滚雪球学Oracle[5.1讲]:Oracle数据库管理与维护

全文目录&#xff1a; 前言0. 上期回顾1. 用户与权限管理1.1 数据库安全模型的设计1.2 角色的分层与权限继承管理1.3 复杂环境中的权限审计与管理 2. 数据库备份与恢复基础2.1 备份策略的设计与实施2.2 增量备份与差异备份的配置2.3 使用RMAN进行灾难恢复 3. 数据库性能监控与优…

15分钟学 Python 第34天 :小项目-个人博客网站

Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及&#xff0c;个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中&#xff0c;我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…

民峰:助力投资者实现财务自由

在复杂多变的金融市场中&#xff0c;选择一个值得信赖的投资平台是每位投资者成功的关键。民峰凭借其丰富的市场经验、创新的技术和优质的客户服务&#xff0c;成为众多投资者的优选。本文将深入分析民峰的核心优势&#xff0c;帮助投资者在瞬息万变的市场中把握财富增值的机会…

pnpm在monorepo架构下不能引用其他模块的问题

一、研究背景 monorepo架构项目目录结构&#xff1a; - common- index.ts- ... - main- index.ts- ... - web- vue-demo- ... pnpm在monorepo架构下使用以下命令 pnpm -F main add common # or pnpm --filter main add common 并不能在main/index.ts中使用common/index.ts…

【2024版本】Mac/Windows IDEA安装教程

IDEA 2024版本真的很强大&#xff0c;此外JDK发布了最新稳定版 JDK21 &#xff0c;只有新版本支持JDK 21、JDK22。原来数据库插件不支持redis等一些NoSql的数据库的连接&#xff0c;如果要使用需要自己单独装收费的插件。直接打开idea就很吃内存了&#xff0c;再打开其他一大堆…