设为首页 收藏本站
查看: 1344|回复: 0

[经验分享] Perl Telnet模块详解

[复制链接]

尚未签到

发表于 2018-9-1 06:33:40 | 显示全部楼层 |阅读模式
  Telnet是一个古老而又不安全的协议,用来实现远程登录。这种服务可以和基于客户机/服务器进行通信,也就是说把你的电脑虚拟成一个键盘(伪终端)来和远程的服务进行通信,而服务器以为输入来自它本地的键盘,我们在本地所执行的命令会发送到远程服务器执行并返回结果。Telnet是基于TCP连接,所以在建立连接之前需要握手来表明身份,即向服务器提供用户标识(登录名和密码)。Telnet服务默认监听23端口来提供服务。
在Perl中,我们使用Net::Telnet模块来提供对Telnet协议的支持。它和其它的Perl模块一样,使用面向对象的语法,因此它非常的简单。准备工作我们必须要开启Telnet服务,这样客户端才可以使用它进行远程登录。查看是否安装Telnet:# rpm -qa|grep -i telnet如果没有,则:# yum -y install telent telnet-server配置Telnet:# vi /etc/xinetd.d/telnet把disable=yes 改成disable=no启动Telnet:# /etc/init.d/xinetd restart检查是否成功启动:# netstat -ant|grep 23 或者 # pgrep telnet创建用户名:# useradd telnet //默认情况root不充许Telnet登录,因为它不安全(明文传输)设置密码# passwd telnet 简单的尝试如果我们要和远程的服务器进行通信,我们要提供基本的用户名和密码来表示你有权使用它:use Net::Telnet;my $telnet=Net::Telnet->new($hostname);$telnet->login($usename,$password);... 像上面这样,基本上你就可以使用Telnet来实现远程登录了。在建立链接之后,我们可以使用$telent对象来执行后续的操作,这些操作就像是在远程电脑上执行一样,这样我们就实现的远程维护系统的目的。 Telnet模块为我们提供足够的方法来实现维护系统的目的,它有而这些方法也有大量的选项供我们,所以Telnet是一个足够灵活的模块,下面就分别来说说这些方法的具体使用方法。首先从new方法开始。在Telnet模块中,我们调用new方法以此来创建一个telnet对象,这个对象就像是一个键盘(或者说是一个文件句柄)一样,我们通过个对象来和远程服务器进行通信。那么怎样来创建这个telnet对象呢,这就是new构造函数的用武之地了。一般来说我们可以使用以下两种方法来创建telnet对象:1) my $telnet=Net::Telnet->new(ip或者主机名)2) my $telnet=Net::Telnet->new(Host=>'ip或者主机名')像上面我们用命名参数的形式去调用new方法,它还有更多的选项,这些选项可以更灵活的对对象加以控制,这些选项以"键/值"对的形式出现,这在Perl中叫做命名参数。下面是new方法常用的选项:=====================================================================选项描述默认值=====================================================================Host要连接的主机localhostPort连接的端口23Timeout超时(秒)10Binmode禁止CRLF转换falseCmd_remove_mode 从输入中删除回显命令autoErrmode设置错误模式die[return]Input_log输出结果日志文件名noneFhopen用于通信的文件句柄nonePrompt匹配的命令行提示符/[\$%#>] $/ 在上面这个列表中,我们一般需要设置Timeout选项,其它设为默认即可,当然如果你的telnet默认端口不是23,还得显式指定Port。至于其它的选项我们也来作一个简单的解析。Binmode:这个用于控制CRLF转换,标准的服务器程序都以CRLF对的形式来标识每个换行字符,这样就可以明确的区分每条命令序列。如果你把Binmode设为Binmode=>true或者Binmode=>1,则数据将逐字的发送。Cmd_remove_mode:是否删除服务器响应数据中的第一行,准确的说是删除我们发送给服务器的命令。因为这个命令会附加在服务器回应的数据名中。 Errmode:我们在连接远程服务器是不可避免的会发生错误,这个选项就是用来控制当错误发生应该怎么处理。你可以自定义处理程序来响应发生错误时要做的工作。Input_log:它的值可以为文件名或者已经打开的文件句柄。它用来保存从服务器所接收到的数据。Prompt:它的值应该是一个正则表达式(/pattern/),用于下面就要说的login方法的参考,来表明命令是否成功运行。 如果你已经通过new方法成功的连接到了一个远程主机的指定端口,剩下的问题就是用指定的用户名和密码进行登录,它同样也有两种方式:1) $telnet->login($username,$password)2) $telnet->login(  Name=>$username,  Password=>$password,  [Prompt=>$prompt,]  [Timout=>$timeout])如果login如果遇到错误,则返回false。在我们成功登录之后,如何执行命令呢?这可以通过cmd()方法来实现,cmd()的返回结果可以存放在标量或者数组中:1) $result=$telnet->cmd($command)2) @result=$telnet->cmd(String=>$command,[Timeout=>$timeout,][Prompt=>$pattern,][Output=>$ref,][Cmd_remove_mode=>$mode])cmd()中的选项值可以覆盖掉new()方法中同名选项。除了cmd()方法外,我们还可以使用print()方法来执行命名,然后使用waitfor()方法来获得命令执行之后的结果(成功或者失败都有一些标志,这个方法其实就是用正则去匹配结果数据)其它可用方法:errmsg():返回方法调用时的错误消息lastline():返回从对象读取的最后一行文本get(),getline(),getlines():返回Telnet会话中可用的数据input_record_separator(),output_record_separator():定义输入记录和输出记录分隔符,默认都为\n改变Telnet对象的默认值:$telnet->timeout($value) #改变已经创建的Telnet对象的值$telnet->errmode($value)$telnet->binmode($value)$telnet->prompt($value)关闭Telnet连接:$telnet->close();

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-560210-1-1.html 上篇帖子: perl计算单词出现次数 下篇帖子: perl单行命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表