【发布时间】:2015-06-23 05:06:02
【问题描述】:
对于像 169.254.0.0/16 或 192.168.0.0/16 这样的 IPv4 地址范围,为每个地址构建一个正则表达式很简单,因为一旦你完全匹配前 6 位数字,你就完成了。
但是如何匹配一个更宽松的保留范围内的任何地址,例如
100.64.0.0 –
100.127.255.255
以100\. 开头的正则表达式是不够的,因为会有超出 100.64 和 100.127 界限的数字(例如 100.65.0.0、100.127.255.256)会被错误匹配。如何最好地捕获这样的范围,而不必明确定义每个范围内的每个有效子范围?语言是 Python。
作为参考,可以在here 找到保留 IP 地址和范围的完整列表。
【问题讨论】:
-
@TessellatingHeckler 因为 ipaddress.ip_address 只会告诉我地址是有效的。它不能帮助我检测保留的 IP 地址。
-
@Pyderman 是的。
try: addr = IPv4Address(text); except ValueError: print("not a valid IP address")if addr in IPv4Network('100.64.0.0/10'): print("that's a reserved address") -
@Pyderman 你错过了 Python 容器类型的奇迹。 “网络地址”。试试
IPv4Address('100.64.1.1') in IPv4Network('100.64.0.0/10'),它会说是。试试IPv4Address('100.63.1.1') in IPv4Network('100.64.0.0/10')是假的