python - как проверить, принадлежит ли IP-адрес списку IP-подсетей - PullRequest
2 голосов
/ 13 апреля 2020

Какой самый быстрый способ проверить, принадлежит ли 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?

Есть идеи, в чем здесь проблема?

...