我有两个XML文件。一个文件包含使用对象而不是IP地址,服务等定义的防火墙规则。第二个文件包含这些对象的定义,IP地址,服务类型等。
我可以使用ElementTree和以下代码循环遍历每个XML文件并将对象与服务定义匹配:
{{1}}
我遇到的问题是policy.xml中使用的一些对象是“service_groups”,其中包含我需要访问的实际服务。在示例中,XML policy.xml包含“icmp-requests”作为服务对象,它是services.xml中的“service_group”。因此,当我真正需要匹配组中的所有服务时,当我执行比赛时,我正在与组进行对比。
我想过只需添加一个代码来检查服务对象是否是一个服务组,然后循环并提取所有服务。我遇到的问题是服务组可以包含其他服务组。嵌套发生的程度确实没有限制。
最后,我需要做的是从policy.xml中提取所有成员,并将其与services.xml的所有单个成员相匹配。
答案 0 :(得分:0)
我能够通过构建以下功能来解决我的问题:
def resolve_group_members(group_name):
# Loop through the list of members
for member in groups[group_name]:
# If the member is in the groups dict keys
if member in groups.keys():
# recursively loop through the function again passing the member name
resolve_group_members(member)
else:
# if the member is not a group now we can do something with it
print('\t\tGroup Members: ' + member)
这样我就可以将所有服务分配给字典,然后解析每个组成员。