【发布时间】:2015-01-25 17:41:28
【问题描述】:
我目前正在开发一个程序,该程序可以告诉我我的外部 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];
还有其他人解决过这个问题吗?
【问题讨论】:
-
你的动态 dns 是什么意思?
-
@Wimmel 就我得到一个每 24 小时更改一次的动态 IP 而言,我得到了一个指向我的动态地址的动态 dns (
daniel-nas.computer)。这个动态 dns 每 24 小时更新一次。这就是我要传递给getaddrinfo()的地址。 -
好的,这是您的提供商提供的动态 dns 服务。我认为这应该可行(如果您也可以在您的 PC 上的其他软件中使用主机名)。我不知道为什么它不适合你。
-
@Wimmel 虽然我的提供商没有提供该服务,但它运行良好。我将它用于我的 NAS、我的网站和其他东西。但如果我将它传递给
getaddrinfo(),我只会收到0.0.0.0作为IP 地址。 -
如果您尝试 nslookup / dig 您正在查找的 DNS 名称,您会得到什么?你传递了什么标志 getaddrinfo?
标签: c++ dynamic dns getaddrinfo