#!/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 \n"; exit(-1); } open(LISTA_WEB, $ARGV[0]) or die "No se puede abrir el fichero"; foreach $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;