[tpm] gethostbyname and IPv6

Madison Kelly linux at alteeve.com
Wed Mar 12 03:58:37 PDT 2008


Hi all,

   I want to create a generic way of taking a name and resolving it's IP 
address (assuming it has one), be it IPv4 or IPv6. I've come to realize 
that gethostbyname() fails when a name is a valid name for an IPv6 address.

   Though I admit my testing methods may be flawed, also.

   To test, I created a few test entries in my hosts file:

-=-=-=-
192.168.1.50            minuet
192.168.1.98            akane
2001:db8::1428:57ab     foobar
-=-=-=-

   And then made a small SR (incomplete, but working enough).

-=-=-=-
sub domain_to_ip
{
	my ($string)=@_;
	
	# This gets set to '1' if I am able to get an IP address.
	my $valid=0;

	# Try the good 'ol 'gethostbyname'
	print "String: [$string] via 'gethostbyname':\n";
	my ($name, $aliases, $addrtype, $length, @addrs) = getaddrinfo($string);
	if ( ! defined $name )
	{
		print "'gethostbyname' failed.\n";
	}
	else
	{
		print "\tName:     [$name]\n";
		print "\tAliases:  [$aliases]\n";
		print "\taddrtype: [$name]\n";
		print "\tlength:   [$length]\n";
		print "\taddrs:    [";
		foreach my $address (@addrs)
		{
			my ($a,$b,$c,$d) = unpack('C4',$address);
			$ip="$a,$b,$c,$d";
			print "$a.$b.$c.$d, ";
		}
		print "]\n";
		$valid=1;
	}
	
	return($valid, $ip, $type);
}
-=-=-=-

   Which I call with:

-=-=-=-
my $source="foobar";
my ($is_valid, $ip, $type)=domain_to_ip($source);
print "Translated source: [$source] to:\n";
print "\tValid? [$is_valid]\n";
-=-=-=-

   When I test the names 'akane' or 'minuet', it's fine. When I test 
with foobar, I get no love.

   Anyone have any suggestions?

Thanks!!

Madi


More information about the toronto-pm mailing list