我必须在一个特定的网络中随机选择三个子网。网络本身总是有一个/24子网掩码(我总是使用10.10.127.0进行测试)。这些随机子网可以有一个/25子网掩码,一直到/29。现在最难破解的难题是子网的重叠。下面您看到的代码可能写得不好,但它确实起到了作用。在
但是只有一个例外:当选择前两个不重叠的子网时,其中一个在10.10.127.0/25范围内,另一个在10.10.127.128/25范围内,每当选择的第三个子网有/25子网掩码时,我就会得到一个无限循环。当然,前面选择的两个子网都在两个/25子网范围内。在
我要问你们的问题是:我如何解决这个问题并改进代码?如前所述,代码看起来写得不好,但是我不是一个好的程序员,我仍在尽可能多地学习来提高我的技能。在
import random
from netaddr import *
import itertools
def getRandomIP(networkIp=raw_input("Enter the desired network: ")):
chosenSubnets = []
network = networkIp + '/24'
ip = IPNetwork(network)
print ip
def subnetOverlap(randomSubnet1, randomSubnet2):
return (randomSubnet1.first <= randomSubnet2.last and
randomSubnet2.first <= randomSubnet1.last)
for randomNumber in random.sample(range(25, 30), 3):
subnetList = list(ip.subnet(randomNumber))
restartLoop = True
while restartLoop:
restartLoop = False
for subnet in random.sample(subnetList, 1):
chosenSubnets.append(subnet)
for pair in itertools.combinations(chosenSubnets , 2):
if subnetOverlap(IPNetwork(pair[0]),
IPNetwork(pair[1])) == True:
print 'OVERLAP'
chosenSubnets.pop()
restartLoop = True
print chosenSubnets
break
print subnet
getRandomIP()
我试图模仿你的初衷。具体来说,我
具体来说,可以突出显示代码中的一些更改:
希望有帮助。在
相关问题 更多 >
编程相关推荐