getifaddrs 是否给我重复的网络接口地址
Is getifaddrs giving me duplicate network interface addresses?
我正在使用一个小片段查找特定的网络地址,例如:
char name[INET_ADDRSTRLEN];
struct ifaddrs *iflist;
if (getifaddrs(&iflist) < 0)
perror("getifaddrs");
struct in_addr addr;
for (struct ifaddrs *p = iflist; p; p = p->ifa_next)
{
if (strcmp(p->ifa_name, "lo") == 0)
{
addr = reinterpret_cast<struct sockaddr_in*>(p->ifa_addr)->sin_addr;
if (inet_ntop(AF_INET, &addr, name, sizeof(name)) == NULL)
{
perror("inet_ntop");
continue;
}
cout << name << " ---> " << if_nametoindex("lo") << " : " << addr.s_addr << endl;
}
}
我得到的输出是:
1.0.0.0 ---> 1 : 1
127.0.0.1 ---> 1 : 16777343
我不明白第一个结果..这不会发生在像 eth# 这样的东西上,但它发生在另一个名为 bond0 的接口上。这是怎麽?
getifaddr
是非标准的。我想你是在 linux 系统上使用它。手册页有以下注释:
在Linux上返回的地址通常是IPv4和IPv6。 分配给接口的地址,但也有一个AF_PACKET地址 每 接口包含有关接口及其物理层的较低级别详细信息。 在这种情况下,ifa_data字段 可能包含 指向结构net_device_stats的指针,该结构在 中定义,其中包含各种接口属性和 统计学。
您可能应该检查ifa_addr->sa_family
这是否有您期望的家庭。
相关文章:
- 如何绑定 C++ gRPC 客户端的网络接口
- C/C++:POSIX 兼容方式查找默认网络接口上/下
- 如何以编程方式将路由添加到网络接口
- 检测网络接口更改
- 使用 Boost.Asio 将 UDP 套接字绑定到特定网络接口
- 用于修改网络接口属性的 Win32 API
- 如何使用Qt在Windows上检查网络接口类型是以太网或无线
- 实现现有的网络接口,以相对于C 11中的Endianess定义位字段
- 网络接口的状态
- getifaddrs 是否给我重复的网络接口地址
- C++获取网络接口信息
- 如何在 Linux 的 cpp 中查找侦听 0.0.0.0 的服务器的网络接口
- 如何设置IP到网络接口
- 通过WinAPI禁用/启用网络接口
- 从IPv4地址获取网络接口名称
- 如何连接到 sock4 客户端的网络字节地址?
- curl—是否有办法强制curl使用特定的网络接口?
- 查找C/ c++中可用的网络接口
- c-ares指定DNS解析的网络接口
- 如何在linux中找到默认的网络接口