use strict; # Variables my @nmap; my @port; my @protocol; my @pid; my @app; my $junk; my $i; print "\nScanning for open ports... "; chomp(@nmap = `nmap localhost`); for (1..5) { shift(@nmap); } for (1..2) { pop(@nmap); } $i = 0; foreach (@nmap) { if (! @nmap[$i] =~ /^\s*$/) { (@port[$i], @protocol[$i]) = split /\//, $_; @protocol[$i] = split / /, @protocol[$i]; @pid[$i] = `fuser -n @protocol[$i] @port[$i]`; chomp(($junk, @pid[$i]) = split /:\s+/,@pid[$i]); @app[$i] = `/bin/ps --no-headers -o %c @pid[$i]`; $i++; } } print "done.\n\n"; print "The following ports are open on your system\n\n"; printf "%8s%12s%12s%15s\n","Port", "Protocol", "PID", "App"; print "-----------------------------------------------\n"; $i = 0; foreach (@nmap) { printf "%8s%12s%12s%16s\n", @port[$i], @protocol[$i], @pid[$i][1], @app[$i]; $i++; }