问题描述
在文件“/etc/network/interfaces”中,我定义了“eth0”接口和别名(eth0: 0,eth0: 1):
auto eth0
iface eth0 inet static
address 192.168.3.1
netmask 255.255.255.0
gateway 192.168.3.10
auto eth0:0
iface eth0:0 inet static
address 192.168.3.2
netmask 255.255.255.0
auto eth0:1
iface eth0:1 inet static
address 192.168.3.3
netmask 255.255.255.0
结果我有
# ifconfig
eth0 Link encap:Ethernet HWaddr 38:D2:69:7F:87:8C
inet addr:192.168.3.1 Bcast:0.0.0.0 Mask:255.255.255.0
UP broADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:175
eth0:0 Link encap:Ethernet HWaddr 38:D2:69:7F:87:8C
inet addr:192.168.3.2 Bcast:0.0.0.0 Mask:255.255.255.0
UP broADCAST MULTICAST MTU:1500 Metric:1
Interrupt:175
eth0:1 Link encap:Ethernet HWaddr 38:D2:69:7F:87:8C
inet addr:192.168.3.3 Bcast:0.0.0.0 Mask:255.255.255.0
UP broADCAST MULTICAST MTU:1500 Metric:1
Interrupt:175
但现在我想使用我的 C++ 应用程序只提取已初始化的别名的 IP 地址。为此,我在 0-9 范围内循环以查看别名是否处于活动状态。然后它会尝试从中获取 IP 地址。
std::string interface_name = "eth0";
std::vector<std::string> finded_aliases;
for(int i = 0; i < 10; i++)
{
std::string searching_interface_alias = interface_name + ":" + std::to_string(i);
struct ifreq ifr;
int sock = socket(PF_INET6,SOCK_DGRAM,IPPROTO_IP);
memset(&ifr,sizeof(ifr));
strcpy(ifr.ifr_name,searching_interface_alias.c_str());
ioctl(sock,SIocgIFFLAGS,&ifr);
close(sock);
if(!!(ifr.ifr_flags & IFF_UP))
{
fd = socket(AF_INET,0);
char name[searching_interface_alias.length()+1];
strcpy(name,searching_interface_alias.c_str());
strncpy(ifr.ifr_name,name,IF_NAMESIZE-1);
/* Get ip address */
ioctl(fd,SIocgIFADDR,&ifr);
strncpy(buffor,inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr),sizeof(buffor));
std::cout << "Finded alias: " << searching_interface_alias << ",IP: " << buffor << std::endl;
}
}
不幸的是,我在输出中得到了所有别名的列表
Finded alias: eth0:0,IP: 192.168.3.2
Finded alias: eth0:1,IP: 192.168.3.3
Finded alias: eth0:2,IP: 0.0.0.0
Finded alias: eth0:3,IP: 0.0.0.0
Finded alias: eth0:4,IP: 0.0.0.0
Finded alias: eth0:5,IP: 0.0.0.0
Finded alias: eth0:6,IP: 0.0.0.0
Finded alias: eth0:7,IP: 0.0.0.0
Finded alias: eth0:8,IP: 0.0.0.0
Finded alias: eth0:9,IP: 0.0.0.0
可能导致错误的原因是什么?我希望它只列出具有 ip 的活动别名
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)