2

我已经编写了 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 中,这很好用。

4

1 回答 1

-1

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

来自Net::Telnet 的文档

连接到远程 MS-Windows 机器

默认情况下,MS-Windows 不附带 TELNET 服务器。但是第三方 TELNET 服务器是可用的。不幸的是,许多这些服务器错误地声称是 TELNET 服务器。对于随一些较新版本的 MS-Windows 一起安装的所谓“Microsoft Telnet 服务器”尤其如此。

当 TELNET 服务器第一次接受连接时,它必须使用 ASCII 控制字符回车和换行来开始新的一行(参见 RFC854)。像“Microsoft Telnet Server”这样不执行此操作的服务器不是 TELNET 服务器。这些服务器发送 ANSI 终端转义序列以定位到后续行的列,甚至在写入彼此相邻的字符时定位。更糟糕的是,在发送输出时,这些服务器会重新发送先前发送的命令输出,以错误地尝试显示整个终端屏幕。

将 Net::Telnet 连接到这些虚假 TELNET 服务器之一会使解析命令输出的工作变得非常困难。最好用真实的 TELNET 服务器替换一个虚假的 TELNET 服务器。用于 MS-Windows 的更好的 TELNET 服务器允许您通过关闭其中一些称为控制台模式的东西来避免 ANSI 转义。

于 2012-11-21T07:20:36.047 回答