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

Ham*_*aya 3 java networking network-programming

什么是生成所有可能的IP v4地址的有效方法?除了迭代一个巨大的嵌套for循环中的所有字节.

Kip*_*Kip 11

编辑:我以前的答案会从128.0.0.0一直255.255.255.2550.0.0.0另一个127.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);
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).