java 判断ip通断_java判断ip是否为指定网段

java判断ip是否为指定网段

java判断ip是否为指定网段

IP是Internet Protocol(网际互连协议),是计算机网络体系结构中的网络层协议。

IP协议定义地址是一个32位的地址,(ipv6是128位),使用点分十进制表示法,每8位分开来表示

也就是我们常说的IP地址,例如:30.14.234.254

该地址分为两个部分network+host(网络位+主机位),具体各占几位,不一定。

网络位是指你这个设备是处于哪个网段的,主机位是定位你是当前网络的哪一台设备。

传统的ip地址分类:

分为A\B\C\D\E五类

abc类是正常使用的地址,

d类为组播地址,e类为保留地址,一般人是不给使用的

这个主要说一下abc类

A 0xxxxxxx.

8个网络位 一般给大型网络使用 有 2的24次方-2 个主机位 主机 地址全0全1不可以用

主机位全0为网络地址 主机位全1为广播地址 发送数据给广播地址 这个网段所有的设备都要去处理数据

B 10xxxxxx.xxxxxxxx. 16个网络位

C 110xxxxx.xxxxxxxx.xxxxxxxx. 24个网络位

D 11110开头

E 111110开头

根据规定各类地址的范围我们是可以算出来的

A 0 0000001~0 11111110 (1-126即 1.0.0.0~126.255.255.255)0和 127整个网段是保留的

B 10 000000~10 111111 (128-191即 128.0.0.0~191.255.255.255)

C 110 00000~110 11111 (192-223即 192.0.0.0~223.255.255.255)

私网地址:

A 整个10网段 即(10.0.0.0~10.255.255.255)

B 127.16-172.31 即(172.16.0.0~127.31.255.255)

C 192.168 即(192.168.0.0~192.168.255.255)

5deefd5dbc6f8673635327670e715a49.png

子网掩码也是32位长,网络位为1,主机位为0。

两中表示方法:

点分十进制表示法 255.255.255.0 位计数表示法/24

作用:

子网掩码的作用就是来告诉我们,到底网络位占几个位的

532b68e05797561c732c855ef8a1e93f.png

86a600b2d6256339fccf3b1278e09b3e.png

1+2+4+8+16+32+64=129>128

所以要借7位

列举:

172.16.00000010.0 即172.168.2.0

172.16.00000100.0 即172.168.4.0

172.16.00000110.0 即172.168.6.0

172.16.00001000.0 即172.168.8.0

562f6cbfc60ea2964caaf4d0cf2f982f.png

public class IPUtil {

/**

* 判断ip是否在指定网段

*

* @param ip

* @return

*/

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("\\.");

//ip地址的十进制值

int ipAddress = (Integer.parseInt(ips[0]) << 24)

| (Integer.parseInt(ips[1]) << 16)

| (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);

//掩码(0-32)

int type = Integer.parseInt(s.replaceAll(".*/", ""));

//匹配的位数为32 - type位(16进制的1)

int mask = 0xFFFFFFFF << (32 - type);

String cidrIp = s.replaceAll("/.*", "");

//网段ip十进制

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;

}

continue;

}

return false;

}

public static void main(String[] args) {

System.out.println(ipIsInNet("60.191.28.82","123.0.28.0/24,42.120.174.0/23,60.191.28.82"));

}

}

java判断ip是否为指定网段相关教程

两种类型的变量

两种类型的变量 在java中你会像下面那样声明变量: String s = Hello;int i = 42;Person p = new Person(hello); 每个变量声明都包含了类型。 相比之下,在scala中有两种类型的变量: val创建一个不可变的变量(跟java中的 final 一样) var创建一个可变的变

JDK重装后报错:Error:opening registry key ‘Software/JavaSof

JDK重装后报错:Error:opening registry key ‘Software/JavaSoft/JRE‘ JDK重装后报错:Error:opening registry key 'Software/JavaSoft/JRE' 一、出现的问题 重装JDK后,在命令行使用java -version查看,报错Error:opening registry key 'Software/JavaSoft

LeetCode 1232缀点成线(java)

LeetCode 1232缀点成线(java) class Solution { public boolean checkStraightLine(int[][] coordinates) { if( coordinates.length == 2) return true; for(int i = 0; i coordinates.length - 2; ++i) { int x1 = coordinates[i + 1][0] - coordinates[i][0

Java中的双亲委派模型

Java中的双亲委派模型 双亲委派模型:其实就是类加载优先级顺序问题的处理。 java中的顶层类加载器Bootstrap ClassLoader没有父类加载器外,其他都有父类加载器。 双亲委派模型的流程: (1)在加载类的时候,依次向上进行查看是否有父类的类加载器。直到最顶

JavaScript基础操作——事件三要素

JavaScript基础操作——事件三要素 事件三要素:事件源 事件类型 事件处理程序; 事件源:要触发的对象 (一般是名词,事件发起者,比如开关按钮); 事件类型:怎么触发这个事情 (一般是动词,触发事件,比如点击开关); 事件处理程序:发生了什么事情 (

Java 8

Java 8 为什么80%的码农都做不了架构师? 1. 简介 毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器、类库、开发工具和JVM(Java虚拟机)。我们将通过真实例子演示说明它们适用的场景。 它们

Java-使用通配符? extends 和 ? super

Java-使用通配符? extends 和 ? super 为什么80%的码农都做不了架构师? 泛型中使用通配符有两种形式:子类型限定? extends xxx和超类型限定? super xxx。 (1)子类型限定 下面的代码定义了一个PairT类,以及Employee,Manager和President类。 public class

java中List的add方法添加对象时都是最后的一条记录,且该对象改

java中List的add方法添加对象时都是最后的一条记录,且该对象改变时,list中的内容也会跟着该对象改变 list中添加对象 import java.util.ArrayList;import java.util.List;public class ListTest{ public static void main(String [] args) { Cat cat1=new Ca

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值