Python中的IP范围到CIDR转换?

时间:2014-06-13 22:09:10

标签: python

如果在Python中给定范围的起始和结束IP地址,如何获得表示IP地址范围的CIDR表示法?我可以找到CIDR到IP范围,但找不到相反的代码。

所需输出的示例:

startip = '63.223.64.0'
endip = '63.223.127.255'

return '63.223.64.0/18'

2 个答案:

答案 0 :(得分:13)

您可以使用netaddr模块提供的iprange_to_cidrs。例如:

cidrs = netaddr.iprange_to_cidrs(startip, endip)

以下是官方文档:https://netaddr.readthedocs.io/

答案 1 :(得分:4)

启动Python 3.3捆绑的ipaddress可以提供您想要的。函数summarize_address_range返回一个迭代器,其中包含从您指定的开始,结束的网络:

>>> startip = ipaddress.IPv4Address('63.223.64.0')
>>> endip = ipaddress.IPv4Address('63.223.127.255')
>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(startip, endip)]
[IPv4Network('63.223.64.0/18')]