亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java如何獲取一個(gè)IP段內(nèi)的所有IP地址

 更新時(shí)間:2024年11月03日 14:33:33   作者:在天  
這篇文章主要為大家詳細(xì)介紹了Java如何根據(jù)起始和結(jié)束的IP地址獲取IP段內(nèi)所有IP地址,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

現(xiàn)在有這樣一個(gè)場(chǎng)景,提供一個(gè)起始的IP地址,提供一個(gè)結(jié)束的IP地址,要循環(huán)出IP段內(nèi)所有的IP地址。

當(dāng)然首先想到就是4個(gè)for循環(huán)。也是最簡(jiǎn)單的做法?,F(xiàn)在肯定不會(huì)這樣用。

再想到是通過(guò)2個(gè)循環(huán)或者1個(gè)函數(shù)調(diào)用來(lái)實(shí)現(xiàn),因?yàn)閷?duì)二進(jìn)制的加減操作不熟悉,沒(méi)有結(jié)果。

后來(lái)參考網(wǎng)絡(luò)上的方法,出了1個(gè)個(gè)人認(rèn)為較好的解決方案。

 using System;
 using System.Collections;
 
  namespace ConsoleApplicationForTest
  {
      class Program
      {
          static void Main(string[] args)
          {
            string startIP = "10.1.1.1";
             string endIP = "10.2.3.4";
 
             long lsIP = ToHex(startIP);
             long leIP = ToHex(endIP);
 
             SortedList list = new SortedList();
 
             for (; lsIP < leIP; lsIP++)
             {
                 string temp = ToIp(lsIP);
                 list.Add(temp, temp);
             }
         }
 
         /// <summary>
 /// 將IP地址轉(zhuǎn)換成數(shù)值形式
 /// </summary>
 /// <param name="ip"></param>
 /// <returns>長(zhǎng)整形</returns>
         public static long ToHex(string ip)
         {
             string[] arrIP = ip.Split('.');
             for (int i = 0; i < arrIP.Length; i++)
             {
                 arrIP[i] = int.Parse(arrIP[i]) > 255 ? Convert.ToString(255).PadLeft(2, '0') : arrIP[i] = Convert.ToString(int.Parse(arrIP[i]), 16).PadLeft(2, '0');
             }
             ip = string.Join("", arrIP);
 
             long hexIP = long.Parse(ip, System.Globalization.NumberStyles.HexNumber);
             return hexIP;
         }
 
         /// <summary>
 /// 將數(shù)值形式轉(zhuǎn)換成IP地址
 /// </summary>
 /// <param name="l"></param>
 /// <returns>IP地址</returns>
         public static string ToIp(long l)
         {
             var bt = new long[4];
             for (int i = 0; i < 4; i++)
             {
                 bt[3 - i] = (long)(l >> 8 * i & 255);
             }
 
             string ipAddress = string.Join(".", bt);
             return ipAddress;
         }
     }
60 }

下面這個(gè)是同事給的一個(gè)Class

using System;
using System.Net;
  
  namespace ConsoleApplicationForTest
  {
      public class IpDigitCovert
      {
          /// <summary>
  /// 將IP地址轉(zhuǎn)為數(shù)值形式
 /// </summary>
 /// <returns>長(zhǎng)整數(shù)</returns>
         public static long ToDigit(IPAddress ip)
         {
             int x = 3;
             long l = 0;
             foreach (byte b in ip.GetAddressBytes())
             {
                 l += (long)b << 8 * x;
             }
             return l;
         }

         /// <summary>
/// 將數(shù)值轉(zhuǎn)換為IP地址
 /// </summary>
 /// <returns>IP地址</returns>
         public static IPAddress ToIP(long l)
         {
             var bt = new byte[4];
             for (int i = 0; i < 4; i++)
             {
                 bt[3 - i] = (byte)(l >> 8 * i & 255);
             }
            return new IPAddress(bt);
         }
 
         /// <summary>
 /// 將IP地址轉(zhuǎn)為數(shù)值形式
 /// </summary>
 /// <param name="ip"></param>
 /// <returns>長(zhǎng)整數(shù)</returns>
         public static long ToHex(string ip)
         {
             string[] arrIP = ip.Split('.');
             for (int i = 0; i < arrIP.Length; i++)
             {
                 arrIP[i] = int.Parse(arrIP[i]) > 255 ? Convert.ToString(255).PadLeft(2, '0') : arrIP[i] = Convert.ToString(int.Parse(arrIP[i]), 16).PadLeft(2, '0');
             }
             ip = string.Join("", arrIP);

             long hexIP = long.Parse(ip, System.Globalization.NumberStyles.HexNumber);
             return hexIP;
         }
 
         /// <summary>
 /// 將數(shù)值形式轉(zhuǎn)為IP地址
 /// </summary>
 /// <param name="l"></param>
 /// <returns>ip地址</returns>
         public static string ToIp(long l)
         {
             var bt = new long[4];
             for (int i = 0; i < 4; i++)
             {
                 bt[3 - i] = (long)(l >> 8 * i & 255);
             }
             string ipAddress = string.Join(".", bt);
             return ipAddress;
         }
 
     }
 }

方法補(bǔ)充

除了上文的方法,小編還為大家整理了其他根據(jù)開(kāi)始和結(jié)束ip計(jì)算中間的所有ip的方法,希望對(duì)大家有所幫助

import java.util.ArrayList;
import java.util.List;
import java.net.InetAddress;
import java.io.UnsupportedEncodingException;
 
