Cisco-Regex
view release on metacpan or search on metacpan
my $protocol = $args{protocol} ||
qr{
(?:
ahp|eigrp|esp|gre|icmp|igmp|ip|ipinip|nos|ospf|pcp|pim|tcp|udp
|
(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})
)
}x;
my $network = $args{network} ||
qr{
(?:host\s+\S+)
|
(?:$addr\s+$addr)
|
any
}x;
my $port = $args{port} ||
qr{
(?:
6553[0-5]
|
655[0-2]\d
|
65[0-4]\d{2}
|
6[0-4]\d{3}
|
[1-5]\d{4}
|
[1-9]\d{1,3}
|
\d
)
}x;
my $pnames = $args{pnames} ||
qr{
(?:bgp|chargen|cmd|daytime|discard|domain|drip|echo|exec|
finger|ftp|ftp-data|gopher|hostname|ident|irc|klogin|
kshell|login|lpd|nntp|pim-auto-rp|pop2|pop3|smtp|sunrpc|
tacacs|talk|telnet|time|uucp|whois|www
|
biff|bootpc|bootps|dnsix|isakmp|mobile-ip|nameserver|
netbios-dgm|netbios-ns|netbios-ss|non500-isakmp|ntp|rip|
snmp|snmptrap|syslog|tftp|who|xdmcp
)
}x;
my $ports = $args{ports} ||
qr{
(?:n?eq\s+(?:$port|$pnames))
|
(?:range\s+$port\s+$port)
|
(?:lt\s+(?:$port|$pnames))
|
(?:gt\s+(?:$port|$pnames))
|
(?:ack|dscp|established|fin|fragments|psh|rst|syn|urg)
}x;
my $standard = qr{
^access-list
\s+
(?<name>\S+)
\s+
(?<action>(?:permit|deny))
\s+
(?<source>$network)
(?:\s+(?<log>log(?:\s+\S+)?))? # optional log with optional tag
$
}x;
my $extended = qr{
^access-list
\s+
(?<name>\S+)
\s+
(?<action>(?:permit|deny))
\s+
(?<proto>$protocol)
\s+
(?<source>$network)
(?:\s+(?<src_ports>$ports))?
\s+
(?<destination>$network)
(?:\s+(?<dst_ports>$ports))?
(?:\s+(?<log>log(?:\s+\S+)?))? # maybe log with optional tag
$
}x;
my $self = bless(\%args, $class);
$self->{class} = $class;
$self->{regex} = { addr => $addr,
protocol => $protocol,
network => $network,
ports => $ports,
standard => $standard,
extended => $extended,
};
return($self);
}
sub regex {
my $self = shift;
my $obj = shift || die "regex(): must specify regex object you're looking for\n";
return $self->{regex}{$obj};
}
sub extended {
my $self = shift;
my $raw = join('', @_);
my $clean = $self->_clean($raw);
return 1 if( $clean =~ /^no\s+access-list\s+(?:1[0-9][0-9]|2[0-6][0-9]{2})$/ || $clean =~ /^$/ || $clean =~ /^end$/ );
( run in 0.634 second using v1.01-cache-2.11-cpan-364913b4093 )