怎么将Python项目telnet到网络设备

  介绍

怎么将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到网络设备