国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 快速判斷一個 IP 是否在給定的網段內

這篇具有很好參考價值的文章主要介紹了Java 快速判斷一個 IP 是否在給定的網段內。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

要在Java中判斷一個IP地址是否在給定的網段內,可以使用子網掩碼IP地址子網掩碼進行與操作來提取網絡地址,并將其與給定的子網地址進行比較。

方法一:借助于 Java 提供的 InetAddress

下面的例子由強大的 ChatGPT 提供。

java判斷ip是否在一個網段,# Java,Java,ChatGPT,子網計算

代碼如下所示(子網掩碼的計算可以截取字符串后,借助底部的算法進行獲得):

public static boolean isIpAddressInSubnet(String ipAddress, String subnetAddress, String subnetMask) throws UnknownHostException {
    InetAddress inetAddress = InetAddress.getByName(ipAddress);
    InetAddress subnet = InetAddress.getByName(subnetAddress);
    InetAddress mask = InetAddress.getByName(subnetMask);

    byte[] inetAddressBytes = inetAddress.getAddress();
    byte[] subnetBytes = subnet.getAddress();
    byte[] maskBytes = mask.getAddress();

    for (int i = 0; i < inetAddressBytes.length; i++) {
        int addressByte = inetAddressBytes[i] & 0xFF;
        int subnetByte = subnetBytes[i] & 0xFF;
        int maskByte = maskBytes[i] & 0xFF;

        if ((addressByte & maskByte) != (subnetByte & maskByte)) {
            return false;
        }
    }

    return true;
}

這個方法接受三個參數:要檢查的IP地址、子網地址子網掩碼。它使用InetAddress類將這些字符串轉換為Java對象,然后將它們轉換為字節(jié)數組。然后,它迭代每個字節(jié),并將每個字節(jié)的值與相應的子網字節(jié)和掩碼字節(jié)進行比較,以提取網絡地址。如果網絡地址與子網地址不匹配,則返回false,否則返回true。

例如,假設我們要檢查IP地址 “192.168.1.100” 是否在子網"192.168.1.0/24"中:

boolean result = isIpAddressInSubnet("192.168.1.100", "192.168.1.0", "255.255.255.0");
if (result) {
    System.out.println("IP address is in subnet");
} else {
    System.out.println("IP address is not in subnet");
}

方法二:擼個算法實現(二進制計算)

代碼來源于 Google,但是明白原理即可,不需要深究。不管怎么樣肯定都會需要 IP 地址子網掩碼才能組成一個子網范圍;然后判斷另一個給定的 IP 是否在這個網段內。

/**
 * 判斷是否在該網段中
 *
 * @param subnetRange 子網范圍 x.x.x.x/xx 形式
 */
public static boolean isIpAddressInSubnet(String ipAddress, String subnetRange) {
    String[] networkips = ipAddress.split("\\.");
    int ipAddr = (Integer.parseInt(networkips[0]) << 24)
            | (Integer.parseInt(networkips[1]) << 16)
            | (Integer.parseInt(networkips[2]) << 8)
            | Integer.parseInt(networkips[3]);
            
    // 拿到主機數       
    int type = Integer.parseInt(subnetRange.replaceAll(".*/", ""));
    int ipCount = 0xFFFFFFFF << (32 - type);
    
    String maskIp = subnetRange.replaceAll("/.*", "");
    String[] maskIps = maskIp.split("\\.");
    
    int cidrIpAddr = (Integer.parseInt(maskIps[0]) << 24)
            | (Integer.parseInt(maskIps[1]) << 16)
            | (Integer.parseInt(maskIps[2]) << 8)
            | Integer.parseInt(maskIps[3]);
            
    return (ipAddr & ipCount) == (cidrIpAddr & ipCount);
}

例如,假設我們要檢查IP地址 “192.168.1.100” 是否在子網"192.168.1.0/24"中:

boolean result = isIpAddressInSubnet("192.168.1.100", "192.168.1.0/24");
if (result) {
    System.out.println("IP address is in subnet");
} else {
    System.out.println("IP address is not in subnet");
}

其他

數字轉為子網掩碼

public static String subnetMaskFromPrefixLength(int prefixLength) {
    if (prefixLength < 0 || prefixLength > 32) {
        throw new IllegalArgumentException("Invalid prefix length");
    }

    int mask = 0xffffffff << (32 - prefixLength);
    return String.format("%d.%d.%d.%d",
        (mask & 0xff000000) >>> 24,
        (mask & 0x00ff0000) >>> 16,
        (mask & 0x0000ff00) >>> 8,
        (mask & 0x000000ff));
}

示例:

String subnetMask = subnetMaskFromPrefixLength(24);
System.out.println(subnetMask); // 輸出:255.255.255.0

個人博客: Roc’s Blog文章來源地址http://www.zghlxwxcb.cn/news/detail-788084.html

