在Linux中获取网卡名称的方法如下几种,1和2两种没办法在网卡未分配IP 地址时获取:
1.采用socket方式获取网卡列表
int EthManager::listInterface()
{
int fd;
int interface_num = 0,i = 0;
struct ifreq ifbuffer[10];
struct ifconf ifc;
if((fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_IP)) < 0){
goto error_close;
}
ifc.ifc_len = sizeof (ifbuffer);
ifc.ifc_buf = (caddr_t)ifbuffer;
if(!ioctl(fd,SIOCGIFCONF,(char*)&ifc)){
interface_num = ifc.ifc_len / sizeof(struct ifreq);
nameList.clear();
while(i < interface_num){
//如果是本地回环地址,则不插入
if(!(strstr(ifbuffer[i].ifr_name,"lo"))){
nameList.insert(i,QString(ifbuffer[i].ifr_name));
}
i++;
}
}
::close(fd)