python
复制代码
import telnetlib
import time
# ===================== 配置区(修改以下内容)=====================
# 批量设备列表:[(IP, 端口, 用户名, 密码), ...]
DEVICE_LIST = [
("192.168.1.11", 23, "admin", "Huawei@123"), # 设备1
("192.168.1.12", 23, "admin", "Huawei@123"), # 设备2
]
# 要批量下发的命令(按执行顺序写)
COMMANDS = [
"sys", # 示例:进系统模式
"vlan 10", # 示例:建立vlan
"dis vlan", # 示例:查看配置
]
# 超时/等待参数(根据设备响应速度调整)
CONNECT_TIMEOUT = 10 # 连接超时时间(秒)
CMD_WAIT_TIME = 2 # 执行每条命令后的等待时间(秒)
# ===================== 核心函数 =====================
def telnet_device(host, port, username, password, commands):
"""连接单台设备并执行命令"""
try:
# 1. 建立Telnet连接
tn = telnetlib.Telnet(host, port, timeout=CONNECT_TIMEOUT)
print(f"\n开始处理设备 {host} ==================================================================")
# 2. 输入用户名(匹配Username: 提示符)
tn.read_until(b"Username:", timeout=5)
tn.write(username.encode('utf-8') + b"\n")
time.sleep(1)
# 3. 输入密码(匹配Password: 提示符)
tn.read_until(b"Password:", timeout=5)
tn.write(password.encode('utf-8') + b"\n")
time.sleep(1)
# 4. 批量执行命令
for cmd in commands:
print(f"执行命令:{cmd}")
# 发送命令(加换行符表示回车执行)
tn.write(cmd.encode('utf-8') + b"\n")
time.sleep(CMD_WAIT_TIME)
# 读取命令执行结果
result = tn.read_very_eager().decode('utf-8', errors='ignore')
# 打印结果(仅展示关键内容,避免刷屏)
print(f"结果:\n{result.strip()[:500]}...") # 只显示前500字符
# 5. 关闭连接
tn.close()
print(f"设备 {host} 处理完成 ====================================================================\n")
except Exception as e:
print(f"设备 {host} 处理失败:{str(e)} ==========================================================\n")
# ===================== 主程序 =====================
if __name__ == "__main__":
# 遍历设备列表,逐个处理
for device in DEVICE_LIST:
host, port, username, password = device
telnet_device(host, port, username, password, COMMANDS)
print("所有设备处理完毕!")