ipnetwork

В 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))
Последнее изменение: Четверг, 23 мая 2024, 11:30