首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我用getifaddrs找错了ip地址

我用getifaddrs找错了ip地址
EN

Stack Overflow用户
提问于 2016-10-26 04:44:21
回答 1查看 851关注 0票数 2

获取以太网指定ip地址的函数:

代码语言:javascript
复制
char *get_ethernet_ip(const char *ethernet, char *ip, size_t len) {
    struct ifaddrs *ips;
    int rc = getifaddrs(&ips);
    if (rc == -1) {
        SYSLOG("getifaddrs() failed (%s)", strerror(errno));
        return NULL;
    }

    for (; ips != NULL; ips = ips->ifa_next) {
        if (strcasecmp(ethernet, ips->ifa_name) == 0) {
            in_addr local_ip = ((sockaddr_in *)ips->ifa_addr)->sin_addr;
            const char *p = inet_ntop(AF_INET, &local_ip, ip, len);
            if (p == NULL) {
                SYSLOG("inet_ntop() failed (%s)", strerror(errno));
                return NULL;
            }

            return ip;
        }
    }

    return NULL;
}

main中使用的

代码语言:javascript
复制
char ip[32];
SYSLOG("ethernet lo ip: %s", get_ethernet_ip("lo", ip, 32));
SYSLOG("ethernet eth0 ip: %s", get_ethernet_ip("eth0", ip, 32));

结果:

2016-10-26 04:37:52 UTC主以太网地址: 1.0.0.0

2016-10-26 04:37:52 UTC主以太网eth0 ip: 2.0.0.0

问题:

lo的ip应该是127.0.0.1eth0的ip不应该是2.0.0.0,对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 05:01:59

您已经假定您遇到的第一个名称条目将在AF_INET家族中,但您没有检查。

使用ips->ifa_addr->sa_family检查它是否是AF_INET

您遇到的第一个loeth0设备很可能是AF_PACKET家族中的。

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

https://stackoverflow.com/questions/40253904

复制
相关文章

相似问题

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