校验IP或者网关
private static boolean isIP(){
String ip="192.168.10.1";
String maskReg = "^(((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9]).){1}((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d).){2})((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)/(?:[1-9]|[12][0-9]|3[012])){1}$";
Pattern ipPattern = Pattern.compile(maskReg);
Matcher matcher = ipPattern.matcher(ip);
return matcher.matches();
}
校验子网掩码
public static boolean isMask(String mask){
String[] split = mask.split("\\.");
StringBuilder sb = new StringBuilder();
for (String s : split) {
if(s.trim().equals("")){
return false;
}
int i = Integer.parseInt(s);
//如果有数字大于255,则直接返回false
if (i > 255) {
return false;
}
String binary = Integer.toBinaryString(i);
//如果长度小于8,则在前面补0
校验IP和子网掩码是否匹配 (还需要网关)
个人想法:判断是否匹配就是通过先判断掩码是否合法,再判断网关和IP是否在一个网段内(通过网关和IP分别和掩码做按位与运算,判断运算结果是否相等)
public static boolean check() throws AddressStringException {
String ip = "192.168.1.195";
String mask = "255.255.255.240";
String gateWay = "192.168.1.196";
List<String> list=new ArrayList<>();
list.add(ip);list.add(mask);list.add(gateWay);
List<String> binaryList=new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
binaryList.add(new IPAddressString(list.get(i)).toAddress().toBinaryString());
}
String ipBinary = binaryList.get(0);
String maskBinary = binaryList.get(1);
String gateWayBinary = binaryList.get(2);
System.out.println(ipBinary);
System.out.println(maskBinary);
System.out.println(gateWayBinary);
//校验子网掩码 也可以用上面的方法,主要是判断掩码二进制是不是前面全是1,后面全是0
boolean key = true;
int zeroIdx = -1;
for (int i = 0; i < maskBinary.length(); i++) {
if ('0' == maskBinary.charAt(i)){
if (zeroIdx == -1){
zeroIdx = i;
}
if (key){
key = false;
}
}
if ('1' == maskBinary.charAt(i) && !key){
return false;
}
}
System.out.println("zeroIdx = " + zeroIdx);
System.out.println(32-zeroIdx);
String zero ="0";
String one="1";
for(int i = 0; i <31-zeroIdx ; i++) {
zero+="0";
one+="1";
}
System.out.println(zero);
System.out.println(ipBinary.substring(zeroIdx, 32));
if (ipBinary.substring(zeroIdx,32).equals(zero)||ipBinary.substring(zeroIdx,32).equals(one)
||gateWayBinary.substring(zeroIdx,32).equals(zero)||gateWayBinary.substring(zeroIdx,32).equals(one)
||ipBinary.equals(gateWayBinary)){
return false;
}
String ipAndMask = ipBinary.substring(0,zeroIdx) + maskBinary.substring(zeroIdx,32);
String gatewayAndMask = gateWayBinary.substring(0,zeroIdx) + maskBinary.substring(zeroIdx,32);
return ipAndMask.equals(gatewayAndMask);
个人拙见,如果有更好的方法请评论!