You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.1 KiB
Perl

# infobot :: Kevin Lenzo (c) 1997
use Socket;
use POSIX;
sub I_REAPER {
$SIG{CHLD} = \&I_REAPER;
$waitedpid = wait;
}
$SIG{CHLD} = \&I_REAPER;
$DOMAIN_CACHE_EXPIRE_TIME = 7*24*60*60;
sub domain_summary {
# summarize the goo from internic
my $item = $_[0];
my @result;
my $result;
my @dom;
if (($DOMAIN_CACHE{$item})
&& ((time()-$DOMAIN_TIME_CACHE{$item}) < $DOMAIN_CACHE_EXPIRE_TIME)) {
return $DOMAIN_CACHE{$item};
}
if (!defined($pid = fork)) {
return "no luck, $safeWho";
} elsif ($pid) {
# parent
} else {
# child
@dom = &domain_lookup($item);
if ($dom[0] !~ /No match/) {
foreach (@dom) {
print ;
next if /^\s*$/;
s/:/: /;
s/\s+/ /g;
next if /^\s*Record/;
next if /^\s*Domain Name/;
# next if /^\s*\S+ Contact/;
# last if /^\s*Domain servers/;
last if /^To single out/;
if (s/the internic.*//i) {
push @result, $_;
last;
}
s/Administrative Contact/Admin/;
s/Technical Contact/Tech/;
s/Domain servers in listed order/DNS/;
push @result, $_;
last if ($#result > 15);
}
foreach (@result) { s/\s+/ /; s/^\s+//; }
foreach (0..$#result-1) {
$result[$_].="; " unless $result[$_]=~/:\s*$/;
}
$result = join("", @result);
$result =~ s/\s+;/;/g;
$result =~ s/\s+/ /g;
} else {
$result = "I can't find the domain $item";
}
$DOMAIN_TIME_CACHE{$item} = time();
$DOMAIN_CACHE{$item} = $result;
&msg($who, $result);
exit; # exit child.
}
}
sub domain_lookup {
# do the actual looking up
my($lookup) = @_;
my ($name, $aliases, $proto, $port, $len,
$this, $that, $thisaddr, $thataddr, $hostname);
my @result;
my $whois_server = 'rs.internic.net';
my $whois_port = 43;
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $whois_port) = getservbyname($whois_port, 'tcp')
unless $whois_port =~ /^\d+$/;
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($whois_server);
$this = pack($sockaddr, AF_INET, 0, $thisaddr);
$that = pack($sockaddr, AF_INET, $whois_port, $thataddr);
socket(DOMAIN_SERVER, PF_INET, SOCK_STREAM, $proto)
|| die "socket: $!";
bind(DOMAIN_SERVER, $this) || die "bind: $!";
connect(DOMAIN_SERVER, $that) || die "connect: $!";
select(DOMAIN_SERVER); $| = 1;
print DOMAIN_SERVER $lookup."\r\n";
@result = ();
my $line;
while (($#result < 30) && ($line = <DOMAIN_SERVER>)) {
next if (1.. $line =~ /Registrant:/);
push(@result,$line);
}
close(DOMAIN_SERVER); select(STDOUT);
unshift @result, "Registrant: " if @result;
@result;
}
1;
__END__
=head1 NAME
Internic.pl - look up Internic/RIPE whois records for a host
=head1 PREREQUISITES
Just the standard stuff.
=head1 PARAMETERS
allowInternic
=head1 PUBLIC INTERFACE
Internic|RIPE for <host>
=head1 DESCRIPTION
Queries RIPE or the Internic for the whois information about the
supplied host, and formats it up nicely.
=head1 AUTHORS
Kevin Lenzo