我目前正在开发一个程序,它告诉我,除其他外,我的外部IP。为了实现这一点,我使用了函数getaddrinfo()
。
为了测试目的,我将google.com
作为节点名传递给了它,它工作得很好。
如果我将动态dns传递给该函数,我将接收作为IP的0.0.0.0
,但我希望获得自己的外部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];
还有其他人来解决这个问题吗?
发布于 2015-01-26 16:43:36
溶液
作为一种解决方案,我使用函数gethostbyname()
。尽管如此,我对它并不满意,因为这个函数被废弃了,但是我现在可以获得我的IP了。因此,我认为问题要么是我的代码,尽管我可以解决其他主机名,要么是函数getaddrinfo()
和DDNS的组合。
https://stackoverflow.com/questions/28139415
复制相似问题