def testVal_object_group_network_02(): """Test recursion through a group object""" conf = ['!', 'name 1.1.2.20 loghost01', 'name 1.2.2.20 loghost02', '!', 'object-group network INSIDE_recurse', ' network-object host loghost02', 'object-group network INSIDE_addrs', ' network-object host loghost01', ' network-object host 1.1.2.1', ' network-object 1.1.2.2 255.255.255.255', ' network-object 1.1.2.0 255.255.255.0', ' group-object INSIDE_recurse', '!',] cfg_factory = CiscoConfParse(conf, factory=True, syntax='asa') obj = cfg_factory.find_objects(r'object-group\snetwork')[1] result_correct_01 = [IPv4Obj('1.1.2.20/32'), IPv4Obj('1.1.2.1/32'), IPv4Obj('1.1.2.2/32'), IPv4Obj('1.1.2.0/24'), IPv4Obj('1.2.2.20/32')] result_correct_02 = ['1.1.2.20', '1.1.2.1', '1.1.2.2', '1.1.2.0/255.255.255.0', '1.2.2.20'] # Ensure obj.name is set correctly assert obj.name=="INSIDE_addrs" assert obj.networks==result_correct_01 assert obj.network_strings==result_correct_02 ## Test obj.networks again to test the result_cache assert obj.networks==result_correct_01
def testVal_object_group_network_01(): """Test object group network results""" conf = [ "!", "name 1.1.2.20 loghost01", "!", "object-group network INSIDE_addrs", " network-object host loghost01", " network-object host 1.1.2.1", " network-object 1.1.2.2 255.255.255.255", " network-object 1.1.2.0 255.255.255.0", "!", ] cfg_factory = CiscoConfParse(conf, factory=True, syntax="asa") obj = cfg_factory.find_objects(r"object-group\snetwork")[0] result_correct_01 = [ IPv4Obj("1.1.2.20/32"), IPv4Obj("1.1.2.1/32"), IPv4Obj("1.1.2.2/32"), IPv4Obj("1.1.2.0/24"), ] result_correct_02 = [ "1.1.2.20", "1.1.2.1", "1.1.2.2", "1.1.2.0/255.255.255.0" ] # Ensure obj.name is set correctly assert obj.name == "INSIDE_addrs" assert obj.networks == result_correct_01 assert obj.network_strings == result_correct_02 ## Test obj.networks again to test the result_cache assert obj.networks == result_correct_01
def testVal_object_group_service_03(): ## This can only be configured as an object group after a host / network conf = ['!', 'object-group service APP03_svc tcp-udp', ' port-object eq domain', '!',] cfg_factory = CiscoConfParse(conf, factory=True, syntax='asa') obj = cfg_factory.find_objects(r'object-group\sservice')[0] ## Test whether the proper port objects are returned results_correct = [L4Object(port_spec='eq 53', protocol='tcp', syntax='asa'), L4Object(port_spec='eq 53', protocol='udp', syntax='asa')] assert (obj.name=='APP03_svc') assert (obj.ports==results_correct) assert (obj.L4Objects_are_directional is False) assert (obj.protocol_type=='tcp-udp')
def testVal_object_group_service_01(): ## This can only be configured as protocol object-group conf = ['!', 'object-group service APP01_svc', ' service-object tcp destination smtp', ' service-object tcp destination https', '!',] cfg_factory = CiscoConfParse(conf, factory=True, syntax='asa') obj = cfg_factory.find_objects(r'object-group\sservice')[0] result_correct = [L4Object(protocol='tcp', port_spec='eq 25', syntax='asa'), L4Object(protocol='tcp', port_spec='eq 443', syntax='asa')] assert (obj.name=='APP01_svc') assert (obj.ports==result_correct) assert (obj.L4Objects_are_directional is True) assert (obj.protocol_type=='')
def testVal_parse_F5(): """Test for Github issue #49""" config = [ "ltm virtual virtual1 {", " profiles {", " test1 { }", " }", "}", "ltm virtual virtual2 {", " profiles2 {", " test2 { }", " }", "}", ] parse = CiscoConfParse(config, syntax="junos") retval = parse.find_objects("profiles2")[0].children assert retval[0].text.strip() == "test2"
def testVal_parse_F5(): """Test for Github issue #49""" config = [ 'ltm virtual virtual1 {', ' profiles {', ' test1 { }', ' }', '}', 'ltm virtual virtual2 {', ' profiles2 {', ' test2 { }', ' }', '}', ] parse = CiscoConfParse(config, syntax='junos') retval = parse.find_objects('profiles2')[0].children assert retval[0].text==' test2 '
def testVal_parse_F5(): """Test for Github issue #49""" config = [ 'ltm virtual virtual1 {', ' profiles {', ' test1 { }', ' }', '}', 'ltm virtual virtual2 {', ' profiles2 {', ' test2 { }', ' }', '}', ] parse = CiscoConfParse(config, syntax='junos') retval = parse.find_objects('profiles2')[0].children assert retval[0].text.strip() == 'test2'
def testVal_object_group_service_02(): ## This can only be configured as an object group after a host / network conf = ['!', 'object-group service APP02_svc tcp', ' port-object eq smtp', ' port-object eq https', ' port-object range 8080 8081', '!',] cfg_factory = CiscoConfParse(conf, factory=True, syntax='asa') obj = cfg_factory.find_objects(r'object-group\sservice')[0] result_correct = [L4Object(protocol='tcp', port_spec='eq 25', syntax='asa'), L4Object(protocol='tcp', port_spec='eq 443', syntax='asa'), L4Object(protocol='tcp', port_spec='range 8080 8081', syntax='asa')] assert (obj.name=='APP02_svc') assert (obj.ports==result_correct) assert (obj.L4Objects_are_directional is False) assert (obj.protocol_type=='tcp')
def testVal_object_group_service_01(): ## This can only be configured as protocol object-group conf = [ "!", "object-group service APP01_svc", " service-object tcp destination smtp", " service-object tcp destination https", "!", ] cfg_factory = CiscoConfParse(conf, factory=True, syntax="asa") obj = cfg_factory.find_objects(r"object-group\sservice")[0] result_correct = [ L4Object(protocol="tcp", port_spec="eq 25", syntax="asa"), L4Object(protocol="tcp", port_spec="eq 443", syntax="asa"), ] assert obj.name == "APP01_svc" assert obj.ports == result_correct assert obj.L4Objects_are_directional is True assert obj.protocol_type == ""
def testVal_object_group_service_03(): ## This can only be configured as an object group after a host / network conf = [ "!", "object-group service APP03_svc tcp-udp", " port-object eq domain", "!", ] cfg_factory = CiscoConfParse(conf, factory=True, syntax="asa") obj = cfg_factory.find_objects(r"object-group\sservice")[0] ## Test whether the proper port objects are returned results_correct = [ L4Object(port_spec="eq 53", protocol="tcp", syntax="asa"), L4Object(port_spec="eq 53", protocol="udp", syntax="asa"), ] assert obj.name == "APP03_svc" assert obj.ports == results_correct assert obj.L4Objects_are_directional is False assert obj.protocol_type == "tcp-udp"
def testVal_ipv4_addr(): conf = ['!', 'interface Ethernet0/0', ' nameif OUTSIDE', ' ip address 198.101.172.106 255.255.255.128 standby 198.101.172.107', '!', 'interface Ethernet0/1', ' nameif INSIDE', ' ip address 192.0.2.254 255.255.255.0', '!', ] cfg_factory = CiscoConfParse(conf, factory=True, syntax='asa') obj = cfg_factory.find_objects(r'^interface\sEthernet0\/0$')[0] # Ensure obj.ipv4_addr is set correctly assert obj.ipv4_addr=='198.101.172.106' assert obj.ipv4_standby_addr=='198.101.172.107' obj = cfg_factory.find_objects(r'^interface\sEthernet0\/1$')[0] assert obj.ipv4_addr=='192.0.2.254'
def testVal_object_group_service_02(): ## This can only be configured as an object group after a host / network conf = [ "!", "object-group service APP02_svc tcp", " port-object eq smtp", " port-object eq https", " port-object range 8080 8081", "!", ] cfg_factory = CiscoConfParse(conf, factory=True, syntax="asa") obj = cfg_factory.find_objects(r"object-group\sservice")[0] result_correct = [ L4Object(protocol="tcp", port_spec="eq 25", syntax="asa"), L4Object(protocol="tcp", port_spec="eq 443", syntax="asa"), L4Object(protocol="tcp", port_spec="range 8080 8081", syntax="asa"), ] assert obj.name == "APP02_svc" assert obj.ports == result_correct assert obj.L4Objects_are_directional is False assert obj.protocol_type == "tcp"
def testVal_ipv4_addr(): conf = [ "!", "interface Ethernet0/0", " nameif OUTSIDE", " ip address 198.101.172.106 255.255.255.128 standby 198.101.172.107", "!", "interface Ethernet0/1", " nameif INSIDE", " ip address 192.0.2.254 255.255.255.0", "!", ] cfg_factory = CiscoConfParse(conf, factory=True, syntax="asa") obj = cfg_factory.find_objects(r"^interface\sEthernet0\/0$")[0] # Ensure obj.ipv4_addr is set correctly assert obj.ipv4_addr == "198.101.172.106" assert obj.ipv4_standby_addr == "198.101.172.107" obj = cfg_factory.find_objects(r"^interface\sEthernet0\/1$")[0] assert obj.ipv4_addr == "192.0.2.254"
def parse_n01_factory(request): """Preparsed n01 with factory option""" parse_n01_factory = CiscoConfParse(n01, syntax="nxos", factory=True) yield parse_n01_factory
def parse_a02_factory(request): """Preparsed a02 with factory option""" parse_a02_factory = CiscoConfParse(a02, syntax="asa", factory=True) yield parse_a02_factory
def parse_n01(request): """Preparsed n01""" parse_n01_factory = CiscoConfParse(n01, syntax="nxos", factory=False) yield parse_n01_factory
def parse_j01_factory(request): """Preparsed j01 with factory option""" parse_j01_factory = CiscoConfParse(j01, syntax="junos", comment="#!", factory=True) yield parse_j01_factory
def parse_a02(request): """Preparsed a02""" parse_a02_factory = CiscoConfParse(a02, syntax="asa", factory=False) yield parse_a02_factory
def parse_c03_factory(request): """Preparsed c01 with factory option""" parse_c03_factory = CiscoConfParse(c03, factory=True) yield parse_c03_factory
def parse_j01(request): """Preparsed j01""" parse_j01 = CiscoConfParse(j01, syntax="junos", comment="#!", factory=False) yield parse_j01
def parse_c02_factory(request): """Preparsed c02""" parse_c02 = CiscoConfParse(c02, factory=True) yield parse_c02
def parse_c03(request): """Preparsed c03""" parse_c03 = CiscoConfParse(c03, factory=False) yield parse_c03
def parse_c01(request): """Preparsed c01""" parse_c01 = CiscoConfParse(c01, factory=False) yield parse_c01
def parse_c02(request): """Preparsed c02""" parse_c02 = CiscoConfParse(c02, factory=False) yield parse_c02
def testParse_asa_factory(config_a02): parse = CiscoConfParse(config_a02, syntax="asa", factory=True) assert not (parse is None)
import sys import os THIS_DIR = os.path.dirname(__file__) # sys.path.insert(0, os.path.join(os.path.abspath(THIS_DIR), "../ciscoconfparse/")) sys.path.insert(0, "..") from ciscoconfparse.ciscoconfparse import CiscoConfParse if sys.argv[1] == "1": parse = CiscoConfParse("../configs/sample_01.ios", syntax="ios", factory=False) for line in parse.objs: print(line) elif sys.argv[1] == "2": parse = CiscoConfParse("../configs/sample_01.ios", syntax="ios", factory=True) for line in parse.objs: print(line) elif sys.argv[1] == "3": parse = CiscoConfParse("../configs/sample_01.iosxr", syntax="ios", factory=True) for line in parse.objs: print(line)
def testVal_ASAAclLine_DNA(line): """Ensure that valid ACL lines are classified as an ASAAclLine""" cfg = CiscoConfParse([line], factory=True, syntax="asa") assert cfg.objs[0].dna == "ASAAclLine" assert cfg.objs[0].result_dict != {}
def testVal_ASAAclLine_DNA_negative(line): # Ensure that parsing the bogus acl line raises a ValueError with pytest.raises(ValueError): cfg = CiscoConfParse([line], factory=True, syntax="asa")
#!/usr/bin/env python from ciscoconfparse.ciscoconfparse import CiscoConfParse parse = CiscoConfParse("configs/Switch0_running-config.txt") # Return a list of all ATM interfaces and subinterfaces atm_intfs = parse.find_lines("^interface\sATM") ups = parse.find_parents_w_child("^interface","up") # Return a list of all interfaces with a certain QOS policy qos_intfs = parse.find_parents_w_child( "^interf", "service-policy" ) # Return a list of all active interfaces (i.e. not shutdown) active_intfs = parse.find_parents_wo_child( "^interf", "shutdown" ) print(ups)
#!/usr/bin/env python from ciscoconfparse.ciscoconfparse import CiscoConfParse as CCP from pprint import pprint as pp with open('cisco_config.txt') as file: parse = CCP(file) pp(parse.find_objects(r'crypto map CRYPTO')) ff_parents = parse.find_objects(r'crypto map CRYPTO') i = 0 while i < len(parents): print i print parents[i] i += 1
import sys import os THIS_DIR = os.path.dirname(__file__) #sys.path.insert(0, os.path.join(os.path.abspath(THIS_DIR), "../ciscoconfparse/")) sys.path.insert(0, "..") from ciscoconfparse.ciscoconfparse import CiscoConfParse if sys.argv[1] == "1": parse = CiscoConfParse('../configs/sample_01.ios', syntax='ios', factory=False) for line in parse.objs: print(line) elif sys.argv[1] == "2": parse = CiscoConfParse('../configs/sample_01.ios', syntax='ios', factory=True) for line in parse.objs: print(line) elif sys.argv[1] == "3": parse = CiscoConfParse('../configs/sample_01.iosxr', syntax='ios', factory=True) for line in parse.objs: print(line)