ipaddress
В python есть специальная библиотека для работы с ip-адресами - ipnetwork.
from ipaddress import *
#Зададим IP-адрес узла и маску
a=IPv4Interface("138.169.249.88/255.255.255.192")
#Адрес сети с маской
print(a.network)
#Номер узла внутри сети
print(int(a.ip)&int(a.network.hostmask))
#Перебор всех адресов внутри сети
for i in a.network:
#Вывод очередного адреса
print(i)
Т.е. код выше по заданным ip-адресу узла и маске напечатает адрес сети, номер узла внутри сети и выведет все адреса внутри сети.
Номер узла мы находим с помощью поразрядной конъюнкции, знак &, между целочисленным представлением ip адреса и маски.
Также тот ip-адрес и маску, которую мы задали в программе выше, мы можем задать просто указав количество единиц внутри маски IPv4Interface("138.169.249.88/26"). С помощью этого функционала мы можем перебирать различные маски для некоторого ip-адреса.
from ipaddress import *
#Сделаем перебор значений от 0 до 32 включительно (кол-во единиц в маске)
for i in range(0,33):
#Зададим IP-адрес узла и маску
a=IPv4Interface("138.169.249.88/"+str(i))
#И выведем значение маски и номер узла внутри сети для каждого из заданных значений маски
print(i,int(a.ip)&int(a.network.hostmask))
Поиск наибольшего и наименьшего адресов.
from ipaddress import *
#Интересующие нас IP с маской
a=IPv4Interface("98.81.154.195/255.252.0.0")
#Наибольший ip-адрес (он же широковещательный)
print(list(a.network)[-1])
#Наибольший ip-адрес для компьютера
print(list(a.network)[-2])
#Наименьший ip-адрес (он же адрес сети)
print(list(a.network)[0])
#Наименьший ip-адрес для компьютера
print(list(a.network)[1])
Last modified: Monday, 29 June 2026, 4:20 PM