簡體   English   中英

需要分解IP子網

[英]Need to break down a IP subnet

我正在嘗試編寫一個腳本,它將比/ 24更大(不大於/ 16)的子網分解為/ 24子網。 例如:10.10.10.0/23應該給我10.10.10.0/24和10.10.11.0/24

我的邏輯是首先掃描CIDR掩碼。 如果小於24,則從24減去該數字(假設x)給出/ x的總數,然后是IP x次和/ 24的1到3個八位字節。

例如:10.10.8.0/22

if 22 < 24 
x = 24-22 = 2
total # of /24s = 2^x = 4
So output :
10.10.8.0/24
10.10.9.0/24 
10.10.10.0/24
10.10.11.0/24

我不確定如何僅為第三個八位字節編碼/修改字符串,並且僅將第三個八位字節添加1。

我正在考慮創建所有第三個八位字節值的列表並重新構建IP。 但是,如果有一個更簡單的方法,這將幫助我很多!

謝謝 !

看一下netaddr包。 它已經內置了對理解網絡掩碼的支持,並且能夠生成任何所需長度的子網列表:

>>> n = netaddr.IPNetwork('10.10.8.0/22')
>>> list(n.subnet(24))
[IPNetwork('10.10.8.0/24'), IPNetwork('10.10.9.0/24'), IPNetwork('10.10.10.0/24'), IPNetwork('10.10.11.0/24')]
>>> [str(sn) for sn in n.subnet(24)]
['10.10.8.0/24', '10.10.9.0/24', '10.10.10.0/24', '10.10.11.0/24']

從Python 3.3開始,這個功能也可以在新的內置ipaddress模塊中使用。

如果您使用的是Python 3.3或更高版本,則可以使用ipaddress模塊 使用subnets方法 ,您可以在一行中執行此操作:

>>> list(ipaddress.ip_network('10.10.8.0/22').subnets(new_prefix=24))
[IPv4Network('10.10.8.0/24'), IPv4Network('10.10.9.0/24'), IPv4Network('10.10.10.0/24'), IPv4Network('10.10.11.0/24')]

轉換為字符串是微不足道的。 剛剛施展到str

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM