python telnet模块_telnetlib模块的使用

telnetlib模块属于Python标准库,实现了一个telnet客户端的功能,可用来自动连接一些设备并进行相应的操作,其使用方式,有点像著名的expect。虽然现在远程连接基本上已经被SSH所取代,但在某些场景下,比如在局域网中连接一些通信设备,telnet还在发挥余热。本文介绍Python的telnetlib模块的使用。

先做点准备工作,我们需要在Linux中安装telnet相关程序,这样才有一个测试环境。默认情况下,现在的Linux发行版本都没有telnet,因为它不是一个安全的通信方式。

引入telnetlib模块

telnetlib模块内主要就是一个Telnet类,因此我们这样来引入:

>>> from telnetlib import Telnet

连接telnet服务器

我已经在Linux中安装了telnet服务器,地址就是本机的环回地址127.0.0.1,telnet服务器默认的端口号是23。

创建Telnet对象的时候,就可以填入telnet服务器地址,以及端口号,如果不填端口号,默认是23号端口。还有一个timeout参数,表示在进行连接时,最长的阻塞时间,如果不填,使用socket全局默认的超时时间。

interact() 函数,表示开始于telnet服务器互动,这个函数调用后,就像我们用手telnet客户端手动登录到服务器上一样,所有的往来交互全手动。上面的示例,我输入了一个ls命令,然后输入logout。最后还调用了一个 close() 函数,其实没有用,logout命令输入后,整个telnet连接就中断了。如果不输入logout命令(没有interact的时候),我们就要使用 close() 函数。最好的方式是,无论什么情况,最后都调用 close() 函数。

下面再来一个示例:

这段代码,我使用了 open() 函数,这时另一种连接方式。在interact之前,还调用了 set_debuglevel() 函数,这个函数默认的参数时0,以上代码使用的是1,就将交互过程的信息都打印出来了。可以看到来回交互的都是byte stream。最后,使用 exit 退出(exit退出的其实是telnet服务器打开的bash,bash一旦退出,telnet连接就自动中断)。

与telnet服务器自动化交互

自动化交互才是我们使用telnetlib模块的最主要的原因。

下面这段代码示例,功能是自动登录服务器,切换到根目录(/),并拿到根目录的ll -h命令的打印结果后,终端连接:

在创建Telnet对象的时候连接服务器,然后一路都是 read_until() 和 write() 函数,这个过程就是在进行自动化交互。read_until() 函数还有一个timeout参数,以防止死等,超时后,如果telnet连接没有中断,就没有异常,只是将所有队列中的数据全部读出来:

以上代码,一直在 read_until 函数中使用一个错误的字符串,所有函数从来都等不到它想要的,只能等到超时,然后读取所有能读到的内容。

除了 read_until 函数,还有一个 read_all() 函数,我们在下面的示例代码中体会它的用法:

以上代码换了一中对write参数的写法,使用了字符串对象的encode函数。在输入密码登录后,连续输入了两个shell命令,ls和logout,然后通过 read_all() 函数,一把全部读出来。注意:读出来的这一大堆字符串里面,没有我们输入的命令字符串。

关于telnetlib模块的使用,本文的内容应该基本够用了。不过还有一些read_*函数,还有一个expect函数可以通过正则表达式来判断字符串是否是需要的,这些内容,请参考Python官方的说明:https://docs.python.org/3/library/telnetlib.html

-- EOF --

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值