luoshiyong123 发表于 2019-11-20 16:52

获取网卡列表

1.pcap_if_t结构体

typedef struct pcap_if pcap_if_t;

    struct pcap_if {
      struct pcap_if *next;
      char *name;      /* 适配器名字*/
      char *description;    /* 适配器描述 */
      struct pcap_addr *addresses;/*适配器地址*/
      bpf_u_int32 flags;    /* 适配器接口标识符,值为PCAP_IF_LOOPBACK */
    };

2. pcap_findalldevs函数

    int    pcap_findalldevs(pcap_if_t **, char *);
   
      说明:用来获得网卡的列表
      参数: 指向pcap_if_t**类型的列表的指针的指针; char型指针,当打开列表错误时返回错误信息
      返回值: 为int型,当显示列表失败时返回-1



3.测试例子

    #include <QCoreApplication>
    #include <QDebug>
    #include "pcap.h"
    //打印设备列表信息
    int main(int argc, char *argv[])
    {
      QCoreApplication a(argc, argv);
      pcap_if_t *alldevs;      //所有网络适配器
      pcap_if_t *d;               //选中的网络适配器
   
      int i = 0;
      char errbuf;
      if(pcap_findalldevs(&alldevs, errbuf) == -1)//获取网卡列表道中
      {
            qDebug() << errbuf;
      }
      for(d = alldevs; d; d = d->next)
      {
            qDebug() << ++i << d->name;
            if(d->description)
                qDebug() << d->description;
            else
                qDebug("(No description available)");
      }
      if(0 == i)
      {
            qDebug("No interfaces found! Make sure WinPcap is installed.");
      }
      pcap_freealldevs(alldevs);
      return a.exec();
   
    }





页: [1]
查看完整版本: 获取网卡列表