• 4084阅读
  • 3回复

Qt获取本机网卡信息 [复制链接]

上一主题 下一主题
离线小鸟一只
 
只看楼主 倒序阅读 楼主  发表于: 2012-12-25
关键词: 回环IP
使用Qt编程获取本机网卡信息,使用的是QNetworkInterface这个类,但是每次取出来都会有127.0.0.1这个IP地址,然后使用IsLookBack这个flag,凡是IsLookBack等于0x8的网卡都跳过,取下一张网卡,这样导致最后没有去到任何一张网卡。我想问一下,是Qt中QNetworkInterface这个类取出来的每张网卡的IsLookBack都等于0x8,还是网卡本身的原因?


另外,本人现在采用的是在获取IP前,对IP进行判断,如果IP等于127.0.0.1这个回环地址,就跳过的方法去排除回环地址,不知各位兄弟姐妹是否有更精妙的高见。


谢谢!
离线chuong

只看该作者 1楼 发表于: 2012-12-25
看QNetworkInterface的hardwareAddress属性,如果为空或是00:00:00:00:00:00则跳过
离线小鸟一只
只看该作者 2楼 发表于: 2012-12-26
回 1楼(chuong) 的帖子
您的意思还是需要我们自己做过滤.还有一个问题想请教一下,QNetworkInterface这个类有个函数isValid,Qt Assistant上说的是,当所获得网卡包含的信息是有效的时候,返回true,那么对于一张网卡来说无效的或者不符合规定的信息是哪些呢?
离线ninsun

只看该作者 3楼 发表于: 2012-12-29
  1. QStringList getIPList()
  2.     {
  3.         QStringList _IPList;
  4.         QList<QNetworkInterface> _interfaceList = QNetworkInterface::allInterfaces();
  5.         for (int i=0; i<_interfaceList.size(); i++)
  6.         {
  7.             QNetworkInterface _interface = _interfaceList.value(i);
  8.             if ( (_interface.flags() & QNetworkInterface::IsUp) &&
  9.                 !(_interface.flags() & QNetworkInterface::IsLoopBack)
  10.                 )
  11.             {
  12.                 QList<QNetworkAddressEntry> _addressEntryList = _interface.addressEntries();
  13.                 for(int j=0; j<_addressEntryList.size(); j++)
  14.                 {
  15.                     QHostAddress _address = _addressEntryList.value(j).ip();
  16.                     if ( (_address.protocol() == QAbstractSocket::IPv4Protocol) &&
  17.                         (_address != QHostAddress::LocalHost) &&
  18.                         (_address != QHostAddress::Broadcast) )
  19.                     {
  20.                         _IPList << _address.toString();
  21.                     }
  22.                 }
  23.             }
  24.         }
  25.         qSort(_IPList);
  26.         return _IPList;
  27.     }
我是这么搞的……
快速回复
限100 字节
 
上一个 下一个