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要连接的主机localhost

Port连接的端口23

Timeout超时(秒)10

Binmode禁止CRLF转换false

Cmd_remove_mode 从输入中删除回显命令auto

Errmode设置错误模式die[return]

Input_log输出结果日志文件名none

Fhopen用于通信的文件句柄none

Prompt匹配的命令行提示符/[\$%#>] $/

在上面这个列表中,我们一般需要设置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();

linux perl telnet安装,51CTO博客-专业IT技术博客创作平台-技术成就梦想相关推荐

  1. linux perl telnet安装,linux @ Net :: Telnet和vt-100终端的Perl问题

    我需要Net:Telnet的帮助.尝试连接到VT-100终端.从控制台使用正常的telnet时,它工作正常.我可以连接和发布命令,但是当我尝试从perl中得到相同的结果时,它会连接,但之后没有任何反应 ...

  2. linux perl telnet安装,Perl--Net::Telnet模块

    1.到search.cpan.org去下载一个Net::Telnet(http://search.cpan.org/CPAN/authors/id/J/JR/JROGERS/Net-Telnet-3. ...

  3. pxe安装linux dhcp失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    原理有必要说明一下           (百度偷来的) 原理和概念: 1.1 什么是PXE 严格来说,PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含 ...

  4. linux主节点启动nfs,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    Windows系统之间下以实现文件和目录的共享,那么在linux系统下面是否也可以实现了,我们就测试一下: 在linux下面实现目录共享的软件是nfs 要配置nfs服务首先要配置rsh服务才可以,具体 ...

  5. linux实时备份,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    rsync缺点/不足: 1.rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分, ...

  6. linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    网上找了很多文档都访问不了salt-api,搞了好半天,终于弄好了,写个笔记,方便以后查询 如果需要通过第三方来调用SaltStack时,使用SaltStack自带的Python API并不能很好的满 ...

  7. linux初学文档,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    linux 里 一切皆文件 7种文件类型: 普通文件 f d 目录 b 块设备 /dev/sda /dev/sda1 /dev/sr0 c 字符设备 /dev/pts/0 /dev/ tty0 #tt ...

  8. linux+sasl认证失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    一.为postfix开启基于cyrus-sasl的认证功能. 修改/etc/sysconfig/saslauthd文件中的 MECH=pam 改为 MECH=shadow 启动saslauthd se ...

  9. linux a8启动过程,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    Linux系统启动流程之kernel 1.内核参数修改方法: 2.内核内核模块管理: 3.内核编译 用户空间访问.监控内核的方式:/proc, /sys 伪文件系统 /proc/sys: 此目录中的文 ...

最新文章

  1. python多元线性回归模型_python – 使用Tensorflow的多元线性回归模型
  2. nchar,char,varchar与nvarchar区别(收藏)
  3. WebService怎样在IIS上部署
  4. 解决DataGridView绑定List后不能排序的问题
  5. canvas生成二维码(2)
  6. c语言比较大小 谁大选谁,C语言比较优先级
  7. 解读中国杰出CFO之道
  8. 开启apache服务
  9. 大数据_Flink_数据处理_运行时架构2_作业提交流程_抽象架构---Flink工作笔记0017
  10. ubuntu ssh 登录日志_全球第一开源ERP Odoo操作手册 安装ssh服务和ssh客户端
  11. Word文档编辑技巧(一)
  12. python多进程调度模块multiprocessing实践实践
  13. ADO SQL手写分页
  14. 操作系统课程设计报告(文件系统)
  15. 360云盘 linux客户端,360安全云盘Linux界面版下载,包括深度版,支持龙芯/兆芯/飞腾芯片...
  16. 数据分析36计(23):长期转化率 A/B 实验的问题,用边际结构模型纠正后结论反转...
  17. Facebook自家数据外泄
  18. 等保2.0linux测评指南
  19. 学习使用solr时遇到的一些问题,记录
  20. 富文本编辑器实现导入word

热门文章

  1. 用java判断一个年份是否为闰年_判断闰年还是平年
  2. 分数转小数C语言,这是把小数转换成分数的程序,可是输入0.6666无限循环
  3. mysql索引引擎_mysql搜索引擎和索引那些事
  4. 【机器视觉学习笔记】Harris 角点检测算法(C++)
  5. Workbox.strategies v3.x 中文版
  6. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O
  7. fatal error C1083: 无法打开包括文件:dxtrans.h: No such file or directory
  8. 【Visual C++】游戏开发笔记十九 DirectX与OpenGL的博弈
  9. OpenWrt 之 MT7628 移植第三方SPI驱动
  10. 安卓BLE开发教程(一) BLE基础