到了這里,關于Java 快速判斷一個 IP 是否在給定的網段內的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 怎么判斷一個ip地址是否正確

    在網絡通信和計算機領域中,IP地址(Internet Protocol Address)是一個關鍵的概念。但是,很多人對于如何判斷一個IP地址是否正確感到困惑。本文將深入探討這個問題,并提供一些實用的方法來驗證IP地址的正確性。 IP地址是由四個數字組成,每個數字的范圍是0到255之間,用點

    2024年02月09日
    瀏覽(22)
  • 如果精確判斷一個IP是否被占用

    如果精確判斷一個IP是否被占用

    我們在局域網經常需要去測試一個IP是否在用,通過使用ping命令去測試網絡通還是不通,但這種方法不是很精確。 我在cnaaa.com上購買了云服務器。 原因是 ping 命令使用的是 ICMP 協議(Internet Control Message Protocol),ICMP協議是 TCP/IP 協議族中的一員,它也含IP頭,所以我們可以使

    2024年02月08日
    瀏覽(21)
  • 判斷兩個 IP 地址是否在同一個局域網中

    如何判斷兩個 IP 地址是否在同一個局域網中, 核心知識點是出于一個網絡號, 主要是通過本身ip 與 所處的子網掩碼進行 計算處理是否處于同一個局域網中(在 TCP/IP協議規(guī)則里面,IP地址與子網掩碼做與運算)。

    2024年02月13日
    瀏覽(28)
  • 前端算法題——給定一個整數數組,判斷是否存在重復元素。

    題目可以理解為如果存在一值在數組中出現至少兩次,函數返回 true 。如果數組中每個元素都不相同,則返回 false。 這題一看就是 計數問題,題目中“如果存在一值在數組中出現至少兩次”這句話就告訴我們記錄每一個數字出現的次數就能解決問題了。? 我們遍歷數組時,

    2024年02月20日
    瀏覽(95)
  • python判斷ip所屬地區(qū) python 判斷ip 網段

    python判斷ip所屬地區(qū) python 判斷ip 網段

    前言 IP地址是互聯網中唯一標識一個設備的地址,有時候需要判斷一個IP地址所屬的地區(qū),這就需要用到IP地址歸屬查詢。本文將介紹Python如何通過IP地址查詢所屬地區(qū)并展示代碼。 ? 一、 IP地址歸屬查詢 IP地址歸屬查詢又稱IP地址歸屬地查詢、IP地址歸屬地定位、IP地址查詢、

    2024年02月11日
    瀏覽(16)
  • 3的冪,給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。如果是,返回 true ;否則,返回 false。

    題記: 給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。如果是,返回 true ;否則,返回 false 。 整數 n 是 3 的冪次方需滿足:存在整數 x 使得 n == 3^x 示例 1: 輸入 :n = 27 輸出 :true 示例 2: 輸入 :n = 0 輸出 :false 示例 3: 輸入 :n = 9 輸出 :true 示例 4: 輸入 :

    2024年02月15日
    瀏覽(19)
  • Java判斷一個時間是否在當前時間區(qū)間!

    Java判斷一個時間是否在當前時間區(qū)間!

    ????????前言:我現有個定時任務 每天上午10下午4點查一次表有沒有錄入新數據進來 有時候錄半天就沒錄入了?所以還得知道他是不是新數據 得知道 這條數據的時間在沒在當前時間左右范圍內 ?在的話就還在正常錄入 。 目錄 1.所需條件 2.將這三個進行轉換類型 ?3.做條

    2023年04月26日
    瀏覽(26)
  • Java判斷一個字符串是否包含某個字符

    Java判斷一個字符串是否包含某個字符

    1 問題 如何利用Java通過不同的方法來判斷一個字符串是否包含某個字符。 2 方法 .contains方法 這個是利用java.lang.String.contains()?方法返回true,當且僅當此字符串包含指定的char值序列,此方法返回true,如果此字符串包含,否則返回false。 (2).indexOf方法 這一個是利用java.lang.Str

    2024年02月16日
    瀏覽(112)
  • Python實現對IP網段的快速檢測

    前言 本文是該專欄的第33篇,后面會持續(xù)分享python的各種干貨知識,值得關注。 在工作上可能會遇到這樣的需求,需要你對某個IP地址的網段進行批量檢測。將 可用 和 不可用 IP批量篩選出來,尤其是在爬蟲項目中,對于IP可用性的檢測需求較多。 那么在python中,有沒有方法

    2024年02月14日
    瀏覽(13)
  • 一個網卡怎么新增一個跨網段ip地址?

    有時候筆記本只有一個網卡,但是有一個設備連接了內網但是ip不是內網IP,這是我們就要增加一個跨網段IP,能夠使筆記本電腦與設備通信 1、單擊網絡和共享中心 2、單擊更改適配器設置 3、找到正在使用的網卡 4、右擊選擇屬性 5、雙擊IPV4選項 6、如圖是一般的內網地址 7、

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包