#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <sys/socket.h>
#include <netdb.h>
int main() {
const char* hostname = "example.com";
struct hostent* hp = gethostbyname(hostname);
if (hp == NULL) {
std::cerr << "gethostbyname failed" << std::endl;
exit(EXIT_FAILURE);
}
char ip[INET_ADDRSTRLEN];
if (inet_ntop(AF_INET, hp->h_addr_list[0], ip, sizeof(ip)) == NULL) {
std::cerr << "inet_ntop failed" << std::endl;
exit(EXIT_FAILURE);
}
std::cout << hostname << " resolves to " << ip << std::endl;
return 0;
}
注意:这个代码只适用于IPv4地址。如果你需要处理IPv6地址,你需要修改代码,使用getaddrinfo
函数,并处理sockaddr_storage
结构。此外,这个代码没有处理网络错误,例如DNS服务器不可达或超时。