C ++ - getaddrinfo() - 使用动态dns获取自己的外部IP失败

时间:2015-01-25 17:41:28

标签: c++ dynamic dns getaddrinfo

我目前正在制作一个程序,除其他外,告诉我我的外部IP。为实现这一目标,我正在使用函数getaddrinfo() 出于测试目的,我将google.com作为节点名称,它工作正常 如果我将动态dns传递给函数,我会收到0.0.0.0作为IP,但我期待自己的外部IP。我也尝试了一个朋友的动态dns,结果相同。
至于我可以从google.com获取IP,问题不应该是我的代码 是否无法通过getaddrinfo()从动态DNS接收IP或者我还有其他错误吗?

修改

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是全球定义的:char IP[INET_ADDRSTRLEN];
是否还有其他人来过这个问题?

1 个答案:

答案 0 :(得分:0)

<强> [解决]
作为一种解决方案,我使用函数gethostbyname()。尽管如此,我并不满意,因为该功能已被弃用,但我现在能够获得我的IP。因此我认为,问题是我的代码,虽然我可以解析其他主机名,或者函数getaddrinfo()和DDNS的组合。