2017-05-27 65 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幫助。所以,我們有一對&數字來劃分。我們可以計算子網的前綴長度。

該代碼在回購。