environment/hostadress.c

///////////////////////////////////////////////////////////////////////////////
// Filename: hostadress.c
///////////////////////////////////////////////////////////////////////////////
// Purpose: get some informations about host where program is running
///////////////////////////////////////////////////////////////////////////////
// History:
// ========
//
// Date     Time     Name      Description   
// -------- -------- --------  ------------------------------------------------
// 96/02/06 02:04:08 muellerg: created
//
///////////////////////////////////////////////////////////////////////////////


// Feature test switches ///////////////////////////// Feature test switches //
    /* NONE */



// System headers /////////////////////////////////////////// System headers //

#include <stdlib.h>
#include <sys/param.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


// Local headers ///////////////////////////////////////////// Local headers //

#include "../common.h"



// Macros /////////////////////////////////////////////////////////// Macros //
    /* NONE */



// File scope objects /////////////////////////////////// File scope objects //

const int maxhostnamelen = MAXHOSTNAMELEN+1;



// External variables, functions, and classes ///////////// External objects //
    /* NONE */



// Signal catching functions ///////////////////// Signal catching functions //
    /* NONE */



// Structures, unions, and class definitions /////////////////// Definitions //
    /* NONE */



// Functions and class implementation /// Functions and class implementation //
    /* NONE */



// Main /////////////////////////////////////////////////////////////// Main //

int
main(int argc, char *argv[])
{
    error.set_program_name(argv[0]);    

    char name[maxhostnamelen];
    struct hostent *entry;
    int i=0;


    // get name of host 

    if (gethostname(name, maxhostnamelen) != 0)
        error.system("unknown name!");

    cout << "host name: \"" << name << "\"" << endl;



    // get more info with the help of our name 

    if ((entry = gethostbyname(name)) == NULL)
        error.system("no host name info");


    cout << "official name: \"" << entry->h_name << "\"" << endl;

    // print aliases as well 

    char **aliases=entry->h_aliases;
    for(i=1; aliases[i]; i++)
        cout << "also known as: \"" << aliases[i] << "\""<< endl;


    // and numerical... 

    switch(entry->h_addrtype)
    {
        case AF_INET: {
                        in_addr ia;
                        ia.s_addr=*((unsigned long *)(entry->h_addr_list[0]));

                        cout << "address: " << inet_ntoa(ia) << endl;

                        for(unsigned long **aliases=
                            (unsigned long **)entry->h_addr_list, i=1; 
                            aliases[i]; i++)
                        {
                            ia.s_addr=*aliases[i];
                            cout << "or: " << inet_ntoa(ia) << endl;
                        }
                      }
                      break;

        default:
                      error.warning("unknown address type");
                      break;

    }

    return(EXIT_SUCCESS);
}