2012-07-15 23:21:22 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <netdb.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <sys/socket.h>
|
2018-12-02 13:27:22 +00:00
|
|
|
|
2012-07-15 23:21:22 +00:00
|
|
|
#ifndef NI_MAXHOST
|
|
|
|
#define NI_MAXHOST 1025
|
|
|
|
#endif
|
2018-12-02 13:27:22 +00:00
|
|
|
|
2018-12-02 13:45:35 +00:00
|
|
|
static int doit(const char* host, const char* service) {
|
2012-07-15 23:21:22 +00:00
|
|
|
struct addrinfo *result;
|
|
|
|
struct addrinfo *res;
|
|
|
|
int error;
|
2018-12-02 13:27:22 +00:00
|
|
|
|
2012-07-15 23:21:22 +00:00
|
|
|
/* resolve the domain name into a list of addresses */
|
2018-12-02 13:45:35 +00:00
|
|
|
error = getaddrinfo(host, service, NULL, &result);
|
2012-07-15 23:21:22 +00:00
|
|
|
if (error != 0)
|
2018-12-02 13:27:22 +00:00
|
|
|
{
|
2012-07-15 23:21:22 +00:00
|
|
|
fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
|
|
|
|
return EXIT_FAILURE;
|
2018-12-02 13:27:22 +00:00
|
|
|
}
|
|
|
|
|
2012-07-15 23:21:22 +00:00
|
|
|
/* loop over all returned results and do inverse lookup */
|
|
|
|
for (res = result; res != NULL; res = res->ai_next)
|
2018-12-02 13:27:22 +00:00
|
|
|
{
|
2012-07-15 23:21:22 +00:00
|
|
|
char hostname[NI_MAXHOST] = "";
|
2018-12-02 13:27:22 +00:00
|
|
|
|
|
|
|
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0);
|
2012-07-15 23:21:22 +00:00
|
|
|
if (error != 0)
|
|
|
|
{
|
|
|
|
fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
|
|
|
|
continue;
|
|
|
|
}
|
2021-02-05 01:38:17 +00:00
|
|
|
int port = 0;
|
|
|
|
if(res->ai_family == AF_INET) port = ((struct sockaddr_in*)res->ai_addr)->sin_port;
|
|
|
|
else if(res->ai_family == AF_INET6) port = ((struct sockaddr_in6*)res->ai_addr)->sin6_port;
|
|
|
|
port = ntohs(port);
|
|
|
|
printf("hostname: %s, port: %d\n", hostname, port);
|
2018-12-02 13:27:22 +00:00
|
|
|
}
|
|
|
|
|
2012-07-15 23:21:22 +00:00
|
|
|
freeaddrinfo(result);
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
2018-12-02 13:45:35 +00:00
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
int ret;
|
|
|
|
ret = doit("www.example.com", NULL);
|
|
|
|
ret = doit("www.example.com", "80");
|
|
|
|
return ret;
|
|
|
|
}
|