使用 ipaddress 模組判斷給定 IPv4 地址是否為保留地址的 Python 程式


在傳統的 IPv4 地址方案中,IP 地址被分為五類:A、B、C、D 和 E。E 類地址,範圍從 240.0.0.0 到 255.255.255.255,被指定用於特定目的,並且不打算在當前的網際網路基礎設施中用於一般用途。因此,E 類地址被認為是“保留”的,並且不會在公共網際網路上分配或路由。

為了確定給定的 IPv4 地址是否屬於由網際網路工程任務組 (IETF) 和網際網路號碼分配機構 (IANA) 等組織定義的保留 IP 地址範圍之一,Python 利用了 ipaddress 模組提供的 IPv4Address 物件的 is_reserved 屬性。透過檢查此屬性,我們可以準確地識別給定地址是否為保留地址。

輸入輸出場景

讓我們看看一些使用 ipaddress 模組確定給定 IPv4 地址是否為保留地址的 Python 程式的輸入輸出場景。

場景 1 -

Input: "192.168.0.1"
Output: The address 192.168.0.1 is not reserved.

場景 2 -

Input: "10.0.0.1"
Output: The address 10.0.0.1 is reserved.

場景 3 -

Input: "172.16.0.1"
Output: The address 172.16.0.1 is not reserved.

場景 4 -

Input: "240.10.0.1"
Output: The address 240.10.0.1 is reserved.

方法

我們可以按照以下步驟使用 Python 中的 ipaddress 模組確定給定的 IPv4 地址是否為保留地址。

  • 匯入 ipaddress 模組。

  • 定義一個包含一些示例 IPv4 地址的列表。

  • 遍歷列表中的每個 IPv4 地址,並使用 ip_address() 方法建立一個 IPv4Address 物件。

  • 最後,使用 IPv4Address 物件的 is_reserved 屬性來確定地址是否為保留地址。

ipaddress.ip_address() 方法

它用於建立一個表示 IP 地址的 IPv4Address 或 IPv6Address 物件。該方法返回一個 IPv4Address 或 IPv6Address 物件,具體取決於提供的地址型別。如果輸入地址無效,例如格式不正確或值超出範圍,則會引發 ValueError。以下是 ip_address() 方法的語法

ipaddress.ip_address(address)

其中,address 引數是要建立物件的 IP 地址的字串表示形式。

is_reserved 屬性

它是 ipaddress 模組中 IPv4Address 物件的一個屬性。它用於根據 IETF 和 IANA 等各種組織定義的保留 IP 地址範圍來確定 IP 地址是否為保留地址。

如果 IP 地址為保留地址,則返回 True。否則,返回 False。

示例

讓我們舉一個例子,看看如何使用 Python 中的 ipaddress 模組確定給定的 IPv4 地址是否為保留地址。

import ipaddress

# define a list of ipv4 addresses 
ipv4_addresses = [
    "240.10.0.1",
    "10.0.0.1",   
    "172.16.0.1", 
    "192.168.0.1",
    "241.0.0.133",
]

# Check if each IPv4 address is reserved or not
for address in ipv4_addresses:
    ip = ipaddress.ip_address(address)
    if ip.is_reserved:
        print("The address {} is reserved.".format(address))
    else:
        print("The address {} is not reserved.".format(address))

輸出

The address 240.10.0.1 is reserved.
The address 10.0.0.1 is not reserved.
The address 172.16.0.1 is not reserved.
The address 192.168.0.1 is not reserved.
The address 241.0.0.133 is reserved.

示例

在此示例中,我們將使用 try-except 塊來處理任何無效的地址輸入。

import ipaddress

# define a list of ipv4 addresses 
ipv4_addresses = [
    "240.10.0.1",
    "10.0.0.1",   
    "172.16.0.1", 
    "192.168.0.1",
    "241.0.0.133",
    "0.3.12"
]

# Check if each IPv4 address is reserved or not
for address in ipv4_addresses:
    try:
        ip = ipaddress.ip_address(address)
        if ip.is_reserved:
            print("The address {} is reserved.".format(address))
        else:
            print("The address {} is not reserved.".format(address))
    except ValueError:
        print("The address {} is not a valid IPv4 address.".format(address))

輸出

The address 240.10.0.1 is reserved.
The address 10.0.0.1 is not reserved.
The address 172.16.0.1 is not reserved.
The address 192.168.0.1 is not reserved.
The address 241.0.0.133 is reserved.
The address 0.3.12 is not a valid IPv4 address.

更新於: 2023 年 8 月 29 日

180 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告