ZBLOG

用C写一个调用gethostbyname的实力

下面是一个简单的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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7916

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?