1 |
#!/usr/bin/perl -w |
2 |
|
3 |
use strict; |
4 |
use Expect; |
5 |
use Net::Telnet; |
6 |
use Data::Dump qw/dump/; |
7 |
|
8 |
die "usage: $0 [modem] commands\n" unless @ARGV; |
9 |
|
10 |
my $modem = '10.0.0.138'; |
11 |
$modem = shift @ARGV if $#ARGV >= 1; |
12 |
|
13 |
my $debug = 0; |
14 |
|
15 |
my @commands = ( |
16 |
':system config led=flash', |
17 |
); |
18 |
|
19 |
sub ask { |
20 |
my ( $prompt, $default ) = @_; |
21 |
warn "## ask $prompt [default]"; |
22 |
print "$prompt [$default] "; |
23 |
my $in = <STDIN>; |
24 |
chomp($in); |
25 |
$in = $default unless length($in) > 1; |
26 |
return $in; |
27 |
} |
28 |
|
29 |
while(<>) { |
30 |
chomp; |
31 |
next if (/^#/ || /^\s*$/); |
32 |
my $l = $_; |
33 |
warn "--$_--" if $debug; |
34 |
$l =~ s/ask\(([^|\)]+)(?:\|([^\)]+))?\)/ask($1,$2)/eg; |
35 |
warn "++ $l\n" if $debug; |
36 |
push @commands, $l; |
37 |
} |
38 |
|
39 |
push @commands, ':system config led=off'; |
40 |
|
41 |
warn "## connecting to $modem\n"; |
42 |
|
43 |
my $telnet = new Net::Telnet( $modem ) or die "Cannot telnet to $modem: $!\n"; |
44 |
my $exp = Expect->exp_init($telnet); |
45 |
$exp->debug( $debug ); |
46 |
|
47 |
$exp->log_stdout( 1 ); |
48 |
|
49 |
my ( $username, $password ) = ('Administrator',''); |
50 |
my $timeout = 3; |
51 |
|
52 |
$exp->expect($timeout, 'Username : '); |
53 |
$exp->send("$username\r\n"); |
54 |
$exp->expect($timeout, 'Password :'); |
55 |
$exp->send("$password\r\n"); |
56 |
$exp->expect($timeout, '=>'); |
57 |
|
58 |
foreach my $cmd ( @commands ) { |
59 |
$exp->send( "$cmd\r\n" ); |
60 |
$exp->expect($timeout, '=>'); |
61 |
} |
62 |
|
63 |
$exp->send( "exit\r\n" ); |
64 |
$exp->soft_close(); |
65 |
|