输入描述:
第一行是一个IP地址,
第二行是一个IP地址和对应的IP子网掩码
192.168.12.3
192.168.12.45/24
输出描述:
如果第一行输入的IP地址在第二行IP黑名单中,返回是1否者返回是0
JAVA代码实现:
import java.io.*;
import java.util.*;
public class Main {
static boolean CheckBlackList(String userIP, String blackIP) {
String[] networks = userIP.split("\\.");
if(networks.length!=4){//IP地址由4个字节组成,32位
return false;
}
for(int i=0;i<networks.length;i++){//如果超出IP最大的数,IP最大数255也是错的
if(Integer.valueOf(networks[i])>255||Integer.valueOf(networks[i])<0){
return false;
}
}
long networkIp = Long.parseLong(networks[0])<<24|
Long.parseLong(networks[1])<<16|
Long.parseLong(networks[2])<<8|
Long.parseLong(networks[3]);
int netCount = Integer.parseInt(blackIP.replaceAll(".*/",""));
int mask = 0xFFFFFFFF << (32-netCount);
String testIp = blackIP.replaceAll("/.*","");
String[] ips = testIp.split("\\.");
if(ips.length!=4){//同上
return false;
}
for(int i=0;i<ips.length;i++){//同上
if(Integer.valueOf(ips[i])>255 || Integer.valueOf(ips[i])<0){
return false;
}
}
long ip = Long.parseLong(ips[0])<<24|
Long.parseLong(ips[1])<<16|
Long.parseLong(ips[2])<<8|
Long.parseLong(ips[3]);
System.out.println(networkIp&mask);
System.out.println(ip&mask);
return (networkIp&mask) ==(ip&mask);
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String userIP;
try {
userIP = sc.nextLine();
} catch (Exception e) {
userIP = null;
}
String blackIP;
try {
blackIP = sc.nextLine();
} catch (Exception e) {
blackIP = null;
}
boolean res = CheckBlackList(userIP, blackIP);
System.out.println(String.valueOf( res ? 1 : 0));
}
}