vvanholl
17/06/2012, 12h35
Envoyé par laurentm
J'aurais bien aimé faire le tout en SNMP mais le modem ne semble pas le gérer
apt-get install telnet expect
#!/usr/bin/perl use Getopt::Long; use File::Temp qw(tempfile); sub usage { print STDERR "Usage :\n"; print STDERR "\t-H or --hostname : hostname\n"; print STDERR "\t-u or --username : username\n"; print STDERR "\t-p or --password : password\n\n"; print STDERR "\tExemple : $0 -H 192.168.1.1 -u Administrator -p password\n"; } my ($hostname,$username,$password); GetOptions( 'H:s'=>\$hostname,'hostname:s'=>\$hostname, 'u:s'=>\$username,'username:s'=>\$username, 'p:s'=>\$password,'password:s'=>\$password); if (($hostname eq "")||($username eq "")||($password eq "")){ usage; exit 3; } my ($fh,$scriptfile)=tempfile(); print $fh "spawn telnet $hostname\n"; print $fh "expect \"Username : \"\n"; print $fh "send \"$username\\r\"\n"; print $fh "expect \"Password : \"\n"; print $fh "send \"$password\\r\"\n"; print $fh "expect \"{$username}=>\"\n"; print $fh "send \":xdsl info\\r\"\n"; print $fh "expect \"{$username}=>\"\n"; print $fh "send \":exit\\r\"\n"; close(fh); my $state="unknown"; my $download=0; my $upload=0; open PIPE,"expect $scriptfile 2>/dev/null|" or die "Could not execute command"; while(){ if(/^Modem state:/){ $state=($_=~m/(:[\ \t]*)([a-z]+)/)[1]; } if(/^Bandwidth \(Down\/Up - kbit\/s\):/){ ($download,$upload)=($_=~m/(:[\ \t]*)([0-9]+)\/([0-9]+)/)[1..2]; } } close PIPE; unlink($scriptfile); if ($state eq "up"){ print "OK : state=$state, download=${download}kbps, upload=${upload}kbps\n"; exit 0; } elsif ($state eq "unknown"){ print "Could not get modem state\n"; exit 3; } else{ print "ERROR : state=$state, download=${download}kbps, upload=${upload}kbps\n"; exit 2; }