python中telnetlib模块的使用方式

 更新时间:2023年11月10日 16:55:30   作者:上帝De助手  
这篇文章主要介绍了python中telnetlib模块的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python telnetlib模块的使用

python下能支持telnet的模块telnetlib是内置模块,直接import就可以了,其基本的使用方法也是比较简单的。

#encoding=utf-8
 
def do_telnet(Host, username, password, finish, commands):
    import telnetlib
    '''Telnet远程登录:Windows客户端连接Linux服务器'''
 
    # 连接Telnet服务器
    tn = telnetlib.Telnet(Host, port=23, timeout=10)
	tn.set_debuglevel(2)
     
    # 输入登录用户名
    tn.read_until('login: ')
    tn.write(username + '\n')
    
    # 输入登录密码
    tn.read_until('password: ')
    tn.write(password + '\n')
      
    # 登录完毕后执行命令
    tn.read_until(finish)
    for command in commands:
        tn.write('%s\n' % command)
    
    #执行完毕后,终止Telnet连接(或输入exit退出)
    tn.read_until(finish)
    tn.close() # tn.write('exit\n')
 
if __name__=='__main__':
	 # 配置选项
	Host = '10.255.254.205' # Telnet服务器IP
	username = 'administrator'   # 登录用户名
	password = 'dell1950'  # 登录密码
	finish = ':~$ '      # 命令提示符
	commands = ['echo "test"']
	do_telnet(Host, username, password, finish, commands)

其中port和timeout是可选的参数,而timeout的只是在初始化socket连接时起作用,而一旦连接成功后如果出现等待那就不会起作用了,比如使用read_until方式获取内容时返回的内容与指定的内容没有吻合,那么就会造成提示等待的情况,这时timeout是不会起作用的,而这个socket连接会一直保持着,永生不死。

【注:read_until有自己的timeout参数,设置了会相应的生效】

如何解决这个问题

其实还有一种比较原始的方法,就是使用sleep方法来代替read_until方法,这样就不会出现种情况,因为到点就会自己输入,最多也就是最后得不到想要的结果,但是这个方式很不稳定,兼容性也不好;

另一种方法是使用线程来启动这个函数,然后对子线程进行超时设置,这样就可以达到间接控制这个telnet连接的目的了。

    import threading
    pars = replace_db_keyworlds(vars_dict, pars)
    configs = pars.split(r'@')
    host = configs[0].encode()
    user = configs[1]
    passwd = configs[2]
    finish = configs[3]
    commands = configs[4].split(r'\n')
    th1 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands))
    th1.start()
    th1.join(20)  ##20秒超时时间

还有一个需要注意的是,传递给Telnet方法的字符串都会被解一次码,所以如果你传递过去需要write的字符串是已经解码的unicode的话,那么就会报错的,所以在传递发送的字符串之前还是先编成utf-8为妥,其它字符不知道支持不,我只试了utf-8,也没看源码。

此外,貌似还有一个pexpect的第三方模块可以支持telnet等一系列的协议连接,并支持交互式的通信,只是这个模块够用就没学习了,这里先备注一下。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pytorch中[..., 0]的用法说明

    pytorch中[..., 0]的用法说明

    这篇文章主要介绍了pytorch中[..., 0]的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 详解python中递归函数

    详解python中递归函数

    这篇文章主要介绍了python递归函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python进程管理工具supervisor的安装与使用教程

    python进程管理工具supervisor的安装与使用教程

    supervisor是用python写的一个进程管理工具,用来启动,重启,关闭进程。下面这篇文章主要给大家介绍了关于python实现的进程管理工具supervisor的安装与使用的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Python将一个CSV文件里的数据追加到另一个CSV文件的方法

    Python将一个CSV文件里的数据追加到另一个CSV文件的方法

    今天小编就为大家分享一篇Python将一个CSV文件里的数据追加到另一个CSV文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python解析excel文件存入sqlite数据库的方法

    Python解析excel文件存入sqlite数据库的方法

    最近工作中遇到一个需求,需要使用Python解析excel文件并存入sqlite,本文就实现的过程做个总结分享给大家,文中包括数据库设计、建立数据库、Python解析excel文件、Python读取文件名并解析和将解析的数据存储入库,有需要的朋友们下面来一起学习学习吧。
    2016-11-11
  • Python计算字符宽度的方法

    Python计算字符宽度的方法

    这篇文章主要介绍了Python计算字符宽度的方法,结合实例形式较为详细的分析了Python针对字符宽度的计算方法,需要的朋友可以参考下
    2016-06-06
  • Python 获取异常(Exception)信息的几种方法

    Python 获取异常(Exception)信息的几种方法

    这篇文章主要介绍了Python 获取异常(Exception)信息的几种方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • python中csv文件数据颜色设置方式

    python中csv文件数据颜色设置方式

    这篇文章主要介绍了python中csv文件数据颜色设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python优雅实现代码与敏感信息分离的方法

    python优雅实现代码与敏感信息分离的方法

    这篇文章主要介绍了python优雅实现代码与敏感信息分离的方法,在flask中,python-dotenv 可以无缝接入项目中,只要你的项目中存在 .env 或者 .flaskenv 文件,他就会提示你是否安装 python-dotenv,需要的朋友可以参考下
    2022-05-05
  • Python 实现数据结构-堆栈和队列的操作方法

    Python 实现数据结构-堆栈和队列的操作方法

    队、栈和链表一样,在数据结构中非常基础一种数据结构,同样他们也有各种各样、五花八门的变形和实现方式。这篇文章主要介绍了Python 实现数据结构-堆栈和队列的操作方法,需要的朋友可以参考下
    2019-07-07

最新评论