用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. 完整代码
'''
欢迎关注微信公众号:'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. 运行效果

备注:这个运行的效果我只存放了192.168.1.101这个IP,精简一下,为了效果。
4. 报错效果
4.1 远程连接不上

4.2 用户名和密码错误

5. 碎碎语
这些只是一些简单的代码,待优化的地方还是很多,先给小伙伴们学习一下,telnet协议是个不安全的,基本网络环境很少用了,ssh为常用的协议,安全又好用,下个文章我给大家介绍python如何使用ssh模块哈。
本人代码功夫不深,如有缺陷望指教,多谢。
如果喜欢我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享

用Python怎么telnet到网络设备的更多相关文章
- 用Python怎么SSH到网络设备
0. 前言 自上一篇文章<用python怎么telnet到网络设备>,简单使用了telnetlib库给大家演示了下,但是,现实环境中仍不建议去使用telnet. SSH(Secure Sh ...
- Python实现telnet命令测试防火墙
Python实现telnet命令测试防火墙 telnet主要用于测试主机端口是否开通 ping主要是用来测试网络是否畅通和主机是否正在使用 使用Python实现Telnet测试主机端口是否开通的功能. ...
- Python实现Telnet自动连接检测密码
最近在学习Python网络相关编程,这个代码实现了Telnet自动连接检测root用户密码,密码取自密码本,一个一个检测密码是否匹配,直到匹配成功,屏幕输出停止. Python内置了telnetlib ...
- 网络初级篇之配置telnet登录网络设备(实验)
一.作用 在日常工作中,登录网络设备,对其进行配置主要有几种方式:console.Telnet与ssh.这样可以实现远程(只要网络可达)控制,极大的方便了工作.今天主要讲解一下配置Telnet ...
- python编写telnet登陆出现TypeError:'str' does not support the buffer interface
python3支持byte类型,python2不支持.在python3中,telnet客户端向远程服务器发送的str要转化成byte,从服务器传过来的byte要转换成str,但是在python2不清楚 ...
- python实现Telnet远程登陆到设备并执行命令
#encoding=utf-8 import telnetlib import time def do_telnet(Host, username, password, finish, command ...
- 【转】python实现Telnet操作
# -*- coding: utf-8 -*- import logging import telnetlib import time import sys import os host_ip = ' ...
- Python实现Telnet连接
import loggingimport telnetlibimport timeclass TelnetClient(): def __init__(self,): self.tn = telnet ...
- python paramiko自动登录网络设备抓取配置信息
ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostn ...
随机推荐
- C# 读取Word内容控件
在Word中,借助内容控件,可设计出具有特定功能的文档或模板.以下表格中简单介绍了几种常用的内容控件. 名称 简介 下拉列表内容控件 下拉列表包含了一个预先定义好的列表.和组合框不同的是下拉列表不允许 ...
- MACOS安装使用kafka
安装(会自动依赖安装zookeeper) brew install kafka 启动zookeeper cd /usr/local/Cellar/kafka/2.1.1/bin/ ./zookeepe ...
- Python 基础1 - 位运算符
引言 本文主要介绍位运算符,实际上Python有以下7类运算符: [赋值运算符].[比较运算符].[算术运算符].[逻辑运算符].[身份运算符].[成员运算符].[位运算符] 位运算符 按位运算符是把 ...
- js生成玫瑰图
html: <canvas id="c" height="600" width="600"></canvas> js ...
- 【Nginx】应用场景
一.概述 二.Nginx虚拟主机配置 2.1 外网映射工具 2.2 基于虚拟主机配置域名 2.3 基于端口的虚拟主机 三.Nginx配置反向代理 3.1 反向代理的作用 3.2 反向代理的好处 3.3 ...
- 【Offer】[55-2] 【平衡二叉树】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如, ...
- 【Offer】[7] 【重建二叉树】
题目描述 思路分析 Java代码 代码链接 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4, ...
- 洛谷 P1980【计数问题】 题解(1)
鉴于数据最高只有七位数,通过判断数位,逐位判断即可完成本题. (运行很快,打得手疼) //Stand up for the faith!#include<bits/stdc++.h> us ...
- 005 Python开发环境配置
目录 一.概述 二.Python语言概述 2.1 Python语言的诞生 2.2 Monty Python组合 三.Python语言系统开发环境配置 四.Python程序编写与运行 4.1 Pytho ...
- 【第十一篇】这一篇来说说MVC+EF+easyui datagrid的查询功能
老规矩 直接上代码 <form class="form-horizontal"> <div class="box-body"> < ...