Comments 12
Только не понятен смыл генерации IP адресов без учета хотя бы выделенных значений для локальных сетей…
Да и 4 рандома — крайне сомнительное решение. При достаточно большом наборе адресов будут дубли (смотрим бездей парадокс), не говоря уже о попытке создать список всех возможных IP адресов. В таком списке никогда всего диапазона не получить указанным методом.
Как казалось бы — в параметрах в первую очередь должна быть маска подсети в которой будут генерироваться адреса.
Да и 4 рандома — крайне сомнительное решение. При достаточно большом наборе адресов будут дубли (смотрим бездей парадокс), не говоря уже о попытке создать список всех возможных IP адресов. В таком списке никогда всего диапазона не получить указанным методом.
Как казалось бы — в параметрах в первую очередь должна быть маска подсети в которой будут генерироваться адреса.
+3
Что-то прямо вспомнилось, как в универе подсети считали методом квадратов на бумажке.
0
Представление адреса компьютера по протоколу IPv4 являет собой четыре десятизначных числа (от 0 до 255), разделённых точками. Именно такие десятичные ip-адреса мы и будем генерировать и записывать текстовый файл.У вас неправильно генерируются IP адреса.
0
У генератора слишком много сайдэффектов. И какая разница, быстрее выполняется for, чем while? Пишите понятный код, а скорость придет естественным образом. Сравните ваш генератор и:
import logging
from itertools import islice
from pathlib import Path
from random import randrange
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def ips():
while True:
a = randrange(256)
b = randrange(256)
c = randrange(256)
d = randrange(256)
yield f'{a}.{b}.{c}.{d}'
def write_out(filename, lines):
with Path(filename).open('a', encoding='utf8') as fp:
for line in lines:
fp.write(f'{line}\n')
write_out('ip-addresses.txt', islice(ips(), 100))
logger.info('Complete!')
Теперь можно и поддержку подсетей в ips() реализовать, и ничего не сломается, и https://docs.python.org/3/library/ipaddress.html использовать, да и вообще, немного чище все стало :)
+2
f.write(str(a)+'.'+str(b)+'.'+str(c)+'.'+str(d)+port+'\n')
Вас Borland Delphi покусал?
f = open('ip-addresses.txt', 'a', encoding='utf-8')
Контекстные менеджеры не нужны.
однако для начальной практики по Python сойдет и такой простой генератор
Не пойдет, потому что это скорее практическое руководство как НЕ надо делать… уж простите за такую резкую критику.
+2
отличная статья, так держать!
0
for n in range(amount): a = randint(0,255) b = randint(0,255) c = randint(0,255) d = randint(0,255)
У меня смутные подозрения о валидности некоторых адресов.
0
У Вас собственно генерация идет в цикле. И писать процент в каждой новой строке реально не комильфо. В одну строчку будет симпатичнее и нагляднее. Скажем, хотябы так:
def progressbar(position, max):
total_points = 50 # длина прогрессбара, выберите по вкусу
current_points = int(position / max * total_points)
percent = int(current_points / total_points * 100)
print(f'\r[ {"█" * current_points}{"░" * (total_points-current_points)} ] {percent}%', end='', flush=True)
0
Замечательный пример как делать не надо.
0
Но зачем городить такой огород ради генерации рандомных адресов, не несущих никакого практического смысла?
0
Используем цикл for, так как он выполняется гораздо быстрее while'a.
Более эффективно будет, если вы выведете постоянное открытие и закрытие файла из тела цикла. Прям в разы наверное.
реализуем простенький прогресс-бар.
Сразу хочу сказать: Tkinter не подойдёт для этой цели.
Какая интрига… Заставили в 5 утра за комп сесть.
Если сделать так:
def generator(amount, port=''):
...
for n in range(amount):
...
prc = int(n//(amount/100.0))
frame.update()
prgs.set(prc)
...
prgs.set(100)
print('Success!')
...
prgs = IntVar()
pb = ttk.Progressbar(frame, orient='horizontal', length=320, mode='determinate', variable=prgs)
pb.grid(row=4, column=0, columnspan = 8)
root.mainloop()
то все получится. Можно еще времени выиграть на генераторе, прорядив обновление прогрессбара только при увеличении процентов.
0
Sign up to leave a comment.
Пишем генератор ip-адресов на Python со свистелками, дуделками и графической оболочкой Tkinter