/* Gets the host name for a given address */
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
main(int argc, char **argv)
{
struct hostent h_ent, *hp;
extern int h_errno;
char addrs[50], *p;
char addr[4];
if (argc < 2) {
printf("usage: gethostname <ip_addr>\n");
exit(1);
}
strcpy(addrs, argv[1]);
if ((p = strtok(addrs, ".")) == NULL)
goto err_exit;
addr[0] = (char)atoi(p);
if ((p = strtok(NULL, ".")) == NULL)
goto err_exit;
addr[1] = (char)atoi(p);
if ((p = strtok(NULL, ".")) == NULL)
goto err_exit;
addr[2] = (char)atoi(p);
if ((p = strtok(NULL, "\n")) == NULL)
goto err_exit;
addr[3] = (char)atoi(p);
if ((hp = gethostbyaddr(addr, 4, AF_INET)) == NULL) {
printf("gethostbyaddr error, h_errno %d\n", h_errno);
exit(1);
}
h_ent = *hp;
if (strchr(h_ent.h_name, '.'))
h_ent.h_name[(int)strchr(h_ent.h_name, '.') -
(int)h_ent.h_name] = 0;
printf("%s", h_ent.h_name);
exit(0);
err_exit:
printf("Invalid address.\n");
exit(1);
}