Python基础教程:用Python怎么telnet到网络设备

0.前言

Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但是,它的缺陷太明显了,就是不安全,信息明文传送,极容易被攻击窃取信息,不推荐使用,但本节我还是先从它入手哈。

1. 测试环境及关键代码解释

1.1 简单测试环境

  • 使用python3环境
  • 使用内置telnetlib模块
  • 简单的实验环境

说明:

cmd.txt文件里面命令如下:

terminal length 0 show clock show ip interface brief

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(expected, timeout=None):等待预期字符串或等待超时

tn.write(buffer):写入的字符串(意思发送给命令给设备)

tn.expect(list, timeout=None):读显,list采用正则表达式(意思把执行过程显示出来)

tn.read_very_eager():读显(意思把执行过程显示出来)

tn.open(host, port=0[, timeout]):连接主机

tn.close():关闭连接

Tips:终端与网络设备交付的信息是以byte类型,所以要把终端上的字符串encode编码转换为byte对象,网络设备回显的byte信息要decode解码。

2. 完整代码

'''欢迎关注:'333' 此平台是网路工程师个人日常技术、项目案例经验分享, 为巩固及提升技术能力乃至共享所学所知技术 也欢迎各位工程师一起分享、一起成长。'''#!/usr/bin/env python#coding:utf-8'导入模块'from telnetlib import Telnetimport timeimport logging'定义类'class TelnetClient(): '初始化属性' def __init__(self): self.tn = Telnet() '定义login_host函数,用于登陆设备' def login_host(self,ip,username,password,enable=None,verbose=True): '连接设备,try-except结构' try: self.tn.open(ip,port=23) except: logging.warning('%s网络连接失败' %ip) return False '输入用户名' self.tn.read_until(b'Username:', timeout=1) self.tn.write(b'') self.tn.write(username.encode() + b'') rely = self.tn.expect([], timeout=1)[2].decode().strip() #读显 if verbose: print(rely) '输入用户密码' self.tn.read_until(b'Password:', timeout=1) self.tn.write(password.encode() + b'') rely = self.tn.expect([], timeout=1)[2].decode().strip() if verbose: print(rely) '进去特权模式' if enable is not None: self.tn.write(b'enable') self.tn.write(enable.encode() + b'') if verbose: rely = self.tn.expect([], timeout=1)[2].decode().strip() print(rely) time.sleep(1) rely = self.tn.read_very_eager().decode() if 'Login invalid' not in rely: logging.warning('%s登陆成功' % ip) return True else: logging.warning('%s登陆失败,用户名或密码错误' % ip) return False '定义do_cmd函数,用于执行命令' def do_cmd(self,cmds): '读取文件,for语句循环执行命令' with open(cmds) as cmd_obj: for cmd in cmd_obj: self.tn.write(cmd.encode().strip() + b'') time.sleep(2) rely = self.tn.read_very_eager().decode() logging.warning('命令执行结果: %s' %rely) '定义logout_host函数,关闭程序' def logout_host(self): self.tn.close()if __name__ == '__main__': username = 'cisco' #用户名 password = 'cisco' #密码 enable = 'cisco' #特权密码 lists = 'list.txt' #存放IP地址文件,相对路径 cmds = 'cmd.txt' #存放执行命令文件,相对路径 telnet_client = TelnetClient() '读取文件,for语句循环登陆IP' with open(lists,'rt') as list_obj: for ip in list_obj: '如果登录结果为True,则执行命令,然后退出' if telnet_client.login_host(ip.strip(),username,password,enable): telnet_client.do_cmd(cmds) telnet_client.logout_host() time.sleep(2)

3. 运行效果

备注:这个运行的效果我只存放了192.168.1.101这个IP,精简一下,为了效果。

4. 报错效果

  • 远程连接不上
  • 用户名和密码错误

5. 碎碎念

这些只是一些简单的代码,待优化的地方还是很多,先给小伙伴们学习一下,telnet协议是个不安全的,基本网络环境很少用了,ssh为常用的协议,安全又好用!伙伴们有需要 补充的欢迎留言!

python expect模块_Python基础教程:用Python怎么telnet到网络设备相关推荐

  1. python expect模块_PYTHON基础语法全面总结

    YOU CAN DRINK ALL YOU LIKE, BUT IN THE MORNING YOU GET HEADACHE WITH THE SAME PROBLEMS. PYTHON基础语法总结 ...

  2. python dict下标_Python基础教程:python的数据类型

    python基础之五大标准数据类型 学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个"你好,世界"并没有什么了不起,要看透事物的本质,熟悉 ...

  3. python 包用法_Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 这篇文章主要介绍了 Python 基础教程之包和类的用法的相关资料, 需要的朋友可以参考下 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido ...

  4. cpython python 区别面试_python基础教程之千万不要错过这几道Python面试题

    第1题: python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性, ...

  5. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  6. python考勤管理系统_python基础教程:face++与python实现人脸识别签到(考勤)功能...

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

  7. python 英语教学_Python基础教程(英文视频教学)

    Python基础教程 -.1.-.Installing_Python_video.flv: http://www.t00y.com/file/10034879 -.2.-.Numbers_and_Ma ...

  8. python sorted下标_Python学习教程(Python学习路线):第七天-字符串和常用数据结构

    Python学习教程(Python学习路线):字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代 ...

  9. python 优雅退出_Python学习教程:Python 使用 backoff 更优雅的实现轮询

    我们经常在开发中会遇到这样一种场景,即轮循操作.今天介绍一个Python库,用于更方便的达到轮循的效果--backoff. Python学习教程:Python 使用 backoff 更优雅的实现轮询 ...

最新文章

  1. 计算机模拟组装测试题一,江苏专转本计算机模拟自测试题(一)
  2. SQL语句及索引优化
  3. Facebook 如何管理150亿张照片
  4. 基于泛型编程的序列化实现方法
  5. 如何通过BBED找回删除数据
  6. 程序员里面开源_如何以开源程序员的身份开始
  7. Unicode字符集和编码方式
  8. 使用MVC2模式创建新闻网站
  9. VMware15.5.2安装unlocker时下载工具一直失败
  10. 工业相机和镜头参数简析
  11. 阿丹学财报(1)- 财报是用来证伪的
  12. 路径上有/**/、/*/的含义
  13. python代码 学生上课签到表_一种上课签到系统的制作方法
  14. linux的systemctl命令介绍
  15. gitlab中文网的使用_GitLab使用流程及手册
  16. 假设检验中的P 值 (P value)
  17. win10 设置为静态ip地址
  18. php 微信怎么清除缓存,前端清除缓存方法(微信缓存引起的bug)
  19. 基础课程《普通地质学》笔记
  20. 【计算机毕设】毕设题分析及设计

热门文章

  1. python批量下载文件教程_Python抓包菜鸟教程:批量下载图片的方法,电脑和手机都能用...
  2. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...
  3. tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化
  4. python变量区变量保存与加载_python – Flask:使用全局变量将数据文件加载到内存中...
  5. 微型计算机硬盘为什么要分区,为什么懂电脑的人,都说硬盘不需要分区?看完你就知道了...
  6. mysql架构组成_第 2 章 MySQL 架构组成
  7. 消息队列-Message Queue
  8. Problem C: 括号匹配(栈和队列)
  9. 从0到1使用VUE-CLI3开发实战(五):模块化VUEX及使用vuetify
  10. 2018百度之星程序设计大赛 - 资格赛 1002 子串查询