Java ip工具类

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值