2015-01-25 4 views
0

В настоящее время я работаю над программой, которая рассказывает мне, помимо прочего, мой внешний IP-адрес. Для этого я использую функцию getaddrinfo().
Для целей тестирования я прошел google.com в качестве имени узла, он работал нормально.
Если я передаю свои динамические dns функции, я получаю 0.0.0.0 как IP, но я ожидаю свой собственный внешний IP. Я также попробовал динамический dns от друга с тем же результатом.
Насколько я могу получить IP-адрес от google.com, проблема не должна быть моим кодом.
Невозможно ли получить IP-адрес от динамического dns с помощью getaddrinfo() или есть что-то еще, что я делаю неправильно?C++ - getaddrinfo() - получение собственного внешнего IP-адреса с динамическими dns сбой

Edit:

WSADATA wsaD {}; 
addrinfo hints = {AI_NON_AUTHORITATIVE, AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, NULL, NULL, NULL}; 
addrinfo *infoAddress; 
WSAStartup(MAKEWORD(2, 2), &wsaD); 
getaddrinfo("daniel-nas.computer", "80", &hints, &infoAddress); 
struct sockaddr_in *ipAddress = reinterpret_cast<sockaddr_in*>&infoAddress->ai_addr); 
inet_ntop(AF_INET, &ipAddress->sin_addr.s_addr, IP, sizeof(IP)); 
WSACleanup(); 

IP является globaly определено: char IP[INET_ADDRSTRLEN];
Есть ли кто-то, кто пришел по этому вопросу?

+0

Что вы имеете в виду под своим динамическим dns? – wimh

+0

@Wimmel Насколько я получил динамический IP, который меняется каждые 24 часа, я получил динамический dns ('daniel-nas.computer'), который указывает на мой динамический адрес. Этот динамический dns обновляется один раз 24 часа. И это адрес, который я передаю 'getaddrinfo()'. – Daniel

+0

ОК, так что это динамическая служба DNS, предоставляемая вашим провайдером. Я думаю, что это должно сработать (если вы также можете использовать имя хоста в другом программном обеспечении на вашем компьютере). Я не знаю, почему это не сработает для вас. – wimh

ответ

0

[Решение]
Как своего рода решение, я использую функцию gethostbyname(). Тем не менее, я не очень доволен этим, потому что функция устарела, но теперь я могу получить свой IP-адрес. Поэтому я думаю, проблема заключается либо в моем коде, хотя я могу разрешить другие имена хостов, либо комбинацию функции getaddrinfo() и DDNS.