簡體   English   中英

如何在給定開始和結束 IP 地址的情況下生成 IP 地址范圍?

[英]How do I get generate an IP address range given start and end IP address?

如何從起始 IP 地址和結束 IP 地址生成一系列 IP 地址?

網絡“192.168.0.0/24”的示例:

String start = "192.168.0.2"
String end = "192.168.0.254"

我希望有:

192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
...
192.168.0.254

PS:網絡,開始和結束IP可以是動態的,上面只是一個例子。

謝謝...

認識到 IPv4 地址的 4 個組成部分中的每一個實際上都是一個介於 00 和 FF 之間的十六進制數。

如果您將起始和結束 IP 地址更改為 32 位無符號整數,您只需從最低的一個到最高的一個循環,然后將您循環的每個值轉換回 IP 地址格式。

您給出的示例中的范圍是 C0A80002 到 C0A800FE。

這是在十六進制數和 IPv4 地址之間轉換的代碼的鏈接

http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number

這是輸出您要求的簡單實現:

public static void main(String args[]) {
    String start = "192.168.0.2";
    String end = "192.168.0.254";

    String[] startParts = start.split("(?<=\\.)(?!.*\\.)");
    String[] endParts = end.split("(?<=\\.)(?!.*\\.)");

    int first = Integer.parseInt(startParts[1]);
    int last = Integer.parseInt(endParts[1]);

    for (int i = first; i <= last; i++) {
        System.out.println(startParts[0] + i);
    }
}

請注意,這適用於涉及 IP 地址最后一部分的范圍。

從 2 開始,數到 254,然后輸入“192.168.0”。 在它面前:

for (int i = 2; i <= 254; i++) {
    System.out.println("192.168.0." + i);
}
void main(String args[]) 
{
String start = "192.168.0.2";
String end = "192.168.0.254";

String[] startParts = start.split("(?<=\\.)(?!.*\\.)");
String[] endParts = end.split("(?<=\\.)(?!.*\\.)");

int first = Integer.parseInt(startParts[1]);
int last = Integer.parseInt(endParts[1]);

for (int i = first; i <= last; i++) 
{
System.out.println(startParts[0] + i);
}
}

使用IPAddress Java 庫,您可以使用透明地處理 IPv4 和 IPv6 的代碼。 免責聲明:我是 IPAddress 庫的項目經理。

這是示例代碼:

String start = "192.168.0.2", end = "192.168.0.254";
iterate(start, end);
System.out.println();
start = "::1";
end = "::100";
iterate(start, end);

static void iterate(String lowerStr, String upperStr) throws AddressStringException  {
   IPAddress lower = new IPAddressString(lowerStr).toAddress();
   IPAddress upper = new IPAddressString(upperStr).toAddress();
   IPAddressSeqRange range = lower.toSequentialRange(upper);
   for(IPAddress addr : range.getIterable()) {
       System.out.println(addr);
   }
}

輸出:

192.168.0.2
192.168.0.3
192.168.0.4
...
192.168.0.254

::1
::2
::3
...
::100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM