• 使用Python3实现Telnet功能


    一、程序要点说明

    python实现telnet客户端的六个关键问题及其答案是:

    使用什么库实现telnet客户端----telnetlib

    怎么连接主机----两种方法,一种是在实例化时传入ip地址连接主机(tn = telnetlib.Telnet(host_ip,port=23)),第二种是,先不传参数进行实例化再用open方法连接主机(我这里使用的方法)

    怎么输入用户名密码----我们使用read_untilb函数监听,出现标志后使用write方法向服务端传输用户名密码

    怎么执行命令----仍然是使用write方法向服务端传送命令,不管向服务端传送什么数据都用write;不过要注意需要编码成bytes类型

    怎么获取命令执行结果----使用read_very_eager()方法,该方法获取的内容是上次获取之后本次获取之前的所有输入输出;由于获取到的是bytes类型要decode解码一下

    怎么退出telnet---退出telnet使用write方法向服务器提交exit命令即可

    二、程序源代码

    复制代码
    import logging
    import telnetlib
    import time
    
    
    class TelnetClient():
        def __init__(self,):
            self.tn = telnetlib.Telnet()
    
        # 此函数实现telnet登录主机
        def login_host(self,host_ip,username,password):
            try:
                # self.tn = telnetlib.Telnet(host_ip,port=23)
                self.tn.open(host_ip,port=23)
            except:
                logging.warning('%s网络连接失败'%host_ip)
                return False
            # 等待login出现后输入用户名,最多等待10秒
            self.tn.read_until(b'login: ',timeout=10)
            self.tn.write(username.encode('ascii') + b'
    ')
            # 等待Password出现后输入用户名,最多等待10秒
            self.tn.read_until(b'Password: ',timeout=10)
            self.tn.write(password.encode('ascii') + b'
    ')
            # 延时两秒再收取返回结果,给服务端足够响应时间
            time.sleep(2)
            # 获取登录结果
            # read_very_eager()获取到的是的是上次获取之后本次获取之前的所有输出
            command_result = self.tn.read_very_eager().decode('ascii')
            if 'Login incorrect' not in command_result:
                logging.warning('%s登录成功'%host_ip)
                return True
            else:
                logging.warning('%s登录失败,用户名或密码错误'%host_ip)
                return False
    
        # 此函数实现执行传过来的命令,并输出其执行结果
        def execute_some_command(self,command):
            # 执行命令
            self.tn.write(command.encode('ascii')+b'
    ')
            time.sleep(2)
            # 获取命令结果
            command_result = self.tn.read_very_eager().decode('ascii')
            logging.warning('命令执行结果:
    %s' % command_result)
    
        # 退出telnet
        def logout_host(self):
            self.tn.write(b"exit
    ")
    
    if __name__ == '__main__':
        host_ip = '192.168.220.129'
        username = 'root'
        password = 'abcd1234'
        command = 'whoami'
        telnet_client = TelnetClient()
        # 如果登录结果返加True,则执行命令,然后退出
        if telnet_client.login_host(host_ip,username,password):
            telnet_client.execute_some_command(command)
            telnet_client.logout_host()
    复制代码

    参考:

    https://docs.python.org/3/library/telnetlib.html

  • 相关阅读:
    .net core 操作IngestAttachment插件
    CF1106F Lunar New Year and a Recursive Sequence
    PyQt5开发环境搭建和配置 何苦
    centos7安装GitLab 何苦
    GitLab 使用介绍 何苦
    git_stats web代码图形统计工具详解 何苦
    在 Windows 上安装 Python 何苦
    .gitignore 何苦
    使用Pyinstaller转换.py文件为.exe可执行程序 何苦
    Docker安装 各系统安装 ubuntu mac windows 何苦
  • 原文地址:https://www.cnblogs.com/fyly/p/10823539.html
Copyright © 2020-2023  润新知