⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mrlg.cgi

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 CGI
字号:
#!/usr/bin/perl#### Zebra Looking Glass version 1.0## 01 FEB 2000## Copyright (C) 2000 John W. Fraizer III <john.fraizer@enterzone.net>## *All* copyright notices must remain in place to use this code.#### The latest version of this code is available at:## ftp://ftp.enterzone.net/looking-glass/###### This file is part of GNU Zebra.#### GNU Zebra is free software; you can redistribute it and/or modify it## under the terms of the GNU General Public License as published by the## Free Software Foundation; either version 2, or (at your option) any## later version.#### GNU Zebra is distributed in the hope that it will be useful, but## WITHOUT ANY WARRANTY; without even the implied warranty of## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU## General Public License for more details.#### You should have received a copy of the GNU General Public License## along with GNU Zebra; see the file COPYING.  If not, write to the## Free Software Foundation, Inc., 59 Temple Place - Suite 330,## Boston, MA 02111-1307, USA.require 5.002;use POSIX;use Net::Telnet ();## Set the URL for your site.$url="http://www.sample.com/mrlg.cgi";## Set your router variables in sub set_router and modify the selections in Main to match.#############################################################Main############################################################{## Set the router default@Form{'router'} = "router1";## Get the form results now so we can override the default router get_form();print "Content-type: text/html\n\n";print '<html><head><title>Multi-Router Looking Glass for Zebra</title></head><body bgcolor=white>	<font face=arial size=3 color=blue><h1>Multi-Router Looking Glass for Zebra</h1>Copyright 2000 - John Fraizer, EnterZone Inc.<br>';print '<font color=black>';print "<form METHOD=\"POST\" action=\"$url\">\n";print "<B>Router:</B>  <SELECT Name=\"router\" Size=1>\n";print "<OPTION Value=\"$Form{'router'}\">$Form{'router'}\n";print '<OPTION Value="router1">router1<OPTION Value="router2">router2<OPTION Value="router3">router3<OPTION Value="router4">router4</select><br><br><B>Query</B>:<br><input type=radio name=query value=1>show ip bgp<br><input type=radio name=query value=2>show ip bgp summary<br><input type=radio name=query value=3>show ip route<br><input type=radio name=query value=4>show interface<br><input type=radio name=query value=5>show ipv6 bgp<br><input type=radio name=query value=6>show ipv6 bgp summary<br><input type=radio name=query value=7>show ipv6 route<br><br><B>Argument:</B> <input type=text name=arg length=20 maxlength=60><input type="submit" value="Execute"></form>	';## Set up the address, pw and ports, etc for the selected router.set_router();## Set up which command is to be executed (and then execute it!)set_command();print '<br><br></font><font color=blue face=arial size=2>Multi-Router Looking Glass for Zebra version 1.0<br>Written by: John Fraizer -<a href="http://www.ez-hosting.net/">EnterZone, Inc</a><br>Source code: <a href="ftp://ftp.enterzone.net/looking-glass/">ftp://ftp.enterzone.net/looking-glass/</a></body></html>';## All done!exit (0); }############################################################sub get_form############################################################{                #read STDIN        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});        # Split the name-value pairs        @pairs = split(/&/, $buffer);          # For each name-value pair:        foreach $pair (@pairs)                {                                # Split the pair up into individual variables.                local($name, $value) = split(/=/, $pair);                # Decode the form encoding on the name and value variables.                $name =~ tr/+/ /;                $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;                 $value =~ tr/+/ /;                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;                # If they try to include server side includes, erase them, so they                # aren't a security risk if the html gets returned.  Another                # security hole plugged up.                $value =~ s/<!--(.|\n)*-->//g;                        @Form{$name} = $value ;                                 }        }       ############################################################sub set_router############################################################## $server is the IP address of the router running zebra## $login_pass is the password of the router## $bgpd is the port that bgpd will answer on## $zebra is the port that zebra will answer on## if $zebra is "", it will disable sh ip route and sh int for that router.## if $full_tables is set to "1" for a router, full BGP and IP ROUTE table dumps will be allowed via the looking glass.## This is a BAD thing to do if you have multiple full views on a router.  That's why the option is there.{if ($Form{'router'} eq 'router1')        {$server = '10.1.1.1';$login_pass = 'zebra';$bgpd = "2605";$zebra = "";$full_tables=1;        }elsif ($Form{'router'} eq 'router2')        {$server = '10.1.1.2';$login_pass = 'zebra';$bgpd = "2605";$zebra = "2601";        }elsif ($Form{'router'} eq 'router3')        {$server = '10.1.1.3';$login_pass = 'zebra';$bgpd = "2605";$zebra = "2601";$full_tables=1;        }elsif ($Form{'router'} eq 'router4')        {$server = '10.1.1.4';$login_pass = 'zebra';$bgpd = "2605";$zebra = "2601";        }}############################################################sub set_command############################################################{if ($Form{'query'} eq '1')	{	sh_ip_bgp('ip');	}elsif ($Form{'query'} eq '2')	{	sh_ip_bgp_sum('ip');	}if ($Form{'query'} eq '3')	{	sh_ip_route('ip');	}if ($Form{'query'} eq '4')	{	sh_int();	}if ($Form{'query'} eq '5')	{	sh_ip_bgp('ipv6');	}if ($Form{'query'} eq '6')	{	sh_ip_bgp_sum('ipv6');	}if ($Form{'query'} eq '7')	{	sh_ip_route('ipv6');	}}############################################################sub sh_ip_bgp############################################################{my $protocol = shift(@_);$port = $bgpd;if ($protocol ne 'ip' && $protocol ne 'ipv6')	{	print "Invalid protocol: $protocol\n";	print "protocol must be 'ip' or 'ipv6'\n\n";	return;	}$command = "show $protocol bgp $Form{'arg'}";if ($Form{'arg'} eq '')	{	if ($full_tables eq '1')		{		execute_command();		}	else		{		print "Sorry.  Displaying the FULL routing table would put too much load on the router!\n\n";		}	}else	{	execute_command();	}}############################################################sub sh_ip_bgp_sum############################################################{	my $protocol = shift(@_);	$port = $bgpd;	if ($protocol ne 'ip' && $protocol ne 'ipv6')		{		print "Invalid protocol: $protocol\n";		print "protocol must be 'ip' or 'ipv6'\n\n";		return;		}	$command = "show $protocol bgp summary";	execute_command();}############################################################sub sh_ip_route############################################################{if ($zebra eq '')	{	print "Sorry. The <b>show ip route</b> command is disabled for this router."	}else	{	$port = $zebra;	my $protocol = shift(@_);	if ($protocol ne 'ip' && $protocol ne 'ipv6')		{		print "Invalid protocol: $protocol\n";		print "protocol must be 'ip' or 'ipv6'\n\n";		return;		}	$command = "show $protocol route $Form{'arg'}";	if ($Form{'arg'} eq '')		{		if ($full_tables eq '1')			{			execute_command();			}		else			{			print "Sorry.  Displaying the FULL routing table would put too much load on the router!\n\n";			}		}	else		{		execute_command();		}	}}############################################################sub sh_int############################################################{if ($zebra eq '')	{	print "Sorry. The <b>show interface</b> command is disabled for this router."	}else	{	$port = $zebra;	$command = "show interface $Form{'arg'}";	execute_command();	}}############################################################sub execute_command############################################################## This code is based on:#### Zebra interactive console## Copyright (C) 2000 Vladimir B. Grebenschikov <vova@express.ru>##{print "Executing command = $command";#  my $port = ($opt_z ? 'zebra' : 0) ||#             ($opt_b ? 'bgpd' : 0) ||#             ($opt_o ? 'ospfd' : 0) ||#	     ($opt_r ? 'ripd' : 0) || 'bgpd';my $cmd = $command;  my $t = new Net::Telnet (Timeout => 10,			   Prompt  => '/[\>\#] $/',			   Port    => $port);  $t->open ($server);  $t->cmd ($login_pass);  if ($cmd)    {      docmd ($t, $cmd);    }}############################################################sub docmd############################################################{  my ($t, $cmd) = @_;  my @lines = $t->cmd ($cmd);  print "<pre>\n";  print join ('', grep (!/[\>\#] $/, @lines)), "\n";  print "</pre>";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -