首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算IP范围的起始和结束IP地址

如何计算IP范围的起始和结束IP地址
EN

Stack Overflow用户
提问于 2022-06-20 12:41:01
回答 1查看 129关注 0票数 2

想要把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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 14:06:58

我把这个答案移植到了Dart。由于Dart似乎没有内置的IP地址库,所以我不得不创建ip2intint2ip。这与本站的输出相匹配。

代码语言:javascript
运行
复制
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'));
}

输出:

代码语言:javascript
运行
复制
[198.162.1.0, 198.162.1.255]
[192.168.0.0, 192.168.0.127]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72687154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档