Firewall-Config-Parser
view release on metacpan or search on metacpan
lib/Firewall/Config/Parser/Asa.pm view on Meta::CPAN
package Firewall::Config::Parser::Asa;
#------------------------------------------------------------------------------
# å è½½æ©å±æ¨¡å
#------------------------------------------------------------------------------
use Moose;
use namespace::autoclean;
use experimental qw( smartmatch );
#------------------------------------------------------------------------------
# å è½½ Firewall::Config::Parser::Role è§å¾ï¼ç´æ¥ä½¿ç¨å
¶å±æ§åæ¹æ³
#------------------------------------------------------------------------------
with 'Firewall::Config::Parser::Role';
#------------------------------------------------------------------------------
# å è½½ Firewall::Config::Element å
·ä½å
ç´ è§è
#------------------------------------------------------------------------------
use Firewall::Config::Element::AddressGroup::Asa;
use Firewall::Config::Element::ServiceGroup::Asa;
use Firewall::Config::Element::ProtocolGroup::Asa;
use Firewall::Config::Element::Schedule::Asa;
use Firewall::Config::Element::Rule::Asa;
use Firewall::Config::Element::Route::Asa;
use Firewall::Config::Element::Zone::Asa;
use Firewall::Config::Element::Interface::Asa;
use Firewall::Config::Element::StaticNat::Asa;
use Firewall::Config::Element::NatPool::Asa;
use Firewall::Config::Element::DynamicNat::Asa;
use Firewall::Utils::Ip;
#------------------------------------------------------------------------------
# Firewall::Config::Parser::Asa éç¨å±æ§
#------------------------------------------------------------------------------
has aclLineNumbers => ( is => 'ro', isa => 'HashRef[Int]', default => sub { {} }, );
#------------------------------------------------------------------------------
# å®ä¹ Firewall::Config::Parser::Asa é
置解æå
¥å£å½æ°
# parse 为 Firewall::Config::Parser::Role è§è²å¿
é¡»å®ç°çæ¹æ³
#------------------------------------------------------------------------------
sub parse {
my $self = shift;
while ( my $string = $self->nextUnParsedLine ) {
if ( $self->isRoute($string) ) { $self->parseRoute($string) }
elsif ( $self->isInterfaceZone($string) ) {$self->parseInterfaceZone($string)}
elsif ( $self->isAclGroup($string) ) {$self->parseAclGroup($string)}
elsif ( $self->isAddressGroup($string) ) {$self->parseAddressGroup($string)}
elsif ( $self->isServiceGroup($string) ) {$self->parseServiceGroup($string)}
elsif ( $self->isProtocolGroup($string) ) {$self->parseProtocolGroup($string)}
elsif ( $self->isSchedule($string) ) {$self->parseSchedule($string)}
else {$self->ignoreLine}
}
$self->goToHeadLine;
while ( my $string = $self->nextUnParsedLine ) {
if ( $self->isStaticNat($string) ) { $self->parseStaticNat($string) }
elsif ( $self->isRule($string) ) { $self->parseRule($string) }
elsif ( $self->isNatPool($string) ) { $self->parseNatPool($string) }
elsif ( $self->isDynamicNat($string) ) {$self->parseDynamicNat($string)}
elsif ( $self->isNewNat($string) ) {$self->parseNewNat($string)}
else {$self->ignoreLine}
}
} ## end sub parse
sub isNewNat {
my ( $self, $string ) = @_;
if ( $string =~ /nat\s+\((?<realZone>\S+),(?<natZone>\S+)\)(\s+after-auto)?\s+source/ ) {
return 1;
}
else {
return;
}
}
sub parseNewNat {
my ( $self, $string ) = @_;
$self->{version} = '8.3';
my $ippat = '\d+\.\d+\.\d+\.\d+';
if (
$string =~ /nat\s+\((?<realZone>\S+),(?<natZone>\S+)\)(\s+after-auto)?\s+source\s+(?<snatType>dynamic|static)\s+
(?<src>\S+)\s+(?:(?<int1>interface)|(pat-pool\s+(?<spatObj>\S+))|(?<snatObj>\S+))(\s+(?<int2>interface))?
(?:\s+destination\s+static\s+(?<dstnat>\S+)\s+(?<dst>\S+))?
(?:\s+service\s+(?<natSrv>\S+)\s+(?<srv>\S+))?/oxi
)
{
my $realZone = $+{realZone};
my $natZone = $+{natZone};
my $snatType = $+{snatType};
my $src = $+{src};
my $natInt = $+{int1};
my $spatObj = $+{spatObj};
my $snatObj = $+{snatObj};
my $dstnat = $+{dstnat};
my $dst = $+{dst};
my $natSrv = $+{natSrv};
my $srv = $+{srv};
( run in 1.494 second using v1.01-cache-2.11-cpan-39bf76dae61 )