Ни как не могу понять как это реализовать , можете подсказать ?

py.user.nextТо есть я пишу 255.255.255.0 - всё ок
Используй регулярное выражение.
alexbestalexЧерез регулярное выражение ты проверяешь, что это вообще адрес (4 числа от 0 до 255), а потом в регулярном выражении у тебя есть группы, в которых и хранятся числа, ты их преобразываешь в целые и потом эти целые проверяешь на величину.
Это всё можно сделать с помощью модуля re ?
>>> import re >>> >>> def test_ipmask(s): ... pat = r'^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$' ... match = re.search(pat, s) ... if match is not None: ... a, b, c, d = map(int, match.groups()) ... if (0 <= a <= 255 and ... 0 <= b <= 255 and ... 0 <= c <= 255 and ... 0 <= d <= 255): ... return True ... return False ... >>> test_ipmask('123.123.123.123') True >>> test_ipmask('123.1234.123.123') False >>>
py.user.nextда вы шутите? где вы такие маски видели?
>>> test_ipmask('123.123.123.123')
True
1- й октет.
Если октет в (0,128,192,224,240,248,252,254) :
смотрим остальные октеты.
Если хотябы один из остальных октетов больше 0:
это не маска.
Иначе :
это маска .
ИначеЕсли в первом октете 255:
GOTO "1- й октет" но только для второго октета.
Иначе :
это не маска
PEHDOM
если у тебя идет N единиц подряд, потом 32-N нулей или все нули или все единицы то это маска. Все остальное не маска.
…1- й октет.
Если октет в (0,128,192,224,240,248,252,254) :
смотрим остальные октеты.
Если хотябы один из остальных октетов больше 0:
это не маска.
Иначе :
это маска .
ИначеЕсли в первом октете 255:
GOTO "1- й октет" но только для второго октета.
Иначе :
это не маска
>>> import ipaddress >>> >>> ipaddress.IPv4Network('192.168.0.1/0.0.0.240') IPv4Network('192.168.0.1/32') >>> >>> bin(240) '0b11110000' >>>
py.user.nextэто обратная маска, или маска хоста.
192.168.0.1/0.0.0.240
PEHDOMПо твоему-то алгоритму получилось, что это не маска.
это обратная маска, или маска хоста.
py.user.nextтак это и не маска подсети, что тут непраивльно?
По твоему-то алгоритму получилось, что это не маска.
PEHDOMНе видишь, что встроенный модуль пишет, что это маска?
так это и не маска подсети, что тут непраивльно?
>>> ipaddress.IPv4Network('192.168.0.1/0.0.0.238') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.3/ipaddress.py", line 1443, in __init__ % addr[1]) ipaddress.NetmaskValueError: '0.0.0.238' is not a valid netmask >>>
PEHDOMНу, это так устоялось просто исторически, но это не факт, что можно только так маски применять. Допустим, октет - да, он не может за пределами 0-255 значение иметь, а вот множество адресов вполне можно получить по любой маске. Просто исторически приняли, что она должна быть вот такой именно, так как сами сети определяются исторически определённым образом. Никогда не думал, почему выбрали именно 192.168? Почему выбрали именно эти числа? Ответа нет, просто исторически так сложилось.
это же азы