Зарезервированный 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])

0 ответов

Другие вопросы по тегам