什麼是生成所有可能的IP v4地址的有效方法?除了迭代一個巨大的嵌套for循環中的所有字節。生成IPv4範圍中的所有IP地址
回答
編輯:我以前的答案會從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),上two's complement閱讀起來。基本上,增加一個到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
s爲總<= Integer.MAX_VALUE
)。
所有可能的? 0.0.0.0到255.255.255.255這是0到0xFFFFFFFF
是從開始到結束的所有可能的有效IP地址。 –
我明白了,我可以知道這麼做的目的嗎?檢查有效的IP? – YOU
試圖複製http://www.isi.edu/ant/address/index.html –
你可以從一個unsigned int/long(32位數據類型)開始,初始化爲零並保持遞增,直到達到0xffffffff。
遞增運算符通常比嵌套循環效率稍高。
使用位掩碼和位移位運算符拉出任何給定的字節,你有興趣。
並非所有的IPv4地址是有效的,這取決於他們打算什麼目的了。請參閱以下保留地址塊和鏈接的RFC部分:http://en.wikipedia.org/wiki/IPv4
因此,根據您要執行的操作,您可能需要檢查保留的地址並將其保留。
就「效率」而言,我認爲沒有比循環所有可能的值更好的方法。
請注意兩件事: 1.有很多的地址,所以它不會那麼高效。 2.並非所有的IP地址都是有效的(並且有很多地址你可能不打算通過)。
對於哪些IP地址是有效的一個例子,注意到,224.0.0.0到239.255.255.255之間的所有地址是多播地址,從127.xxx所有地址都是無效的,等
- 1. 從IP範圍sitter/bash中剔除所有IP地址
- 2. EC2的IP地址範圍
- 3. 生成範圍內的所有可能的MAC地址
- 4. 淨ip地址的IPv4
- 5. 生成組織的IP地址範圍的數據
- 6. 使用現有IP地址範圍驗證IP地址
- 7. 檢查IP地址範圍
- 8. 散列IP地址範圍
- 9. 引用IP地址範圍
- 10. 各種IP地址範圍
- 11. 變換IP地址,IP地址範圍(起始IP - 結束IP)
- 12. 轉換IP範圍的IP地址
- 13. PHP生成的IP範圍
- 14. 如何從IP地址列表中查找IP地址範圍
- 15. iOS iP地址比較IP範圍
- 16. 匹配IP地址與IP範圍?
- 17. 將IP地址轉換爲IP範圍
- 18. 如何快速找到IP地址範圍內的IP地址?
- 19. 如何從Python中的IP範圍列表中生成所有可能的IP?
- 20. 在perl中迭代IP地址範圍
- 21. 生成新的IP地址
- 22. inet_aton IPv4地址規範化
- 23. 的MySQL查詢的IP地址範圍
- 24. PHP檢查IP地址是否在IP地址範圍
- 25. PHP從IP範圍生成IP列表
- 26. 迭代雖然IP的地址範圍
- 27. 印度的ip地址範圍
- 28. C#:枚舉範圍內的IP地址
- 29. APNS服務器的IP地址範圍?
- 30. Google白名單的IP地址範圍
是無符號整數中java嗎? – YOU
@S。馬克:不,但沒關係。 '&0xff'將刪除符號位。循環可以從0到-1(因爲-1 == 0xffffffff)。它仍然會工作,因爲'Integer.MAX_VALUE + 1 === Integer.MIN_VALUE' – Kip
@ S.Mark:我不確定這是否是你正在得到的,但他可能想從0到0xffffffff。我已經更新了我的答案 – Kip