// HOSTENT Demo from www.c-worker.ch


#include <windows.h>
// borland users: maybe you need to include <winsock2.h> here
// borland benutzer müssen hier ev. noch <winsock2.h> includieren.
#include <stdio.h>
#include <conio.h>

// dont forget to link to ws2_32.lib !
// vergesst nicht gegen ws2_32.lib zu linken
#pragma comment( lib, "ws2_32.lib" )

/*
Dieses kleine Tool listet den Inhalt einer HOSTENT struct auf.
Beachtet: Wenn Ihr als hostname "localhost" angebt, so wird 
immer nur die IP Adresse 127.0.0.1 aufgelistet, auch wenn ihr 
mehrere IP's habt. Um all eure IP's zu sehen müsst ihr den
Computername eures PC's nehmen! z.B. MeinPC oder wie auch immer er
bei euch lautet. Den habt ihr mal irgendwo in den Windows-Einstellungen
festgelegt!
Natürlich können auch andere Host's im Netzwerk angegeben werden!
*/

/* 
Rückgabewerte/Return Values: 
1=error, 0=ok 
(wie schlecht gelöst ;))
*/

int startWinsock(void);
long dumpHost(char* hostname);

int main(int argc, char** argv)
{
  long rc;
  
  char hostname[512];

  printf("Enter Hostname: ");
  gets(hostname);
	 

  // Start Winsock
  rc=startWinsock();
  if(rc!=0)  {
    printf("Error: startWinsock failed: %d\n",rc);
    return 1;
  }  else  {
    printf("Winsock started!\n");
  }

  // Dump Host Info
  rc=dumpHost(hostname);
  if(rc!=0)  {
    printf("Error: dumpHost failed: %d\n",rc);
  }

  WSACleanup();

  printf("Press any key to exit!\n");
  getch();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}


long dumpHost(char* hostname)
{
  HOSTENT* he;

  if(hostname==NULL)
    return 1;


  he=gethostbyname(hostname);
  if(he==NULL) {
    printf("Error: Host %s not found!\n",hostname);
  	return 1;
  }

  // hostname
  printf("Hostname: %s\n",he->h_name);

  // aliases
  int i=0;
  while(he->h_aliases[i]) 
	  printf("Alias: %s\n",he->h_aliases[i++]);
  if(i==0) 
	  printf("No aliases found.\n");
    
  // ip adress list
  i=0;
  IN_ADDR addr;

  while(he->h_addr_list[i])  {
	  addr.s_addr=*((long*)he->h_addr_list[i++]);
	  printf("Ip Address: %s\n",inet_ntoa(addr));
  }

  return 0;
}




