Подтвердить что ты не робот

Вычислить, находится ли IP-адрес в указанном диапазоне в Java

Я хочу иметь возможность возвращать true/false в зависимости от того, находится ли IP в двух других IP-адресах.

Например:

ip 192.200.3.0

range from 192.200.0.0

range to 192.255.0.0

должно соответствовать true.

Другие примеры:

assert 192.200.1.0 == true
assert 192.199.1.1 == false
assert 197.200.1.0 == false
4b9b3361

Ответ 1

Самый простой способ проверить диапазон - это, вероятно, преобразование IP-адресов в 32-битные целые числа, а затем просто сравнение целых чисел.

public class Example {
    public static long ipToLong(InetAddress ip) {
        byte[] octets = ip.getAddress();
        long result = 0;
        for (byte octet : octets) {
            result <<= 8;
            result |= octet & 0xff;
        }
        return result;
    }

    public static void main(String[] args) throws UnknownHostException {
        long ipLo = ipToLong(InetAddress.getByName("192.200.0.0"));
        long ipHi = ipToLong(InetAddress.getByName("192.255.0.0"));
        long ipToTest = ipToLong(InetAddress.getByName("192.200.3.0"));

        System.out.println(ipToTest >= ipLo && ipToTest <= ipHi);
    }
}

Вместо InetAddress.getByName() вы можете посмотреть библиотеку Guava, в которой есть вспомогательный класс InetAddresses, который позволяет избежать поиска DNS.