Функция getaddrinfo() возвращает неверный IP-адрес

Я пытаюсь разрешить IP-адрес URL-адреса с помощью getaddrinfo(), но он всегда возвращает неправильный IP-адрес, я пробовал с несколькими URL-адресами, и результат тот же. любая помощь будет принята с благодарностью.

Программа возвращает IP-адрес: 209.85.175.99 вместо возврата реального IP-адреса, который равен 74.125.39.147.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int
main()
{
 char *hostname = "www.google.lk";
 struct addrinfo hints, *res;
 struct in_addr addr;
 int err;

 memset(&hints, 0, sizeof(hints));
 hints.ai_socktype = SOCK_STREAM;
 hints.ai_family = AF_INET;

 if ((err = getaddrinfo(hostname, NULL, &hints, &res)) != 0) {
 printf("error %d\n", err);
 return 1;
 }

 addr.s_addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr.s_addr;

 printf("ip address : %s\n", inet_ntoa(addr));

 freeaddrinfo(res);

 return 0;
}

person Ashwin    schedule 11.10.2011    source источник
comment
ты за каким-то прокси? или что-то не так в вашем etc/hosts?   -  person phoet    schedule 11.10.2011
comment
Вы уверены, что получаете неправильный? ›nslookup www.google.lk Сервер: dir-320 Адрес: 192.168.0.1 Неавторитетный ответ: Имя: www.l.google.com Адреса: 209.85.148.147 209.85.148.99 209.85.148.103 209.85.148.104 209.85.148.105 209.85.148.147 209.85.148.99 148.106 Псевдонимы: www.google.lk www.google.com   -  person Roman R.    schedule 11.10.2011
comment
Возможно, вам следует попробовать имя, которое имеет более прямое разрешение, чем сервер Google с несколькими уровнями псевдонимов и циклическим разрешением. Как насчет stackoverflow.com? (Разрешение имен серверов Google зависит даже от того, откуда вы их разрешаете.)   -  person Sven Marnach    schedule 11.10.2011
comment
Спасибо за всю вашу помощь, я решил проблему, в кодировании не было ничего плохого, URL-адрес, который я использовал, был проблемой, так как Seven предложил stackoverflow.com, разрешен правильно. Спасибо еще раз.   -  person Ashwin    schedule 11.10.2011
comment
Хотя я мог бы добавить..... getaddrinfo() возвращает список адресов. Посмотрите справочную страницу для примера того, как перебирать результаты.   -  person Brian McFarland    schedule 11.10.2011
comment
используйте -Wall, некоторые заголовочные файлы отсутствуют..   -  person Karoly Horvath    schedule 14.11.2011


Ответы (1)


google.com может определять разные IP-адреса в зависимости от вашего местоположения. Это своего рода трюк с балансировкой нагрузки.

person blaze    schedule 11.10.2011