diff --git a/pro/03_open-ports.t b/pro/03_open-ports.t index ac5569f..dc9edeb 100755 --- a/pro/03_open-ports.t +++ b/pro/03_open-ports.t @@ -37,6 +37,7 @@ my $config = LoadFile($Bin.'/test-server.yaml'); plan 'skip_all' => "no configuration sections for 'open-ports'" if (not $config or not $config->{'open-ports'}); +my $netstat=`netstat -anu`; exit main(); @@ -65,6 +66,10 @@ sub main { foreach my $port (keys %{$connect->{$host}}) { my $service = $connect->{$host}->{$port} || ''; my $proto = 'tcp'; + if ($port =~ /([0-9]+)\/(.*)/smg) { + $port = $1; + $proto = $2; + }; my $socket = IO::Socket::INET->new( PeerAddr => $host, @@ -72,30 +77,24 @@ sub main { Proto => $proto, ); - # check for closed ports + if ($proto eq "udp") { ## UDP Socket + my ($result)=$netstat=~/\w+\s+\d+\s+\d+\s+[\d.:]+:$port\s+[\d:.]+:\*/; + if ($service eq 'closed') { + ok( !$result, "connect to $host port $port/$proto ($service) is filtered" ); + } else { + ok( $result, "connect to $host port $port/$proto ($service)" ); + }; + next; + }; + + + # TCP socket: check for closed ports if ($service eq 'closed') { - ok( - !$socket, - 'connect to ' - .$host - .' port ' - .$port - .'/' - .$proto - .' filtered' - ); + ok( !$socket, "connect to $service on $host port $port/$proto ($service) is filtered" ); next; } - ok( - $socket, - 'connect to ' - .$host - .' port ' - .$port - .'/' - .$proto - ); + ok( $socket, "connect to $service on $host port $port/$proto ($service)" ); # skip rest if we failed to connect if (not defined $socket) { @@ -130,13 +129,7 @@ sub main { 'service' => $service ) }, - 'check ' - .$service - .' service default response with proto ' - .$proto - .' port ' - .$port - .' on host ' + "check $service service default response with proto $proto port $port on host" ); } } diff --git a/pro/test-server.yaml b/pro/test-server.yaml index 519b372..a56b113 100644 --- a/pro/test-server.yaml +++ b/pro/test-server.yaml @@ -62,36 +62,38 @@ running-processes: open-ports: connect: localhost: + # TCP ports list 22: ssh 25: exim4 80: http - # 23: ntpd # TODO udp - # 161: snmpd TODO udp - 443: https - # 694: heartbeat # TODO udp + 443: https$ 1443: https - 2443: https 1444: https - # 2222: mediaproxy # TODO udp - # 2223: mediaproxy # TODO udp 2443: https 2812: monit 3306: mysqld - # 4569: asterisk # TODO udp - # 5040: sems # TODO udp 5060: kamailio 5062: kamailio - # 5070: asterisk # TODO udp - # 5080: sems # TODO udp 5222: prosody 5269: prosody - 24009: glusterfsd 8090: sems - # 25826: collectd + kamailio # TODO udp - # 40297: collectd # TODO udp - # 45673: heartbeat # TODO udp - # 48296: collectd + kamailio # TODO udp - # 50474: heartbeat # TODO udp + 7777: closed # test for closed TCP port check, nothing there + 24009: glusterfsd + # UDP ports list + 123/udp: ntpd + 161/udp: snmpd + 694/udp: heartbeat + 2222/udp: mediaproxy + 2223/udp: mediaproxy + 4569/udp: asterisk + 5040/udp: sems + 5070/udp: asterisk + 5080/udp: sems + 5222: prosody + 5269: prosody + 7777/udp: closed # test for closed UDP port check, nothing there + 24009: glusterfsd + 25826/udp: collectd 192.168.255.251: 22: ssh 80: http