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实现马耳可夫链算法实例分析
May 20 Python
python实现类之间的方法互相调用
Apr 29 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
深入理解Django自定义信号(signals)
Oct 15 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
简单了解python高阶函数map/reduce
Jun 28 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python socket处理client连接过程解析
Mar 18 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
python中温度单位转换的实例方法
Dec 27 Python
python引入其他文件夹下的py文件具体方法
May 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
非常好的js代码
2006/06/27 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
vue实现拖拽效果
2019/12/23 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
一张图带我们入门Python基础教程
2017/02/05 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
美国最大网上鞋店:Zappos
2016/07/25 全球购物
职称自我鉴定
2013/10/15 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
服务行业口号
2014/06/11 职场文书
个人作风建设心得体会
2014/10/22 职场文书
2015年检验科工作总结
2015/04/27 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
解析MySQL binlog
2021/06/11 MySQL