#!/usr/bin/perl

use IO::Socket::INET;

@Mail;

if($#ARGV != 0) {
	print "Este programa encuentra mails de una lista de webs dadas en forma de\n";
	print "fichero\n\n";
	print "uso $0 <fichero>\n";
	exit(-1);
}

open(LISTA_WEB, $ARGV[0]) or die "No se puede abrir el fichero";


foreach $web (<LISTA_WEB>) {
	my $Protocolo, $Host, $Path, $sockfd, $Page, $buffer, @MailAux;

	chomp $web;

	$web =~ /([a-z]+):\/\/([a-z.]+)\/([a-zA-Z0-9.\/]*)/;
	($Protocolo, $Host, $Path) = ($1, $2, $3);

	if($Protocolo eq "http") {
		$sockfd = IO::Socket::INET->new( PeerAddr => $Host,
		                                 PeerPort => 80,
		                                 Proto => tcp,
						 Timeout => 3
		) or next;

		$sockfd->send("GET /$Path HTTP/1.0\r\n"); 
		$sockfd->send("Host:$Host\r\n");
		$sockfd->send("\r\n\r\n");

		do {
				$buffer = "";
			
				$sockfd->recv($buffer, 1024);
				$Page .= $buffer;
			
		} while($buffer ne "");

		@MailAux = split " ", $Page;
		foreach $mail (@MailAux) {
			if($mail =~ /([a-zA-Z0-9._-]+\@[a-zA-Z0-9._-]+\.[a-z]{2,4})/) {
				push @Mail,$1;
			}
		}
		
		$sockfd->close();
	}
}

map { print("$_\n") } @Mail;

close LISTA_WEB;
