Написал такой цикл:
l=[] i=0 s=['192.168.1.', '192.168.0.'] while i!=255: i+=1 for x in s: l.append(x+str(i))
l=[] i=0 s=['192.168.1.', '192.168.0.'] while i!=255: i+=1 for x in s: l.append(x+str(i))
odnochlen
А диапазон должен быть целое количество битов в маске подсети?
Если нет - смотри в сторону конвертации ip <-> число.
И ip, оканчивающийся на 255, вполне может быть валидным.
>>> def ip_to_int(ip): ... r = 0 ... for byte_ in ip.split('.'): ... r = r * 256 + int(byte_) ... return r ... >>> ip_to_int('192.168.1.0') <= ip_to_int('192.168.1.15') <= ip_to_int('192.168.1.255') True >>> ip_to_int('192.168.1.0') <= ip_to_int('192.168.1.15') <= ip_to_int('192.168.3.2') True >>> ip_to_int('192.168.1.0') <= ip_to_int('192.168.1.15') <= ip_to_int('192.168.1.2') False >>>
struct.unpack("!L", socket.inet_aton('1.2.3.4'))[0]
from IPy import IP ip=IP('192.168.0.0/20') l=[str(x) for x in ip] '192.168.5.56' in l #проверка вхождения в диапазон
ipaddr кошерней — он вошел в python 3.3 под именем ipaddress
slashНу это некошерно, как оно там с /8 работать будет?
Спасибо большое .) Модуль IPy как раз то, что нужно в моем случае. Благодаря вашим ссылкам наткнулся на него.
Все получается очень просто: