python3正则表达式判断ipv4_关于python:IPv4地址范围的正则表达式

使用IPv4地址范围(例如169.254.0.0/16或192.168.0.0/16),可以轻松地为每一个构造一个正则表达式,因为一旦您精确匹配前6位数字,就可以完成。

但是,如何匹配保留范围较小的任何地址,例如

100.64.0.0 –

100.127.255.255

以100\.开头的正则表达式不能满足要求,因为在100.64和100.127范围之外的数字(例如100.65.0.0、100.127.255.256)将被错误地匹配。 如何最好地捕获这样的范围,而不必明确定义每个范围内的每个有效子范围? 语言是Python。

作为参考,可以在此处找到保留IP地址和范围的完整列表。

欺骗? stackoverflow.com/questions/106179/

为什么不使用IP地址库? docs.python.org/3/library/ipaddress.html或pypi.python.org/pypi/py2-ipaddress

@TessellatingHeckler,因为ipaddress.ip_address只会告诉我一个地址有效。它不能帮助我检测保留的IP地址。

@AvinashRaj不,不是骗子。我已经有一个匹配所有IP地址的正则表达式。我们需要仅匹配子集的正则表达式。

@Pyderman是的。 try: addr = IPv4Address(text); except ValueError: print("not a valid IP address") if addr in IPv4Network(100.64.0.010): print("thats a reserved address")

@TessellatingHeckler 100.64.0.0/10是地址块。一个实际的例子是10.64.1.1,在这种情况下ipaddress.IPv4Address()只是告诉我它是有效的。

@Pyderman您错过了Python容器类型的奇迹。"网络中的地址"。尝试IPv4Address(100.64.1.1) in IPv4Network(100.64.0.010),它会说是True。尝试IPv4Address(100.63.1.1) in IPv4Network(100.64.0.010)及其错误

ip地址前后必须有空格对吗?

@TessellatingHeckler嗯,好的。我不知道ipaddress模块??知道这些保留范围。那么它足够安全了,然后可以将该Wiki页面上的所有范围(地址块)放入列表中,然后对于找到的任何给定IP地址,测试是否在IPv4Network(blocks [i])中使用IPv4Address(theIP),依此类推?

@Pyderman是的,我是这样认为的。

@TessellatingHeckler谢谢。在解释器中运行良好,但是当我将其放入函数中时,会遇到此问题:stackoverflow.com/questions/30996380/

首选使用IPv4解析库。 如果您坚持使用正则表达式,

re.search('^(100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){2})$', text)

您可以看到我正在分别搜索:

64-69(6[4-9])

70-99([7-9]\d)

100-119(1[0-1]\d)

120-127(12[0-7])

0-9(\d)

10-99([1-9]\d)

100-199(1\d\d)

200-249(2[0-4]\d)

250-255(25[0-5])

这是一种方法:

import re

print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf')

输出:

['100.127.255.255', '100.64.0.0']

如果100.127.255.255是否在100.64.0.0/10子网中,则无法回答。

你什么意思?

@TessellatingHeckler是什么意思?

我的意思是,问题不是要从文本行中提取IP地址,这就是您正在做的事情。 问题是询问比较一个IP地址是否在两个IP地址之间。 它是"从文本行中拉出数字"与"查看数字是否在5到15之间"之间的区别。 IP地址和网络具有树形结构。 10.0.5.024在10.0.0.016中,并且也在8.0.0.06中,并且在10.0.4.0-10.0.8.254范围内。 问题就是要进行的这种测试-与IP的工作方式相适应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值