Найти - Пользователи
Полная версия: Генератор диапазона ip адресов
Начало » Python для новичков » Генератор диапазона ip адресов
1 2
slash
Нужно сгенерить список 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))
На деле диапазонов несколько и список будет много больше. Только начал изучать питон, поэтому пока ничего лучше не придумал. Возможно, есть более правильный способ или модуль, который работает с такими типами данных как ip-адреса. Чтобы можно было указать просто 192.168.1.0/20, например, и получить список.
odnochlen
А диапазон должен быть целое количество битов в маске подсети?

Если нет - смотри в сторону конвертации ip <-> число.

И ip, оканчивающийся на 255, вполне может быть валидным.
slash
odnochlen
А диапазон должен быть целое количество битов в маске подсети?

Если нет - смотри в сторону конвертации ip <-> число.

И ip, оканчивающийся на 255, вполне может быть валидным.

Мне нужно проверить вхождение ip в диапазон, что-то вроде:
print ‘ok’ if 200 in range(300) else ‘not in list’
Только range это диапазон ip адресов.
Было бы здорово сделать так print ‘ok’ if 192.168.1.15 in range(192.168.1.0-192.168.1.255) else ‘not in list’, но так не получится конечно
Вот и думаю как бы это сделать, ip это и не int() и не float().. вот
EBFE

>>> 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
>>>
odnochlen
У меня была та же идея, что у EBFE.

Вариантов тут стопицот
struct.unpack("!L", socket.inet_aton('1.2.3.4'))[0]
s0rg
http://code.google.com/p/ipaddr-py/
?
fata1ex
http://python.su/forum/topic/14570/
slash
Спасибо большое .) Модуль 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  #проверка вхождения в диапазон
Еще раз спасибо всем за помощь
Андрей Светлов

ipaddr кошерней — он вошел в python 3.3 под именем ipaddress

odnochlen
slash
Спасибо большое .) Модуль IPy как раз то, что нужно в моем случае. Благодаря вашим ссылкам наткнулся на него.
Все получается очень просто:
Ну это некошерно, как оно там с /8 работать будет?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB