繁体   English   中英

如何使用Python将指定的网络划分为子网

[英]How to split specified network into subnets using Python

我一直在研究这个问题,但找不到许可。

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

其实,我现在的状态代码是在这里 ,在GitHub上。

我问的原因是Stack Overflow还有其他主题,例如thisthisthis 但是它们都有前缀。 我的观点是,例如./subnet-divider.py 200.100.33.65/26 3 ,因此我应该将其划分为3个子网。 ./subnet-divider.py 200.100.33.65/26 9 所以这是不同的观点,尽管与所讨论的略有相似。

我穿过这两个模块周围- ip地址netaddr中 两者是相似的。 有用于子网划分的生成器,但是它们具有诸如prefix ,required和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等。

谢谢。

我想我自己解决了这个问题。 只是为了分裂。

此消息有所帮助。 因此,我们需要对和数字进行除法。 我们可以计算子网的前缀长度。

该代码在回购中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM