Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get generate an IP address range given start and end IP address?

Tags:

java

How can generate a range of IP addresses from a start and end IP address?

Example for a network "192.168.0.0/24":

String start = "192.168.0.2"
String end = "192.168.0.254"

I want to have:

192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
...
192.168.0.254

PS: Network, start and end IP can be dynamic above is just an example.

Thanks...

like image 274
Vishal Avatar asked Sep 05 '11 03:09

Vishal


2 Answers

Recognize that each of the 4 components of an IPv4 address is really a hex number between 00 and FF.

If you change your start and end IP addresses into 32 bit unsigned integers, you can just loop from the lowest one to the highest one and convert each value you loop through back into the IP address format.

The range in the example you give is C0A80002 to C0A800FE.

Here's a link to code that converts between a hex number and an IPv4 address

http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number

like image 94
Eric J. Avatar answered Oct 09 '22 05:10

Eric J.


Here's simple implementation that outputs what you asked for:

public static void main(String args[]) {
    String start = "192.168.0.2";
    String end = "192.168.0.254";

    String[] startParts = start.split("(?<=\\.)(?!.*\\.)");
    String[] endParts = end.split("(?<=\\.)(?!.*\\.)");

    int first = Integer.parseInt(startParts[1]);
    int last = Integer.parseInt(endParts[1]);

    for (int i = first; i <= last; i++) {
        System.out.println(startParts[0] + i);
    }
}

Note that this will only work for ranges involving the last part of the IP address.

like image 34
Bohemian Avatar answered Oct 09 '22 05:10

Bohemian