集册 Java实例教程 获取数字IP地址列表

获取数字IP地址列表

欢马劈雪     最近更新时间:2020-01-02 10:19:05

548
获取数字IP地址列表
/** 来 自 n o w    j a v a  . c o m**/


import java.util.ArrayList;

import java.util.regex.Pattern;


public class Main{

    public static void main(String[] argv) throws Exception{

        String ipAddress = "nowjava.com";

        int cidr = 2;

        System.out.println(getListOfNumericIPAddress(ipAddress,cidr));

    }

    public static ArrayList<Long> getListOfNumericIPAddress(

            String ipAddress, int cidr) throws InvalidIPAddressException {

            /*
             from nowjava - 时  代  Java 
            */

        return getListOfNumericIPAddress(ipToNumber(ipAddress), cidr);

    }

    public static ArrayList<Long> getListOfNumericIPAddress(long ipAddress,

            int cidr) throws InvalidIPAddressException {


        if (!isValidCidrblock(ipAddress, cidr))

            throw new InvalidIPAddressException(

                    "Invalid base IP Address for provided CIDR");


        ArrayList<Long> ips = new ArrayList<Long>();

        long blockSize = (long) Math.pow(2, (32 - cidr));

        for (long i = 0; i < blockSize; i++) {

            ips.add(ipAddress + i);

        }

        return ips;

    }

    public static long ipToNumber(String ipAddr)

            throws InvalidIPAddressException {

        if (ipAddr == null) {

            throw new InvalidIPAddressException("NULL IP Address");

        }


        String[] addrArray = ipAddr.split("\\.");


        if (addrArray.length != 4) {

            throw new InvalidIPAddressException("Invalid IP Address length");

        }


        long num = 0;

        for (int i = 0; i < addrArray.length; i++) {

            int power = 3 - i;


            int octet = Integer.parseInt(addrArray[i]);


            if (octet < 0 || octet > 255) {

                throw new InvalidIPAddressException(

                        "Invalid octet, it must be between 0-255");

            }


            num += ((octet % 256) * Math.pow(256, power));

        }

        return num;

    }

    public static Boolean isValidCidrblock(final long ipAddress,

            final int cidr) throws InvalidIPAddressException {


        if (ipAddress == getCiderBaseIP(ipAddress, cidr)) {

            return true;

        }


        return false;

    }

    public static Boolean isValidCidrblock(final String ipAddress,

            final int cidr) throws InvalidIPAddressException {

        long address = IPAddressUtil.ipToNumber(ipAddress);

        return isValidCidrblock(address, cidr);

    }

    public static long getCiderBaseIP(final long ip, final int cidr)

            throws InvalidIPAddressException {


        long netmask = getSubnetMaskNumeric(cidr);


        // get base network ip for this ip/netmask combo

        long baseIP = ip & netmask;

        return baseIP;

    }

    public static long getSubnetMaskNumeric(final int cidr)

            throws InvalidIPAddressException {


        if (cidr > 32 || cidr < 0)

            throw new InvalidIP
展开阅读全文