Ham*_*aya 3 java networking network-programming
什么是生成所有可能的IP v4地址的有效方法?除了迭代一个巨大的嵌套for循环中的所有字节.
Kip*_*Kip 11
编辑:我以前的答案会从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);
Run Code Online (Sandbox Code Playgroud)
注意:如果你对这个循环将如何结束感到困惑(即如何将足够的时间加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
}
Run Code Online (Sandbox Code Playgroud)
请注意:如果循环控制变量是a int而不是a long,则这将是一个无限循环(因为所有ints都是<= Integer.MAX_VALUE).