当前位置: 代码迷 >> QT开发 >> QT5.4+Wincap 小弟我在使用函数pcapfindalldevs函数时遇到了有关问题!求帮助
  详细解决方案

QT5.4+Wincap 小弟我在使用函数pcapfindalldevs函数时遇到了有关问题!求帮助

热度:223   发布时间:2016-04-25 02:58:13.0
QT5.4+Wincap 我在使用函数pcapfindalldevs函数时遇到了问题!求帮助
在用这个函数时,得到的网络设备描述符是这样子的

怎样才能得到设备管理中的名字显示的名字??
其次,我通过 d->addresses->addr转换的ip地址均为0,0,0,0,不知道为啥?


下面是代码

void MainWindow::on_actionSelcet_Eth_triggered()
{
    SelectDialog *showEth=new SelectDialog();
    pcap_if_t *all,*d;
    char errbuf[64];
    char *str;
    int i=0,j=0;
    if(pcap_findalldevs(&all,errbuf)==-1)
    {
        QMessageBox::information(NULL, "Eorror", errbuf, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        exit(-1);
    }
    for(d=all;d;d=d->next)
     {

        showEth->SetTableWidgetData1(j,i,d->name);
        i++;
        if (d->description)

        {
            showEth->SetTableWidgetData1(j,i,d->description);
            i++;

        }
       else
            QMessageBox::information(NULL, "Eorror", "No description available", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
          // str=returnipstring(d->addresses->addr);
       j++;
       i=i-2;
    }
    pcap_freealldevs(all);
    showEth->show();
}


char * MainWindow::returnipstring(const sockaddr *addr)
{
    char *str;
    str=inet_ntoa((*(sockaddr_in*)addr).sin_addr);
    qDebug()<<str;
    //qDebug()<<addr->sin_port;
    return str;

------解决思路----------------------
QHostAddress(addr).toString()
------解决思路----------------------
QHostAddress Widget::getInterface()
{
    QList<QNetworkAddressEntry> list;
    QHostAddress                addr;
    QNetworkInterface   interface = QNetworkInterface::interfaceFromName("eth0");
    list                          = interface.addressEntries();
    if(!list.isEmpty())
        addr = list.at(0).ip();
}