zoukankan      html  css  js  c++  java
  • 不同格式的ip 统一转成ip列表

    支持以下格式的ip地址:

    192.168.1.0/24

    192.168.1.1-23

    192.168.1.123

    代码如下:

    package finder;

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.ArrayList;

    public class Util {

    @SuppressWarnings("restriction")
    public static ArrayList<String> stringToIps(String str) throws UnknownHostException {  //此方式主要是将各种格式的ip地址,转成ip列表,并以ArrayList<String>格式返回。

    ArrayList<String> ips = new ArrayList<String>();  // 保存转换后的ip地址
    String strIps[] = str.split(" ");

    for (String string : strIps) {
    if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(string)) {  // 校验是否为ip地址
    ips.add(string);
    } else if (string.lastIndexOf("-") != -1) {  // 判断是否为192.168.1.1-23这种格式
    String iph[] = string.split("-");
    if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(iph[0])) {
    String x = iph[0];
    String ipx[] = x.split("\.");
    Integer start = Integer.parseInt(ipx[3]);
    Integer end = Integer.parseInt(iph[1]);

    while (start <= end) {
    String ip = ipx[0] + "." + ipx[1] + "." + ipx[2] + "." + start.toString();
    ips.add(ip);
    start++;
    }
    }

    } else if (str.lastIndexOf("/") != -1) {   // 判断是否为192.168.1.1/24这种格式
    String iph[] = string.split("/");
    if (sun.net.util.IPAddressUtil.isIPv4LiteralAddress(iph[0])) {
    Integer mask = Integer.parseInt(iph[1]);
    if (mask <= 32 && mask >= 1) {
    ips.addAll(maskToIps(iph[0], mask));  // 将网络地址和掩码位数传给maskToIps函数 
    }

    }
    } else {
    ips.add(string);

    }

    }
    return ips;

    }

    public static ArrayList<String> maskToIps(String ip, Integer m) throws UnknownHostException {   // 通过网络地址和掩码位数获取ip地址列表

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

    InetAddress inetAddress = InetAddress.getByName(ip);
    int address = inetAddress.hashCode();
    Integer n = 32 - m;
    int startIp = (address & ((0xFFFFFFFF) << n)); // 最小ip地址
    int endIp = (address | ((0xFFFFFFFF) >>> m)); //最大ip地址

    while (startIp <= endIp) {

    byte[] startaddr = getAddress(startIp);
    InetAddress from = InetAddress.getByAddress(startaddr);
    String fromIp = from.getHostAddress();
    i.add(fromIp);
    startIp++;
    }

    return i;
    }

    public static byte[] getAddress(int intIp) {  // 将整数ip地址转换成字节数组
    int address = intIp;
    byte[] addr = new byte[4];

    addr[0] = (byte) ((address >>> 24) & 0xFF);
    addr[1] = (byte) ((address >>> 16) & 0xFF);
    addr[2] = (byte) ((address >>> 8) & 0xFF);
    addr[3] = (byte) (address & 0xFF);
    return addr;
    }

    public static ArrayList<Integer> stringToPorts(String str) {  // 这里是将各种格式的端口信息转成端口列表,比如 1-65535,80,8080,8000-9000
    String ports[] = str.split(",");
    ArrayList<Integer> portList = new ArrayList<Integer>();
    for (String string : ports) {
    if (string.lastIndexOf("-") != -1) {
    String strPorts[] = string.split("-");
    Integer startPort = Integer.parseInt(strPorts[0]);
    Integer endPort = Integer.parseInt(strPorts[1]);
    while (startPort <= endPort) {

    if (startPort < 0 || startPort > 0xFFFF) {
    portList.add(startPort);
    startPort++;

    }
    }
    } else {

    Integer in = Integer.parseInt(string);
    if (in > 0 && in < 0xFFFF) {
    portList.add(in);

    }

    }

    }
    return portList;

    }

    }

  • 相关阅读:
    IIS的各种身份验证详细测试
    HTTP Error 401.3 Unauthorized Error While creating IIS 7.0 web site on Windows 7
    C/S and B/S
    WCF ContractFilter mismatch at the EndpointDispatcher exception
    Configure WCF
    Inheritance VS Composition
    Unhandled Error in Silverlight Application, code 2103 when changing the namespace
    Java RMI VS TCP Socket
    Principles Of Object Oriented Design
    Socket处理发送和接收数据包,一个小实例:
  • 原文地址:https://www.cnblogs.com/fsqsec/p/5459297.html
Copyright © 2011-2022 走看看