3

我想将我的 python 脚本中特定范围的 cidr 更改为另一个 cidr,就像我有范围一样:

8.0.0.0/8
9.0.0.0/9

我想通过我的 python 脚本将这个 cidr 分配给 /10 cidr 并显示这样的结果

8.0.0.0/10
8.64.0.0/10
8.128.0.0/10
8.192.0.0/10
9.0.0.0/10
9.64.0.0/10

我知道 cidr /8 应该转换为 4 cidr /10

有什么帮助吗?我是网络新手,我根本不知道如何做到这一点或如何通过 python 对其进行编码。

谢谢

4

2 回答 2

7

我建议使用该netaddr模块。

请参阅其文档,尤其是超网和子网部分。

例子:

from netaddr import IPNetwork

net = IPNetwork('8.0.0.0/8')

subnets = net.subnet(10)
for subnet in subnets:
    print subnet

输出:

8.0.0.0/10
8.64.0.0/10
8.128.0.0/10
8.192.0.0/10

请注意,它net.subnet()返回一个生成器对象。所以你必须迭代它,一旦你这样做,它就会被耗尽。如果您不希望这样,请使用list(net.subnet()).

于 2014-03-25T20:59:24.483 回答
2

在 Python 3.3+ 中,使用@Thomas Orozco ipaddress模块建议的:

#!/usr/bin/env python3
import ipaddress
import fileinput

for line in fileinput.input():
    for subnet in ipaddress.ip_network(line.strip()).subnets(new_prefix=10):
        print(subnet)

例子:

$ ./convert-cidr input.txt

输出

8.0.0.0/10
8.64.0.0/10
8.128.0.0/10
8.192.0.0/10
9.0.0.0/10
9.64.0.0/10
于 2014-03-25T21:18:51.977 回答