En Python 3.3+, puede utilizar ipaddress módulo:
>>> import ipaddress
>>> ipaddress.ip_address('192.0.43.10') in ipaddress.ip_network('192.0.0.0/16')
True
Si su instalación de Python es mayor que 3.3, se puede utilizar this backport.
Si desea evaluar una gran cantidad de direcciones IP de esta manera, es probable que desea calcular la máscara de red por adelantado, como
n = ipaddress.ip_network('192.0.0.0/16')
netw = int(n.network_address)
mask = int(n.netmask)
Entonces, para cada dirección, calcular el binario representación con uno de
a = int(ipaddress.ip_address('192.0.43.10'))
a = struct.unpack('!I', socket.inet_pton(socket.AF_INET, '192.0.43.10'))[0]
a = struct.unpack('!I', socket.inet_aton('192.0.43.10'))[0] # IPv4 only
Por último, sólo tiene que comprobar:
in_network = (a & mask) == netw
Realmente no está claro lo que estás preguntando. ¿Qué estás eligiendo, el IP o la subred? ¿La pregunta es "cómo puedo saber si una dirección IP está en una subred en particular?" ¿O que? –