Cisco-Regex

 view release on metacpan or  search on metacpan

Regex.pm  view on Meta::CPAN

    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 )