想要把198.162.1.1/24
转换成198.162.1.1 -198.162.1.124‘或者任何类似的东西。所以试图弄清楚如何用飞镖从数学上解决这个问题。
示例:
输入:192.168.0.1/25
结果:192.168.0.1 - 192.168.0.126
发布于 2022-06-20 14:06:58
我把这个答案移植到了Dart。由于Dart似乎没有内置的IP地址库,所以我不得不创建ip2int
和int2ip
。这与本站的输出相匹配。
int ip2int(String ipAddr) {
final parts = ipAddr.split('.').map((str) => int.parse(str)).toList();
return (parts[0] << 24) + (parts[1] << 16) + (parts[2] << 8) + (parts[3]);
}
String int2ip(int ipAddr) {
return [
(ipAddr >> 24).toString(),
((ipAddr & 0xff0000) >> 16).toString(),
((ipAddr & 0xff00) >> 8).toString(),
(ipAddr & 0xff).toString()
].join('.');
}
List<String> ipRange(String cidr) {
final range = ['', ''];
final cidrSplit = cidr.split('/');
range[0] =
int2ip((ip2int(cidrSplit[0])) & ((-1 << (32 - int.parse(cidrSplit[1])))));
range[1] = int2ip(
(ip2int(range[0])) + (1 << (32 - int.parse(cidrSplit[1]))).toInt() - 1);
return range;
}
void main() {
print(ipRange('198.162.1.1/24'));
print(ipRange('192.168.0.1/25'));
}
输出:
[198.162.1.0, 198.162.1.255]
[192.168.0.0, 192.168.0.127]
https://stackoverflow.com/questions/72687154
复制相似问题