Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 25, 2010 11:28:34

evilempirer
От:
Зарегистрирован: 2010-06-07
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм генерации диапазона ip адресов, требуется помощь в коде

Решил все таки изобрести свой велосипед

def input_data():
input_ip = raw_input ('Enter range of ip (x.x.x.x-x.x.x.x): ')
return input_ip.split('-')

def range_maker(input_ip):
s_ip = input_ip[0]
e_ip = input_ip[1]
i = 0
while True:
try:
if s_ip.split('.')[i]<e_ip.split('.')[i]:
raz = int(e_ip.split('.')[i])-int(s_ip.split('.')[i])
break
except: break
i+=1

while raz>0:
ip_list = [str_s_ip[:-1]+str(el) for el in range(1,254)]
otc = int(s_ip.split('.')[i])+1 #Тут получаем новое значение i-ого октета n+1 тут это 11
#как тут сформировать новое значение s_ip = '10.10.11.0' стркового типа?
raz-=1
Затык собственно вот в чем в первом цикле находится разница между ip адресами (например на входе: 10.10.10.0-10.10.20.0 ) то разница 10, а октет в котором разница выходит из значения i (это для списка). Соответственно во втором цикле происходит непосредственно генерация списка, но как мне увеличить в строковом типе s_ip.



Отредактировано (Окт. 25, 2010 11:29:22)

Офлайн

#2 Окт. 25, 2010 13:19:06

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм генерации диапазона ip адресов, требуется помощь в коде

гхм… какой сложный код. Я его не понял. Если я правильно понял вашу задачу, то вот:

def input_data():
input_ip = raw_input ('Enter range of ip (x.x.x.x-x.x.x.x): ')
return input_ip.split('-')

def ipgen(oct1,oct2,oct3,oct4):
for o1 in xrange(oct1[0],oct1[1]+1):
for o2 in xrange(oct2[0],oct2[1]+1):
for o3 in xrange(oct3[0],oct3[1]+1):
for o4 in xrange(oct4[0],oct4[1]+1):
yield '%s.%s.%s.%s' % (o1,o2,o3,o4)

def range_maker(ip1,ip2):
return ipgen( [ i for i in zip( ip1.split('.'), ip2.split('.') ) ] )
на основании моей функции вот отсюда - http://www.python.su/forum/viewtopic.php?id=6238
Специально взял самый читаемый вариант.

Проверку того, что первый ip должен быть меньше второго(и прочие плюшки) сами прикрутите.



Отредактировано (Окт. 25, 2010 13:20:08)

Офлайн

#3 Окт. 25, 2010 13:35:57

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Алгоритм генерации диапазона ip адресов, требуется помощь в коде

а чем, просто интересно, мой вариант не нравится?

ip2int = lambda ip: reduce(lambda a,b: a*256+b, map(int, ip.split('.')), 0)
int2ip = lambda i: "%s.%s" % (int2ip(i/256), i%256) if i/256 else i%256

for ip in xrange(ip2int(startip),ip2int(endip)+1):
print int2ip(ip)



Офлайн

#4 Окт. 25, 2010 15:47:39

evilempirer
От:
Зарегистрирован: 2010-06-07
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм генерации диапазона ip адресов, требуется помощь в коде

2 zheromo и Alex2ndr: Всем спасибо, буду пользовать ваши варианты, велосепидировать надоело =)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version