下面是一个简单的C语言示例,演示如何使用 gethostbyname
函数来获取主机名对应的IP地址。请注意,这个函数已经过时,建议在新代码中使用 getaddrinfo
。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <hostname>\n", argv[0]);
return EXIT_FAILURE;
}
const char *hostname = argv[1];
struct hostent *he;
struct in_addr **addr_list;
// 使用 gethostbyname 函数获取主机信息
he = gethostbyname(hostname);
if (he == NULL) {
herror("gethostbyname");
return EXIT_FAILURE;
}
// 获取 IP 地址列表
addr_list = (struct in_addr **)he->h_addr_list;
printf("IP addresses for %s:\n", hostname);
for (int i = 0; addr_list[i] != NULL; i++) {
printf("%s\n", inet_ntoa(*addr_list[i]));
}
return EXIT_SUCCESS;
}
编译和运行
你可以将上述代码保存为 gethost_example.c
,然后通过以下命令编译并运行:
gcc -o gethost_example gethost_example.c
./gethost_example example.com
请确保将 example.com
替换为你想查询的实际主机名。
注意事项
gethostbyname
是一个阻塞调用,因此在某些情况下可能导致程序长时间等待。- 如果需要处理IPv6或更复杂的DNS解析,推荐使用
getaddrinfo
和相关函数。
内容由零声教学AI助手提供,问题来源于学员提问