我有一个函数python 2.7代码,从路由表中提取IP。它只提取x.x.x.x/xx格式的ip。不过,我确实有一个问题,排除路由表中的一些行。正则表达式来包含和排除某些IP
例如,该行:
D 10.50.80.0/24 [90/3072] via 10.10.10.1, 3w6d, Vlan10
在该行的所有我关心的是10.50.80.0/24。由于这是唯一具有/ 24符号的ip,所以我只能抓住它并让正则表达式忽略没有/(例如10.10.10.1)的onces。但在表中,我们有以下2种异常:
10.10.60.0/16 is variably subnetted, 58 subnets, 4 masks
C 10.10.140.0/24 is directly connected, Vlan240
我想捕捉到IP上的第二行(10.10.140.0/24),但不是第一行(10.10.60.0/16)。该程序正在提取IP并检查是否有任何子网在表中可用。 10.10.60.0/16是问题,因为它并不是说10.10.60.0/16在表中,而只是说该子网具有变量子网。
目前我的工具正在捕获这个IP并将整个10.10.60.0/16范围标记为不正确。我尝试了一些正则表达式编辑,但并不满意它。我不小心想要跳过任何子网,特别是与第一行类似的第二行。捕获所有正确的子网非常重要。
有人可以建议一个最佳的正则表达式编辑来实现这一点。只有跳过某个具有线XXXX/XX是可变的子网,X子网,X口罩
这里是我当前的代码:
match = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})', text)
感谢 达蒙
这看起来像'Cisco设备上显示IP route'输出 - 实际表格中的路线(即不是摘要)总是有一个字母作为表示路线起点的第一个字符(静态,连接,OSPF,EIGRP等)。你可以放弃以空格开始的行,或者只查看以几个可能的字母开头的行('show ip route'告诉你什么是可能的)。 – Ben
这是一个很好的解决方案,但由于意外的空间或某种原因,它有可能会错过实际的IP。我相信底部解决方案更安全。 – Damon