您的位置:首页 > 其它

判断两个IP是否属于同一子网

2015-08-22 20:46 369 查看
import java.math.BigInteger;
import java.util.Scanner;

public class MatchIP {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String mask = sc.nextLine();
String ip1 = sc.nextLine();
String ip2 = sc.nextLine();
if(isOk(mask) && isOk(ip1) && isOk(ip2)){
String str1 = func(mask,ip1);
String str2 = func(mask,ip2);
if(str1.equals(str2))
sop("0");
else
sop("2");
}
else
sop("1");

}
private static String func(String mask, String ip) {
String[] m = mask.split("\\.");
String[] ipp = ip.split("\\.");
mask = "";
ip = "";
for(int i=0;i<4;i++){
BigInteger big1 = new BigInteger(m[i]);
m[i] = big1.toString(2);
BigInteger big2 = new BigInteger(ipp[i]);
ipp[i] = big2.toString(2);
while(m[i].length()!=8){
m[i]="0"+m[i];
}
while(ipp[i].length()!=8){
ipp[i]="0"+ipp[i];
}
mask = mask+m[i];
ip = ip+ipp[i];
}
//sop(mask);
//sop(ip);

char[] ch = new char[32];
for(int i=0;i<32;i++){
ch[i] = (char) (mask.charAt(i)&ip.charAt(i));
}
return new String(ch);
}
private static boolean isOk(String str) {
String[] s = str.split("\\.");
if(s.length!=4)
return false;
for(int i=0;i<4;i++){
if(Integer.parseInt(s[i])<0 || Integer.parseInt(s[i])>255)
return false;
}
return true;
}
public static void sop(Object o){
System.out.println(o);
}

}

http://blog.csdn.net/lily0806/article/details/45873161

char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”
char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”
char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”


返回值:
0:IP1与IP2不属于同一子网络。
1:IP1与IP2属于同一子网络。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: