在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);

return 0;
error_close:
    ::close(fd);
    return -1;

}

2.采用getifaddrs方式获取网卡列表

int EthManager::listInterface()
{

int i = 0;
    struct sockaddr_in *sin = NULL;
    struct ifaddrs *ifa = NULL,*iflist;
    if(getifaddrs(&iflist) < 0){
        goto error_close;
    }

for(ifa = iflist; ifa != NULL; ifa = ifa->ifa_next){
        if(ifa->ifa_addr->sa_family == AF_INET){
            nameList.insert(i,QString(ifa->ifa_name));
            i++;
        }

}
    freeifaddrs(iflist);

return 0;
error_close:
    return -1;

}

3.使用Linux的文件系统的信息 /proc/net/dev

int EthManager::listInterface()
{

char resultbuf[MAX_PATH_LEN];
    char namebuf[20];
    bzero(resultbuf, MAX_PATH_LEN);
    FILE *fp;
    //该方法在未设备网卡为up状态时无法获取到网卡名称
    //fp = popen("/sbin/ifconfig  | grep \"encap\" | grep -v lo | cut -d ' ' -f1","r");
    //该方法只要插入网卡就可以检测到网卡设备
    //cat /proc/net/dev | grep ":" | grep -v 'lo\|sit0' | cut -d ':' -f1 | sed -e 's/^[ \t]*//g'
    fp = popen("cat /proc/net/dev | grep \":\" | grep -v 'lo\\|sit0' | cut -d ':' -f1 | sed -e 's/^[ \t]*//g'","r");
    if(fp == NULL){
        goto error_close;
    }
    nameList.clear();
    //处理数据行
    while(fgets(resultbuf,sizeof (resultbuf),fp) != NULL){
        bzero(namebuf, sizeof(namebuf));
        sscanf(resultbuf, "%s\n", namebuf);
        nameList.push_back(namebuf);
    }
    ::pclose(fp);
    return 0;
error_close:

return -1;

}

Linux下获取网卡名称的3种方法相关推荐

  1. Linux 下获取Root权限的几种方法

    方法分为永久性获取root权限以及非永久性获取Root权限 非永久性获取Root权限: 非永久性获取Root权限可以在我们要键入的命令之前加上sudo前缀. 如我们要键入的命令是: rm ,以Root ...

  2. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  3. linux下限制CPU使用率的3种方法 (转)

    在租的云服务器上架了一个获取BTCC实时交易数据的服务器程序,因为用了一个while死循环处理数据信息,所以云服务器上的处理器占用率一直在90%多,这两天邮箱里一直收到服务器CPU占用率过高的邮件,在 ...

  4. linux删除用户删不了怎么办,Linux下完全删除用户的两种方法

    Linux操作 实验环境:Centos7虚拟机 首先创建一个普通用户 gubeiqing . [root@localhost ~]# useradd gubeiqing [root@localhost ...

  5. linux下限制CPU使用率的3种方法

    转载:http://blog.163.com/song_0803/blog/static/4609759720091014106684/ linux下限制CPU使用率的3种方法 1,apache本身的 ...

  6. Linux下 单网卡配置多个ip方法

    Linux下配置网卡ip别名何谓ip别名? 用windows的话说,就是为一个网卡配置多个ip. 什么场合增加ip别名能派上用场? 布网需要.多ip访问测试.特定软件对多ip的需要-and so on ...

  7. linux下载哪个python版本-Linux下切换Python版本的几种方法

    本篇博文面向Linux用户,在Ubuntu下测试通过 0 为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来, ...

  8. linux下查看mysql版本的四种方法

    Linux查看MySQL版本的四种方法 1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select vers ...

  9. linux查看网卡驱动的命令,在Linux下确定网卡所使用驱动程序的方法

    有些时候你可能想知道某个Linux系统的网卡正在使用什么驱动程序,下面简单介绍下如何解决这个问题.一起去看看吧! 1.无论是集成网卡还是独立的网卡,都必须通过某种方式连接到PCI总线上,这样的话,必定 ...

最新文章

  1. 伍六七带你学算法 进阶篇-三数之和
  2. java绘等高线图_Matplotlib中的极坐标等高线图
  3. RocketMQ 消息丢失场景及解决办法
  4. HTML语言:经典笔记(ZT)
  5. git操作代码文件的颜色变化
  6. Linux下SSH Session复制
  7. 39. 恢复旋转排序数组
  8. python基础其他(二十一)
  9. bzoj2456: mode
  10. RHEL下SendMail修改发邮箱地址
  11. json串 转 list<class> 方法 List转JSONArray和JSONArray转List
  12. 10 行 Python 代码自动清理电脑内重复文件,解放双手!
  13. 买菜201809-2
  14. 电感电容之开关电源的原理
  15. G.652与G.655单模光纤分类及对比
  16. 业务数据分析最佳案例!旅游业数据分析!⛵
  17. 户外直播、移动直播遇到弱网信号差,如何保证流畅又高清画面传输?
  18. C++ 上溢和下溢(overflow underflow)
  19. 坐标系,坐标系转换,梯度计算
  20. 基于Python的图片批量转PDF实现

热门文章

  1. 171006 逆向-EAT机制
  2. 二、创建 Scrapy 爬虫项目
  3. 前端如何实现 Word 在线预览
  4. 隔空投送怎么打开「详细教程」
  5. python 土拨鼠库_为了应对某人的需求,写了一个简单的聊天室内容
  6. Linux - Linux下Java安装路径查找;配置Java环境变量
  7. 常用正则表达式一览表
  8. IEEE 1588/802.1AS标准、硬件,Linux软件学习建议
  9. c语言case怎么翻译,switch是什么意思_switch在线翻译_英语_读音_用法_例句_海词词典...
  10. biopython实战中遇到的问题记录--structure.get_id()、icode、Residue.get_id()[2] 学习