C++ - getaddrinfo() - 使用动态 dns 获取自己的外部 IP 失败
C++ - getaddrinfo() - getting own external IP with dynamic dns fails
我目前正在开发一个程序,它可以告诉我我的外部 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];
还有其他人解决过这个问题吗?
[解决方法]
作为一种解决方案,我正在使用函数 gethostbyname()
。尽管如此,我对它并不是很满意,因为该功能已被弃用,但我现在可以获得我的 IP。因此我认为,问题要么是我的代码,尽管我可以解析其他主机名,要么是函数 getaddrinfo()
和 DDNS 的组合。
我目前正在开发一个程序,它可以告诉我我的外部 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];
还有其他人解决过这个问题吗?
[解决方法]
作为一种解决方案,我正在使用函数 gethostbyname()
。尽管如此,我对它并不是很满意,因为该功能已被弃用,但我现在可以获得我的 IP。因此我认为,问题要么是我的代码,尽管我可以解析其他主机名,要么是函数 getaddrinfo()
和 DDNS 的组合。