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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
编写Python的web框架中的Model的教程
Apr 29 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
关于python的bottle框架跨域请求报错问题的处理方法
Mar 19 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
使用Python写一个小游戏
Apr 02 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
关于Django Models CharField 参数说明
Mar 31 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
pytorch 中nn.Dropout的使用说明
May 20 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实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
phpinfo的知识点总结
2019/10/10 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python读写zip压缩文件的方法
2018/08/29 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
产品开发计划书
2014/04/27 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
明星员工获奖感言
2014/08/14 职场文书
就业协议书样本
2014/08/20 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
优秀团支部申报材料
2014/12/26 职场文书
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