java 网段内的ip_Java中如何判断一个IP是否在一个网段里面?

本文介绍了在Java中如何使用Spring Security的IpAddressMatcher或自定义方法检查IP地址是否匹配指定的网段,包括通配符和IP范围的处理。
摘要由CSDN通过智能技术生成

本文最后更新于2018年4月1日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

功能开发需要,学习Java需要(之前有写过Python版本的,因为Python本身的特性以及netaddr模块,所以写起来很简单),后来发现Java里也有相关成熟的jar包,所以,也很简单。。。

正文:

参考解答:

# pom.xml

org.springframework.security

spring-security-web

4.2.3.RELEASE

# test.java

import org.springframework.security.web.util.matcher.IpAddressMatcher;

private boolean matches(String ip, String subnet) {

IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet);

return ipAddressMatcher.matches(ip);

}

&

public class IpCheckMatching {

/**

* check if IP address match pattern

*

* @param pattern

* *.*.*.* , 192.168.1.0-255 , *

* @param address

* - 192.168.1.1

* address = 10.2.88.12 pattern = *.*.*.* result: true

* address = 10.2.88.12 pattern = * result: true

* address = 10.2.88.12 pattern = 10.2.88.12-13 result: true

* address = 10.2.88.12 pattern = 10.2.88.13-125 result: false

* @return true if address match pattern

*/

public static boolean checkIPMatching(String pattern, String address)

{

if (pattern.equals("*.*.*.*") || pattern.equals("*"))

return true;

String[] mask = pattern.split("\\.");

String[] ip_address = address.split("\\.");

for (int i = 0; i < mask.length; i++)

{

if (mask[i].equals("*") || mask[i].equals(ip_address[i]))

continue;

else if (mask[i].contains("-"))

{

int min = Integer.parseInt(mask[i].split("-")[0]);

int max = Integer.parseInt(mask[i].split("-")[1]);

// if (max > 255) max = 255;

int ip = Integer.parseInt(ip_address[i]);

if (ip < min || ip > max)

return false;

}

else

return false;

}

return true;

}

public static void main(String[] args) {

String ipPattern = "*,*.*.*.*,10.2.88.12,10.2.88.12-13,10.2.88.5-125,10.2.88.13-256"; //byte类型最大值(127)

String ipStr = "10.2.88.12";

for (String ip: ipPattern.split(",")) {

System.out.print(ipStr + " in " + ip + " ?\t");

System.out.println(checkIPMatching(ip, ipStr));

}

}

}

参考链接:

=END=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值