我想了解一些代码如何在https://pythonhosted.org/netaddr/tutorial_01.html上的netaddr Python教程中运行。特别是以下教程。了解Python的netaddr库命令
总结地址和子网
另一个有用的操作列表总结IP 子网和地址组的能力,将它们合并在一起,在可能情况下创建 CIDR子网的最小可能的名单。
您可以在netaddr中使用cidr_merge()函数执行此操作。
首先,我们创建一个IP对象列表,其中包含各个地址和子网的良好组合,以及一些基于字符串的IP 地址值,以实现良好的度量。为了使事情更有趣一些 IPv6地址也被引入。
>>> ip_list = [ip for ip in IPNetwork('fe80::/120')] >>> ip_list.append(IPNetwork('192.0.2.0/24')) >>> ip_list.extend([str(ip) for ip in IPNetwork('192.0.3.0/24')]) >>> ip_list.append(IPNetwork('192.0.4.0/25')) >>> ip_list.append(IPNetwork('192.0.4.128/25')) >>> len(ip_list) 515 >>> cidr_merge(ip_list) [IPNetwork('192.0.2.0/23'), IPNetwork('192.0.4.0/24'), IPNetwork('fe80::/120')]
我与现有的不同选择有点糊涂。 ip_list.extend([str(ip) for ip in IPNetwork('192.0.3.0/24')])
和ip_list.append(IPNetwork('192.0.4.0/25'))
有什么区别?
如果我不想用IPv6(fe80::/120
)开始列表,而是想使用IPv4(192.0.4.0/24
),那么语法是什么。它会像以下那样简单吗?
ip_list = IPNetwork('192.0.4.0/25')
谢谢。
感谢您的好解释。你能告诉我,ip_list.extend(IP网络中的[str(ip)('192.0.3.0/24')])和ip_list.append(IPNetwork('192.0.3.0/24 “))'? – algorhythm
@CMac:为什么不在每个操作在空列表上执行后查看列表?这将清楚地表明'ip_list'存在差异。但是,'cidr_merge()'运行后的结果应该是相同的,即两个列表应该给出'[IPNetwork('192.0.3.0/24')]'。 – mhawke