Какой самый быстрый способ проверить, принадлежит ли IP-адрес списку IP-подсетей?
Допустим, у нас есть следующий список IP-подсетей:
ip_ranges = [
'192.168.12.0/19',
'209.102.103.0/20',
'104.105.106.0/24'
]
и Теперь я хочу проверить, принадлежат ли IP 209.102.103.0
списку ip_ranges
.
Я попробовал следующий код:
#!/usr/bin/env python3
from __future__ import unicode_literals
import socket
import sys
from netaddr import *
from ipaddress import ip_network, ip_address
fun check_ip(ip):
ip_ranges = [
'192.168.12.0/19',
'209.102.103.0/20',
'104.105.106.0/24'
]
networks = [ip_network(range) for range in ip_ranges]
for n in networks:
if ip_address(ip) in n:
print("Yes")
domain = "google.com"
ip = socket.gethostbyname(domain)
check_ip(ip)
К сожалению, всегда получаю следующее исключение ошибка.
ipaddress.AddressValueError: 'xx.xxx.xxx.xxx' does not appear to be an IPv4 or IPv6 address. Did you pass in a bytes (str in Python 2) instead of a unicode object?
Есть идеи, в чем здесь проблема?