Java library for manipulating IP address ranges. It makes use of Guava Ranges.
Project page: https://gitlab.com/canbican/jiplib
Library can handle both IPv4 and IPv6 addresses.
Using
As a maven dependency:
<dependency>
<groupId>net.bican</groupId>
<artifactId>jiplib</artifactId>
<version>0.1</version>
</dependency>
Here is a brief tutorial:
Creating a network range CIDR address:
CIDR cidr1 = new CIDR("10.10.10.0/30");
Range<IPAddress> range1 = IPAddresses.fromCIDR(cidr1);
Creating a network range by netmask:
Netmask netmask1 = new Netmask("10.10.20.0/255.255.255.0");
Range<IPAddress> range2 = IPAddresses.fromNetmask(netmask1);
Iterating on a network range:
Iterables.all(new AddressIterable(range1), new Predicate<IPAddress>() {
@Override
public boolean apply(IPAddress input) {
System.out.println(input);
return true;
}
});
Checking the contents of a range:
System.out.println("range contains ip: "
+ range2.contains(IPAddress.getInstance(InetAddresses
.forString("10.10.20.20")))); // returns true
System.out.println("range contains ip: "
+ range2.contains(IPAddress.getInstance(InetAddresses
.forString("10.10.21.20")))); // returns false
Creating a range from an arbitrary interval:
This code creates a set of ranges that can be represented by CIDR prefixes:
Range<IPAddress> interval = Range.closed(
IPAddress.getInstance(InetAddresses.forString("1.0.0.1")),
IPAddress.getInstance(InetAddresses.forString("1.0.2.22")));
Set<Range<IPAddress>> ips = IPAddresses.fromInterval(interval);
for (Range<IPAddress> i : ips) {
System.out.println(i);
}