最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)生成IPv4地址并判斷其合法性

 更新時(shí)間:2026年04月14日 08:56:36   作者:愛碼少年?00fly.online  
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)生成IPv4地址并判斷其合法性,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

IPv4地址是什么

IPv4地址(Internet Protocol version 4)是互聯(lián)網(wǎng)協(xié)議第四版的網(wǎng)絡(luò)地址,用于唯一標(biāo)識(shí)連接到網(wǎng)絡(luò)的設(shè)備。它由32位二進(jìn)制數(shù)組成,通常以點(diǎn)分十進(jìn)制表示,即4個(gè)8位二進(jìn)制數(shù)(每個(gè)范圍0-255),中間用點(diǎn)分隔,例如 192.168.1.1。

IPv4地址的結(jié)構(gòu)

總長(zhǎng)度:32位(4字節(jié))

表示形式:A.B.C.D,其中每個(gè)字母是一個(gè)0~255的十進(jìn)制整數(shù)

地址數(shù)量:理論上約43億個(gè)(2^32)

分類

A類:1.0.0.0 ~ 126.255.255.255(首位0)

B類:128.0.0.0 ~ 191.255.255.255(首位10)

C類:192.0.0.0 ~ 223.255.255.255(首位110)

D類(組播):224.0.0.0 ~ 239.255.255.255(首位1110)

E類(保留):240.0.0.0 ~ 255.255.255.255(首位1111)

特殊地址

0.0.0.0:表示本機(jī)所有網(wǎng)絡(luò)接口

127.0.0.1:本地回環(huán)地址(localhost)

255.255.255.255:廣播地址

私有地址(用于局域網(wǎng)):

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

Java生成IPv4地址

方法一:生成任意公網(wǎng)地址(排除私有地址和特殊地址)

import java.util.Random;
public class RandomIPv4Generator {
    private static final Random random = new Random();
    // 生成一個(gè)0~255之間的隨機(jī)整數(shù)
    private static int randomOctet() {
        return random.nextInt(256);
    }
    // 生成完全隨機(jī)的IPv4地址(可能包含私有、廣播等)
    public static String randomIPv4() {
        return randomOctet() + "." + randomOctet() + "." +
               randomOctet() + "." + randomOctet();
    }
    // 生成公網(wǎng)可路由的IPv4地址(排除私有、回環(huán)、廣播、多播等)
    public static String randomPublicIPv4() {
        int first;
        do {
            first = randomOctet();
        } while (isPrivateOrSpecial(first));
        return first + "." + randomOctet() + "." +
               randomOctet() + "." + randomOctet();
    }
    private static boolean isPrivateOrSpecial(int first) {
        // 排除私有地址段: 10.x.x.x, 172.16-31.x.x, 192.168.x.x
        if (first == 10) return true;
        if (first == 172) {
            int second = random.nextInt(256); // 實(shí)際判斷需要調(diào)用時(shí)傳入second
            // 簡(jiǎn)化為只要第一段是172就跳過(更精確需判斷第二段16-31)
            return true;
        }
        if (first == 192) {
            int second = random.nextInt(256);
            // 簡(jiǎn)化判斷:只要第一段192且第二段168則跳過
            return true;
        }
        // 回環(huán)127.x.x.x, 廣播255.x.x.x, 多播224-239.x.x.x, 保留240-255
        if (first == 127 || first == 255 || (first >= 224 && first <= 255)) {
            return true;
        }
        return false;
    }
}

更精確的公網(wǎng)地址生成示例(使用循環(huán)重試直到生成合法公網(wǎng)地址):

public static String generatePublicIPv4() {
    Random rand = new Random();
    while (true) {
        int a = rand.nextInt(256);
        // 排除私有和保留段
        if (a == 10) continue;
        if (a == 127) continue;
        if (a == 172) {
            int b = rand.nextInt(256);
            if (b >= 16 && b <= 31) continue;
        }
        if (a == 192) {
            int b = rand.nextInt(256);
            if (b == 168) continue;
        }
        if (a == 255) continue;
        if (a >= 224 && a <= 255) continue;
        int b = rand.nextInt(256);
        int c = rand.nextInt(256);
        int d = rand.nextInt(256);
        return a + "." + b + "." + c + "." + d;
    }
}

方法二:生成指定范圍內(nèi)的IPv4地址(如C段)

public static String randomCClass(String prefix) {
    // prefix 例如 "192.168.1"
    return prefix + "." + random.nextInt(256);
}

Java判斷IPv4地址合法性

方法一:正則表達(dá)式

