我一直在处理这个问题,但找不到许可。如何使用Python将指定的网络划分为子网
我有一个Python脚本应该得到两个参数 - 网络/ CIDR &一个数字。脚本应将指定的网络划分为多个部分,子网,并显示这些子网的参数,例如网络地址,广播,主机数量。
其实,我目前的代码状态是here,在GitHub上。
我问的原因是堆栈溢出的其他主题,如this,this或this。但是他们都有前缀。我的观点是,例如,./subnet-divider.py 200.100.33.65/26 3
,所以我应该把它分成3个子网。或者./subnet-divider.py 200.100.33.65/26 9
。所以这是一个不同的观点,尽管稍微类似于讨论。
我绕过两个模块 - ipaddress和netaddr。两者都是相似的。有子网发生器,但他们有像prefix
,必要的参数,和count
,这是很好的。
In [22]: s.get_subnet(27, count=3)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-5864cbfc587d> in <module>()
----> 1 s.get_subnet(27, count=3)
/home/simple/Projects/subnet-divider/ip_splitter.py in get_subnet(self, prefix, count)
14 """ . """
15 for ip_network in self.get_available_ranges():
---> 16 subnets = list(ip_network.subnet(prefix, count=count))
17 if not subnets:
18 continue
/usr/local/lib/python3.5/dist-packages/netaddr/ip/__init__.py in subnet(self, prefixlen, count, fmt)
1269
1270 if not 1 <= count <= max_subnets:
-> 1271 raise ValueError('count outside of current IP subnet boundary!')
1272
1273 base_subnet = self._module.int_to_str(self.first)
ValueError: count outside of current IP subnet boundary!
当然,这是正确的。
那么,我该怎么分?要灵活地做到这一点,我不需要前缀,但脚本应该能够将传入的网络分割到指定的子网,3,7,10等等,以达到最大值。
谢谢。