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