前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何判断给定IP是否属于指定网段(Java)?

如何判断给定IP是否属于指定网段(Java)?

作者头像
神的孩子都在歌唱
发布2025-03-05 19:43:38
发布2025-03-05 19:43:38
8400
代码可运行
举报
运行总次数:0
代码可运行

前言

关注我,领取学习资料,接下来还会持续更新。 作者:神的孩子都在歌唱

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

代码语言:javascript
代码运行次数:0
复制
public staticbooleanipIsInNet(String ip, String ipArea) {
    if ("127.0.0.1".equals(ip)) {
        returntrue;
    }

    if(StringUtils.isBlank(ipArea)){
        returnfalse;
    }

    String[] ipArray = ipArea.split(",");
    for (String s : ipArray) {
        if (!s.contains("/")) {
            if (s.equals(ip)) {
                returntrue;
            }
            continue;
        }

        String[] ips = ip.split("\\.");
        intipAddress= (Integer.parseInt(ips[0]) << 24)
                | (Integer.parseInt(ips[1]) << 16)
                | (Integer.parseInt(ips[2]) << 8) 
                | Integer.parseInt(ips[3]);
        
        inttype= Integer.parseInt(s.replaceAll(".*/", ""));
        intmask=0xFFFFFFFF << (32 - type);
        StringcidrIp= s.replaceAll("/.*", "");
        String[] cidrIps = cidrIp.split("\\.");
        intcidrIpAddr= (Integer.parseInt(cidrIps[0]) << 24)
                | (Integer.parseInt(cidrIps[1]) << 16)
                | (Integer.parseInt(cidrIps[2]) << 8)
                | Integer.parseInt(cidrIps[3]);

        if ((ipAddress & mask) == (cidrIpAddr & mask)) {
            returntrue;
        }
    }
    returnfalse;
}

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

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

作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客连

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 神的孩子都在歌唱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、IP地址介绍
    • 1.1 IP(IPv4)
    • 1.2 IP地址分类
    • 1.3 私有地址
    • 1.4 子网划分 & 子网掩码
  • 二. 判断IP是否在网段中(Java)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档