Perl窗口telnet会话结束



我已经编写了Perl脚本,使用telnet连接到windows并启动服务器来自动化我的工作。

#!/usr/bin/perl -w
use Net::Telnet;
$telnet = new Net::Telnet ( Timeout=>30, Errmode=>'die');
$telnet->open('ip');
$telnet->waitfor('/login: $/i');
$telnet->print('admin');
$telnet->waitfor('/password: $/i');
$telnet->print('password');
$telnet->waitfor('/C:\\Documents and Settings\\Administrator/');
$telnet->print('start server');
$telnet->close();

当程序结束时,服务器再次返回到未运行状态。在Unix中,这很好用。

如果您使用的是Microsoft Telnet服务器,请注意编码和控制字符存在问题。

来自Net::Telnet 的文档

连接到远程MS Windows机器

默认情况下,MS Windows不附带TELNET服务器。然而,第三派对TELNET服务器可用。不幸的是,其中许多服务器谎称是TELNET服务器。这尤其正确安装的所谓"Microsoft Telnet服务器"一些较新版本的MS Windows。

TELNET服务器第一次接受连接时,必须使用ASCII控制字符回车和换行以开始新行(参见RFC854)。像"Microsoft Telnet服务器"这样的服务器这样做,不是TELNET服务器。这些服务器发送ANSI终端转义序列以定位到后续行上的列并写入相邻字符时的偶数位置另外更糟糕的是,当发送输出时,这些服务器会重新发送以前发送的错误地试图显示整个终端的命令输出屏幕

将Net::Telnet连接到这些虚假的Telnet服务器之一会使您解析命令输出的工作非常困难。最好更换假TELNET服务器与真TELNET服务器。更好的TELNET用于MS Windows的服务器允许您通过将关闭一些他们称之为控制台模式的东西。

最新更新