【问题标题】:Perl windows telnet session endPerl windows telnet 会话结束
【发布时间】:2012-11-09 08:55:36
【问题描述】:

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

【问题讨论】:

  • “在 Unix 中,这很好用”是什么意思?你的意思是当脚本在 Unix 机器上执行或连接到 Unix 机器时?
  • 是的...当我在 unix 中运行相同的代码时,脚本结束时服务器会继续运行。

标签: perl telnet


【解决方案1】:

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

来自documentation of Net::Telnet

连接到远程 MS-Windows 机器

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

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

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

【讨论】:

  • 所以没有其他方法可以启动远程机器的服务器??窗户?
  • $telnet->close();服务器回到旧状态(未运行)。我希望服务器正在运行,即使程序结束。
猜你喜欢
  • 2013-02-18
  • 2015-01-28
  • 2014-01-13
  • 2015-02-04
  • 2016-11-18
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多