FreezeJ' Blog

telnetlib实现telnet功能

2020-09-28

telnet可以用来远程管理交换机,现在估计用的不多了,用ssh会更安全一点,这里只是作一个记录

# encoding=utf-8
## telnet test
import telnetlib
import time


def telnet(host, username, password, commands):
    """Telnet远程登录"""

    # 连接Telnet服务器
    tn = telnetlib.Telnet(host, port=23, timeout=30)
    # tn.debuglevel(2)  # 调试信息
    # 输入登录用户名
    tn.read_until('Username:')  # 这个要根据实际提示符来填写,可以设置timeout
    print '正在输入用户名'
    time.sleep(0.1)  # sleep是为了防止程序执行过快
    tn.write(username + '\n')  # 输入用户名

    # 输入登录密码
    tn.read_until('Password:')  # 这个要根据实际提示符来填写,可以设置timeout
    print '正在输入密码'
    time.sleep(0.1)
    tn.write(password + '\n')  # 输入密码

    # 登录完毕后执行命令
    print '正在执行命令'
    for cmd in commands:  # 循环命令列表
        time.sleep(0.1)
        tn.write('%s\r\n' %cmd)  # 执行命令

    # 输出命令结果
    print '正在读取命令信息'
    time.sleep(0.1)
    data = ''
    while data.find('EOF') == -1:  # 循环记录输出,直到碰上EOF(这个EOF是在命令列表自定义的,目的是为了更加准确的匹配结束符)
        time.sleep(0.1)
        data += tn.read_very_eager()  # 记录输出并且合并到data变量中
    print data  # 输出完整的信息
    print '完成信息输出'

    # 执行完毕后,终止Telnet连接(或输入exit退出)
    time.sleep(0.1)
    tn.close()  # tn.write('exit\n')
    print '结束程序'


if __name__ == '__main__':
    # 配置选项
    host = '10.1.1.1'  # Telnet服务器IP
    username = 'USERNAME'  # 登录用户名
    password = 'PASSWD'  # 登录密码
    commands = ['show version', 'show clock', 'EOF']  # 需要执行的命令列表,最后一个必须为结束符
    telnet(host, username, password, commands)