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到网络设备的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】