Calculate whether an IP address is in a specified range in Java

前端 未结 2 938
隐瞒了意图╮
隐瞒了意图╮ 2020-12-23 14:18

I want to be able to return true/false depending on an IP being in range of two other IPs.

For instance:

ip 192.200.3.0

range from

2条回答
  •  没有蜡笔的小新
    2020-12-23 14:53

    The easiest way to check the range is probably to convert the IP addresses to 32-bit integers and then just compare the integers.

    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);
        }
    }
    

    Rather than InetAddress.getByName(), you may want to look at the Guava library which has an InetAddresses helper class that avoids the possibility of DNS lookups.

提交回复
热议问题