X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mbd%2Fmbd.pl;h=7fcc8d8100a3a67e6e2f41bd763d797c684e4a06;hb=065361daac62b4cdb33cf19caa534e29ac1dfde0;hp=90ee4d6b63bc50bc6cb9b2f7fbb765d2512b7d96;hpb=c8f763bc89ec770a9f924667c8a276d356d30b0a;p=nms diff --git a/mbd/mbd.pl b/mbd/mbd.pl index 90ee4d6..7fcc8d8 100644 --- a/mbd/mbd.pl +++ b/mbd/mbd.pl @@ -6,30 +6,7 @@ use Net::CIDR; use Net::RawIP; require './access_list.pl'; require './nets.pl'; - -sub expand_range { - my $range = shift; - - if ($range =~ /^(\d+)\.\.(\d+)$/) { - return $1..$2; - } else { - return $range; - } -} - -sub match_ranges { - my ($elem, $ranges) = @_; - - for my $range (@$ranges) { - if ($range =~ /^(\d+)\.\.(\d+)$/) { - return 1 if ($elem >= $1 && $elem <= $2); - } else { - return 1 if ($elem == $range); - } - } - - return 0; -} +require './mbd.pm'; sub fhbits { my $bits = 0; @@ -39,16 +16,9 @@ sub fhbits { return $bits; } -# Find what ports we need to listen on -my %port_hash = (); -for my $e (@Config::access_list) { - for my $r (@{$e->{'ports'}}) { - for my $p (expand_range($r)) { - $port_hash{$p} = 1; - } - } -} -my @ports = sort { $a <=> $b } keys %port_hash; +open LOG, ">>", "mbd.log"; + +my @ports = mbd::find_all_ports(); # Open a socket for each port my @socks = (); @@ -83,12 +53,19 @@ while (1) { # Check against the ACL. my $pass = 0; for my $rule (@Config::access_list) { - if (match_ranges($dport, $rule->{'ports'}) && - match_ranges($size, $rule->{'sizes'})) { - $pass = 1; + next unless (mbd::match_ranges($dport, $rule->{'ports'})); + next unless (mbd::match_ranges($size, $rule->{'sizes'})); + + if ($rule->{'filter'}) { + next unless ($rule->{'filter'}($data)); } + + $pass = 1; + last; } + print LOG "$dport $size $pass\n"; + if (!$pass) { print "$dport, $size bytes => filtered\n"; }