【发布时间】:2023-03-03 17:05:01
【问题描述】:
我遇到的问题是,我基本上想查找 BGP 聚合地址(例如:10.76.32.0 255.255.240.0)和同一路由器上的所有网络命令(例如:10.76.32.0 255.255.255.0, 10.76.33.0 255.255.255.0)之间是否有任何空闲子网
在上面的示例中,10.76.34.0 -> 10.76.47.255 将是免费的。
我正在考虑通过将 IP 地址和子网掩码转换为二进制并减去这种方式来解决这个问题。
为了简单起见,我将把这个例子保留为十进制,但这样做会给我带来以下问题:假设我有一个从 1 到 250 的范围,我从中减去一个从 20 到 23 的较小范围,我希望最终得到 1 到 19 和 24 到 250 的范围。
使用范围命令并不能真正给我预期的结果,虽然我可以创建一个包含范围内每个项目的列表并减去另一个包含项目子集的列表,但在我看来它可能不会拥有可能包含数万个元素的列表是个好主意。
荣誉
【问题讨论】:
-
您尝试过 ipaddress — IPv4/IPv6 操作库吗?它有许多有趣的功能。 docs.python.org/3/library/ipaddress.html
-
我同意 Pancho,我会使用 ip 地址库,因为我看不到您的范围逻辑非常健壮。另外,您如何获得
10.76.34.0 -> 10.79.47.255?10.76.32.0/20中的最后一个地址是10.76.47.254 -
@Panch Jay 我做到了,我只是想说我没有找到任何方法来帮助解决我的问题,但又去检查了一次以确保......我发现'address_exclude(network)' 完成了我想要完成的工作。感谢您的回答。不幸的是,我认为我不能将两个答案标记为正确,而 elethan 首先回答了 :(
-
@PadraicCunningham 哎呀,错字(79 而不是 76)
标签: python networking range subnet