getaddrinfo: given a name retuns all translated IPs, one per line
/* * File: getaddrinfo.c * Compile: gcc getaddrinfo.c -o getaddrinfo * Usage: ./getaddrinfo FQN */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char **argv) { int error; struct addrinfo saddr, *psaddr, *ptr; memset(&saddr, '\0', sizeof(saddr)); saddr.ai_family = AF_INET; saddr.ai_socktype = SOCK_STREAM; error = getaddrinfo(argv[1], NULL, &saddr, &psaddr); if (error) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(error)); exit(EXIT_FAILURE); } for (ptr = psaddr; ptr; ptr = ptr->ai_next) { puts(inet_ntoa(((struct sockaddr_in *) ptr->ai_addr)->sin_addr)); } return 0; }
getnameinfo: Given an IP returns the name that first resolves to it.
/* * File: getnameinfo.c * Compile: gcc getnameinfo.c -o getnameinfo * Usage: ./getnameinfo IP */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> static char hostname[255]; int main(int argc, char **argv) { int error; struct sockaddr_in saddr_in; memset(&saddr_in, '\0', sizeof(saddr_in)); saddr_in.sin_family = AF_INET; error = inet_aton(argv[1], &saddr_in.sin_addr); if (error == 0) { perror("inet_aton"); exit(EXIT_FAILURE); } error = getnameinfo((struct sockaddr *)&saddr_in, sizeof(saddr_in), hostname, sizeof(hostname), NULL, 0, NI_NAMEREQD); if (error) { fprintf(stderr, "getnameinfo: %s\n", gai_strerror(error)); exit(EXIT_FAILURE); } puts(hostname); return 0; }
Cheers
Nenhum comentário:
Postar um comentário