int mask = ifAddr.getNetworkPrefixLength();
StringBuilder maskStr = new StringBuilder();
int[] maskIp = new int[4];
for (int i=0; i<maskIp.length; i++) {
maskIp[i] = (mask >= 8) ? 255 : (mask > 0 ? (mask & 0xff) : 0);
mask -= 8;
maskStr.append(maskIp[i]);
if (i < maskIp.length-1) {
maskStr.append(".");
}
}
判断两个IP是否在一个网段:
分别拿两个IP和子网掩码进行与操作,得到的结果若相同,则可以通信
int clientIpFirstPlace = Integer.parseInt(ClientIp[0]);
int clientIpSecondPlace = Integer.parseInt(ClientIp[1]);
int clientIpThirdPlace = Integer.parseInt(ClientIp[2]);
int clientIpFourthPlace = Integer.parseInt(ClientIp[3]);
int localIpFirstPlace = Integer.parseInt(localIp[0]);
int localIpSecondPlace = Integer.parseInt(localIp[1]);
int localIpThirdPlace = Integer.parseInt(localIp[2]);
int localIpFourthPlace = Integer.parseInt(localIp[3]);
boolean maskFirstEqual = ((clientIpFirstPlace & maskIp[0]) == (localIpFirstPlace & maskIp[0]));
boolean maskSecondEqual = ((clientIpSecondPlace & maskIp[1]) == (localIpSecondPlace & maskIp[1]));
boolean maskThirdEqual = ((clientIpThirdPlace & maskIp[2]) == (localIpThirdPlace & maskIp[2]));
boolean maskFourthEqual = ((clientIpFourthPlace & maskIp[3]) == (localIpFourthPlace & maskIp[3]));
if(maskFirstEqual && maskSecondEqual && maskThirdEqual && maskFourthEqual) {
...
...
...
}