qt-c++进阶1-window、linux下获取本机所有网卡ip信息、根据网卡名获取ip地址。

系列文章目录

例如:第一章 主要是通过qt-c++实现获取本机电脑的网卡信息或者是IP信息



前言

总结c++获取本机网卡信息的方法
第一章:适用于windows操作系统、linux操作系统

  1. QHostAddress解析获取本机IPV4地址
  2. QNetworkInterface解析获取所有网关信息(IP地址(IPV4和IPV6)子网掩码广播地址);

持续更新中…


一、获取本机网卡IP信息

本章主要是通过qt-c++实现获取本机电脑的网卡信息或者是IP信息

获取windows本地所有网关IP的方法
获取本地指定网卡名的IP的方法。

1.1 获取ip地址方法

  1. QHostAddress解析获取本机IPV4地址
  2. QNetworkInterface解析获取所有网关信息(IP地址(IPV4和IPV6)子网掩码广播地址);
  3. 根据上面的方法,总结出,根据本机网卡名去获取相应的IPV4地址

1.2 代码实例

提供3个函数在widget.h中,在widget.cpp分别对其实现,具体如下:

void getHostIP(); //获取本机ipv4地址
void getAllIP(); //获取本机所有网卡信息
void getDesignateIP(); //根据网卡名获取指定网卡ip信息,例如下面示例获取VMware Network Adapter VMnet8网卡的ip

目录结构
在这里插入图片描述

代码示例:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
    
    
class Widget;
}

class Widget : public QWidget
{
    
    
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    
    void getHostIP();//获取本机ipv4地址
    void getAllIP();//获取本机所有网卡信息
    void getDesignateIP();//获取本机的制定ip信息

    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QList>
#include <QNetworkInterface>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);
    getHostIP();
    getAllIP();
}

Widget::~Widget()
{
    
    
    delete ui;
}

void Widget::getDesignateIP()
{
    
    
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    //获取所有网络接口的列表
    foreach(QNetworkInterface interface,list)
    {
    
    
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
        if(interface.humanReadableName() == "VMware Network Adapter VMnet8")
        {
    
    
            foreach(QNetworkAddressEntry entry,entryList)
            {
    
    
                if(entry.ip()!=QHostAddress::LocalHost && entry.ip().toIPv4Address())
                {
    
    
                    //设备名
                    qDebug() << "Device: "<<interface.name();
                    qDebug() << "Device: "<<interface.humanReadableName();
                    //IP信息
                    qDebug()<<"IP Address: "<<entry.ip().toString();              
                }
            }
        }
    }
}

void Widget::getHostIP()
{
    
    
    QList<QHostAddress> list = QNetworkInterface::allAddresses();
    foreach (QHostAddress address, list)
    {
    
    
        if(address.protocol() == QAbstractSocket::IPv4Protocol)
            //我们使用IPv4地址
            qDebug()<<address.toString();
    }
     qDebug()<<endl;
}

void Widget::getAllIP()
{
    
    
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    //获取所有网络接口的列表
    foreach(QNetworkInterface interface,list)
    {
    
      //遍历每一个网络接口
        qDebug() << "Device: "<<interface.name();
        //设备名
        qDebug() << "HardwareAddress: "<<interface.hardwareAddress();
        //硬件地址
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
        foreach(QNetworkAddressEntry entry,entryList)
        {
    
    //遍历每一个IP地址条目
            qDebug()<<"IP Address: "<<entry.ip().toString();
            //IP地址
            qDebug()<<"Netmask: "<<entry.netmask().toString();
            //子网掩码
            qDebug()<<"Broadcast: "<<entry.broadcast().toString();
            //广播地址
        }
        qDebug()<<endl;
    }
}

运行截图:
在这里插入图片描述

参考链接:https://www.cnblogs.com/liushui-sky/p/6479110.html


总结

这里只是以qt-c++总结出获取网卡信息的方法,后续会总结出c、c++获取网卡ip信息的多种方法,持续更新中…

猜你喜欢

转载自blog.csdn.net/weixin_55491446/article/details/129250040