Python 程式檢查給定字串是 IPv4、IPv6 還是無效


IP 地址是網際網路協議地址的簡稱,它是一個分配給連線到使用網際網路協議進行通訊的計算機網路的每個裝置的數字標籤。它充當裝置的識別符號,允許它在網路上傳送和接收資料。目前常用的 IP 地址有兩個版本。

IPv4(網際網路協議版本 4)

這是最廣泛使用的 IP 地址版本。它由用點分隔的四組數字組成,例如“192.168.0.1”。每組的值可以介於 0 和 255 之間,總共代表超過 40 億個唯一地址。

IPv6(網際網路協議版本 6)

這是 IP 地址的較新版本,旨在解決 IPv4 的侷限性並提供更大的地址空間。IPv6 地址以十六進位制表示並用冒號分隔,例如“2001:0db8:85a3:0000:0000:8a2e:0370:7334”。IPv6 地址長 128 位,可以容納數量巨大的唯一地址。

IP 地址對於裝置透過網際網路相互通訊至關重要。它們用於在網路通訊期間識別資料包的源和目的地。

在 Python 中,我們可以使用各種模組和庫(如 socket、ipaddress 或使用正則表示式)來處理 IP 地址,以驗證和操作 IP 地址。這些模組提供了函式和類,可以在 Python 程式中解析、驗證和操作 IP 地址。

有幾種方法可以使用 Python 檢查 IPv4 或 IPv6 或無效的 IP 地址。讓我們逐步瞭解每種方法。

使用 ipaddress 模組

在 Python 中,我們有 ipaddress 模組,它提供 ip_address() 函式,用於檢查給定的輸入是否為有效的 IP 地址。此函式將字串作為輸入引數。

示例

在此示例中,我們將字串作為輸入引數傳遞給 ip_address() 函式,並檢查給定的輸入 IP 地址是否有效。

import ipaddress
def check_ip_address(ip):
   try:
      ipaddress.ip_address(ip)
      if ":" in ip:
         return "IPv6"
      else:
         return "IPv4"
   except ValueError:
      return "Invalid"
ip_address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
result = check_ip_address(ip_address)
print(ip_address,"is related to",result)  

輸出

2001:0db8:85a3:0000:0000:8a2e:0370:7334 is related to IPv6

使用正則表示式模組

正則表示式模組用於在給定的輸入字串中搜索定義的模式。它匯入為 re。我們在 re 模組中有一個名為 match() 的函式,它接受要檢查的 IP 地址模式的模式,然後它將返回找到它的行,否則它將返回 null 或 None 作為輸出。

示例

在此示例中,我們將 ipv4 和 ipv6 的模式分別作為 r'^(\d{1,3}\.){3}\d{1,3}$' 和 r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$' 傳遞給 re 模組的 match() 函式。如果匹配找到,則根據模式返回 Ipv4 或 Ipv6,否則返回 Invalid。

import re
def check_ip_address(ip):
   ipv4_pattern = r'^(\d{1,3}\.){3}\d{1,3}$'
   ipv6_pattern = r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'
   if re.match(ipv4_pattern, ip):
      return "IPv4"
   elif re.match(ipv6_pattern, ip):
      return "IPv6"
   else:
      return "Invalid"
ip_address = "192.168.0.1"
result = check_ip_address(ip_address)
print(ip_address,"is related to",result)  

輸出

192.168.0.1 is related to IPv4

更新於: 2023-10-19

1K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.