使用此处找到的代码:https://libbits.wordpress.com/2011/05/17/check-if-ip-is-within-range-specified-in-cidr-in-java/,可以检查IP是否在CIDR指定的范围内。
我能够将一个字符串分成四个整数,并为我的IP范围创建边界。现在我想生成一个介于最高值和最低值之间的IP地址。例如,给定范围:157.166.224.26/10,我得到一个地址为-1650008038,我的最低IP地址是-1652555776,最高IP地址是-1648361473。现在我需要生成一个介于最低和最高值之间的数字,并将其转换回四个整数,这最后一部分是我迷失的地方,我不确定如何将-1648361473转换为IP地址。
// Step 1. Convert IPs into ints (32 bits).
// E.g. 157.166.224.26 becomes 10011101 10100110 11100000 00011010
int addr = (( 157 << 24 ) & 0xFF000000)
| (( 166 << 16 ) & 0xFF0000)
| (( 224 << 8 ) & 0xFF00)
| ( 26 & 0xFF);
// Step 2. Get CIDR mask
int mask = (-1) << (32 - 10);
// Step 3. Find lowest IP address
int lowest = addr & mask;
// Step 4. Find highest IP address
int highest = lowest + (~mask);
我能够将一个字符串分成四个整数,并为我的IP范围创建边界。现在我想生成一个介于最高值和最低值之间的IP地址。例如,给定范围:157.166.224.26/10,我得到一个地址为-1650008038,我的最低IP地址是-1652555776,最高IP地址是-1648361473。现在我需要生成一个介于最低和最高值之间的数字,并将其转换回四个整数,这最后一部分是我迷失的地方,我不确定如何将-1648361473转换为IP地址。