dns

 avatar
unknown
plain_text
4 years ago
1.2 kB
4
Indexable
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>

int main(int argc, char* argv[]) {
  if (argc < 2) {
    printf("Provide valid IPv4 or IPv6 address\n");
    return EXIT_FAILURE;
  }

  struct sockaddr_in sa;
  int res = inet_pton(AF_INET, argv[1], & sa.sin_addr);
  switch (res) {
  case 0:
    printf("Not a valid IPv4 address.\n");
  case -1:
    if (res == -1) {
      printf("\nError(%s)\n", strerror(errno));
    }
    int n_res = inet_pton(AF_INET6, argv[1], & sa.sin_addr);
    switch (n_res) {
    case 0:
      printf("Not a valid IPv6 address.\n");
    case -1:
      if (n_res == -1) {
        printf("\nError(%s)\n", strerror(errno));
      }
      return EXIT_FAILURE;
    case 1:
      sa.sin_family = AF_INET6;
    }
    case 1:
      sa.sin_family = AF_INET;
  }

  char node[NI_MAXHOST];
  memset(node, 0, NI_MAXHOST);
  res = getnameinfo((struct sockaddr * ) & sa, sizeof sa, node, sizeof node, NULL, 0, 0);
  if (res) {
    printf("%s\n", gai_strerror(res));
    return EXIT_FAILURE;
  }

  printf("\nProvided IP: %s\n", argv[1]);
  printf("Hostname: %s\n", node);

  return EXIT_SUCCESS;
}
Editor is loading...