Shellex.pm 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package SimplyGit::Shellex;
  2. use strict;
  3. use warnings;
  4. use Log::Log4perl qw(:easy);
  5. use Exporter qw(import);
  6. our @EXPORT_OK = qw(shellex findBin knocker);
  7. sub knocker($$$) {
  8. my $target = shift;
  9. my $portRef = shift;
  10. my $logger = shift;
  11. my $nmapCmd = findBin("nmap",$logger);
  12. foreach my $port (@$portRef) {
  13. shellex("$nmapCmd -Pn --host_timeout 201 --max-retries 0 -p $port $target > /dev/null",$logger);
  14. }
  15. }
  16. sub shellex {
  17. my $cmd = shift;
  18. my $logger = shift;
  19. if ( defined $logger && $logger ne '' ) {
  20. $logger->info("Running: $cmd 2>&1");
  21. }
  22. my $output = `$cmd 2>&1`;
  23. chomp $output;
  24. my $rc = $?;
  25. if ( defined $logger && $logger ne '' ) {
  26. $logger->info("Returned: $rc");
  27. }
  28. if ( $rc != 0 ) {
  29. if ( defined $logger && $logger ne '' ) {
  30. $logger->error("$cmd returned non-zero: $rc");
  31. }
  32. print "$cmd returned non-zero: $rc\n";
  33. exit 1;
  34. }
  35. return $output;
  36. }
  37. sub findBin {
  38. my $cmd = shift;
  39. my $logger = shift;
  40. my $binPath = shellex("which $cmd",$logger);
  41. my $rc = $?;
  42. chomp $binPath;
  43. if ( $rc != 0 ) {
  44. if ( defined $logger && $logger ne '' ) {
  45. $logger->error("Couldn't find a path for $cmd, exiting...");
  46. }
  47. exit 1;
  48. } else {
  49. return $binPath;
  50. }
  51. }
  52. 1;