我想了解一些代碼如何在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