22 1 月 2013

比較OSPF路由規則差異的Perl程式

為了比較大量 OSPF 的路由規則,以下的 Perl 程式可以找出路由差異。

作者:Ben哥|發布日期:2008/09/25

#!/usr/bin/perl

$route_rule1_ref = analyze_route ("router.txt");
$route_rule2_ref = analyze_route ("router1.txt");

 
sub analyze_route
{
my ( $file ) = @_ ;
my @router_rules = ();
open ( R, "$file" );

$line_count = 0;
while (<R> )
{
chomp;
$whole_line = '';

if ( /^O.*\s$/ && $line_count == 0 )
{
$first_part = $_ ;
$line_count++ ;
}
elsif ( /^\s+?(\[.*)/ && $line_count == 1 )
{
$whole_line = $first_part.' '.$1 ;
$line_count = 0 ;
}
elsif ( /^O/ )
{
$whole_line = $_ ;
}
else
{
$whole_line = '' ;
$line_count = 0 ;
}
push ( @route_rules, $whole_line ) if $whole_line ;
}
close ( R );
return \@route_rules;
}

foreach $rule ( @$route_rule1_ref )
{
foreach $rule1 ( @$route_rule2_ref )
{
last if $rule eq $rule1 ;
print "$rule\n" if ( $route_rule2_ref->[-1] eq $rule1 && $rule ne $rule1 );
}
}