Java ip工具类

来源:互联网 发布:js 重新加载当前页面 编辑:程序博客网 时间:2024/05/16 02:16

1. 功能:

输入一个子网中的ip和子网掩码,可以获取:

  • 起始ip
  • 结束ip
  • 子网中所有ip集合

2. 代码

import java.util.*;public class IpUtil {    /**     * 测试     * @param args     */    public static void main(String[] args) {        String ip = "10.10.2.23";        String netmask = "255.255.255.0";        System.out.println("子网中的一个ip是:" + ip + " ,子网掩码是: " + netmask );        //以0结尾的一般表示网络地址,255结尾的是广播地址,        //我们用的IP地址是1~254结尾之间的,这儿不处理        String ipStartString = getStartIpOfSubnet(ip, netmask);        String ipEndString = getEndIpOfSubnet(ip, netmask);        System.out.println("起始ip是:" + ipStartString);        System.out.println("结束ip是:" + ipEndString);        for (String subnetIp : getIpSetOfSubnet(ip,netmask)){            System.out.println(subnetIp);        }    }    /**     * 获取网络中起始ip     * @param ip  子网中的一个ip     * @param netmask 子网掩码     * @return 起始ip     */    public static String getStartIpOfSubnet(String ip, String netmask){        return getStartIpOfSubnet(ipToInt(ip), ipToInt(netmask));    }    private static String getStartIpOfSubnet(int ip, int netmask){        return intToIP(ip & netmask);    }    /**     * 获取网络中结束ip     * @param ip  子网中的一个ip     * @param netmask 子网掩码     * @return 结束ip     */    public static String getEndIpOfSubnet(String ip, String netmask){        return getEndIpOfSubnet(ipToInt(ip), ipToInt(netmask));    }    private static String getEndIpOfSubnet(int ip, int netmask){        return intToIP(ipToInt(getStartIpOfSubnet(ip,netmask)) + (~netmask));    }    /**     * 获取子网所有ip集合     * @param ip  子网中的一个ip     * @param netmask 子网掩码     * @return 子网所有ip集合     */    public static Set<String> getIpSetOfSubnet(String ip, String netmask){        int startIp = ipToInt(getStartIpOfSubnet(ip, netmask));        int endIp = ipToInt(getEndIpOfSubnet(ip, netmask));        Set<String> ipSet = new LinkedHashSet<String>();        for (int i = startIp; i <= endIp; i++){            ipSet.add(intToIP(i));        }        return ipSet;    }    /**     * ip字符串转整数     * @param strIP ip字符串形式     * @return ip整数形式     */    public static int ipToInt(String strIP) {        int[] ip = new int[4];        String[] ipSec = strIP.split("\\.");        for (int k = 0; k < 4; k++) {            ip[k] = Integer.valueOf(ipSec[k]);        }        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];    }    /**     * ip整数转字符串     * @param intIP ip整数形式     * @return ip字符串形式     */    public static String intToIP(int intIP) {        StringBuffer sb = new StringBuffer("");        sb.append(String.valueOf(intIP >>> 24));        sb.append(".");        sb.append(String.valueOf((intIP & 0x00FFFFFF) >>> 16));        sb.append(".");        sb.append(String.valueOf((intIP & 0x0000FFFF) >>> 8));        sb.append(".");        sb.append(String.valueOf(intIP & 0x000000FF));        return sb.toString();    }}
原创粉丝点击