Moduł ipaddress pozwala na sprawdzanie czy dany ciąg jest adresem IP, czy jest w sieci publicznej czy prywatnej etc. Aby rozpocząć operacje na adresie IP musimy najpierw stworzyć reprezentujący go obiekt:
import ipaddress
a=ipaddress.ip_address("10.0.0.1")
Na tym etapie wykonywana jest walidacja adresu. Gdybys podał coś co adresem IP nie jest, jak na przykład tu:
import ipaddress
a=ipaddress.ip_address("there's no place like localhost...")
otrzymamy wyjątek z komunikatem:
ValueError: "there's no place like localhost..." does not appear to be an IPv4 or IPv6 address
Ipaddress dla poprawnie zwalidowanego adresu udostępnia szereg ciekawych funkcjonalności. Możemy np. weryfikować czy dany adres leży w sieci prywatnej czy publicznej:
import ipaddress
a=ipaddress.ip_address('46.41.128.110')
a2=ipaddress.ip_address('192.168.1.1')
print(a.is_private)
print(a2.is_private)
Efekt:
False
True
Zamiast pola is_private możemy też użyć is_global:
import ipaddress
a=ipaddress.ip_address('46.41.128.110')
a2=ipaddress.ip_address('192.168.1.1')
print(a.is_global)
print(a2.is_global)
z oczywiście odwrotnym skutkiem:
True
False
Możemy też porównywać adresy IP:
import ipaddress
a=ipaddress.ip_address('46.41.128.110')
a2=ipaddress.ip_address('46.41.128.111')
print(a>a2)
Efekt:
False
Jeszcze jedna ciekawostka ( tu puszczenie oczka w stronę administratorów ) na temat ipaddress. Możemy wylistować wszystkie adresy z danej sieci. Tym razem będziemy musieli utworzyć obiekt innej klasy, dlatego też zamiast funkcji ip_adress potrzebujemy funkcji ip_network:
import ipaddress
for h in ipaddress.ip_network('192.168.2.0/24').hosts():
print(h)
Skutek działania:
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
192.168.2.5
192.168.2.6
…..
…..
Nie są to wszystkie możliwości tego modułu, wybrałem te które moim zdaniem są najbardziej przydatne. Zainteresowanych rozszerzeniem zapraszam do zapoznania się z dokumentacją.
Komentarze (0)
Brak komentarzy...