我有一个问题,我无法解决这个问题。
我的电脑中有 3 个以太网板,3 个端口中有 2 个插入了电缆。遵循列表:
Eth0 - 电缆已插入。
Eth1 - 没有电缆。
Eth2 - 电缆已插入。
当我运行我的程序来获取接口的 IP 地址时,我的程序将 eth2 的 IP 设置为 eth1,应该是这样的:
eth0 - 192.168.2.103
eth1 - (null)
eth2 - 192.168.2.101
像这样结束:
eth0 - 192.168.2.103
eth1 - 192.168.2.101
eth2 -(空)
我不明白发生了什么事。
按照代码:
我有和结构;
typedef struct iface {
char interface_name[10];
char interface_addr_ipv4[20];
char interface_addr_ipv6[40];
char interface_netmask[20];
char interface_broadcast[20];
char interface_mac_addr[50];
int interface_active;
struct iface * next_interface;
} Interface;
在此之后,我以这种方式识别系统的所有 iface,即使它们没有配置 IP:
if (getifaddrs(&ifaddr) == -1)
return GET_INFO_IFACES_FAILED;
struct iface * iface_aux;
struct ifaddrs * ifaddr_aux;
struct sockaddr_in * ip;
iface_aux = iface;
for (ifaddr_aux=ifaddr;ifaddr_aux!=NULL;ifaddr_aux=ifaddr_aux->ifa_next) {
iface_aux->interface_name = ifaddr_aux->ifa_name;
if (ip->sin_family == AF_PACKET) {
get_interface_mac_addr(iface_aux);
strcpy(iface_aux->interface_addr_ipv4,"");
strcpy(iface_aux->interface_addr_ipv6,"");
iface_aux->next_interface = malloc(sizeof (Interface));
iface_aux = iface_aux->next_interface;
iface_aux->next_interface = NULL;
}
}
毕竟,我做了其他循环来获取接口的IP地址,这是代码:
iface_aux = iface; //go to the firts pointer
for (ifaddr_aux=ifaddr;ifaddr_aux!=NULL;ifaddr_aux=ifaddr_aux->ifa_next) {
ip = (struct sockaddr_in *) ifaddr_aux->ifa_addr;
if (ip->sin_family == AF_INET) {
get_interface_ifaddr(iface_aux, ip);
get_interface_netmask(iface_aux, ifaddr);
get_interface_broadcast(iface_aux, ifaddr);
iface_aux = iface_aux->next_interface;
}
}
函数 get_interface_ifaddr 的代码是:
int get_interface_ifaddr(Interface * iface, struct sockaddr_in * ip) {
char temp[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &ip->sin_addr, temp, INET_ADDRSTRLEN);
strcpy(iface->interface_addr_ipv4, temp);
return GET_IPADDR_SUCCESS;
}
我不明白为什么eth2的ip设置在eth1中,看看发生了什么。当我使用 netbeans 和 GDB 调试代码时,我看不出有什么问题。