java判断ip是否为指定网段

ops/2024/10/19 1:35:57/

前言

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

作者:神的孩子都在歌唱

一、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/ops/122342.html

相关文章

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

数据结构--线性表双向链表的实现

目录 思路设计 总体思维导图 插入部分 头插法尾插法 任意位置插入 删除部分 头结点 尾节点 中间节点 只有头结点且删除的就是头结点 ​编辑 清空链表部分 遍历清空链表的所有节点 不遍历清空 各部分代码 Main部分 MyListedList部分 IndexOutOfException部分 …

基于无人机图像的洪水灾害受损评估分割数据集,共4494张高清无人机图像,10个类别,共22GB数据量,主要关注道路,建筑的受损情况。洪水应急救援

洪水应急救援&#xff0c;基于无人机图像的洪水灾害受损评估分割数据集&#xff0c;共4494张高清无人机图像&#xff0c;10个类别&#xff0c;共22GB数据量&#xff0c;主要关注道路&#xff0c;建筑的受损情况。 洪水应急救援&#xff0c;基于无人机图像的洪水灾害受损评估分…

C++——stack和queue

1.简介 栈和队列的定义和之前的容器有所差别 2.简单地使用 void test_stack1() {stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;}void test_queue1() …

Python3 爬虫 中间人爬虫

中间人&#xff08;Man-in-the-Middle&#xff0c;MITM&#xff09;攻击是指攻击者与通信的两端分别创建独立的联系&#xff0c;并交换其所收到的数据&#xff0c;使通信的两端认为其正在通过一个私密的连接与对方直接对话&#xff0c;但事实上整个会话都被攻击者完全控制。在中…

模型压缩的方法?

模型压缩的方法 方法 模型压缩是一个重要的讨论话题&#xff0c;因为它直接关系到模型在实际应用中的效率和部署能力。模型压缩的主要目的是在保持模型性能的同时&#xff0c;减少模型的参数量和计算量&#xff0c;从而加快推理速度、降低存储需求&#xff0c;使得模型能够在资…

react生命周期

react 的生命周期 react15 的生命周期 constructor(); // 组件构建 componentWillReceiveProps(); // 要接受父组件参数 shouldComponetUpdate(); // 组件是否更新 componentWillMount(); // 组件将要渲染 componentWillUpdate(); // 组件将要更新 componentDidUpdate(); // …

基于CNN+Transformer混合模型实现交通流量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…