1. 程式人生 > >Python - IP地址

Python - IP地址

IP地址(Internet協議)是一種基本的網路概念,可在網路中提供地址分配功能。python模組ipaddress廣泛用於驗證IP地址到IPV4和IPV6型別並將其分類。它還可以用於比較IP地址值以及用於操作ip地址的IP地址演算法。

驗證IPV4地址
ip_address函式驗證IPV4地址。如果值的範圍超過0到255,則會引發錯誤。

import ipaddress
print(ipaddress.ip_address('192.168.0.255'))
print(ipaddress.ip_address('192.168.0.256'))#此處會報錯,超過255

驗證IPV6地址
ip_address函式驗證IPV6地址。如果值的範圍超出0到ffff,則會引發錯誤。

import ipaddress

# invalid IPV6 address
print(ipaddress.ip_address('FFFF:9999:2:FDE:257:0:2FAE:112D'))

print(ipaddress.ip_address('FFFF:10000:2:FDE:257:0:2FAE:112D'))#此地址不為ipv6

檢查IP地址的型別
我們可以提供各種格式的IP地址,模組將能夠識別有效格式。它還將指出它是哪種IP地址。

import ipaddress

print(type(ipaddress.ip_address(u'192.168.0.255')))

print(type(ipaddress.ip_address(u'2001:db8::')))

print(ipaddress.ip_address(u'192.168.0.255').reverse_pointer)

print(ipaddress.ip_network(u'192.168.0.0/28'))
-------------------------
<class 'ipaddress.IPv4Address'>
<class 'ipaddress.IPv6Address'>
255.0.168.192.in-addr.arpa
192.168.0.0/28

IP地址的比較
我們可以對IP地址進行邏輯比較,發現它們是否相等。我們還可以比較一個IP地址是否大於另一個IP地址的值。

import ipaddress

print(ipaddress.IPv4Address('192.168.0.2') > ipaddress.IPv4Address('192.168.0.1'))
print(ipaddress.IPv4Address('192.168.0.2') == ipaddress.IPv4Address('192.168.0.1'))
print(ipaddress.IPv4Address('192.168.0.2') != ipaddress.IPv4Address('192.168.0.1'))
-------------------
True
False
True

IP地址算術
我們還可以應用算術運算來操作IP地址。我們可以將整數加到或減去IP地址。如果在新增之後,最後一個八位位元組的值超過255,則前一個八位位元組增加以適應該值。如果額外值不能被任何前一個八位位元組吸收,則會引發值錯誤。

import ipaddress

print(ipaddress.IPv4Address(u'192.168.0.2') + 1)

print(ipaddress.IPv4Address(u'192.168.0.253') - 3)

# Increases the previous octet by value 1.
print(ipaddress.IPv4Address(u'192.168.10.253') + 3)

# Throws Value error
print(ipaddress.IPv4Address(u'255.255.255.255') + 1)
-----------------------------
192.168.0.3
192.168.0.250
後面兩個超過範圍會報錯