0

我正在尝试编写 Perl 脚本(以前从未做过)。

基本上,此脚本用于连接到 VoIP 电话系统并重新启动设备。我希望它连接到每个站点设备,重新启动它并打印设备确认正在发生重新启动或连接错误到日志文件。我不知道我在用 Perl 做什么,我什至不知道到目前为止我所拥有的是否是正确的。这正是我通过在谷歌/论坛上挖掘所找到的。

我希望脚本执行以下操作:

我希望 Perl 脚本 Telnet 到预设的 IP 地址列表。

我想要一个它将连接到的 IP 的 .txt 列表(它们都使用相同的登录名/密码)。或者是否可以在实际的 Perl 脚本中包含该列表,将来可以对其进行编辑以添加/删除 IP?

一旦脚本 telnet,我希望它发送命令“现在重新启动”,然后将响应连同它在发送命令时连接到的 IP 一起打印到日志文件(发出命令时的响应是诸如“系统正在停机以重新启动”之类的东西)。我希望它为它连接到的每个 IP 执行此操作,如果它无法连接,我希望它打印一个错误,如“XXX.XXX.XXX.XXX 无法连接”

所以日志看起来像这样:

XXX.XXX.XXX.101 System going down for reboot
XXX.XXX.XXX.102 System going down for reboot
XXX.XXX.XXX.103 Unable to Connect
XXX.XXX.XXX.104 Unable to Connect
XXX.XXX.XXX.105 System going down for reboot

这可能吗?

我目前有这个:

#!/usr/bin/perl -w
use strict;
use Net::Telnet;

my $log = './log.txt';

$telnet = new Net::Telnet ( Timeout=>10,
Errmode=>'die'
Prompt => '/\$ $/i');
$telnet->open('IPADDRESS');
$telnet->login('USERNAME', 'PASSWORD');
print $telnet->cmd('reboot now');
writef($log);

对于提示 =>,我是否需要更改它以匹配您 telnet 并连接到 IP 时显示的任何符号?我看到的符号是 # 所以命令是:

Promt => '/\# #/i);

任何帮助都会很棒。

4

1 回答 1

1

您是否在这些设备上启用了 SSH?您需要正则表达式来匹配提示。如果你有#或者something#你可以使用/# $/.

#!/usr/bin/perl -w
use strict;
use Net::Telnet;

my $log = './log.txt';

open LOG, ">>$log";         #open log file - append mode
open IPS, "<ip.list";       #open ip.list file - read mode
while(<IPS>){
 my $ip = $_;               #current iteration (line) of IPs file
 $telnet = new Net::Telnet ( Timeout=>10,
         Errmode=>'die'
         Prompt => '/# $/i');
 $telnet->open($ip);
 $telnet->login('USERNAME', 'PASSWORD');
 if($telnet->cmd('reboot now')){
  print LOG "$ip System going for reboot";
 }else{
  print LOG "$ip Unable to Connect";
 }
}
close LOG;                  #close files
close IPS;

ip.list只是 IP 列表,每行一个。

XXX.XXX.XXX.101
XXX.XXX.XXX.102
XXX.XXX.XXX.103
...
于 2013-09-22T00:47:09.260 回答