适用于华为华三交换机防火墙配置文件格式
增加解析汇总 ACL ,方便查看 ACL应用在哪些接口及ACL规则信息
用于定时备份设备配置文件后,对配置文件的变化做出分析。
对运行状态配置和保存配置进行对比,发现差异配置。
支持
文本文件配置文件:vrpcfg.cfg
压缩包配置文件:vrpcfg.zip(自动下载交换机/防火墙配置文件可参考其他文章)
dis cu 命令查询结果配置(自动登录并执行命令,保存回显结果可参考其他文章)
#!/usr/local/python3/bin/python3
# -*- coding: utf8 -*-
import sys, time, os, zipfile
## 终端显示颜色
if os.name == 'nt': # Windows
import ctypes,sys
STD_OUTPUT_HANDLE = -11
# Windows CMD命令行 字体颜色定义 text colors
黑字 = 0x00 # black.
FOREGROUND_DARKBLUE = 0x01 # dark blue.
FOREGROUND_DARKGREEN = 0x02 # dark green.
FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
FOREGROUND_DARKRED = 0x04 # dark red.
FOREGROUND_DARKPINK = 0x05 # dark pink.
FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
FOREGROUND_DARKWHITE = 0x07 # dark white.
FOREGROUND_DARKGRAY = 0x08 # dark gray.
FOREGROUND_BLUE = 0x09 # blue.
FOREGROUND_GREEN = 0x0a # green.
FOREGROUND_SKYBLUE = 0x0b # skyblue.
FOREGROUND_RED = 0x0c # red.
FOREGROUND_PINK = 0x0d # pink.
FOREGROUND_YELLOW = 0x0e # yellow.
FOREGROUND_WHITE = 0x0f # white.
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
def set_cmd_text_color(color, handle=std_out_handle):
Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
return Bool
def resetColor():
set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
def 打印_黑(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(黑字)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_红(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_RED)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_绿(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_GREEN)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_黄(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_YELLOW)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_蓝(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_BLUE)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_紫(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_PINK)
sys.stdout.write(TEXT+'\n')
resetColor()
def 打印_青(TEXT, SHOW=1):
if SHOW == 1:
set_cmd_text_color(FOREGROUND_SKYBLUE)
sys.stdout.write(TEXT+'\n')
resetColor()
elif os.name == 'posix': # Linux
def 打印_黑(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;30;1m{TEXT}\033[0m")
def 打印_红(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;31;1m{TEXT}\033[0m")
def 打印_绿(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;32;1m{TEXT}\033[0m")
def 打印_黄(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;33;1m{TEXT}\033[0m")
def 打印_蓝(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;34;1m{TEXT}\033[0m")
def 打印_紫(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;35;1m{TEXT}\033[0m")
def 打印_青(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;36;1m{TEXT}\033[0m")
def 打印_白(TEXT, SHOW=1):
if SHOW == 1:
print(f"\033[0;37;1m{TEXT}\033[0m")
## 读取网络设备上下载的 startup.cfg 配置文件(文本文件)
## 读取 dis cu 查询配置保存下来的文本文件
def 读取文本文件内容(FILE_PATH):
L_编码 = ['UTF8', 'GB2312', 'GBK', 'BIG5']
TEXT = None
if os.path.isfile(FILE_PATH):
for 编码 in L_编码:
try:
#print(f"尝试 {编码}")
f = open(FILE_PATH, 'r', encoding=编码)
TEXT = f.read()
except Exception as e:
f.close()
#打印_红(f"{编码}编码读取{FILE_PATH}失败{e}")
else:
f.close()
#print(f"成功 TE