C++ getifaddrs是否给我重复的网络接口地址?
我正在使用以下小片段查找特定的网络地址:C++ getifaddrs是否给我重复的网络接口地址?,c++,network-programming,C++,Network Programming,我正在使用以下小片段查找特定的网络地址: 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-&g
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;
}
}
我不理解第一个结果。这不会发生在像eth#这样的东西上,但它会发生在另一个名为bond0的接口上。这是什么?
getifaddr
是非标准的。我想您正在linux系统上使用它。该手册页上有注释:
Linux上返回的地址通常是IPv4和IPv6
分配给接口的地址,但也有一个AF_数据包地址
每
包含有关接口及其物理层的较低级别详细信息的接口。在这种情况下,ifa_数据字段
可能包含
指向中定义的struct net_device_stats的指针,其中包含各种接口属性和
统计数字
您可能应该检查
ifa\u addr->sa\u family
是否有您期望的族。确定减去重新解释的铸造零件。。。
1.0.0.0 ---> 1 : 1
127.0.0.1 ---> 1 : 16777343