#!/usr/bin/perl # # Hello, I'm Jeff! # # Usage: google_subs # # This will print all valid subdomains into goods.txt # and keep track of processed ones in .seen so you can restart # With a (very, very, very) little bit of ingenuity you could # adopt this to other sites, I guess. # use strict; use LWP::Simple; use LWP::UserAgent; require HTTP::Request; # Point this to any file with line-delimited list of words, mine is here my $words = "/usr/share/dict/words"; my $seens = ".seen"; my $goods = "goods.txt"; open(seen, "<$seens") || die "can't open $seens!"; my %seen = (); while () { chomp; $seen{$_} = 1; } close(seen); open(outfile, ">>$seens") || die "can't open $seens!"; open(infile, "<$words") || die "can't open $words!"; while () { chomp; my $w = $_; next if ($seen{$w} == 1); my $url = lc("http://$w.google.com"); print stderr $url . "...\n"; my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new(GET => $url); my $response = $ua->request($request); if ($response->as_string() =~ m/200 OK/) { open(goods, ">>$goods") || die "can't open $goods!"; print goods "$url\n"; close(goods); print stderr " ----> $url\n"; } print outfile "$w\n"; } close(outfile);