我使用 getifaddrs 得到错误的 IP 地址

2024-03-09

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

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;
}

主要用于:

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));

Result:
[ 2016-10-26 04:37:52 UTC ] [ server_info.cpp:90 ] [ main ] 以太网 lo ip: 1.0.0.0
[ 2016-10-26 04:37:52 UTC ] [ server_info.cpp:91 ] [ main ] 以太网 eth0 ip: 2.0.0.0

问题:
ip 为lo应该127.0.0.1,并且对于eth0它不应该是2.0.0.0, 我对吗?


您假设您遇到的第一个名称条目将位于AF_INET家人,但你没有检查。

Use ips->ifa_addr->sa_family检查它是AF_INET.

有可能是第一个lo and eth0您遇到的设备将在AF_PACKET family.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我使用 getifaddrs 得到错误的 IP 地址 的相关文章

随机推荐

  • Ruby:“意外的keyword_end”...但所有的开头和结尾都匹配

    我正在编写一段代码 它将向用户返回第 n 个素数 我在第 19 行和第 22 行收到 unexpected keywords end 语法错误 我在代码中添加了注释 以便您可以轻松找到错误的位置 def nthPrime n number
  • 如何将所有子域请求重定向到 htaccess 中的主域?

    我需要重定向所有子域请求以重定向到我的 htaccess 中的主域 我需要它还包括某种通配符重定向 例如Washington mysite com 重定向至 mysite com washington 但我还需要将子域上的任何旧网址重定向到
  • Play Framework 2.5 模块的依赖项注入

    我有一个具有以下签名的模块类 class SilhouetteModule extends AbstractModule with ScalaModule 我想注入配置 class SilhouetteModule Inject confi
  • 空白导致 div 在纯 CSS 中堆叠[重复]

    这个问题在这里已经有答案了 我正在使用纯 CSS 来布局网站 但遇到了问题 如果嵌套网格元素之间存在任何空格 则会破坏布局并将最后一个 div 推到下一行 我创建了一个测试网站 内容尽可能少 以测试是否只有我一个人这样做 但我仍然遇到了问题
  • 类签名中的“()V”是什么意思?

    我用 Javassist 创建了一个构造函数 它没有真正的方法 CtConstructor c CtNewConstructor make argTypes null newClass 当我试图发出这个班级的签名时 c getSignatu
  • 了解包含多个Content-Type标头的curl POST请求命令

    以下卷曲命令 curl v F json method update video params video id 582984001 itemState INACTIVE token jCoXH5OAMYQtXm1sg62KAF3ysG90
  • 检测登录页面中的表单身份验证超时

    当您将表单身份验证设置为在访问受保护页面时重定向到 login aspx 时 有什么好方法可以在 login aspx 中检测用户是否因为尚未登录而被发送到那里 或者因为他们的表单身份验证票证已存在已到期 我想显示 您已超时 消息 在这个问
  • 表单未提交到数据库[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 因此 当我在表单上输入信息后 它会使用新表单刷新 new php 页面 但不会提交任何信息 我没有收到任何错误 就像我在页面上单击
  • Python 中频谱图的 FFT

    我将如何使用 Python 从 WAV PCM 文件读取频率峰值 然后能够生成它的图像以进行频谱图分析 我正在尝试制作一个程序 允许您读取任何音频文件 将其转换为 WAV PCM 然后找到峰值和截止频率 Python 波库 http doc
  • Eclipse 注释/取消注释快捷方式?

    我认为这很容易实现 但到目前为止我还没有找到评论 取消评论快捷方式的解决方案Java class editor and jsf faceted webapp XHTML file editor to quickly comment unco
  • Node.JS 中的 createReadStream

    所以我使用了 fs readFile 它给了我 致命错误 CALL AND RETRY LAST 分配失败 进程超出 记忆 由于 fs readFile 在调用回调之前将整个文件加载到内存中 我应该使用 fs createReadStrea
  • CSS 过渡在悬停时闪烁

    太棒了 你用宝贵的时间阅读我的问题 我正在尝试在悬停时翻转 div 一切都很顺利 但在转换过程中它会闪烁 看起来几乎像是翻转了多次 这破坏了翻转的整体效果 下面是我的代码和小提琴 小提琴 FIDDLE http jsfiddle net h
  • WinRT 应用程序中的 app.config 相当于什么?

    在 Windows 桌面开发 WinForms WPF 中 app config是放置应用程序中使用的连接字符串或 uri 等内容的潜在位置 这允许最终用户在应用程序范围内更改这些设置 而无需开发人员重新构建和重新部署 WinRT应用程序中
  • Intellij / Android Studio 可以折叠注释吗?

    我在intellij中注释掉了这段代码 如您所见 此处无法折叠评论 然而 Webstorm 中相同的注释块可能会被折叠 有没有办法在intellij Android Studio中配置注释折叠 折叠任意选定的块 在编辑器中选择连续的代码片段
  • Django CSRF 框架有很多失败

    我的站点上的 CSRF Django 中间件 来自 SVN trunk 的版本 出现了很多失败 我得到的唯一错误是 CSRF 失败 原因 CSRF 令牌丢失或不正确 我如何诊断这些 CSRF 错误来自何处 我自己无法导致 CSRF 错误 但
  • 验证错误:向后分支上存在未初始化的对象/JVM 规范 4.10.2.4

    The JVM 规范 4 10 2 4 版本 7 最后一段 http docs oracle com javase specs jvms se7 html jvms 4 html jvms 4 10 2 4 says 如果未初始化对象的特殊
  • 更改 EditText setError 可绘制重力

    对于将要填充 RTL 文本的 EditText 有没有办法改变错误可绘制对象 当然还有弹出窗口 的重力 这是一个常规错误可绘制的示例 因此 由于输入的文本是 RTL 我希望弹出窗口显示在 EditText 的左侧 我尝试应用自定义绘图 但是
  • JavaFX 在列表视图中显示字符串附近的图像[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想在列表视图中的字符串附近显示一条消息我尝试查找它但我不太理解它我从网站上尝试了这个http docs oracle com javafx
  • 如何在 spring 中将图像转换为多部分文件

    我有一个图像文件并正在创建File具有该图像的对象 File file new File E Shared Data Images xyz jpg 上面的行正在创建一个file具有某种尺寸的物体 例如440272 我需要转换上面的image
  • 我使用 getifaddrs 得到错误的 IP 地址

    获取以太网指定IP地址的函数 char get ethernet ip const char ethernet char ip size t len struct ifaddrs ips int rc getifaddrs ips if r