前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一、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.0
到126.255.255.255
- 地址范围:
- B类地址:用于中型网络,网络位为16位,主机位为16位。
- 地址范围:
128.0.0.0
到191.255.255.255
- 地址范围:
- C类地址:用于小型网络,网络位为24位,主机位为8位。
- 地址范围:
192.0.0.0
到223.255.255.255
- 地址范围:
- D类地址:用于组播。
- E类地址:保留地址,未分配使用。
1.3 私有地址
某些地址被保留作为私有网络使用,无法在公网访问:
- A类私有地址:
10.0.0.0
到10.255.255.255
- B类私有地址:
172.16.0.0
到172.31.255.255
- C类私有地址:
192.168.0.0
到192.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
转载说明:务必注明来源,附带本人博客连