Найти - Пользователи
Полная версия: Алгоритм генерации диапазона ip адресов, требуется помощь в коде
Начало » Python для новичков » Алгоритм генерации диапазона ip адресов, требуется помощь в коде
1
evilempirer
Решил все таки изобрести свой велосипед
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.
Alex2ndr
гхм… какой сложный код. Я его не понял. Если я правильно понял вашу задачу, то вот:
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 должен быть меньше второго(и прочие плюшки) сами прикрутите.
zheromo
а чем, просто интересно, мой вариант не нравится?

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)
evilempirer
2 zheromo и Alex2ndr: Всем спасибо, буду пользовать ваши варианты, велосепидировать надоело =)
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