本文最后更新于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=