user-cmd.csv #用于保存需要配置到交换机命令
user-info.csv #用于保存交换机IP,用户名,密码
import telnetlib
import time
import getpass
from netmiko.huawei.huawei import HuaweiTelnet
import pandas as pd
# 用法示例
文件路径 = 'user-info.csv'
命令表格= 'user-cmd.csv'
telnet端口 = 23 # 根据实际情况修改端口号
#命令列表 = ['display ip int brief | include Vlan','dis version']
#telnet主机 = '192.168.56.10'
#用户名 = 'admin'
#密码 = 'abc-123'
###########交换机 IP,账户,密码调用
def 提取IP账户密码信息(文件路径):
# 用 pandas 的 read_csv 方法读取 CSV 文件
表格数据 = pd.read_csv(文件路径)
# 提取 IP、账户和密码列的数据
ip列表 = 表格数据['IP'].tolist()
账户列表 = 表格数据['账户'].tolist()
密码列表 = 表格数据['密码'].tolist()
#telnet执行命令(ip列表, telnet端口,命令列表,账户列表,密码列表)
return ip列表, 账户列表, 密码列表
###########交换机命令批量调用
def cmd_list(cmd_pash):
# 用 pandas 的 read_csv 方法读取 CSV 文件
cmd_data = pd.read_csv(cmd_pash)
# 提取 IP、账户和密码列的数据
input_cmd = cmd_data['命令'].tolist()
#telnet执行命令(ip列表, telnet端口,命令列表,账户列表,密码列表)
return input_cmd
def telnet执行命令(主机, 端口, 命令列表,用户名,密码):
# 创建 Telnet 对象
连接 = telnetlib.Telnet(主机, 端口, timeout=2)
# 登录
连接.read_until(b'Username:', timeout=2)
连接.write((用户名 + '\n').encode('ascii'))
连接.read_until(b'Password:', timeout=2)
连接.write((密码 + '\n').encode('ascii'))
# 逐个发送命令
for 命令 in 命令列表:
连接.write((命令 + '\n').encode('ascii'))
time.sleep(0.1)
# 读取输出,注意:在实际使用中,你可能需要根据命令的特定输出来判断是否需要等待更长的时间
输出 = 连接.read_until(b'prompt', timeout=1).decode('ascii')
print(输出)
# 关闭 Telnet 连接
连接.close()
###############################################################
# 调用函数并传入 CSV 文件的路径
提取IP账户密码信息(文件路径)
cmd_list(命令表格)
cmd_list1 = cmd_list(命令表格)
ip列表, 账户列表, 密码列表 = 提取IP账户密码信息(文件路径)
# 运行脚本,调用CVS > 提取的值给 telnet函数
for ip, 账户, 密码 in zip(ip列表, 账户列表, 密码列表):
#print(f'IP: {ip}, 账户: {账户}, 密码: {密码}')
print(f'开始登录:{ip}')
telnet执行命令(ip, telnet端口,cmd_list1,账户,密码)
time.sleep(0.1)