如果你希望在Java中遍历和打印从0.0.0.0到255.255.255.255的IP地址范围,但不包括保留地址,可以使用以下代码示例:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPTraversal {
public static void main(String[] args) {
try {
long start = ipToLong("0.0.0.0");
long end = ipToLong("255.255.255.255");
for (long i = start; i <= end; i++) {
String ipAddress = longToIp(i);
if (!isReservedIP(ipAddress)) {
System.out.println(ipAddress);
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public static long ipToLong(String ipAddress) throws UnknownHostException {
InetAddress inetAddress = InetAddress.getByName(ipAddress);
byte[] addressBytes = inetAddress.getAddress();
long result = 0;
for (byte octet : addressBytes) {
result <<= 8;
result |= octet & 0xff;
}
return result;
}
public static String longToIp(long ip) {
StringBuilder ipAddress = new StringBuilder();
for (int i = 3; i >= 0; i--) {
ipAddress.append((ip >> (i * 8)) & 0xff);
if (i > 0) {
ipAddress.append(".");
}
}
return ipAddress.toString();
}
public static boolean isReservedIP(String ipAddress) {
try {
long ip = ipToLong(ipAddress);
// 检查私有地址范围和回环地址范围
if ((ip >= ipToLong("10.0.0.0") && ip <= ipToLong("10.255.255.255"))
|| (ip >= ipToLong("172.16.0.0") && ip <= ipToLong("172.31.255.255"))
|| (ip >= ipToLong("192.168.0.0") && ip <= ipToLong("192.168.255.255"))
|| (ip == ipToLong("127.0.0.1"))) {
return true;
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
return false;
}
}
上述代码在遍历IP地址时,在打印之前通过 isReservedIP
方法检查是否为保留地址。如果是保留地址,则跳过打印步骤。
请注意,这个操作仍然需要相当长的时间才能完成,因为涉及到了大量的IP地址范围。