从 IP 范围到 CIDR 掩码的转换

2024-01-02

我一直在研究一种算法,用于将 IP 范围转换为 CIDR 表示法中的 IP 列表(此后将作为元组提及)。 现在,让我困惑的是弄清楚这种转换的最坏情况是什么?

对于 IPv4 范围,我可以获得的最大元组数是多少? 对于 IPv6 范围,我可以获得的最大元组数是多少? 这是怎么计算的?erp

我正在使用修改后的 C 版本(不是递归的)以下 Python 脚本的 http://wang.yuxuan.org/blog/?itemid=102:

 1 #!/usr/bin/env python
 2 
 3 import sys
 4 import re
 5 
 6 def ip2int(ip) :
 7         ret = 0
 8         match = re.match("(\d*)\.(\d*)\.(\d*)\.(\d*)", ip)
 9         if not match : return 0
10         for i in xrange(4) : ret = (ret << 8) + int(match.groups()[i])
11         return ret
12 
13 def int2ip(ipnum) :
14         ip1 = ipnum >> 24
15         ip2 = ipnum >> 16 & 0xFF
16         ip3 = ipnum >> 8 & 0xFF
17         ip4 = ipnum & 0xFF
18         return "%d.%d.%d.%d" % (ip1, ip2, ip3, ip4)
19 
20 def printrange(startip, endip) :
21         bits = 1
22         mask = 1
23         while bits < 32 :
24                 newip = startip | mask
25                 if (newip>endip) or (((startip>>bits) << bits) != startip) :
26                         bits = bits - 1
27                         mask = mask >> 1
28                         break
29                 bits = bits + 1
30                 mask = (mask<<1) + 1
31         newip = startip | mask
32         bits = 32 - bits
33         print "%s/%d" % (int2ip(startip), bits)
34         if newip < endip : 
35                 printrange(newip + 1, endip)
36 
37 while 1 :
38         line = sys.stdin.readline().strip()
39         if not line : break
40         chars = line.split(" ")
41         print "#%s - %s" % (chars[0], chars[1])
42         ip1 = ip2int(chars[0])
43         ip2 = ip2int(chars[1])
44         printrange(ip1, ip2)

这只是猜测,但似乎是,单个 IPv4 范围内 CIDR 前缀的最大数量是 62 (32*2 - 2),IPv6 的最大数量是 254 (128*2 - 2)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 IP 范围到 CIDR 掩码的转换 的相关文章

