我有两个XML文件。一个文件包含防火墙规则,这些规则是使用对象定义的,而不是IP地址、服务等。第二个文件包含这些对象的定义、它们的IP地址、服务类型等
我可以使用ElementTree和以下代码轻松遍历每个XML文件并将对象与服务定义匹配:
import xml.etree.ElementTree as ET
fwPolicy = ET.parse('policy.xml')
services = ET.parse('services.xml')
rules = fwPolicy.findall('./rule')
service = services.findall('./service')
for rule in rules:
ruleServices = rule.findall('./services/members/reference/Name')
for ruleService in ruleServices:
for objService in service:
objServiceName = objService.find('./Name').text
if ruleService.text == objServiceName:
print('Service search Found :', objServiceName)
XML File 1 policy.xml:
<Class_Name>rule_services</Class_Name>
<members>
<reference>
<Name>icmp-requests</Name>
<Table>services</Table>
</reference>
<reference>
<Name>gre</Name>
<Table>services</Table>
</reference>
</members>
</Class_Name>
XML File 2 services.xml:
<service>
<Name>icmp-requests</Name>
<Class_Name>service_group</Class_Name>
<members>
<reference>
<Name>echo-request</Name>
<Table>services</Table>
</reference>
<reference>
<Name>info-req</Name>
<Table>services</Table>
</reference>
<reference>
<Name>timestamp</Name>
<Table>services</Table>
</reference>
<reference>
<Name>mask-request</Name>
<Table>services</Table>
</reference>
</members>
</service>
<service>
<Name>echo-request</Name>
<Class_Name>icmp_service</Class_Name>
<icmp_type>8</icmp_type>
</service>
我的问题是策略.xml是“服务组”,其中包含我需要访问的实际服务。在示例XML中策略.xml包含“icmp请求”作为服务对象,该服务对象是中的“服务组”服务.xml. 所以,当我执行匹配时,我会针对组中的所有服务进行匹配。在
我考虑过添加一个代码来检查服务对象是否是一个服务组,然后遍历它并提取所有服务。我的问题是服务组可以包含其他服务组。实际上,嵌套的范围是没有限制的。在
最后,我需要做的是从策略.xml并将其与服务.xml. 在
我可以通过构建以下函数来解决我的问题:
通过这种方式,我可以将所有服务分配给一个字典,然后解析每个组成员。在
相关问题 更多 >
编程相关推荐