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怎么telnet到网络设备相关推荐

  1. python硬件交互_对Python的交互模式和直接运行.py文件的区别详解

    对Python的交互模式和直接运行.py文件的区别详解 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下. 在命令行模式下,可以执行p ...

  2. python 外部程序 交互_使用Python与其他程序交互

    如果你真正想找的是一个很好的借口来教自己如何与其他应用程序交互,这可能不是最好的一个.网络浏览器很混乱,时间安排不可预测,等等.所以,你承担了一项非常艰巨的任务,如果你用通常的方式去做,那将非常容易( ...

  3. 微信小程序和python数据交互_记录 python flask 与微信小程序交互

    一.小程序向flask传递参数 1.小程序将请求数据转换为JSON格式 wx.request({ url: 'http://127.0.0.1:8080/query_user', data: { go ...

  4. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  5. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  6. python培训班-Python培训机构_高品质Python线下开发培训班推荐-黑马程序员

    Python编程基础基础班1 课时:15天技术点:97项测验:2次学习方式:线下面授 学习目标 1.掌握Python开发环境基本配置|2.掌握运算符.表达式.流程控制语句.数组等的使用|3.掌握字符串 ...

  7. python的认识_认识Python和基础知识

    一.第一个Python程序 用vim编写,格式: vim hello.py 然后按 i 进入插入模式开始写代码,注意所有的代码都要用英文输入法,先写括号和引号,再在引号里面写内容(为了避免引号.括号不 ...

  8. python 创意项目_针对python开发人员的10个很棒的python项目创意

    python 创意项目 The joy of coding Python should be in seeing short, concise, readable classes that expre ...

  9. python 列表拼接_【Python杂货铺】速学python基础

    "人生苦短,我学python"是编程届的名言.用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言.拥有了某一个语言的功底,再来学习另外一种语言应该是十 ...

最新文章

  1. Jinja2 模板用法
  2. 这家创新学校是如何用钉钉宜搭构建了数字化管理网络的?
  3. 智齿客服Android集成流程,一种基于编程语言接入智齿客服的方法以及电子设备与流程...
  4. SpringBoot创建项目入门案例
  5. LeetCode513 找左下角的值
  6. android交互xml代码,Unity 与Android的交互(Android studio)
  7. 《Oracle 11g数据库基础教程(第2版)》读者勘误
  8. python中--snip--是什么意思
  9. 云更新服务器更新不了最新游戏,云更新服务器环境要求 | 专业网吧维护
  10. web前端总结之文本超出显示省略号
  11. Swipe 移动端滑动插件使用详解
  12. 广州智能服务机器人展览会 | 2016人工智能展
  13. Oracle 数据库12c 新特性总结
  14. 高清和网络电视是数字电视的希望
  15. 要闻君说:又一家云服务关停,原来是网易;MongoDB又爆泄露大新闻;Google 的中国版搜索引擎项目其实仍在继续...
  16. 【默默努力】ig-wxz-and-hotdog
  17. html导出pdf及word,保留完成样式以及格式调研
  18. Sql Server 2012完全彻底卸载教程
  19. chrome linux 64 deb,在Arch Linux下安装Chrome的DEB包
  20. BoT-SORT: Robust Associations Multi-Pedestrian Tracking

热门文章

  1. DNS_ARP_DHCP协议
  2. (转)探究 TCP 一次数据包最大负载,上限真的是 65495 byte 吗
  3. al-khaser 调试器,虚拟机检测工具
  4. python实现键盘记录器
  5. 23、HTML图像按钮
  6. CSS3的绝对定位与相对定位
  7. Codeforces Round #744 (Div. 3)【A-E1】
  8. 1001 A+B Format (20 分)【难度: 简单 / 知识点: 模拟】
  9. 隐藏数据的好方法----Alternative Data Stream(可选数据流)
  10. linux c调用wcf服务,Silverlight+WCF实现跨域调用