我试图获取两个地址之间的所有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);
}
}
}
}
}
答案 0 :(得分:4)
像a.b.c.d
这样的IPv4地址可以用无符号整数a*256^3+b*256^2+c*256+d
表示。现在,您可以将两个IP地址转换为无符号整数,然后获得整数范围,迭代范围并将每个无符号整数转换回IPv4字面值。
答案 1 :(得分:1)
如果是我,我会使用int
值来表示IP地址,并编写一个将int
转换为IP表示字符串的函数:
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,以及接受long
而不是int
的其他方法,以避免整数符号位出现问题。