0

我正在尝试获取两个地址之间的所有 IP 地址(“168.200.197.3”和“238.199.200.78”)。我首先将字符串拆分为整数。然后我尝试打印出这两者之间的所有地址。但是输出只显示地址的每一部分都在递增,比如168 169 170……我希望整个地址都递增(168.200.197.3, 168.200.197.4,168.200.197.5....等)。请帮忙 !!!!!!!

public class IpAddress {


 public static void main(String[] args) {
    int [] ip1 = new int[4];
    int [] ip2 = new int[4];

    String [] parts1 = "168.200.197.3".split("\\.");
    String [] parts2 = "238.199.200.78".split("\\.");

    for (int i = 0; i <4; i++){
        ip1[i] = Integer.parseInt(parts1[i]);   
              for (int j = 0; j<4; j ++){
                    ip2[j] = Integer.parseInt(parts2[j]);
                           for (int k = ip1[i]; k<ip2[j]; k++){
                                  System.out.println(k);
                                        }
                                 }  
                        }
      }
}
4

2 回答 2

4

IPv4 地址a.b.c.d可以用无符号整数表示a*256^3+b*256^2+c*256+d。现在您可以将两个 IP 地址转换为无符号整数,然后获得一个整数范围,迭代该范围并将每个无符号整数转换回 IPv4 文字。

于 2013-10-31T03:06:40.650 回答
1

如果是我,我会使用一个int值来表示 IP 地址并编写一个函数,将 转换为intIP 的字符串表示形式:

private static final String getIPFromInt(final long ipaslong) {
    return String.format("%d.%d.%d.%d",
                (ipaslong >>> 24) & 0xff,
                (ipaslong >>> 16) & 0xff,
                (ipaslong >>>  8) & 0xff,
                (ipaslong       ) & 0xff);
}

然后我会通过将它们转换为 int 表示来计算起点和终点(与 getIPFromLong(...) 方法相反的问题,我将把它留给你作为练习)最后我会编写一个简单的循环:

final long from = getLongFromIP(ip1);
final long to = getLongFromIP(ip2);

for (long i = from; i <= to, i++) {
    System.out.println(getIPFromLong(i);
}

编辑:将循环参数更改i为长,并接受其他方法long而不是int避免整数符号位的问题。

于 2013-10-31T03:05:22.130 回答