【问题标题】:Regex: How to match IP address in RFC1918 private IPV4 address ranges (in Python)?正则表达式:如何匹配 RFC1918 私有 IPV4 地址范围中的 IP 地址(在 Python 中)?
【发布时间】:2015-06-05 20:01:39
【问题描述】:

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。

非常感谢

【问题讨论】:

  • 我不知道你是如何用正则表达式做到这一点的。我认为您需要将地址转换为变量,然后查看传入的值是否在列表中的任何范围之间。 stackoverflow.com/questions/9590965/…
  • 不要误以为只有 127.0.0.1 是环回。 127.0.0.0/8 实际上是一个 A 类地址,这意味着任何以 127 开头的地址都会映射到环回。出于您的目的,我认为这很重要。

标签: python regex


【解决方案1】:

在 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 module documentation

【讨论】:

    【解决方案2】:

    以下正则表达式应该可以工作:

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

    DEMO

    【讨论】:

    • 不幸的是,这不是正确的答案。它还匹配这个地址:192.168.266.333,甚至完全匹配这个总语法错误:10.333.333.333。以句号结尾。
    • @CollinChaffin 我理解这个问题的方式是,他有一个已经是有效 IP 地址的东西,他只是试图将其分类为私有 IP 与公共 IP。这并不是用来查找 IP 地址的。
    • 我正在努力实施您的解决方案,只是为了进行完整性检查,我将这个示例包括在内 - 10.256.255.255。给定范围,您的正则表达式将此标记为私有,但正则表达式不应捕获此数字,因为它超出了 10.0.0.0 – 10.255.255.255 的范围。你认为你的正则表达式可能不完整还是我误解了什么?我是正则表达式的新手,因此提出了这个问题。
    【解决方案3】:
    (?:(?: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。 Demo可以找到here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2012-04-27
      相关资源
      最近更新 更多