Зарезервированный IP-адрес Python
Я пытаюсь проверить, пытается ли пользователь назначить зарезервированный адрес. На данный момент мы резервируем первые 5 и последние 5 адресов для будущего использования. То, как я это делаю, очень медленное и не будет эффективно работать в случае переключения ipv6. Есть ли другой способ оптимизировать проверку?
def verify_ip_subnet(ip_address, subnet_address):
new_subnet = subnet_address.split('/')[1].strip()
if int(new_subnet) == 16:
new_vpn_range = []
new_vpn_range.append(subnet_address.split('/')[0].strip())
new_count = 0
for address in ipaddress.ip_network(subnet_address).hosts():
if new_count == 0 or new_count == 1 or new_count == 2 or new_count == 3 or new_count == 4 or new_count == 65531 or new_count == 65532 or new_count == 65533:
new_vpn_range.append(str(address))
new_count += 1
if ip_address in new_vpn_range:
return False
if int(new_subnet) == 24:
new_vpn_range = []
new_vpn_range.append(subnet_address.split('/')[0].strip())
new_count = 0
for address in ipaddress.ip_network(subnet_address).hosts():
if new_count == 0 or new_count == 1 or new_count == 2 or new_count == 3 or new_count == 4 or new_count == 251 or new_count == 252 or new_count == 253:
new_vpn_range.append(str(address))
new_count += 1
if ip_address in new_vpn_range:
return False
Вот пример импорта:
ip_address = '10.8.0.5'
subnet_address = '10.8.0.0/16'
Другой способ - использовать num_addresses, в этом случае я могу проверить первые 5 зарезервированных, однако, если я попытаюсь проверить последние 5, индекс выйдет за пределы допустимого диапазона. Вот пример, как я их проверяю:
ip_check = ipaddress.ip_network(subnet_address)
for i in range(6):
if str(ip_check[i]) == ip_address:
return False
last_address = ip_check.num_addresses
print(last_address)
print(ip_check[last_address])