• 售前

  • 售后

热门帖子
入门百科

Python怎样telnet到网络设备

[复制链接]
gui57 显示全部楼层 发表于 2021-10-25 18:50:51 |阅读模式 打印 上一主题 下一主题
0.前言


Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再认识不过了,常用于远程登岸到网络装备进行操纵,但是,它的缺陷太明显了,就是不安全,信息明文传送,极容易被攻击窃取信息,不推荐利用,但本节我照旧先从它入手哈。
1. 测试环境及关键代码表明


1.1 简单测试环境


      
  • 利用python3环境  
  • 利用内置telnetlib模块  
  • 简单的实行环境
  1. 说明:
  2. cmd.txt文件里面命令如下:
  3. terminal length 0
  4. show clock
  5. show ip interface brief
  6. list.txt文件里面的IP如下:
  7. 192.168.1.101
  8. 192.168.1.102
  9. 192.168.1.103
复制代码
1.2 关键代码
  1. import xx:导入模块
  2. class xx:定义类
  3. def xx: 定义函数
  4. try-except :处理可能引发的异常
  5. tn.read_until(expected, timeout=None):等待预期字符串或等待超时
  6. tn.write(buffer):写入的字符串(意思发送给命令给设备)
  7. tn.expect(list, timeout=None):读显,list采用正则表达式(意思把执行过程显示出来)
  8. tn.read_very_eager():读显(意思把执行过程显示出来)
  9. tn.open(host, port=0[, timeout]):连接主机
  10. tn.close():关闭连接
复制代码
Tips:终端与网络装备交付的信息是以byte范例,以是要把终端上的字符串encode编码转换为byte对象,网络装备回显的byte信息要decode解码。
2. 完备代码
  1. '''
  2. 欢迎关注微信公众号:'diandijishu'
  3. 此平台是网路工程师个人日常技术、项目案例经验分享,
  4. 为巩固及提升技术能力乃至共享所学所知技术
  5. 也欢迎各位工程师一起分享、一起成长。
  6. '''
  7. #!/usr/bin/env python
  8. #coding:utf-8
  9. '导入模块'
  10. from telnetlib import Telnet
  11. import time
  12. import logging
  13. '定义类'
  14. class TelnetClient():
  15.   '初始化属性'
  16.   def __init__(self):
  17.     self.tn = Telnet()
  18.   '定义login_host函数,用于登陆设备'
  19.   def login_host(self,ip,username,password,enable=None,verbose=True):
  20.     '连接设备,try-except结构'
  21.     try:
  22.       self.tn.open(ip,port=23)
  23.     except:
  24.       logging.warning('%s网络连接失败' %ip)
  25.       return False
  26.     '输入用户名'
  27.     self.tn.read_until(b'Username:', timeout=1)
  28.     self.tn.write(b'\n')
  29.     self.tn.write(username.encode() + b'\n')
  30.     rely = self.tn.expect([], timeout=1)[2].decode().strip()  #读显
  31.     if verbose:
  32.       print(rely)
  33.     '输入用户密码'
  34.     self.tn.read_until(b'Password:', timeout=1)
  35.     self.tn.write(password.encode() + b'\n')
  36.     rely = self.tn.expect([], timeout=1)[2].decode().strip()
  37.     if verbose:
  38.       print(rely)
  39.     '进去特权模式'
  40.     if enable is not None:
  41.       self.tn.write(b'enable\n')
  42.       self.tn.write(enable.encode() + b'\n')
  43.       if verbose:
  44.         rely = self.tn.expect([], timeout=1)[2].decode().strip()
  45.         print(rely)
  46.         time.sleep(1)
  47.     rely = self.tn.read_very_eager().decode()
  48.     if 'Login invalid' not in rely:
  49.       logging.warning('%s登陆成功' % ip)
  50.       return True
  51.     else:
  52.       logging.warning('%s登陆失败,用户名或密码错误' % ip)
  53.       return False
  54.   '定义do_cmd函数,用于执行命令'
  55.   def do_cmd(self,cmds):
  56.     '读取文件,for语句循环执行命令'
  57.     with open(cmds) as cmd_obj:
  58.       for cmd in cmd_obj:
  59.         self.tn.write(cmd.encode().strip() + b'\n')
  60.         time.sleep(2)
  61.         rely = self.tn.read_very_eager().decode()
  62.         logging.warning('命令执行结果:\n %s' %rely)
  63.   '定义logout_host函数,关闭程序'
  64.   def logout_host(self):
  65.     self.tn.close()
  66. if __name__ == '__main__':
  67.   username = 'cisco' #用户名
  68.   password = 'cisco' #密码
  69.   enable = 'cisco'  #特权密码
  70.   lists = 'list.txt' #存放IP地址文件,相对路径
  71.   cmds = 'cmd.txt'  #存放执行命令文件,相对路径
  72.   telnet_client = TelnetClient()
  73.   '读取文件,for语句循环登陆IP'
  74.   with open(lists,'rt') as list_obj:
  75.     for ip in list_obj:
  76.       '如果登录结果为True,则执行命令,然后退出'
  77.       if telnet_client.login_host(ip.strip(),username,password,enable):
  78.         telnet_client.do_cmd(cmds)
  79.         telnet_client.logout_host()
  80.         time.sleep(2)
复制代码
3. 运行效果


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


4.1 远程连接不上

4.2 用户名和暗码错误


5. 碎碎语


这些只是一些简单的代码,待优化的地方照旧许多,先给小伙伴们学习一下,telnet协议是个不安全的,根本网络环境很少用了,ssh为常用的协议,安全又好用,下个文章我给各人先容python如何利用ssh模块哈。
本人代码功夫不深,如有缺陷望指教,多谢。
以上就是Python如何telnet到网络装备的具体内容,更多关于python telnet到网络装备的资料请关注脚本之家别的相关文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作