我有一个包含防火墙NAT规则的文本文档。我已经能够使用正则表达式的组合从文档中提取一些元素,但现在我需要在另一个正则表达式中使用正则表达式的各个结果来查找IP地址 -
该文档本质上是一种文本形式的防火墙策略。因此,我的初始正则表达式构建为返回防火墙(源,目标,已转换源,已转换目标)上NAT策略中每个相应列中的值。只使用IP地址时这很好。但是,有时会在其中一列中使用组名。我需要能够从组中提取IP信息,然后将其全部写入文件以供查看....例如
“Server_Group”是一个源组的名称。这就是文档中列出IP的方式:
:name (Server-Group)
)
:ip_convention_object ()
:color (black)
:comments ()
:group_convention_query ()
:group_sort_type (3)
:is_convention_on (false)
:member_class (network_object)
:members_query ()
:type (group)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.10.24.0_s22)
:Uid ("{DACDEBF9-C041-4C48-928E-92E564606XXX}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.40.30.0_s23)
:Uid ("{3E947D4C-CE05-45B4-AFCC-553351A7FRRRE}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.44.28.0_s23)
:Uid ("{3EE3901E-7490-4FDF-A66C-CC9CCC17794}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.30.20.0_s22)
:Uid ("{51ERR8DA-BFDB-42CD-8C3B-71OPP
这是我尝试过的代码:
import re
with open("INT-1DC-DMS-rulebases_5_0.txt", "r") as f:
text = f.read()
source=re.findall(r':src_adtr\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
dest=re.findall(r':dst_adtr\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
source_adtr=re.findall(r':src_adtr_translated.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+:Name\s+[\(](.*)', text)
dest_adtr=re.findall(r':dst_adtr_translated\s+.*\s+.*\s+.*\s*\s+.*\s+.*\s.*\s+:Name\s+[\(](.*)', text)
for i, j, k, m in source, dest, source_adtr, dest_adtr: #for each element found in each respective list, find appropriate IP addresses
source-IP = (r':name\s+[\(]source[\)].*?[\(]ReferenceObject.*?:Name[\(](.*)', text)
with open("NA-INT-RuleNat.txt", "w") as s:
for item in zip(source, dest, source_adtr, dest_adtr):
s.write('{}\t{}\t{}\t{}\n'.format(*item))