[英]Generating all IP addresses in the IPv4 Range
什么是生成所有可能的IP v4地址的有效方法? 除了迭代一個巨大的嵌套for循環中的所有字節。
編輯 :我以前的答案將從128.0.0.0
變為255.255.255.255
到0.0.0.0
到127.255.255.255
。 大概你想要從0.0.0.0
到255.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.