簡體   English   中英

正則表達式:如何匹配 RFC1918 私有 IPV4 地址范圍中的 IP 地址(在 Python 中)?

[英]Regex: How to match IP address in RFC1918 private IPV4 address ranges (in Python)?

RFC1918 將私有 IPv4 地址定義為屬於以下任一范圍的地址:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

出於分析目的,我將 127.0.0.1 添加到此列表中。 我知道有經過試驗和測試的正則表達式來匹配任何 IPv4 地址,但是我如何將其中一個縮小到僅當地址落在上述范圍之一或 127.0.0.1 中時才匹配? 將使用 Python。

非常感謝

在 Python 3.3+ 中(您沒有指定版本,也沒有指定正則表達式為什么是必需的,所以為了完整起見,我將其放在這里),您可以:

import ipaddress

addr_string = # string with your IP address
try:
    addr = ipaddress.IPv4Address(addr_string)
except ValueError:
    raise # not an IP address
if addr.is_private:
    pass # is a private address

另請參閱: ipaddress 模塊文檔

以下正則表達式應該有效:

^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*

演示

(?:(?:192\.)(?:(?:168\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:10\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:172\.)(?:(?:1[6-9]|2[0-9]|3[0-1])\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

此正則表達式適用於從字符串中獲取所有私有 ip。 演示可以在這里找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM