Форум сайта python.su
0
Нужно сгенерить список Ip адресов. Например, имеется диапазон 192.168.0.0-192.168.1.255
Написал такой цикл:
l=[] i=0 s=['192.168.1.', '192.168.0.'] while i!=255: i+=1 for x in s: l.append(x+str(i))
Отредактировано slash (Июль 29, 2012 14:27:35)
Офлайн
14
А диапазон должен быть целое количество битов в маске подсети?
Если нет - смотри в сторону конвертации ip <-> число.
И ip, оканчивающийся на 255, вполне может быть валидным.
Отредактировано odnochlen (Июль 29, 2012 15:04:38)
Офлайн
0
odnochlen
А диапазон должен быть целое количество битов в маске подсети?
Если нет - смотри в сторону конвертации ip <-> число.
И ip, оканчивающийся на 255, вполне может быть валидным.
Офлайн
20
>>> 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 >>>
Отредактировано EBFE (Июль 29, 2012 17:27:07)
Офлайн
14
У меня была та же идея, что у EBFE.
Вариантов тут стопицот
struct.unpack("!L", socket.inet_aton('1.2.3.4'))[0]
Офлайн
25
Офлайн
52
Офлайн
0
Спасибо большое .) Модуль IPy как раз то, что нужно в моем случае. Благодаря вашим ссылкам наткнулся на него.
Все получается очень просто:
from IPy import IP ip=IP('192.168.0.0/20') l=[str(x) for x in ip] '192.168.5.56' in l #проверка вхождения в диапазон
Офлайн
14
ipaddr кошерней — он вошел в python 3.3 под именем ipaddress
Офлайн
14
slashНу это некошерно, как оно там с /8 работать будет?
Спасибо большое .) Модуль IPy как раз то, что нужно в моем случае. Благодаря вашим ссылкам наткнулся на него.
Все получается очень просто:
Офлайн