#!/usr/bin/perl use strict; use IO::Socket::INET; # # Umisteni konfiguraku # our $config_file = "/etc/quagga/status.conf"; # # Konfiguracni promenne # our %daemons = ( bgpd => { host => "127.0.0.1", port => 2605, password => "", enable_password => "" } ); my %conf = ( bgpd_host => \$daemons{bgpd}->{host}, bgpd_port => \$daemons{bgpd}->{port}, bgpd_password => \$daemons{bgpd}->{password}, bgpd_enable_password => \$daemons{bgpd}->{enable_password}, ); # # Nacteme konfigurak # open(C, $config_file) or die; while () { if (/^#/ or /^\s*$/) {next;} if (/^\s*(\S+)\s*(.*?)$/) { ${$conf{$1}} = $2; } } close C; # # Funkce pro vykonani prikazu pres telnet na demona # sub req($$) { my $daemon = shift; my $cmd = shift; my $conn = IO::Socket::INET->new( PeerAddr => $daemons{$daemon}->{host}, PeerPort => $daemons{$daemon}->{port}, Proto => "tcp" ); $conn->autoflush(1); $| = 1; my $out = ""; print $conn $daemons{$daemon}->{password} . "\n"; print $conn "terminal length 0\n"; if (length($daemons{$daemon}->{enable_password})) { print $conn "enable\n" . $daemons{$daemon}->{enable_password} . "\n"; } print $conn $cmd . "\n"; sleep 1; print $conn "quit\n"; while (<$conn>) { if (/^(.*?)[#>] $cmd/) { while (<$conn>) { s/[\n\r]*$//; if (/$1[#>] quit/) { last; } $out .= $_ . "\n"; } } } undef $conn; return $out; } # # Provedeme potrebne dotazy na demony # my ($bgp_route); if ($daemons{bgpd}->{port} > 0) { $bgp_route = req("bgpd", "sh ip bg"); } # # A vysypeme nejake to XHTML # print < sh ip bg

sh ip bg

END if ($daemons{bgpd}->{port} > 0) { print <$bgp_route END } print < END