Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

54 строки
1.3 KiB

  1. #include <arpa/inet.h>
  2. #include <netdb.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <sys/socket.h>
  7. #include <sys/types.h>
  8. int main(int argc, char **argv) {
  9. if (argc != 2) {
  10. fprintf(stderr, "Usage: %s <hostname>", argv[0]);
  11. exit(1);
  12. }
  13. int status;
  14. struct addrinfo hints;
  15. memset(&hints, 0, sizeof hints);
  16. struct addrinfo *servinfo;
  17. hints.ai_family = AF_UNSPEC;
  18. hints.ai_socktype = SOCK_STREAM;
  19. if ((status = getaddrinfo(argv[1], "80", &hints, &servinfo)) != 0) {
  20. fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
  21. exit(1);
  22. }
  23. struct addrinfo *cur = servinfo;
  24. while (cur) {
  25. void *addr;
  26. char *ipver;
  27. char ipstr[INET6_ADDRSTRLEN];
  28. if (cur->ai_family == AF_INET) {
  29. struct sockaddr_in *temp = (struct sockaddr_in *)cur->ai_addr;
  30. addr = &(temp->sin_addr);
  31. ipver = "IPv4";
  32. } else if (cur->ai_family == AF_INET6) {
  33. struct sockaddr_in6 *temp = (struct sockaddr_in6 *)cur->ai_addr;
  34. addr = &(temp->sin6_addr);
  35. ipver = "IPv6";
  36. }
  37. inet_ntop(cur->ai_family, addr, ipstr, sizeof ipstr);
  38. printf("%s: %s\n", ipver, ipstr);
  39. cur = cur->ai_next;
  40. }
  41. freeaddrinfo(servinfo);
  42. }