Mail Robot

From Thyrst', 3 Years ago, written in Perl, viewed 1'010 times.
URL http://paste.security-portal.cz/view/0011ee77 Shorturl http://gw.gd/cgKd Embed
Download Paste or View Raw
  1. #!/usr/bin/perl -w
  2. use v5.12;
  3. use URI;
  4. use LWP;
  5. use strict;
  6. use warnings;
  7.  
  8. my $file;
  9. my $page;
  10. my $tmp;
  11. my $waitingTime;
  12. my @mails;
  13. my @hrefs;
  14. my $depth = 1;
  15. my $help =      "Usage: $0 [url] [arguments]\n".
  16.                         "\t-d, --depth              depth of searching\n".
  17.                         "\t-h, --help               view this help\n".
  18.                         "\t-o, --output <file>      place the output to <file> instead of default file\n".
  19.                         "\t-t, --time <sec>         time to wait before loading a new page in seconds (default set to 0)\n";
  20.  
  21. if ($#ARGV < 0) {
  22.         print $help;
  23.         exit;
  24. } else {
  25.         $page = $ARGV[0];
  26.         if ($page !~ /^https?\:\/\//i) {
  27.                 $page = "http://".$page;
  28.         }
  29.         @hrefs = ($page);
  30. }
  31.  
  32. while (my ($index, $a) = each @ARGV) {
  33.         CASE:{
  34.                 $a eq "-d" and do{$depth = $ARGV[$index+1]; last CASE;};
  35.                 $a eq "--depth" and do{$depth = $ARGV[$index+1]; last CASE;};
  36.                 $a eq "-h" and do{print $help; exit;};
  37.                 $a eq "--help" and do{print $help; exit;};
  38.                 $a eq "-o" and do{$file = $ARGV[$index+1]; last CASE;};
  39.                 $a eq "--output" and do{$file = $ARGV[$index+1]; last CASE;};
  40.                 $a eq "-t" and do{$waitingTime = $ARGV[$index+1]; last CASE;};
  41.                 $a eq "--time" and do{$waitingTime = $ARGV[$index+1]; last CASE;};
  42.         }
  43. }
  44.  
  45. if ($file) {
  46.         open (FILE, ">$file") || die $!;
  47. } else {
  48.         open (FILE, ">mail.list") || die $!;
  49. }
  50.  
  51. my $browser = LWP::UserAgent->new(
  52.         ssl_opts => { verify_hostname => 0 },
  53.         agent => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8',
  54.         cookie_jar => {},
  55. );
  56.  
  57. for (my $i=1; $i<=$depth; $i++) {
  58.         my @temp = @hrefs;
  59.         @hrefs = undef;
  60.         foreach (@temp) {
  61.                 if ($waitingTime && $waitingTime > 0 && $i != 0) {
  62.                         sleep($waitingTime*1000);
  63.                 }
  64.  
  65.                 my $response = $browser->get($_);
  66.                 unless ($response->is_success) {
  67.                         if ($i != 0) {
  68.                                 next;
  69.                         } else {
  70.                                 die "Web page not found\n";
  71.                         }
  72.                 }
  73.                 my $text = $response->content;
  74.  
  75.                 while ($text =~ /(?:href|src)=(?:\"|\')?([^\'\"\s]+)/ig) {
  76.                         next unless $1;
  77.                         $tmp = $1;
  78.                         next if $tmp =~ /\.(png|jpg|gif|svg|tar|swf|js|tgz|zip|gzip|bzip|xz|rar|bin|mp3|css)$/i;
  79.                         $tmp = URI->new_abs( $tmp, $response->base );
  80.                         next if $tmp =~ /^${page}\/?\??\#?$/;
  81.                         push (@hrefs, $tmp);
  82.                 }
  83.  
  84.                 while ($text =~ /mailto\:([\w_.]+)\@([\w._-]+)\.(museum|travel|MUSEUM|TRAVEL|\w{2,4})/g) {
  85.                         $tmp = "${1}\@${2}.${3}";
  86.                         push (@mails, lc($tmp));
  87.                 }
  88.  
  89.                 $text =~ s/<(.*?)>//g;
  90.                 $text =~ s/\x20?[\(\[\{]\x20?(tecka|dot|\.)\x20?[\)\]\}]\x20?/\./ig;
  91.                 $text =~ s/\x20?[\(\[\{]\x20?(zavinac|at|\@)\x20?[\)\]\}]\x20?/\@/ig;
  92.                 $text =~ s/\x20(tecka|dot|\.)\x20/\./ig;
  93.                 $text =~ s/\x20(zavinac|at|\@)\x20/\@/ig;
  94.                 while ($text =~ /([\w_\.]+)\@([\w\._\-]+)\.(museum|travel|MUSEUM|TRAVEL|\w{2,4})/g) {
  95.                         $tmp = "${1}\@${2}.${3}";
  96.                         push (@mails, lc($tmp));
  97.                 }
  98.         }
  99.         @hrefs = sort keys %{{ map { $_ => 1 } @hrefs }};
  100. }
  101.  
  102. @mails = sort keys %{{ map { $_ => 1 } @mails }};
  103. print FILE join ("\n", @mails);
  104. close(FILE);

Replies to Mail Robot rss

Title Name Language When
Re: Mail Robot Ungracious Hornbill perl 3 Years ago.
Re: Mail Robot Emerald Porcupine perl 3 Years ago.
Re: Mail Robot Diminutive Mockingbird perl 3 Years ago.
Re: Mail Robot Ivory Pelican perl 3 Years ago.
Re: Mail Robot Fiery Frog perl 3 Years ago.

Reply to "Mail Robot"

Here you can reply to the paste above