Interview Questions

Java IP Address Generator

/**
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */


/**
 *  This class contains methods to generate IP Address(IPV4) Sequence.
 */

public class IPAddressGenerator {

        /**
         * Program starts here
         *
         * @param args
         * @throws Exception
         */

        public static void main(String[] args) throws Exception {
               
                IPAddressGenerator ipGen = new IPAddressGenerator();
                String ipStartingSeq = "252.253.254.251";
                int numberOfIP = 2000;
                ipGen.generateNextIPSequence(ipStartingSeq, numberOfIP);
        }

        public void generateNextIPSequence(String address, int count)
                        throws Exception {
                String nextIpAddress = address;
                for (int i = 0; i < count; i++) {
                        System.out.println(nextIpAddress);
                        nextIpAddress = getNextIPAddress(nextIpAddress);

                }
        }

        public String[] getPartsOfIpAddress(String ipAddress) {
                String[] elements = ipAddress.split("\\.");

                return elements;
        }

        public String getNextIPAddress(String ipAddress) throws Exception {

                String[] elements = getPartsOfIpAddress(ipAddress);
                if (elements != null && elements.length == 4) {
                        Integer part1 = Integer.parseInt(elements[0]);
                        Integer part2 = Integer.parseInt(elements[1]);
                        Integer part3 = Integer.parseInt(elements[2]);
                        Integer part4 = Integer.parseInt(elements[3]);
                        if (part4 < 255) {
                                String ip = part1 + "." + part2 + "." + part3 + "." + (++part4);
                                return ip;
                        } else if (part4 == 255) {
                                if (part3 < 255) {
                                        String ip = part1 + "." + part2 + "." + (++part3) + "."
                                                        + (0);
                                        return ip;
                                } else if (part3 == 255) {
                                        if (part2 < 255) {
                                                String ip = part1 + "." + (++part2) + "." + (0) + "."
                                                                + (0);
                                                return ip;
                                        } else if (part2 == 255) {
                                                if (part1 < 255) {
                                                        String ip = (++part1) + "." + (0) + "." + (0) + "."
                                                                        + (0);
                                                        return ip;
                                                } else if (part1 == 255) {
                                                        throw new Exception("IP Range Exceeded -> "+ipAddress);
                                                }
                                        }
                                }
                        }
                }

                return null;
        }
}