Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456

Сетевой CIDR калькулятор

05.06.2019, 20:41. Показов 6672. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня.

Можете подсказать, как рассчитать первый и последний IP адрес(помимо 0 и 255) в указанной сети, а то я не смог:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    ip1, ip2 = request.query.get('name1', ''), request.query.get('name2', '')
 
    ipadr0 = '192.168.'+ip1+'.'+ip2
    ipadr = ipadr0.split('.')
 
    mask2= request.query.get('name3', '')
    mask1 = mask2 if mask2 else ''
    cidr = int(mask1)
 
    mask = [0, 0, 0, 0]
    for i in range(cidr):
        mask[i/8] = mask[i/8] + (1<<(7-i%8))
 
    net = []
    for i in range(4):
        net.append(int(ipadr[i]) & mask[i])
 
    num = 32-cidr
    num = 2**num-2
 
    net = '.'.join(map(str, net))
 
    ipadr0 = net+' / '+mask1
    mask = '.'.join(map(str, mask))
    ipnum = num
 
    netstart = ''
    netend = ''
работает все, кроме вычисления первого и последнего действующего IP(кроме броадкаста и сети)
Подскажите логику для вычисления этих данных.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2019, 20:41
Ответы с готовыми решениями:

Сетевой калькулятор
Всем привет! Подскажите плз как в одном и том же контракте произвести разные действия(+, -, /, *) с двумя числами. Желательно код...

Бесклассовая маршрутизация CIDR
Добрый день. Подскажите пожалуйста,по какому принципу решаются подобные задачи:для организации, которая имеет 260 хостов, достаточно будет...

ARP scanner для сегмента сети с CIDR /23
Надобно написать сканер, который бы опрашивал все IP адреса заданного диапазона, и строил табличку соответствия маков айпишникам. Также...

5
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456
07.06.2019, 22:47  [ТС]
из примера, откуда взял расчет маски, нашел расчет броадкаст адреса.

Python
1
2
3
4
broad = list(net)
brange = 32 - cidr
for i in range(brange):
    broad[3 - i/8] = broad[3 - i/8] + (1 << (i % 8))
подскажите, как из него вычесть 1 без преобразования в бинарный вид.
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456
14.06.2019, 20:38  [ТС]
пусть и костыль с двойным преобразованием... но работает:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    ip1, ip2 = request.query.get('name1', ''), request.query.get('name2', '')
    ipadr0 = '192.168.'+ip1+'.'+ip2
    ipadr = ipadr0.split('.')
 
    mask2= request.query.get('face10', '')
    mask1 = mask2 if mask2 else ''
    cidr = int(mask1)
 
    mask = [0, 0, 0, 0]
    for i in range(cidr):
        mask[i/8] = mask[i/8] + (1<<(7-i%8))
 
    net = []
    for i in range(4):
        net.append(int(ipadr[i]) & mask[i])
 
    num = 32-cidr
    num = 2**num
 
    network = '.'.join(map(str, net))
    ipadr0 = network+' / '+mask1
    ipnum = str(num)
    mask = '.'.join(map(str, mask))
 
    ip = network.split(".")
    net2bin = '{0:08b}{1:08b}{2:08b}{3:08b}'.format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3]))
    net2bin = int(net2bin, 2)
 
    nstart = int(net2bin + 1)
    nend = net2bin + int(ipnum)
 
    nstart = bin(nstart)[2:]
    nstart = [nstart[i:i+8] for i in range(0, len(nstart), 8)]
    nstart = '.'.join(map(str, nstart))
    nstart = nstart.split('.')
    netstart = []
    for f in range(4):
        netstart.append(int(nstart[f], 2))
    netstart = '.'.join(map(str, netstart))
 
    nend = bin(nend)[2:]
    nend = [nend[i:i+8] for i in range(0, len(nend), 8)]
    nend = '.'.join(map(str, nend))
    nend = nend.split('.')
    netend = []
    for f in range(4):
        netend.append(int(nend[f], 2))
    netend = '.'.join(map(str, netend))
работает и ладно.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.06.2019, 09:51
Лучший ответ Сообщение было отмечено Серый_Ветер как решение

Решение

Python
1
2
3
4
5
6
7
8
from ipaddress import IPv4Network
 
ip = '192.168.9.0'
mask = '255.255.255.0'
 
net = IPv4Network((ip, mask))
hosts = list(net.hosts())
print(hosts[0], hosts[-1])
0
 Аватар для Серый_Ветер
21 / 21 / 12
Регистрация: 09.01.2013
Сообщений: 456
15.06.2019, 11:12  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Python
1
from ipaddress
если бы я мог импортировать эту библиотеку, я бы эту тему не создавал. Дома у меня она стоит и работает, когда проверял, что можно сделать.

а там где нужно - низзя, питон 2.7 повереный и левые либы запрещены к установке, пользоваться только тем что есть и все.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.06.2019, 11:34
https://github.com/phihag/ipad... address.py

Добавлено через 17 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ip = '192.168.9.0'
mask = '255.255.255.0'
 
def ip2int(ip):
    a, b, c, d = [int(i) for i in ip.split('.')]
    return (a << 24) + (b << 16) + (c << 8) + d
 
def int2ip(i):
    return '%d.%d.%d.%d' % (
        (i & 0b11111111000000000000000000000000) >> 24,
        (i & 0b00000000111111110000000000000000) >> 16,
        (i & 0b00000000000000001111111100000000) >> 8,
        i & 0b00000000000000000000000011111111
        )
 
 
ip_int = ip2int(ip)
mask_int = ip2int(mask)
print(bin(ip_int))
print(bin(mask_int))
 
print('start: ', int2ip(ip_int+1))
print('end: ', int2ip(ip_int|~mask_int))
Добавлено через 59 секунд
Точнее:
Python
1
print('end: ', int2ip((ip_int | (~mask_int) - 1)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2019, 11:34
Помогаю со студенческими работами здесь

Маршрутизатор содержит следующие записи (CIDR) в своей таблице маршрутизации:
Маршрутизатор содержит следующие записи (CIDR) в своей таблице маршрутизации:

Сетевой сканер Fujitsu-Siemens ScanSnap N1800 не могу подключить сетевой принтер
Сетевой сканер Fujitsu-Siemens ScanSnap N1800 не могу подключить сетевой принтер KYOCERA FS-9530DN , оба устройства находятся в домене...

Репитер wi-fi на основе сетевой второй сетевой карты
Доброго времени суток. Возникла проблема: На работе стоит роутер TP-link TL-WR720N, который раздает инет по wi-fi. к нему подключено 7...

Как посчитать сетевой трафик на сетевой карте
У меня возникла необходимость посчитать на сетевой карте входящий и исходящий трафик. OS WinNT. Подскажите как это зделать, желательно с...

Сетевой адаптер не видит сетевой кабель
Проблема возникла после грозы. Проверка сетевого адаптера и драйверов ни чего не дала, на разъеме не светятся светодиоды. Материнка ASRock...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru