2010-06-27 11:12:22 -04:00
|
|
|
#!/usr/bin/perl
|
|
|
|
# Copyright (C) 2010, Bradley M. Kuhn
|
|
|
|
#
|
|
|
|
# This program gives you software freedom; you can copy, modify, convey,
|
|
|
|
# and/or redistribute it under the terms of the GNU General Public License
|
|
|
|
# as published by the Free Software Foundation; either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful, but
|
|
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License along
|
|
|
|
# with this program in a file called 'GPLv3'. If not, write to the:
|
|
|
|
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor
|
|
|
|
# Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use Net::WhoisNG;
|
|
|
|
|
2010-06-27 12:12:10 -04:00
|
|
|
if (@ARGV != 3) {
|
|
|
|
print STDERR "usage: $0 <TLD> <LEN> <CACHE_FILE>\n";
|
2010-06-27 12:22:25 -04:00
|
|
|
exit 1;
|
2010-06-27 11:58:39 -04:00
|
|
|
}
|
2010-06-27 12:12:10 -04:00
|
|
|
my($TLD, $LENGTH, $CACHE_FILE) = @ARGV;
|
2010-06-27 11:58:39 -04:00
|
|
|
|
|
|
|
my %cache;
|
|
|
|
|
|
|
|
open(CACHE, "<", $CACHE_FILE) or die "Unable to open $CACHE_FILE for reading: $!";
|
|
|
|
|
|
|
|
while (my $line = <CACHE>) {
|
|
|
|
chomp $line;
|
|
|
|
die "maleformed line, \"$line\" in $CACHE_FILE"
|
|
|
|
unless $line =~ /^\s*(\S+)\s*\:\s*((?:available|expires:\s*\S+))/;
|
|
|
|
$cache{$1} = $2;
|
|
|
|
}
|
2010-06-27 12:12:10 -04:00
|
|
|
close CACHE;
|
2010-06-27 11:58:39 -04:00
|
|
|
|
2010-06-27 12:12:10 -04:00
|
|
|
sub CheckDomain ($$$) {
|
2010-06-27 12:22:25 -04:00
|
|
|
my($let1, $let2, $let3) = @_;
|
2010-06-27 12:12:10 -04:00
|
|
|
|
|
|
|
my $domain = "$let1$let2$let3" . "." . $TLD;
|
2010-06-27 12:22:25 -04:00
|
|
|
return if defined $cache{$domain};
|
2010-06-27 12:12:10 -04:00
|
|
|
|
|
|
|
my $w = new Net::WhoisNG($domain);
|
|
|
|
if(!$w->lookUp()){
|
|
|
|
print "$domain is not in use\n";
|
|
|
|
} else {
|
|
|
|
my $exp_date=$w->getExpirationDate();
|
|
|
|
if (not defined $exp_date) {
|
|
|
|
print "$domain: available\n";
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
print "$domain: expires: $exp_date\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($LENGTH == 3) {
|
|
|
|
foreach my $let1 ('a' .. 'z', '0' .. '9') {
|
|
|
|
foreach my $let2 ('a' .. 'z', '0' .. '9', '-') {
|
|
|
|
foreach my $let3 ('a' .. 'z', '0' .. '9') {
|
|
|
|
CheckDomain($let1, $let2, $let3);
|
2010-06-27 11:46:50 -04:00
|
|
|
}
|
2010-06-27 11:12:22 -04:00
|
|
|
}
|
|
|
|
}
|
2010-06-27 12:12:10 -04:00
|
|
|
} elsif ($LENGTH == 2) {
|
|
|
|
foreach my $let1 ('a' .. 'z', '0' .. '9') {
|
|
|
|
foreach my $let2 ('a' .. 'z', '0' .. '9') {
|
|
|
|
CheckDomain("", $let1, $let2);
|
|
|
|
}
|
|
|
|
}
|
2010-06-27 12:13:29 -04:00
|
|
|
} else {
|
|
|
|
print STDERR "domain length of $LENGTH is unsupported\n";
|
|
|
|
exit 1;
|
2010-06-27 11:12:22 -04:00
|
|
|
}
|
2010-06-27 12:13:29 -04:00
|
|
|
###############################################################################
|
|
|
|
#
|
|
|
|
# Local variables:
|
|
|
|
# compile-command: "perl -c find-short-domain.plx"
|
|
|
|
# End:
|
|
|
|
|