首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inet_ntop重复循环IP

inet_ntop重复循环IP
EN

Stack Overflow用户
提问于 2015-12-30 19:06:28
回答 1查看 166关注 0票数 2

我正试图构建一个工具,根据域名收集有关IP地址的信息。我一直在使用inet_ntop来实现这一目标,并且通常在大多数领域都能很好地工作。当我在google.com或amazon.com等网站上尝试时,相同的IP地址似乎会被反复打印。

输出示例:主机: google.com IPv4: 54.239.17.6 .

我想知道是否有人经历过这种情况,是我做错了什么,还是这与网站的配置方式有关。

代码语言:javascript
复制
error = getaddrinfo(domain, "80", &host_info, &host_list);
        // if error exists exit gracefully
        if(error != 0)
        {
            print_conn_err(error);
            return EXIT_FAILURE;
        }
        // print the domain string array
        printf("Host: %s\n", domain);
        // print IP addresses relating to domain name
        printf("IP Address(s):\n");
            for(result = host_list; result != NULL; result = host_list->ai_next)
        {
            void * address;
            char * ip_version;
            // if result is IPv4 address
            if(result->ai_family == AF_INET)
            {
                struct sockaddr_in * ipv4 = (struct sockaddr_in *)result->ai_addr;
                address = &(ipv4->sin_addr);
                ip_version = "IPv4";
            }
            else if(result->ai_family == AF_INET6)
            {
                struct sockaddr_in6 * ipv6 = (struct sockaddr_in6 *)result->ai_addr;
                address = &(ipv6->sin6_addr);
                ip_version = "IPv6";
            }
            else
            {
                printf("%s", "Not a valid IP addresses \n.");
                return EXIT_FAILURE;
            }
            // convert the IP to a string and print it:
            inet_ntop(result->ai_family, address, ip_address, sizeof ip_address);
            printf("  %s: %s\n", ip_version, ip_address);
        }
        freeaddrinfo(result);

我想到的一个想法是用以前的IP检查当前的IP并中断循环。不过,这似乎是一个相当麻烦的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-30 19:11:13

您的代码中有一个bug导致了这种情况。

代码语言:javascript
复制
for(result = host_list; result != NULL; result = host_list->ai_next)

需要的是

代码语言:javascript
复制
for(result = host_list; result != NULL; result = result->ai_next)

您的freeaddrinfo(result)也必须更改为freeaddrinfo(host_list)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34535611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档