#!/bin/sh
# -*- perl -*-
# This code allows us to start perl from our path or an environment variable
# rather than hardcoding a path into the #! line.  It works from sh or csh.
(exit $?0) && eval 'exec ${QPERLQ-perl} -x $0 ${1+"$@"}'
if (! $?QPERLQ) setenv QPERLQ perl
exec $QPERLQ -x $0 $argv:q

#!/usr/local/bin/perl -w
#
# $Id: hostinfo,v 1.3 1998/04/11 03:04:16 ejb Exp $
# $Source: /home/ejb/scripts/RCS/hostinfo,v $
# $Author: ejb $
#

require 5.002;
use strict;

my $whoami = ($0 =~ m,([^/\\]*)$,) ? $1 : $0;
#my $dirname = ($0 =~ m,(.*)[/\\][^/\\]+$,) ? $1 : ".";
&usage unless (@ARGV > 0);

my @hosts = @ARGV;

while (@hosts)
{
    my $h = shift(@hosts);
    &hostinfo($h);
    print "\n" if @hosts;
}

sub hostinfo
{
    my $h = shift;
    print "Requested:   $h\n";
    if ($h =~ m/^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/)
    {
	&addr_to_host($1, $2, $3, $4);
    }
    else
    {
	&host_to_addr($h);
    }
}

sub print_info
{
    my @result = @_;
    my ($name, $aliases, $addr) = @result[0,1,4];
    print "Full name:   $name\n";
    my ($a,$b,$c,$d) = unpack('C4',$addr);
    print "Address:     $a.$b.$c.$d\n";
    if ($aliases ne "")
    {
	$aliases = join(', ', split(/\s+/, $aliases));
	print "Aliases:     $aliases\n";
    }
}

sub host_to_addr
{
    my $h = shift;
    my @result = gethostbyname($h);
    if (! @result)
    {
	print "Unknown host $h\n";
    }
    else
    {
	&addr_to_host(unpack('C4', $result[4]));
    }
}

sub addr_to_host
{
    my ($a, $b, $c, $d) = @_;
    my $addr = pack('C4', $a, $b, $c, $d);
    my $inet = 2;		# sorry
    my @result = gethostbyaddr($addr, $inet);
    if (! @result)
    {
	print "Can't resolve address $a.$b.$c.$d\n";
    }
    else
    {
	&print_info(@result);
    }
}

sub usage
{
    print STDERR "Usage: $whoami { host | addr } [ host | addr ... ]\n";
    exit 1;
}
