2017-05-27 34 views
0

我一直在处理这个问题,但找不到许可。如何使用Python将指定的网络划分为子网

我有一个Python脚本应该得到两个参数 - 网络/ CIDR &一个数字。脚本应将指定的网络划分为多个部分,子网,并显示这些子网的参数,例如网络地址,广播,主机数量。

其实,我目前的代码状态是here,在GitHub上。

我问的原因是堆栈溢出的其他主题,如this,thisthis。但是他们都有前缀。我的观点是,例如,./subnet-divider.py 200.100.33.65/26 3,所以我应该把它分成3个子网。或者./subnet-divider.py 200.100.33.65/26 9。所以这是一个不同的观点,尽管稍微类似于讨论。

我绕过两个模块 - ipaddressnetaddr。两者都是相似的。有子网发生器,但他们有像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等等,以达到最大值。

谢谢。

回答

0

我想我自己解决了这个案例。只是分裂。

This message帮助。所以,我们有一对&数字来划分。我们可以计算子网的前缀长度。

该代码在回购。