我目前正在制作一个程序,除其他外,告诉我我的外部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];
是否还有其他人来过这个问题?
答案 0 :(得分:0)
<强> [解决] 强>
作为一种解决方案,我使用函数gethostbyname()
。尽管如此,我并不满意,因为该功能已被弃用,但我现在能够获得我的IP。因此我认为,问题是我的代码,虽然我可以解析其他主机名,或者函数getaddrinfo()
和DDNS的组合。