import java.util.regex.Pattern;
public class IPv4Validator {
    // 嚴(yán)格的IPv4正則(0-255,不允許前導(dǎo)零)
    private static final String IPV4_PATTERN = 
        "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" +
        "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
    public static boolean isValidIPv4(String ip) {
        if (ip == null) return false;
        return Pattern.matches(IPV4_PATTERN, ip);
    }
    public static void main(String[] args) {
        System.out.println(isValidIPv4("192.168.1.1"));     // true
        System.out.println(isValidIPv4("256.1.2.3"));       // false
        System.out.println(isValidIPv4("01.02.03.04"));     // false(前導(dǎo)零)
        System.out.println(isValidIPv4("10.0.0.0"));        // true
    }
}

方法二:手動(dòng)解析判斷(性能更好,無正則開銷)

public static boolean isValidIPv4Manual(String ip) {
    if (ip == null || ip.isEmpty()) return false;
    String[] parts = ip.split("\\.");
    if (parts.length != 4) return false;
    for (String part : parts) {
        // 檢查空字符串或前導(dǎo)零(但不能只有單個(gè)0)
        if (part.isEmpty() || (part.length() > 1 && part.charAt(0) == '0')) {
            return false;
        }
        // 檢查是否全數(shù)字
        for (char c : part.toCharArray()) {
            if (!Character.isDigit(c)) return false;
        }
        // 解析并檢查范圍
        try {
            int num = Integer.parseInt(part);
            if (num < 0 || num > 255) return false;
        } catch (NumberFormatException e) {
            return false;
        }
    }
    return true;
}

方法三

import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.junit.jupiter.api.Test;
import lombok.extern.slf4j.Slf4j;
/**
 * ip4地址合法判斷<br>
 * 注意:0.0.0.0(表示本地網(wǎng)絡(luò))、255.255.255.255(表示本地廣播)是合法的
 * 
 * @see [類、類#方法、類#成員]
 */
@Slf4j
public class IP4Test
{
    @Test
    public void test001()
    {
        for (int i = 0; i < 10; i++)
        {
            List<String> nums = new Random().ints(4, -10, 300).mapToObj(Objects::toString).collect(Collectors.toList());
            String ip4 = StringUtils.join(nums, ".");
            log.info("IP4地址: {} ==> {}", ip4, isIp4(ip4));
        }
    }
    private boolean isIp4(String ip4)
    {
        String[] ipArr;
        return StringUtils.isNotBlank(ip4) // 非空
            && StringUtils.countMatches(ip4, ".") == 3 // 3dots
            && (ipArr = StringUtils.split(ip4, ".")).length == 4 // 4位
            && Stream.of(ipArr)
                .filter(it -> StringUtils.equals(it, String.valueOf(NumberUtils.toInt(it))))// 合法數(shù)字
                .map(NumberUtils::toInt)
                .filter(it -> (0 <= it && it <= 255))// [0, 255]
                .count() == 4;
    }
}

測(cè)試結(jié)果:

2025-09-01 21:20:21.386  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 163.278.264.254 ==> false
2025-09-01 21:20:21.393  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 82.31.212.204 ==> true
2025-09-01 21:20:21.393  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 147.4.7.257 ==> false
2025-09-01 21:20:21.393  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 205.127.278.4 ==> false
2025-09-01 21:20:21.393  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 147.142.72.191 ==> true
2025-09-01 21:20:21.393  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 33.26.-10.33 ==> false
2025-09-01 21:20:21.394  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 130.281.293.240 ==> false
2025-09-01 21:20:21.394  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 192.203.292.3 ==> false
2025-09-01 21:20:21.394  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 158.99.278.165 ==> false
2025-09-01 21:20:21.394  INFO 1220 --- [           main] c.f.t.IP4Test                            : IP4地址: 188.131.294.172 ==> false

完整工具類示例

import java.util.Random;
import java.util.regex.Pattern;
public class IPv4Utils {
    private static final Random random = new Random();
    // 校驗(yàn)IPv4(正則版本)
    public static boolean isValid(String ip) {
        if (ip == null) return false;
        String regex = "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                       "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                       "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." +
                       "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
        return Pattern.matches(regex, ip);
    }
    // 生成隨機(jī)公網(wǎng)IPv4
    public static String randomPublic() {
        int a;
        do {
            a = random.nextInt(256);
        } while (a == 10 || a == 127 || a == 172 || a == 192 || a == 255 || (a >= 224 && a <= 239));
        return a + "." + random.nextInt(256) + "." +
               random.nextInt(256) + "." + random.nextInt(256);
    }
    // 生成隨機(jī)私有IPv4(常用192.168.x.x)
    public static String randomPrivate() {
        return "192.168." + random.nextInt(256) + "." + random.nextInt(256);
    }
    public static void main(String[] args) {
        System.out.println("公網(wǎng)IPv4: " + randomPublic());
        System.out.println("私有IPv4: " + randomPrivate());
        System.out.println("校驗(yàn)192.168.1.100: " + isValid("192.168.1.100"));
        System.out.println("校驗(yàn)256.1.2.3: " + isValid("256.1.2.3"));
    }
}

