#!/usr/bin/perl
# (c)Copyright 2002 Stephen Samuel.
# Permission to copy under the terms of the GNU public license version 2.0
# see http://www.gnu.org/licenses/licenses.html#GPL for more details
#
#$Header: /home/samuel/bin/RCS/whoois,v 1.5 2002/09/18 19:45:30 samuel Exp samuel $
#$Log: whoois,v $
#Revision 1.5  2002/09/18 19:45:30  samuel
#url parsing improvements.
#
#Revision 1.4  2002/09/18 19:42:04  samuel
#so far, so good....
#
#Revision 1.3  2002/09/14 20:16:45  samuel
#first fully functional version.
#
#Revision 1.2  2002/09/14 19:54:04  samuel
#first working version
#

$default_server= "whois.arin.net";

	$separator="";
foreach $name (@ARGV){
	print $separator;
	if(! ( $name=~ s"[a-zA-Z]+://([^:/]+)([:/].*)?"$1")){
	$name=~ s/^.*@(.*)/$1/;
	}
	
	chomp $hame;
	if( ($name =~/^[^\d.]$/) || ! ($name=~ /\./) ){ #all digits and dots or no dots at all
		# (no dots at all means a subnet lookup )
		@addrs=( $name );
	}else{  # dns name
	print "looking up $name\n";
		@addrs= getadd($name);
	}
	foreach $addr (@addrs){
		$server= $default_server;
		%sufixlist= ();
		while ($server && ! defined($serverlist{$server}) ){
			print"\n\n====looking in: '$server'\n";
			$serverlist{$server} = 1; # prevent infinite loops
			if($server=~ /whois\.nic\.ad\.jp/){
				$opt="/e";
			}else{
				$opt="";
			};
			print "___________ $addr$opt\@$server ( $addr )\n" ;
				open PIPE,"whois $addr$opt\@$server |";
			$server="";
			

			while(<PIPE>){
				print;
				if(/[^[](WHOIS\.[\S]+)/i ){
					if($server){
						printf"___! replacing '%s' with '%s'\n",$server,$1;
					};
					$server=$1;
				}
			}
		}
		printf"\nloop blocked: '%s'\n",$server if $server;
		undef %serverlist;
	}
	printf "name: %s  addr: %s\n",$name , join(" , ",@addrs);
	$separator="\n=========================\n=========================\n";
};


sub getadd{
	@y=(gethostbyname($_[0]));

	@x= @y[4..$#y];
	foreach (@x){
		$_=join(".",unpack("CCCC",$_))
	};
	return( @x);
}

