从IP范围转换为CIDR掩码

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

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

我正在使用以下Python脚本的修改过的C版本(不是递归的):

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 <> 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 endip) or (((startip>>bits) <> 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)。