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

前端 未结 2 884
隐瞒了意图╮
隐瞒了意图╮ 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:42

    The following code, using the IPAddress Java library (Disclaimer: I am the project manager) handles this with both IPv4 and IPv6 addresses, and also avoids DNS lookup on invalid strings.

    Here is some sample code with your given addresses as well as some IPv6 addresses:

    static void range(String lowerStr, String upperStr, String str)
            throws AddressStringException  {
        IPAddress lower = new IPAddressString(lowerStr).toAddress();
        IPAddress upper = new IPAddressString(upperStr).toAddress();
        IPAddress addr = new IPAddressString(str).toAddress();
        IPAddressSeqRange range = lower.toSequentialRange(upper);
        System.out.println(range + " contains " + addr + " " + range.contains(addr));
    }
    
    range("192.200.0.0", "192.255.0.0", "192.200.3.0");
    range("2001:0db8:85a3::8a2e:0370:7334", "2001:0db8:85a3::8a00:ff:ffff", 
        "2001:0db8:85a3::8a03:a:b");
    range("192.200.0.0", "192.255.0.0", "191.200.3.0");
    range("2001:0db8:85a3::8a2e:0370:7334", "2001:0db8:85a3::8a00:ff:ffff", 
        "2002:0db8:85a3::8a03:a:b");
    

    Output:

    192.200.0.0 -> 192.255.0.0 contains 192.200.3.0 true
    2001:db8:85a3::8a00:ff:ffff -> 2001:db8:85a3::8a2e:370:7334 contains 2001:db8:85a3::8a03:a:b true
    192.200.0.0 -> 192.255.0.0 contains 191.200.3.0 false
    2001:db8:85a3::8a00:ff:ffff -> 2001:db8:85a3::8a2e:370:7334 contains 2002:db8:85a3::8a03:a:b false
    

提交回复
热议问题