到此這篇關(guān)于Java實(shí)現(xiàn)生成IPv4地址并判斷其合法性的文章就介紹到這了,更多相關(guān)Java生成IPv4地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名

    使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名

    這篇文章主要介紹了使用Java代碼獲取服務(wù)器性能信息及局域網(wǎng)內(nèi)主機(jī)名的方法,方便對(duì)服務(wù)器的遠(yuǎn)程管理和團(tuán)隊(duì)協(xié)作時(shí)用到,而且文中的方法無需調(diào)用jni,需要的朋友可以參考下
    2015-11-11
  • Spring Bean的實(shí)例化之屬性注入源碼剖析過程

    Spring Bean的實(shí)例化之屬性注入源碼剖析過程

    本篇文章主要就是分析Spring源碼剖析-Bean的實(shí)例化-屬性注入的相關(guān)知識(shí),通過本文學(xué)習(xí)AbstractAutowireCapableBeanFactory#populateBean 方法的主要功能就是屬性填充,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解

    Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解

    這篇文章主要介紹了Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例)

    使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例)

    這篇文章主要介紹了使用log4j2自定義配置文件位置和文件名(附log4j2.xml配置實(shí)例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java使用RabbitMQ實(shí)現(xiàn)延遲消息示例

    java使用RabbitMQ實(shí)現(xiàn)延遲消息示例

    本文介紹了在分布式系統(tǒng)中,使用RabbitMQ實(shí)現(xiàn)延遲消息處理,其中詳細(xì)闡述了RabbitMQ隊(duì)列和交換機(jī)的配置、消息的發(fā)送與接收以及死信隊(duì)列的處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • javaweb配置jsp路徑映射操作

    javaweb配置jsp路徑映射操作

    這篇文章主要介紹了javaweb配置jsp路徑映射操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Mybatis-Plus中resultType的使用及說明

    Mybatis-Plus中resultType的使用及說明

    MyBatis中resultType用于指定查詢結(jié)果的返回類型,可以是JavaBean、實(shí)體類或基本類型如String,此外,MyBatis還支持將查詢結(jié)果封裝成Map,單條數(shù)據(jù)時(shí)可以將{表字段名,結(jié)果值}封裝到Map中,多條數(shù)據(jù)時(shí)可以將{表中某一字段名,JavaBean}方式封裝到Map中
    2025-12-12
  • MyBatis-Plus 批量保存的操作方法

    MyBatis-Plus 批量保存的操作方法

    在項(xiàng)目開發(fā)中,需要插入批量插入20多萬條數(shù)據(jù),通過日志觀察,發(fā)現(xiàn)在調(diào)用MyBatis-Plus中的saveBatch()方法性能非常的差,本篇文章主要分享一下saveBatch()的原理以及使用的注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • 解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題

    解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題

    這篇文章主要介紹了解決eclipse啟動(dòng)tomcat時(shí)不能加載web項(xiàng)目的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java不可變類機(jī)制淺析

    Java不可變類機(jī)制淺析

    所謂的不可變類是指這個(gè)類的實(shí)例一旦創(chuàng)建完成后,就不能改變其成員變量值。如JDK內(nèi)部自帶的很多不可變類:Interger、Long和String等。接下來通過本文給大家介紹Java不可變類機(jī)制,需要的朋友參考下
    2017-02-02

最新評(píng)論

京山县| 龙游县| 卓尼县| 德兴市| 太白县| 安图县| 侯马市| 运城市| 牙克石市| 揭阳市| 色达县| 米易县| 通江县| 红桥区| 翼城县| 拉孜县| 安多县| 东莞市| 绍兴县| 寻甸| 渝北区| 绥宁县| 林口县| 综艺| 眉山市| 绥中县| 兴业县| 成武县| 瑞丽市| 长岭县| 阳山县| 吉隆县| 肇源县| 望城县| 仁布县| 锡林浩特市| 瓮安县| 滦平县| 连云港市| 哈巴河县| 太仆寺旗|