#!/usr/bin/perl

use IO::Socket::INET;

if($#ARGV < 1) {
	print "Uso $0 <[<host>][palabra]> <mode>  [Max webs]\n";
	print "Mode 0: Escanear para rutas relativas\n";
	print "Mode 1: Escanear solo host\n";
	print "Mode 2: Modo froogle\n";
	exit(-1);
}

@HostList;
$buffer;
$Page;
$PageNum = 0;

$Host = $ARGV[0];
$Mode = $ARGV[1];
$Max;
if($#ARGV == 2) {
	$Max = $ARGV[2];
} else {
	$Max = 10000; 
}


do {
	$sockfd = IO::Socket::INET->new( PeerAddr => "www.google.com",
        	                         PeerPort => 80,
					 Proto => "tcp"
	) or die "Imposible crear socket";
	
	$Page = "";
	
	if($Mode == 2) {
		$sockfd->send("GET /search?q=$Host&start=$PageNum HTTP/1.0\r\n");
	} else {
		$sockfd->send("GET /search?q=site:$Host&start=$PageNum HTTP/1.0\r\n");
	}
	$sockfd->send("Host:www.google.com\r\n\r\n");
	do {
		$buffer = "";
		$sockfd->recv($buffer, 1024);
		$Page .= $buffer;
	} while($buffer ne "");

	@Lines = split '<a class=l href="',$Page;

	foreach $line (@Lines) {
		$line =~ /([a-zA-Z0-9.:\/]+)/;
		if($1 !~ /HTTP/) {
			push @HostList,$1
		}
	}

	$PageNum += 10;
	if($PageNum >= $Max) {
		$sockfd->close();
		goto fuera;
	}
	
	$sockfd->close();

} while($Page =~ /nav_next\.gif/);

fuera:
foreach $line (@HostList) {
	if($Mode == 0 or $Mode == 2) {
		print "$line\n";
	}
	if($Mode == 1) {
		$line =~ /:\/\/([a-zA-Z0-9.]+)/;
		print "$1\n";
	}
}

