Python如何telnet到网络设备


Posted in Python onFebruary 18, 2021

0.前言

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

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

1.1 简单测试环境

  1. 使用python3环境
  2. 使用内置telnetlib模块
  3. 简单的实验环境
说明:
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. 完整代码

'''
欢迎关注微信公众号:'diandijishu'
 此平台是网路工程师个人日常技术、项目案例经验分享,
 为巩固及提升技术能力乃至共享所学所知技术
 也欢迎各位工程师一起分享、一起成长。
'''

#!/usr/bin/env python
#coding:utf-8

'导入模块'
from telnetlib import Telnet
import time
import 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'\n')
    self.tn.write(username.encode() + b'\n')
    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'\n')
    rely = self.tn.expect([], timeout=1)[2].decode().strip()
    if verbose:
      print(rely)
    '进去特权模式'
    if enable is not None:
      self.tn.write(b'enable\n')
      self.tn.write(enable.encode() + b'\n')
      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'\n')
        time.sleep(2)
        rely = self.tn.read_very_eager().decode()
        logging.warning('命令执行结果:\n %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. 运行效果

Python如何telnet到网络设备

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

4. 报错效果

4.1 远程连接不上

4.2 用户名和密码错误

Python如何telnet到网络设备

5. 碎碎语

这些只是一些简单的代码,待优化的地方还是很多,先给小伙伴们学习一下,telnet协议是个不安全的,基本网络环境很少用了,ssh为常用的协议,安全又好用,下个文章我给大家介绍python如何使用ssh模块哈。
本人代码功夫不深,如有缺陷望指教,多谢。

以上就是Python如何telnet到网络设备的详细内容,更多关于python telnet到网络设备的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python的面向对象编程方式学习笔记
Jul 12 Python
Python简单生成8位随机密码的方法
May 24 Python
Python3计算三角形的面积代码
Dec 18 Python
Python OpenCV获取视频的方法
Feb 28 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Python @property使用方法解析
Sep 17 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python如何实现定时器功能
May 28 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python运算符+与+=的方法实例
Feb 18 #Python
python 获取计算机的网卡信息
Feb 18 #Python
python中time tzset()函数实例用法
Feb 18 #Python
python中zip()函数遍历多个列表方法
Feb 18 #Python
python模块内置属性概念及实例
Feb 18 #Python
Python中的流程控制详解
Feb 18 #Python
python爬取豆瓣电影排行榜(requests)的示例代码
Feb 18 #Python
You might like
世界上第一台立体声收音机
2021/03/01 无线电
PHP sprintf()函数用例解析
2011/05/18 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
浅谈php7的重大新特性
2015/10/23 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
js查错流程归纳
2012/05/04 Javascript
js控制frameSet示例
2013/09/10 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
酒店拾金不昧表扬信
2014/01/18 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
Python 图片添加美颜效果
2022/04/28 Python