簡體   English   中英

生成IPv4范圍中的所有IP地址

[英]Generating all IP addresses in the IPv4 Range

什么是生成所有可能的IP v4地址的有效方法? 除了迭代一個巨大的嵌套for循環中的所有字節。

編輯 :我以前的答案將從128.0.0.0變為255.255.255.2550.0.0.0127.255.255.255 大概你想要從0.0.0.0255.255.255.255 ,所以我編輯了我的解決方案來做到這一點。

int i = -1;
do {
  i++;

  int b1 = (i >> 24) & 0xff;
  int b2 = (i >> 16) & 0xff;
  int b3 = (i >>  8) & 0xff;
  int b4 = (i      ) & 0xff;

  //Now the IP is b1.b2.b3.b4

} while(i != -1);

注意:如果你對這個循環將如何結束感到困惑(即如何將足夠的時間加1到-1再次使其為-1),請閱讀2的補碼 基本上,向Integer.MAX_VALUE添加一個會導致Integer.MIN_VALUE ,並且不會拋出任何類型的異常。


老答案 仍然擊中所有IP,但可能不是您想要的順序:

for(long n = Integer.MIN_VALUE; n <= Integer.MAX_VALUE; n++)
{
  int i = (int)n;

  int b1 = (i >> 24) & 0xff;
  int b2 = (i >> 16) & 0xff;
  int b3 = (i >>  8) & 0xff;
  int b4 = (i      ) & 0xff;

  //Now the IP is b1.b2.b3.b4
}

請注意:如果循環控制變量是int而不是long ,則這將是一個無限循環(因為所有int都始終<= Integer.MAX_VALUE )。

並非所有IPv4地址都有效,具體取決於它們的用途。 請參閱此處有關保留地址塊和鏈接RFC的部分: http//en.wikipedia.org/wiki/IPv4

因此,根據您要執行的操作,您可能需要檢查保留的地址並將其保留。

一切可能? 0.0.0.0到255.255.255.255,它是0到0xFFFFFFFF

您可以從初始化為零的無符號整數/長整數(32位數據類型)開始,並繼續遞增,直到達到0xffffffff。

增量運算符通常比嵌套循環略高效。

使用位掩碼和位移運算符來提取您感興趣的任何給定字節。

就“效率”而言,我認為沒有比循環所有可能值更好的方法。

請注意兩件事:1。有很多地址,因此效率不高。 2.並非所有IP地址都有效(並且有很多地址可能不打算過去)。

有關IP地址有效的示例,請注意224.0.0.0和239.255.255.255之間的所有地址都是多播地址,所有以127.xxx開頭的地址都是無效的,等等。

暫無
暫無

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

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