IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算网段(IPV4和IPV6) -> 正文阅读

[网络协议]Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算网段(IPV4和IPV6)

Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算所有IP地址(IPV4和IPV6)

计算IP列表

IPV4

1、需要的jar包

			<dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.7.7</version>
            </dependency>

2、代码示例

    /**
     * 获取IPV4 CIDR形式下所有的ipv4
     *
     * @param cidr IPV4的CIDR格式 (192.168.1.0/24)
     */
    private static R getIpsV4ByCidr(String cidr) {
        String ip = cidr.split("/")[0];
        int mask = Integer.parseInt(cidr.split("/")[1]);
        String ipFrom = Ipv4Util.getBeginIpStr(ip, mask);
        String ipTo = Ipv4Util.getEndIpStr(ip, mask);
        if (Ipv4Util.countByIpRange(ipFrom, ipTo) > 1024) {
            return R.warn("最多可以支持1024个IP");
        }
        return R.ok().addData(Ipv4Util.list(ip, mask, true));
    }

    /**
     * 获取IPV4 区间范围下所有的ipv4
     *
     * @param ipFrom IPV4的起始ip
     * @param ipTo   IPV4的结束ip
     */
    private static R getIpsV4ByRange(String ipFrom, String ipTo) {
        if (Ipv4Util.countByIpRange(ipFrom, ipTo) > 1024) {
            return R.warn("最多可以支持1024个IP");
        }
        return R.ok().addData(Ipv4Util.list(ipFrom, ipTo));
    }

IPV6

1、需要的jar包

		<dependency>
            <groupId>com.googlecode.java-ipv6</groupId>
            <artifactId>java-ipv6</artifactId>
            <version>0.17</version>
        </dependency>

2、代码示例

/**
     * 获取IPV6 CIDR形式下所有的ipv6
     *
     * @param cidr IPV6的CIDR格式 (fe80::2001/64)
     */
    private static R getIpsV6ByCidr(String cidr) {
        List<String> ipv6List = Lists.newArrayList();
        IPv6Network network = IPv6Network.fromString(cidr);
        if (network.size().compareTo(new BigInteger(String.valueOf(1024))) > 0) {
            return R.warn("最多可以支持1024个IP");
        }
        network.forEach(e -> ipv6List.add(e.toString()));
        return R.ok().addData(ipv6List);
    }

    /**
     * 获取IPV6 区间范围下所有的ipv6
     *
     * @param ipFrom IPV6的起始ip
     * @param ipTo   IPV6的结束ip
     */
    private static R getIpsV6ByRange(String ipFrom, String ipTo) {
        List<String> ipv6List = Lists.newArrayList();
        IPv6AddressRange ipv6Range = IPv6AddressRange.fromFirstAndLast(IPv6Address.fromString(ipFrom), IPv6Address.fromString(ipTo));
        if (ipv6Range.size().compareTo(new BigInteger(String.valueOf(1024))) > 0) {
            return R.warn("最多可以支持1024个IP");
        }
        ipv6Range.forEach(e -> ipv6List.add(e.toString()));
        return R.ok().addData(ipv6List);
    }

IP校验

IPV4

public static boolean fieldIPv4Valid(String matchParams) {
		String ipv4Format = "^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$";
		boolean flag = matchParams.matches(ipv4Format);
		return flag;
	}

IPV6

public static boolean fieldIPv6Valid(String matchParams)  {
		String ipv6Format = "^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$";
		boolean flag = matchParams.matches(ipv6Format);
		return flag;
	}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:56:53  更:2021-11-19 17:58:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 20:43:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码