J'ai le code pour trouver le nom de la « classe d'accès » sur la « ligne vty »à l'aide CiscoConfParse trouver ACL appliquée à VTY puis vérifier ACL pour la déclaration de journal
Après que je suis en mesure de trouver l'ACL, mais je veux vérifier chaque ligne de l'ACL pour vérifier que les instructions 'deny' et 'permit' ont le mot-clé 'log'. Et imprimez un rapport d'OPEN s'il n'y a pas d'instruction 'log' ou NOT A FINDING s'il y a une instruction 'log' sur l'entrée.
Et c'est là que je ne sais pas comment analyser les instructions ACL, si je peux utiliser quelque chose de CiscoConfParse ou plus python standard pour faire le travail?
#Importing the necessary modules.
import sys
from sys import argv
#Importing the necessary modules.
from ciscoconfparse import CiscoConfParse
import sys
import argparse
def check_VTY_ACL_NET1637():
## Search for LINE VTY access-list name then check if that ACL has log keyword
#
for VTY_ACL in parse.find_children_w_parents('line vty', 'access-class'):
#print(VTY_ACL[14])
VTY_ACL = VTY_ACL.lstrip('access-class ')
#print (VTY_ACL)
VTY_ACL_2 = VTY_ACL.rstrip(' in')
#print(VTY_ACL_R)
#has_ACL_in = VTY_ACL.find_lines(r'access-class')
#print(has_ACL_in)
#for IP_ACL_LIST in parse.find_objects_w_child(VTY_ACL_R, 'log'):
#for IP_ACL_LIST in parse.find_lines(VTY_ACL_R):
for IP_ACL_LIST in parse.find_parents_w_child(VTY_ACL_2, ''):
#print(IP_ACL_LIST)
#IP_ACL_ACE = parse.has_line_with(' log')
IP_ACL_ACE = parse.find_children_w_parents(IP_ACL_LIST, '')
#print(IP_ACL_ACE)
has_log_keyword = parse.has_line_with(r' log')
#print(has_log_keyword)
#
#has_log_keyword = has_log_keyword.split()
for log in IP_ACL_ACE:
#print (log)
#has_not_log_keyword = parse.has_line_with(r'. log')
#print(has_not_log_keyword)
keyword_log = 'log'
keyword_permit = 'permit'
keyword_deny = 'deny'
log = log.split()
print (log)
if (not keyword_log):
print('OPEN LINE VTY')
else:
print("Not a Finding: 'NET-VLAN-023'")
# Main starting of script
def start():
script, input_file = argv
global parse
parse = CiscoConfParse (input_file)
print("Opening config file: %r\n" % input_file)
check_VTY_ACL_NET1637()
def main():
args = sys.argv[1:]
if len(args) == 1:
start()
#else:
#usage()
if __name__ == "__main__":
main()
est le fichier de configuration d'exemple ici, je me sers avec l'ACL sur le VTY
Current configuration : 25432 bytes
!
ip access-list extended SSH2-IN
remark ///\\\///\\\///\\\///\\\///\\\///\\\///
remark ///\\\***DEC 8 2015***///\\\
remark SomeSite //VoSIP //
remark ******************************************
permit ip 10.227.2.128 0.0.0.63 any
permit tcp 43.81.133.0 0.0.0.255 any eq 22 log
deny ip any any
!
line vty 0 4
access-class SSH2-IN in
line vty 5 15
access-class SSH2-IN in
!
end
super, merci beaucoup. J'aime que j'ai maintenant ces deux exemples, cela m'aide beaucoup à la fois dans ma connaissance de python et de ciscoconfparse. Excellent! –