2010-01-07 52 views

回答

10

編輯:我以前的答案會從128.0.0.0255.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),上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

是無符號整數中java嗎? – YOU

+0

@S。馬克:不,但沒關係。 '&0xff'將刪除符號位。循環可以從0到-1(因爲-1 == 0xffffffff)。它仍然會工作,因爲'Integer.MAX_VALUE + 1 === Integer.MIN_VALUE' – Kip

+0

@ S.Mark:我不確定這是否是你正在得到的,但他可能想從0到0xffffffff。我已經更新了我的答案 – Kip

2

所有可能的? 0.0.0.0到255.255.255.255這是0到0xFFFFFFFF

+0

是從開始到結束的所有可能的有效IP地址。 –

+0

我明白了,我可以知道這麼做的目的嗎?檢查有效的IP? – YOU

+1

試圖複製http://www.isi.edu/ant/address/index.html –

1

你可以從一個unsigned int/long(32位數據類型)開始,初始化爲零並保持遞增,直到達到0xffffffff。

遞增運算符通常比嵌套循環效率稍高。

使用位掩碼和位移位運算符拉出任何給定的字節,你有興趣。

3

並非所有的IPv4地址是有效的,這取決於他們打算什麼目的了。請參閱以下保留地址塊和鏈接的RFC部分:http://en.wikipedia.org/wiki/IPv4

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

1

就「效率」而言,我認爲沒有比循環所有可能的值更好的方法。

請注意兩件事: 1.有很多的地址,所以它不會那麼高效。 2.並非所有的IP地址都是有效的(並且有很多地址你可能不打算通過)。

對於哪些IP地址是有效的一個例子,注意到,224.0.0.0到239.255.255.255之間的所有地址是多播地址,從127.xxx所有地址都是無效的,等