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

获取IP地址列表

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

341
获取IP地址列表

/*来自 
 n o w j a v a . c o m - 时  代  Java*/

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(getListOfIPAddress(ipAddress,cidr));

    }

    public static ArrayList<String> getListOfIPAddress(String ipAddress,

            int cidr) throws InvalidIPAddressException {


        return getListOfIPAddress(ipToNumber(ipAddress), cidr);

    }

    public static ArrayList<String> getListOfIPAddress(long ipAddress,

            int cidr) throws InvalidIPAddressException {


        if (!isValidCidrblock(ipAddress, cidr)) {

            throw new InvalidIPAddressException(

                    "Invalid base IP Address for provided CIDR");/*from 时代Java公众号*/

        }


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

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

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

            ips.add(numberToIP(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 String numberToIP(long addr)

            throws InvalidIPAddressException {


        if (addr < 0L || addr > 4294967295L) {

            throw new InvalidIPAddressException("Invalid IP");

        }


        StringBuilder ip = new StringBuilder();


        ip.append((addr >> 24) & 0xFF).append(".");

        ip.append((addr >> 16) & 0xFF).append(".");

        ip.append((addr >> 8) & 0xFF).append(".");

        ip.append((addr) & 0xFF);


        return ip.toString();

    }

    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 {


        
展开阅读全文