【发布时间】:2015-05-09 07:46:26
【问题描述】:
我正在尝试编写一个脚本,它将比 /24 更大(不大于 /16)的子网分解为 /24 子网。 例如:10.10.10.0/23 应该给我 10.10.10.0/24 和 10.10.11.0/24
我的逻辑是首先扫描 CIDR 掩码。如果小于 24,则从 24 中减去该数字(假设 x)给出 /24s 的总数,然后是 IP x 次和 /24 的 1 到第三个八位字节。
例如:10.10.8.0/22
if 22 < 24
x = 24-22 = 2
total # of /24s = 2^x = 4
So output :
10.10.8.0/24
10.10.9.0/24
10.10.10.0/24
10.10.11.0/24
我不知道如何只为第三个八位位组编码/修改字符串,并且只在第三个八位位组中加 1。
我正在考虑创建所有第三个八位字节值的列表并重新构建 IP。但是,如果那里有更简单的方法,那将对我有很大帮助!
谢谢!
【问题讨论】:
-
我不是在这里要求代码,只是一个方向/几个关于如何接近的链接应该很好。谢谢!
-
也许尽量不要使用小数点符号,而是二进制(或十进制,如果你喜欢)之一。如果您有一个
IP/N子网,您想要生成从 0 到2^(24 - N) - 1的所有 24 位数字,将它们添加到您的基本 IP 地址,并且您自己获得了/24子网的所有前缀。然后,您可以根据需要将它们转换回小数点表示法。 -
@Carsten 但是我仍然会有“点”如果我转换为二进制,这些点不会消失,例如:192.168.1.1 == 11000000.10101000.00000001.00000001
-
这些点只是作为您和必须输入这些地址的人类同胞的分隔符。字符串表示“192.168.1.1”与二进制表示“11000000101010000000000100000001”相同,与十进制表示“3232235777”相同。
-
@Carsten .. 呃,我的错误.. 人为错误(第 8 层问题)感谢您的想法。我认为这种方式绝对有可能
标签: python python-2.x netmask