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使用PyFetion来发送短信的例子
Apr 22 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
python给微信好友定时推送消息的示例
Feb 20 Python
Python assert语句的简单使用示例
Jul 28 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
在python中读取和写入CSV文件详情
Jun 28 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
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
python 实现简易的记事本
2020/11/30 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
大二学生学习个人自我评价
2014/01/19 职场文书
教师节促销方案
2014/03/22 职场文书
婚前财产公证书
2014/04/10 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
老龄工作先进事迹
2014/08/15 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
单位委托函范文
2015/01/29 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python