交换机故障自愈
# -*- coding: UTF-8 -*- """ auto: huangfz """ import telnetlib import time def connect(ip, username, password, command): # tn = telnetlib.Telnet(ip.encode('ascii')) tn.read_until(b'Username:') # 用户名 tn.write(username.encode('ascii') + b'\n') tn.read_until(b'Password:') # 密码 tn.write(password.encode('ascii') + b'\n') if tn.read_until(b'>').decode('utf-8'): print('登录成功') else: print("登入失败") return tn def get_error(ip, username, password, command, X_value, Y_value): ret_list = [] # 查询结果 只含有% tn = connect(ip, username, password, command) print("开始执行查询") tn.write(b'dis int b\n') time.sleep(5) strs = tn.read_very_eager().decode('utf-8') for i in strs.splitlines(): if '%' in i: ret_list.append(i) switch_value = {} # 生成端口名和值 if ret_list: for i in ret_list: switch_value[i.split()[0]] = i.split()[4] # print(switch_value) switch_name_error_X = [] switch_name_error_Y = [] for k, i in switch_value.items(): if int(float(i.split("%")[0])) > int(X_value): switch_name_error_X.append(k) continue if int(float(i.split("%")[0])) < int(X_value) and int(float(i.split("%")[0])) > int(Y_value): switch_name_error_Y.append(k) continue else: print("端口:%s 检查正常当前为:%s" % (k, i)) print("当前异常端口大于{},端口号为{}".format(X_value, switch_name_error_X)) print("当前异常端口大于{}小于{},端口号为{}".format(Y_value, X_value, switch_name_error_Y)) file_errorX = '' #成需要重启的命令文件 file_errorY = '' if len(switch_name_error_X) > 0: starX = 'shutdown' #file_errorX = '' # 生成需要重启的命令文件 for i in switch_name_error_X: ret_errorX = '%s\n%s\n' % (i, starX) file_errorX += ret_errorX if len(switch_name_error_Y) > 0: #ret_errorY = '' starY = 'undo shutdown' for i in switch_name_error_Y: ret_errorY = '%s\n%s\n' % (i, starY) file_errorY += ret_errorY if len(file_errorX) > 0 or len(file_errorY) > 0: return True, file_errorX, file_errorY else: return False, "正常" def switch_restart(ip, username, password, command, X_value, Y_value): tn = connect(ip, username, password, command) tn.write(b'sys\n') # 进入sys 模式 while True: ret = get_error(ip, username, password, command, X_value, Y_value) if ret[0]: print("端口异常,开始启动") #file_errorX if ret[1]:# 执行 shutdown for i in ret[1].splitlines(): tn.write(b'%s\n'%i) time.sleep(0.30) #file_errorX if ret[2]: # 执行 undo shutdown 命令 for j in ret[2].splitlines(): tn.write(b'%s\n'%j) time.sleep(0.30) else: print("当前端口全部正常") break if __name__ == '__main__': command = b'dis int b' # 执行的命令 Username = 'test' # 用户名 Password = 'test' # 密码 ip = '59.63.188.194' # IP地址 X_value = 90 # X 值 执行 shutdown 命令 Y_value = 80 # Y 值 执行 undo shutdown 命令 switch_restart(ip, Username, Password, command, X_value, Y_value)