介绍 0。前言
1。测试环境及关键代码解释
1.1简单测试环境
怎么将Python项目telnet到网络设备?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
0。前言
telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但是,它的缺陷太明显了,就是不安全、信息明文传送,极容易被攻击窃取信息,不推荐使用,但本节我还是先从它入手哈。
1。测试环境及关键代码解释
1.1简单测试环境
- <李>
使用python3环境
李> <李>使用内置telnetlib模块
李> <李>简单的实验环境
李>说明: cmd.txt文件里面命令如下: terminal length 0 show 时钟 ,show ip  interface 简短 list.txt文件里面的IP如下: ,192.168.1.101 ,是192.168.1.102 以前,192.168.1.103 >1.2关键代码
import xx:导入模块 class xx:定义类 def xx:,定义函数 try-except :处理可能引发的异常 tn.read_until(预期,,超时=None):等待预期字符串或等待超时 tn.write(缓冲):写入的字符串(意思发送给命令给设备) tn.expect(列表,超时=None):读显,列表采用正则表达式(意思把执行过程显示出来) tn.read_very_eager():读显(意思把执行过程显示出来) tn.open(主机,端口=0[,超时]):连接主机 tn.close():关闭连接提示:终端与网络设备交付的信息是类以字节型,所以要把终端上的字符串编码编码转换为字节对象,网络设备回显的字节信息要解码解码。
2。完整代码
& # 39; & # 39; & # 39; 欢迎关注微信公众号:& # 39;diandijishu& # 39; ,此平台是网路工程师个人日常技术,项目案例经验分享, ,为巩固及提升技术能力乃至共享所学所知技术 ,也欢迎各位工程师一起分享,一起成长。 & # 39;& # 39;& # 39; # !/usr/bin/env python utf - 8编码: & # 39;导入模块& # 39; 得到telnetlib import  Telnet import 时间 import 日志 & # 39;定义类& # 39; class TelnetClient (): & # 39;才能初始化属性& # 39; def 才能__init__(自我): ,,,self.tn =, Telnet () & # 39;才能定义login_host函数,用于登陆设备& # 39; def 才能;login_host(自我、ip、用户名、密码,使=None, verbose=True): ,,,& # 39;连接设备,try-except结构& # 39; ,,,试一试: ,,,,,self.tn.open (ip、端口=23) ,,,除了: ,,,,,logging.warning (& # 39; % s网络连接失败& # 39;,% ip) ,,,,,return 错误的 ,,,& # 39;输入用户名& # 39; ,,,self.tn.read_until (b # 39;用户名:& # 39;,,超时=1) ,,,self.tn.write (b # 39; \ n # 39;) ,,,self.tn.write (username.encode (), +, b # 39; \ n # 39;) ,,,rely =, self.tn.expect([],超时=1)[2].decode () .strip(),, #读显 ,,,if 详细: ,,,,,印刷(依赖) ,,,& # 39;输入用户密码& # 39; ,,,self.tn.read_until (b # 39;密码:& # 39;,,超时=1) ,,,self.tn.write (password.encode (), +, b # 39; \ n # 39;) ,,,rely =, self.tn.expect([],超时=1)[2].decode () .strip () ,,,if 详细: ,,,,,印刷(依赖) ,,,& # 39;进去特权模式& # 39; ,,,if enable is not 没有: ,,,,,self.tn.write (b # 39;使\ n # 39;) ,,,,,self.tn.write (enable.encode (), +, b # 39; \ n # 39;) ,,,,,if 详细: ,,,,,,,rely =, self.tn.expect([],超时=1)[2].decode () .strip () ,,,,,,,印刷(依赖) ,,,,,,,time . sleep (1) ,,,rely =, self.tn.read_very_eager () .decode () ,,,if & # 39; Login 无效# 39;,not 拷贝的依赖: ,,,,,logging.warning (& # 39; % s登陆成功& # 39;,%,ip) ,,,,,return 真实的 ,,,: ,,,,,logging.warning (& # 39; % s登陆失败,用户名或密码错误& # 39;,%,ip) ,,,,,return 错误的 & # 39;才能定义do_cmd函数,用于执行命令& # 39; def 才能;do_cmd(自我,cmds): ,,,& # 39;读取文件,为语句循环执行命令& # 39; ,,,with 开放(cmds), as cmd_obj: ,,,,,for cmd 拷贝cmd_obj: ,,,,,,,self.tn.write (cmd.encode () .strip (), +, b # 39; \ n # 39;) ,,,,,,,time . sleep (2) ,,,,,,,rely =, self.tn.read_very_eager () .decode () ,,,,,,,logging.warning(& # 39;命令执行结果:\ n % & # 39;, %的依赖) & # 39;才能定义logout_host函数,关闭程序& # 39; def 才能logout_host(自我): ,,,self.tn.close () if __name__ ==, & # 39; __main__ # 39;: 时间=username 才能;& # 39;思科# 39;,#用户名 时间=password 才能;& # 39;思科# 39;,#密码 时间=enable 才能;& # 39;思科# 39;,,#特权密码 时间=lists 才能;& # 39;list.txt& # 39;, #存放IP地址文件,相对路径 时间=cmds 才能;& # 39;cmd.txt& # 39;,, #存放执行命令文件,相对路径 null null null null null null null null null怎么将Python项目telnet到网络设备