在C++中将NoIP主机名解析为IP地址



我正在尝试将NoIP主机名解析为IP地址,以便连接到它。下面是我当前使用的代码,但e->h_name只是返回我提供给它的主机名字符串,因此它不起作用。在Python中,gethostbyname函数成功地完成了这项工作,所以我很困惑为什么它不能在C++中工作。

void ResolveServerDNS(char* hostname) {
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
hostent* e = gethostbyname(hostname);
std::cout << e->h_name << 'n';
}

要获取IP地址,您需要使用以下内容:

printf("%sn", inet_ntoa(*(struct in_addr *)host->h_addr_list[0]));

这是来自的hostent结构https://learn.microsoft.com/en-us/windows/win32/api/winsock/ns-winsock-hostent

typedef struct hostent {
char  *h_name;
char  **h_aliases;
short h_addrtype;
short h_length;
char  **h_addr_list;
} HOSTENT, *PHOSTENT, *LPHOSTENT;

在你的功能中,它应该是:

hostent *e = gethostbyname(hostname); 
std::cout << inet_ntoa(*(struct in_addr *)e->h_addr_list[0]) << 'n';

让我们使用以下代码进行测试:https://godbolt.org/z/zbTx7x3M7

注意:以上是gethostbyname()返回ok->如果CCD_ 5为空&也许DNS为一个域返回更多的IP->让我们使用for循环来获取所有IP:

hostent *e = gethostbyname(hostname); 
for (int i = 0; e->h_addr_list[i] != NULL; i++) {
std::cout << inet_ntoa(*(struct in_addr *)e->h_addr_list[i]) << 'n';
}

相关内容

  • 没有找到相关文章

最新更新