加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Python3 telnetlib 库使用方法

发布时间:2021-07-06 06:01:15 所属栏目:大数据 来源: https://blog.csdn.net/yilovex
导读:telnetlib 模块提供了一个 Telnet 实现 Telnet 协议的类,凡是实现了 Telnet 协议的设都可以使用 telnetlib 进行登录。 通过 telnetlib 基础功能将其封装为类。 #!/usr/bin/env python3# -*- coding: UTF-8 -*-import timeimport telnetlibclass TelnetLib(o

telnetlib 模块提供了一个Telnet 实现 Telnet 协议的类,凡是实现了 Telnet 协议的设都可以使用 telnetlib 进行登录。

通过 telnetlib 基础功能将其封装为类。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import time
import telnetlib


class TelnetLib(object):

    def __init__(self):
        self.tn = None
        self.EXIT = b'quitn'
        self.LOGIN = b'Login'
        self.USERNAME = b'Username:'
        self.PASSWORD = b'Password:'

    @staticmethod
    def format(data):
        return data.encode('UTF-8') + b'n'

    def link(self,host,port=23,timeout=3):
        # 连接设备
        self.tn = telnetlib.Telnet(host,port,timeout)

    def login(self,username,password):
        # 监听登录事件
        self.tn.read_until(self.LOGIN)
        # 监听输入账户事件
        self.tn.read_until(self.USERNAME)
        # 输入账户
        self.tn.write(self.format(username))
        # 监听输入密码事件
        self.tn.read_until(self.PASSWORD)
        # 输入密码
        self.tn.write(self.format(password))

    def shell(self,command):
        # 执行命令
        self.tn.write(self.format(command))
        # 延时0.5s
        time.sleep(1)
        # 在I/O不阻塞的情况下读取所有数据,否则返回空
        data = self.tn.read_very_eager()
        # 解码后返回数据
        return data.decode('UTF-8')

    def __del__(self):
        # 退出设备
        self.tn.write(self.EXIT)
        # 关闭连接
        self.tn.close()


if __name__ == '__main__':
    tl = TelnetLib()
    tl.link(host='127.0.0.1',timeout=3)
    tl.login(username='admin',password='***')
    return_value = tl.shell(command='display ip routing-table')
    print(return_value)

Telnet 实例具有以下方法:

直到阅读到给定的字符串返回,或者超时返回。如果找不到匹配项,则返回可用的任何项,可能为空字符串。

Telnet.read_until(expected[,timeout])

读取所有数据直到EOF。

Telnet.read_all()

至少读取一个字节的熟数据。

Telnet.read_some()

读取所有熟数据。

Telnet.read_very_eager()

随时读取可用的数据。

Telnet.read_eager()

处理并返回队列中已有的数据。

Telnet.read_lazy()

返回已熟练队列中的任何数据。

Telnet.read_very_lazy()

返回SB / SE对之间收集的数据。

Telnet.read_sb_data()

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读