Hãy thử phương pháp này:
public static boolean sameNetwork(String ip1, String ip2, String mask)
throws Exception {
byte[] a1 = InetAddress.getByName(ip1).getAddress();
byte[] a2 = InetAddress.getByName(ip2).getAddress();
byte[] m = InetAddress.getByName(mask).getAddress();
for (int i = 0; i < a1.length; i++)
if ((a1[i] & m[i]) != (a2[i] & m[i]))
return false;
return true;
}
Và sử dụng nó như thế này:
sameNetwork("1.2.3.4", "1.2.4.3", "255.255.255.0")
> false
EDIT:
Nếu bạn đã có IP như InetAddress
đối tượng:
public static boolean sameNetwork(InetAddress ip1, InetAddress ip2, String mask)
throws Exception {
byte[] a1 = ip1.getAddress();
byte[] a2 = ip2.getAddress();
byte[] m = InetAddress.getByName(mask).getAddress();
for (int i = 0; i < a1.length; i++)
if ((a1[i] & m[i]) != (a2[i] & m[i]))
return false;
return true;
}
Nguồn
2011-12-19 00:15:14
Nhưng cách lấy mặt nạ? Và điều này cũng làm việc cho IPv6? – xZise
@xZise Mặt nạ là mặt nạ mạng con của bạn. Và chắc chắn nó sẽ làm việc cho IPv6 cũng tốt - chỉ là một ký hiệu khác khi so sánh với IPv4. Nhưng cuối cùng bạn chỉ cần sử dụng mặt nạ mạng con để che giấu phần mạng của IP và sau đó so sánh chúng với nhau. – Voo
Nhưng làm cách nào để lấy mặt nạ mạng con từ chính chương trình? – xZise