使用 ipaddress 模組判斷給定 IP 地址是公網還是私網的 Python 程式


在計算機網路中,IP 地址用於唯一標識連線到網路的裝置。IP 地址可以分為公網和私網。

公網 IP 地址分配給直接連線到網際網路的裝置。它們是全域性可路由的,可以從網際網路上的任何地方訪問。

私網 IP 地址則用於私有網路,例如區域網 (LAN) 或家庭網路。這些 IP 地址無法直接從網際網路訪問。私網 IP 地址由網際網路工程任務組 (IETF) 指定的某些保留地址範圍定義。這允許私有網路中的多個裝置使用相同的 IP 地址範圍而不會發生衝突。

要以程式設計方式確定 IP 地址是公網還是私網,我們可以在 Python 中使用ipaddress 模組。此模組提供了用於處理 IP 地址的類和函式。

透過從給定的 IP 地址建立 ipaddress 物件,我們可以使用 is_private 屬性檢查它是否屬於保留的私網 IP 地址範圍。如果 IP 地址在私網範圍內,則將其視為私網 IP 地址。否則,將其視為公網 IP 地址。

在本文中,我們將討論如何使用 ipaddress 模組來判斷給定的 IP 地址是公網還是私網。

方法

以下是使用 Python 中的 ipaddress 模組確定給定 IP 地址是公網還是私網的步驟 -

  • 匯入 ipaddress 模組

  • 建立一個函式,該函式以 IP 地址作為輸入引數。

  • 建立 ipaddress 物件:在函式內部,嘗試使用提供的 IP 地址建立一個 ipaddress 物件。這可以透過呼叫 ipaddress.ip_address(ip) 來實現。

  • 檢查 IP 地址是否為私網:使用 ipaddress 物件的 is_private 屬性來確定 IP 地址是否屬於保留的私網 IP 地址範圍。如果 is_private 為 True,則 IP 地址為私網。否則,它為公網。

  • 處理異常:為了處理提供無效 IP 地址的情況,請將 ipaddress 物件的建立包裝在 try-except 塊中。如果引發了 ValueError,則捕獲異常並相應地處理它。返回“無效 IP”訊息以指示提供的 IP 地址無效。

  • 返回結果。

示例

在此示例中,我們將使用 ipaddress.ip_address 函式來判斷給定的 IP 地址是公網還是私網。

import ipaddress

def check_ip_address(ip):
    return ipaddress.ip_address(ip).is_private

ip_address = '192.168.0.1'
is_private = check_ip_address(ip_address)
print("{} is Private IP:".format(ip_address), is_private)

輸出

192.168.0.1 is Private IP: True

示例

在此示例中,如果提供的 IP 地址無效且無法用於建立 ipaddress 物件,則會引發 ValueError。

為了處理這種情況,我們在程式碼中包含了一個 try-except 塊。如果在嘗試建立 ip_obj 時引發了 ValueError,則程式會捕獲異常並返回“無效 IP”以指示提供的 IP 地址無效。

import ipaddress

def check_ip_address(ip):
    try:
        ip_obj = ipaddress.ip_address(ip)
        if ip_obj.is_private:
            return "Private IP"
        else:
            return "Public IP"
    except ValueError:
        return "Invalid IP"

# Define ip_address
ip_address = ['127.0.0.1', '10.98.76.6', '17.5.7.8', '192.168.0.1', "8.8.8.8", "10.0.0.1", '172.16.0.0']
for ip in ip_address:
    result = check_ip_address(ip)
    print("IP Address:", ip)
    print("Result:", result)
    print()

輸出

IP Address: 127.0.0.1
Result: Private IP

IP Address: 10.98.76.6
Result: Private IP

IP Address: 17.5.7.8
Result: Public IP

IP Address: 192.168.0.1
Result: Private IP

IP Address: 8.8.8.8
Result: Public IP

IP Address: 10.0.0.1
Result: Private IP

IP Address: 172.16.0.0
Result: Private IP

更新於: 2023 年 8 月 29 日

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.