public class IpRangeCalculator {
    public static String[] calculateIpRange(String startIp, String endIp) {
        try {
            InetAddress startInetAddress = InetAddress.getByName(startIp);
            InetAddress endInetAddress = InetAddress.getByName(endIp);
 
            byte[] startBytes = startInetAddress.getAddress();
            byte[] endBytes = endInetAddress.getAddress();
 
            List<String> ipList = new ArrayList<>();
 
            for (int i = 0; i < startBytes.length; i++) {
                for (int j = Integer.parseInt(startIp.split("\\.")[i]); j < Integer.parseInt(endIp.split("\\.")[i]); j++) {
                    byte[] tempBytes = startBytes.clone();
                    tempBytes[i] = (byte) j;
                    ipList.add(InetAddress.getByAddress(tempBytes).getHostAddress());
                }
            }
 
            return ipList.toArray(new String[0]);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public static void main(String[] args) {
        String startIp = "192.168.1.1";
        String endIp = "192.168.1.5";
        String[] ipRange = calculateIpRange(startIp, endIp);
 
        for (String ip : ipRange) {
            System.out.println(ip);
        }
    }
}

這個(gè)方法首先將起始IP地址和結(jié)束IP地址轉(zhuǎn)換為InetAddress對(duì)象,然后獲取它們的字節(jié)數(shù)組表示。對(duì)于IP地址的每個(gè)字節(jié),它會(huì)遍歷可能的值,為每個(gè)字節(jié)創(chuàng)建一個(gè)新的字節(jié)數(shù)組,并將其轉(zhuǎn)換回IP地址,添加到結(jié)果列表中。最后,將列表轉(zhuǎn)換為字符串?dāng)?shù)組并返回。

到此這篇關(guān)于Java如何獲取一個(gè)IP段內(nèi)的所有IP地址的文章就介紹到這了,更多相關(guān)Java獲取IP段內(nèi)所有IP地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java基礎(chǔ)詳細(xì)筆記之異常處理

    java基礎(chǔ)詳細(xì)筆記之異常處理

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)詳細(xì)筆記之異常處理的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù)的流程分析

    Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù)的流程分析

    這篇文章主要介紹了Java?SpringBoot?@Async實(shí)現(xiàn)異步任務(wù),主要包括@Async?異步任務(wù)-無(wú)返回值,@Async?異步任務(wù)-有返回值,@Async?+?自定義線程池的操作代碼,需要的朋友可以參考下
    2022-12-12
  • MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法

    MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法

    這篇文章主要介紹了MyBatis傳入多個(gè)參數(shù)時(shí)parameterType的寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 關(guān)于Java8新特性O(shè)ptional類的詳細(xì)解讀

    關(guān)于Java8新特性O(shè)ptional類的詳細(xì)解讀

    Optional類是一個(gè)容器類,它可以保存類型T的值,代表這個(gè)值存在。或者僅僅保存null,表示這個(gè)值不存在,原來(lái)用 null 表示一個(gè)值不存在,現(xiàn)在Optional 可以更好的表達(dá)這個(gè)概念。并且可以避免空指針異常,需要的朋友可以參考下
    2023-05-05
  • Android應(yīng)用開(kāi)發(fā)的一般文件組織結(jié)構(gòu)講解

    Android應(yīng)用開(kāi)發(fā)的一般文件組織結(jié)構(gòu)講解

    這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)的一般文件組織結(jié)構(gòu)講解,同時(shí)附帶介紹了一個(gè)獲取Android的文件列表的方法,需要的朋友可以參考下
    2015-12-12
  • springboot2.1.3配置sftp自定義sftp連接池的詳細(xì)過(guò)程

    springboot2.1.3配置sftp自定義sftp連接池的詳細(xì)過(guò)程

    這篇文章主要介紹了springboot2.1.3配置sftp自定義sftp連接池的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Spring Security OAuth2 實(shí)現(xiàn)登錄互踢的示例代碼

    Spring Security OAuth2 實(shí)現(xiàn)登錄互踢的示例代碼

    這篇文章主要介紹了Spring Security OAuth2實(shí)現(xiàn)登錄互踢的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 利用Java查看進(jìn)程內(nèi)存占用情況的實(shí)現(xiàn)方法

    利用Java查看進(jìn)程內(nèi)存占用情況的實(shí)現(xiàn)方法

    在系統(tǒng)監(jiān)控和性能調(diào)優(yōu)中,了解各個(gè)進(jìn)程的內(nèi)存占用情況是非常重要的一環(huán),通過(guò)查看進(jìn)程內(nèi)存使用情況,開(kāi)發(fā)者和運(yùn)維人員可以及時(shí)發(fā)現(xiàn)異常進(jìn)程、資源瓶頸和內(nèi)存泄漏問(wèn)題,本項(xiàng)目旨在使用 Java 編寫(xiě)一個(gè)簡(jiǎn)單的程序,通過(guò)調(diào)用操作系統(tǒng)的命令來(lái)獲取系統(tǒng)中各個(gè)進(jìn)程的內(nèi)存使用情況
    2025-03-03
  • socket編程時(shí)的發(fā)送與接收數(shù)據(jù)時(shí)的問(wèn)題解析

    socket編程時(shí)的發(fā)送與接收數(shù)據(jù)時(shí)的問(wèn)題解析

    這篇文章主要為大家介紹了socket編程時(shí)的發(fā)送與接收數(shù)據(jù)時(shí)的問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Java加密解密工具(適用于JavaSE/JavaEE/Android)

    Java加密解密工具(適用于JavaSE/JavaEE/Android)

    這篇文章主要介紹了Java加密解密工具,適用于JavaSE/JavaEE/Android,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評(píng)論