Resolver.c finds DNS names of given IP addresses using gethostbyaddr. Tested on Linux.
f875eb7ab996896cb1465284dab1af31ee82e5c20a6c36ceb52d432cbf20155c
/*
* Host name resolver
* Copyright (c) Danny "Dr.T" <danny@any-mail.co.uk>
*
* Resolves IP address to hostname
*
* Test on Linux. Compile with gcc -o resolve resolve.c
*
*/
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
int main ( int argc, char **argv )
{
struct hostent *host; /* hostent structure */
struct in_addr addr;
int i, ip[4]; /* i - counter, ip[4] - ip address */
if ( argc != 2)
{
printf("%s <ip address>\n", argv[0]);
return 0;
}
/* get ip address -> xxx.xxx.xxx.xxx */
if ((i = sscanf(argv[1], "%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3])) < 4)
{
fprintf(stderr,"not a valid IP address\n");
return 0;
}
/* check if it is a valid IP address */
for (i = 0; i <4; i++)
{
if (ip[i] < 0 || ip[i] > 255)
return 0;
((char *) &addr.s_addr)[i] = (char)ip[i];
}
if (!(host = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET)))
{
fprintf(stderr, "unable to resolve host name\n");
exit(0);
}
/* print hostname */
printf("ip address -> hostname : %s\n", host->h_name);
}