Вы можете использовать функцию строкового формата для преобразования чисел в двоичные. Я сделал эту функцию:
def ip2bin(ip):
octets = map(int, ip.split('/')[0].split('.')) # '1.2.3.4'=>[1, 2, 3, 4]
binary = '{0:08b}{1:08b}{2:08b}{3:08b}'.format(*octets)
range = int(ip.split('/')[1]) if '/' in ip else None
return binary[:range] if range else binary
Это вернет двоичный диапазон IP или IP, поэтому вы можете использовать его для проверки, находится ли IP в диапазоне:
>>> ip2bin('255.255.127.0')
'11111111111111110111111100000000'
>>> ip2bin('255.255.127.0/24')
'111111111111111101111111'
>>> ip2bin('255.255.127.123').startswith(ip2bin('255.255.127.0/24'))
True