3

我需要一个 telnet 到 eagle STP 设备并在那里运行命令的脚本。

当我尝试从命令提示符远程登录 Eagle STP 设备时,

我得到以下输出:

[root@localhost tmp]# telnet hostname port
Trying hostname...
Connected to hostname hostname).
Escape character is '^]'.

我没有得到任何提示来匹配 perl 脚本。我们需要按 control+a 才能得到提示。如果我们按 control+a,它将给出以下输出

[root@localhost tmp]# telnet hostname port
Trying...
Connected to hostname.
Escape character is '^]'.


>

然后我们需要在这个提示符下输入 login:uid

> login:uid=dumps

然后提示输入密码

Enter password : password

然后我们需要再次按 control+a 来执行命令。

> rtrv-dstn.

我在这里感到震惊,我无法在 telnet 命令之后通过 control+a 命令。

我用以下方式编写了脚本。但它不起作用。谁能帮我 !!!!

#!/usr/bin/perl
use Net::Telnet;
my $host='hostname';
my $port='port';
my $telnet = new Net::Telnet(Host => $host, Port => $port, Timeout => 20)
or die "connect failed: $!";
$telnet->open($host);
print"Hi iii";
$telnet->waitfor('+$/i');');
print"Hello";
$telnet->print("^]");
$telnet->waitfor('/>$/i');
$telnet->print("login:uid=username");
$telnet->waitfor('/Enter Password :\s+$/i');
$telnet->print("password");
$telnet->waitfor('/>$/i');
@res1=$telnet->print("rtrv-dstn");
print"@res1";
Exit;
4

3 回答 3

1

网络::Telnet :

print - 写入对象

此方法@list 后跟输出记录分隔符写入打开的对象,如果成功写入所有数据,则返回 1。在超时或其他故障时,将执行错误模式操作。请参阅 errmode()。

$telnet->ors("\x01");您可以通过或使用以下方式设置 output_record_separtor :

$telnet->cmd("\x01");

需要时发送Ctrl-A。没有用于测试的 Eagle STP,但我希望这会有所帮助。

顺便说一句,您应该始终检查每个方法调用的输出以确保其正常工作。

于 2013-08-21T15:43:28.727 回答
1

我没有你的设备可以试用,但你可以尝试使用元符号并发送"\cA"CTRL-A:

$telnet->print("\cA");

本地 telnet 客户端也^]使用它来转义不直接将它们发送到服务器的序列,所以我想它在这里没有用。

于 2013-08-21T15:49:27.927 回答
0

$telnet->print("\cA") 不太可能工作,因为它还会发送一个尾随换行符。使用 put() 发送没有尾随换行符的字符,例如 $telnet->put("\cA");

于 2013-08-22T16:47:18.417 回答