gpt4 book ai didi

linux - getifaddrs 仅解析来自以太网接口(interface) (eth) 或 wlan 接口(interface)的 IP

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:07 27 4
gpt4 key购买 nike

我使用了以下链接中的程序 http://www.linuxhowtos.org/manpages/3/getifaddrs.htm .

但它会打印所有 IP,如 loopback、eth0、eth1 lo 等

现在我只需要获取活跃的 excpet loopback ip例如

$配置 eth6 链路封装:以太网 HWaddr 08:00:27:47:99:da
inet地址:10.0.2.15广播:10.0.2.255掩码:255.255.255.0 inet6 地址:fe80::a00:27ff:fe47:99da/64 范围:链接 因为 ifconfig 给出了事件接口(interface)和相应的 IP

必须在此代码中更改什么才能使上述功能正常工作?

最佳答案

改变

    if (ifa->ifa_addr == NULL)
continue;

family = ifa->ifa_addr->sa_family;

    if (ifa->ifa_addr == NULL)
continue;

if ((strcmp("lo", ifa->ifa_name) == 0) ||
!(ifa->ifa_flags & (IFF_RUNNING)))
continue;

family = ifa->ifa_addr->sa_family;

并在其他包含之后添加这一行

#include <net/if.h>

添加的行只是检查包含在 ifa->ifa_name 中的“lo”接口(interface)名称,并检查接口(interface)的标志。测试 IFF_RUNNING 位(查看 net/if.h 了解更多定义)将仅返回运行中的接口(interface)。

如果你想检查接口(interface)的其他特性,只需检查这个标志(取自net/if.h)

  • IFF_UP 接口(interface)正在运行。
  • IFF_BROADCAST 有效的广播地址集。
  • IFF_DEBUG 内部调试标志。
  • IFF_LOOPBACK 接口(interface)是环回接口(interface)。
  • IFF_POINTOPOINT 接口(interface)是点对点链接。
  • 已分配 IFF_RUNNING 资源。
  • IFF_NOARP 无 arp 协议(protocol),未设置 L2 目标地址。
  • IFF_PROMISC 接口(interface)处于混杂模式。
  • IFF_NOTRAILERS 避免使用预告片。
  • IFF_ALLMULTI 接收所有多播数据包。
  • IFF_MASTER 负载平衡包的主人。
  • IFF_SLAVE 负载平衡包的从站。
  • IFF_MULTICAST 支持多播
  • IFF_PORTSEL 能够通过 ifmap 选择媒体类型。
  • IFF_AUTOMEDIA 自动媒体选择已激活。
  • IFF_DYNAMIC 当接口(interface)关闭时地址丢失。
  • IFF_LOWER_UP 驱动程序向 L1 发出信号(自 Linux 2.6.17 起)
  • IFF_DORMANT 驱动信号休眠(自 Linux 2.6.17 起)
  • IFF_ECHO 回显发送数据包(自 Linux 2.6.25 起)

编辑

如果你需要区分 IPV6 GUA 和 ULA 地址使用这个宏

#ifndef IN6_IS_ADDR_GLOBAL
#define IN6_IS_ADDR_GLOBAL(a) \
((((__const uint32_t *) (a))[0] & htonl(0x70000000)) \
== htonl (0x20000000))
#endif /* IS ADDR GLOBAL */

#ifndef IN6_IS_ADDR_ULA
#define IN6_IS_ADDR_ULA(a) \
((((__const uint32_t *) (a))[0] & htonl(0xfe000000)) \
== htonl (0xfc000000))
#endif /* IS ADDR ULA */

参数必须取自((sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;

关于linux - getifaddrs 仅解析来自以太网接口(interface) (eth) 或 wlan 接口(interface)的 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14235208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com