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

#define MYNAME	"zad1"

void usage(void)
{
	fprintf(stderr, "Usage: %s [ip_address|host.dns.name]\n", MYNAME);
	exit(1);
}

void blad(char * message)
{
	fprintf(stderr, "%s\n", message);
	exit(1);
}

int main(int argc, char ** argv)
{
	struct hostent *host;
	struct in_addr in;
	int i = 0;
	char ** aliases;
	struct sockaddr_in * addr;

	if (argc != 2)
	{
		usage();
	}

	if(inet_aton(argv[1], &in) != 0)
	{
		if ((host=gethostbyaddr((char *)&in.s_addr, sizeof(in.s_addr),AF_INET)))
		{
			printf("Host name is %s\n",host->h_name);
			aliases = host->h_aliases;
			for (i = 0; aliases[i] != 0; ++i)
			{
				printf("Alias %i: %s\n", i, aliases[i]);
			}
		} else {
			blad("gethostbyaddr(): blad");
		}
	} else { /* Uznajemy, ze uzytkownik podal nazwe DNS. */
		if ((host = gethostbyname(argv[1])))
		{
			aliases = host->h_addr_list;
			for (i = 0; aliases[i] != 0; ++i)
			{
				printf("Adres %i: %s\n", i, inet_ntoa(*((struct in_addr *)aliases[i])));
			}
		} else {
			blad("gethostbyname(): blad");
		}

	}

	return(0);
}
