В 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