Python中的IP范围到CIDR转换?

Chr*_*all 9 python

在Python中,如何根据范围的起始和结束IP地址获取表示一系列IP地址的CIDR表示法?我可以找到CIDR到IP范围,但无法找到反向的任何代码.

所需输出的示例:

startip = '63.223.64.0'
endip = '63.223.127.255'

return '63.223.64.0/18'
Run Code Online (Sandbox Code Playgroud)

ρss*_*ρss 13

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

cidrs = netaddr.iprange_to_cidrs(startip, endip)
Run Code Online (Sandbox Code Playgroud)

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

  • 以下是在Python3中执行此操作的方法:从ipaddress导入ip_address,summary_address_range;开始,结束= ip_address(startip),ip_address(endip); 返回summary_address_range(开始,结束)。 (2认同)
  • 整理@JJC对`python 2.7`的回答....................................... .................................................. ........```来自ipaddress import ip_address,summarize_address_range; summarize_address_range(ip_address(unicode(startip)),ip_address(unicode(endip)))``` (2认同)

Mic*_*elB 9

从Python 3.3开始,捆绑的ipaddress可以提供您想要的。函数summary_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')]
Run Code Online (Sandbox Code Playgroud)