C++ -GETADDIN()——用动态DNS获取自己的外部IP

C++ -GETADDIN()——用动态DNS获取自己的外部IP,c++,dynamic,dns,getaddrinfo,C++,Dynamic,Dns,Getaddrinfo,我目前正在开发一个程序,其中包括我的外部IP。为了实现这一点,我使用函数getaddrinfo。 出于测试目的,我通过了google.com作为节点名,它运行良好。 如果我将我的动态dns传递给函数,我会收到0.0.0.0作为IP,但我希望我自己的外部IP。我还尝试了一个朋友的动态dns,结果也是一样的。 就我从google.com获得IP而言,问题不应该是我的代码。 是否不可能使用getaddrinfo从动态dns接收IP,或者是否有其他错误 编辑: IP是全局定义的:字符IP[INET_AD

我目前正在开发一个程序,其中包括我的外部IP。为了实现这一点,我使用函数getaddrinfo。 出于测试目的,我通过了google.com作为节点名,它运行良好。 如果我将我的动态dns传递给函数,我会收到0.0.0.0作为IP,但我希望我自己的外部IP。我还尝试了一个朋友的动态dns,结果也是一样的。 就我从google.com获得IP而言,问题不应该是我的代码。 是否不可能使用getaddrinfo从动态dns接收IP,或者是否有其他错误

编辑:

IP是全局定义的:字符IP[INET_ADDRSTRLEN]; 还有其他人来处理这个问题吗?

[解决方案]
作为一种解决方案,我使用函数gethostbyname。尽管如此,我还是不太满意它,因为这个函数已经被弃用了,但我现在可以获得我的IP了。因此,我认为问题要么是我的代码(尽管我可以解析其他主机名),要么是函数getaddrinfo和DDNS的组合。

你的动态dns是什么意思?@Wimmel只要我有一个每24小时更改一次的动态IP,我就有一台动态dns daniel-nas.computer,它指向我的动态地址。此动态dns每24小时更新一次。这就是我要传递给getaddrinfo.ok的地址,这是一个由您的提供商提供的动态dns服务。我认为如果你也可以在电脑上的其他软件中使用主机名,这应该可以。我不知道为什么它对你不起作用。@Wimmel尽管服务不是由我的提供商提供的,但它可以正常工作。我把它用于我的NAS、我的网站和其他东西。但是如果我将其传递给getaddrinfo,我只会收到0.0.0.0作为IP地址。如果您尝试对正在查找的DNS名称进行nslookup/dig,您会得到什么回报?你正在传递什么标志getaddrinfo?
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();