随机推荐

  • Linq to Entities 简单组查询

    如何编写 简单 LINQ to Entities 查询 按某些属性对元素进行分组并对它们进行计数 SELECT answernumber count answerID FROM answers WHERE questionID id GRO
  • Android相对布局alignCenter从另一个视图

    我有一个RelativeLayout有两个孩子 他们也是RelativeLayout包含一些按钮和东西 这些子布局不在我的主布局的中心 并且主布局确实包含这两个布局之外的一些其他内容 我希望第一个位于第二个之上 这很简单 只需使用andro
  • 将转义的 XML 实体转换回 UTF-8

    所以我在 XML 文件中得到了这个 UTF 8 字符串 Horrible place 当我将其提供给外部应用程序时 有趣的字符会转义为 XML 实体 Horrible place x2620 x2620 x2620 在 Ruby 中 如何将
  • 用于 JavaScript 逗号分隔数字验证的正则表达式

    我有一个文本框 它可以具有如下值1 or 1 2 or 1 225 345 21 即多个值 但现在我想验证这个输入 toString match 0 9 这是我正在使用的代码 它仅验证正确性 但是当用户输入如下值时会出现一个问题 input
  • 迭代 Queue 是否保证按队列顺序?

    这是否保证始终打印123 Queue
  • 我可以在没有 Visual Studio 的情况下下载 Visual C++ 命令行编译器吗?

    正如标题所示 我不想下载整个 Visual C 安装程序 只想下载 cl exe 以及在 Windows 上编译和链接 C 程序所需的其他程序 如前所述 没有办法做到这一点 您需要下载整个 4 6GB 捆绑包 MS 的部署是个糟糕的事情 然
  • lxml增量XML序列化重复命名空间

    我目前正在使用 lxml 在 Python 中序列化一些较大的 XML 文件 我想为此使用增量编写器 我的 XML 格式严重依赖命名空间和属性 当我运行以下代码时 from io import BytesIO from lxml impor
  • (Windows Git-bash) IntelliJ git bash shell 配色方案与 Docker 搞混了

    Windows Git bash 当我在 IntelliJ 项目中使用 git bash 作为终端时 当我登录到 docker 容器并使用时遇到问题ls 文本突出显示为浅蓝色 并且颜色不会消失 直到我退出 有想过如何纠正这个问题吗 我怀疑这
  • 如何避免 Apache Pulsar 中自动删除不活动主题

    我有一个应用程序 可以在特定主题下向 Pulsar 生成消息 并在完成后关闭该应用程序 同时 不存在任何消费者来阅读该主题 过了一段时间 当我创建一个消费者并想要读取写入的数据时 我发现所有数据都丢失了 因为我编写的主题被 Pulsar 删
  • 将土耳其字母替换为英文字母

    我想用英文字母替换句子中的每个土耳其语字母 我尝试以下功能 title result T rkiye nin en iyi oranlari ile Lider Bahis Sitesi turkish array turkish lett
  • 使 PHP 5.3 中的匿名函数与 PHP 5.2 一起使用

    我有一个匿名函数 现在需要更新它才能与 PHP 5 2 兼容 该函数 如下 接受文本并将每个句子的第一个字母大写 function clean text input output input output preg replace call
  • 本机离子网络状态不适用于我的代码

    我想在所有页面上没有连接和 或连接时显示警报消息 但它不起作用 显示网络类型有效 但没有显示任何警报消息 目标是当APP连接和断开时显示消息 我正在跟进https ionicframework com docs native network
  • d3.json 调用总是获取空数据

    如果我从浏览器向服务器发出此调用 http localhost 8080 api items number all json 或者来自卷曲 curl G http localhost 8080 api items number all js
  • 两条道路交叉口的地理编码

    有谁有一种方法 API 或格式可以输入到 google 地图 API 或任何其他 API 中 以便我可以可靠地获取交叉路口的纬度和经度 例如 如果我输入 13th and Walnut Philadelphia PA 或 13th st a
  • Msi 安装程序从命令提示符传递参数以设置服务登录

    安装程序构建工具 Microsoft Visual Studio 2010 项目安装程序 I am trying to pass username and password for the installer to use for runn
  • 如何在警报对话框中膨胀包含列表视图的布局?

    我在布局中使用带有自定义适配器的列表视图 现在我试图将包含列表的布局带到我的警报对话框中 我尝试使用此代码将不包含列表的简单布局引入警报对话框 并且效果良好 但我无法将包含布局的列表带入警报对话框 AlertDialog Builder d
  • 如何对 Delphi/C++Builder 中的设计时包进行故障排除?

    多年来 我在 Delphi C Builder 的每个版本中一直遇到 IDE 问题 我通常只是重新启动 重新编译等然后继续 然而 我不断看到其他人说 IDE 坚如磐石 我读到很多人说大多数 IDE 问题都是自定义组件问题造成的 我们有几个自
  • 如何使用html2canvas上传屏幕截图?

    Using html2canvas http html2canvas hertzen com 如何将屏幕截图保存到对象 我一直在探索演示 发现生成屏幕截图的函数生成如下 window ready function body html2can
  • C++ 函数不可用

    我有以下文件 cumsum bounded cpp include
  • 从 IP 范围到 CIDR 掩码的转换

    我一直在研究一种算法 用于将 IP 范围转换为 CIDR 表示法中的 IP 列表 此后将作为元组提及 现在 让我困惑的是弄清楚这种转换的最坏情况是什么 对于 IPv4 范围 我可以获得的最大元组数是多少 对于 IPv6 范围 我可以获得的最