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

java判断ip是否为指定网段

前言

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

作者:神的孩子都在歌唱

一、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代码示例:

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.mrgr.cn/news/39413.html

相关文章:

  • Spring依赖注入推荐使用构造函数注入而非@Autowired
  • 嵌入式linux系统中库函数如何提高效率
  • ServletContainerInitializer接口详解
  • Gson将对象转换为JSON(学习笔记)
  • 2、Spring Boot 3.x 集成 Feign
  • SQL中基本SELECT语句及常见关键字的使用(内连接,左/右连接)
  • unixODBC编程(七)数组查询
  • 安卓app开发系列之-用户反馈和维保
  • 全局思维下的联合创新:华为携手ISV伙伴助推银行核心平稳升级
  • 【C++并发入门】摄像头帧率计算和多线程相机读取(上):并发基础概念和代码实现
  • 【保姆级教程】UMLS工具——MetaMap安装及使用
  • 低代码可视化-uniapp蓝牙标签打印-代码生成器
  • 简易CPU设计入门:取指令(三),ip_buf与rd_en的非阻塞赋值
  • 网络爬虫自动化Selenium代理和Cookie
  • 文心一言 VS 讯飞星火 VS chatgpt (357)-- 算法导论24.2 3题
  • Python语言中的重要函数对象用法
  • 区间预测 | Matlab实现ARIMA-KDE的时间序列结合核密度估计区间预测
  • 【RocketMQ】消费失败重试与死信消息
  • Windows 7 和 Windows 7 sp 的区别
  • 25基于python的文本冒险岛游戏(源码+游戏简介+python代码学习攻略)校园招聘面试