qt网络信息查询工具

网络信息查询工具

使用QHostInfoQNetworkInterface注意事项:直接创建或者new出来的对象里面的数据都是空的
一定要使用静态成员函数,返回的对象才有数据。如

QHostInfo fromName(const QString &name)
QList<QNetworkInterface> allInterfaces()

还有使用lookupHost查询,指定域名主机信息时,连接的槽函数参数是QHostInfo对象,帮助文档并没有详细说明参数列表,需要注意参数可以写成const QHostInfo &info

int lookupHost(const QString &name, const QObject *context, Functor functor)

废话不都说,直接上代码。
Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QHostInfo>
#include <QHostAddress>
#include <QNetworkInterface>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    QString getProtocolName(int protocol);
    void printResults(const QHostInfo &info);
    QString interfaceType(int type);
private slots:
    void on_btn_local_host_name_ip_clicked();

    void on_btn_network_host_name_ip_clicked();

    void on_btn_allAddresses_clicked();

    void on_btn_allInterfaces_clicked();

private:
    Ui::Widget *ui;

};
#endif // WIDGET_H

Widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

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

//打印函数
void Widget::printResults(const QHostInfo &info)
{
    QList<QHostAddress> address_list = info.addresses();;
    foreach(auto address,address_list)
    {
        QString protocol = "协议:" + getProtocolName(address.protocol());

        QString ip = "ip地址:" +address.toString();

        QString globle ;
        if(address.isGlobal())
            globle = "是否全局地址:是";
        else
            globle = "是否全局地址:否";

        ui->plainTextEdit->appendPlainText(protocol);
        ui->plainTextEdit->appendPlainText(ip);
        ui->plainTextEdit->appendPlainText(globle);
        ui->plainTextEdit->appendPlainText("\n");
    }
}

//QHostAddress使用
//返回协议名字
QString Widget::getProtocolName(int protocol)
{
    switch (protocol) {
    case QAbstractSocket::IPv4Protocol:
        return QString("IPv4");
    case QAbstractSocket::IPv6Protocol:
        return QString("IPv6");
    case QAbstractSocket::AnyIPProtocol:
        return QString("Either IPv4 or IPv6");
    case QAbstractSocket::UnknownNetworkLayerProtocol:
        return QString("Other than IPv4 and IPv6");
    default:
        break;
    }
    return QString(" ");
}

void Widget::on_btn_local_host_name_ip_clicked()
{
    ui->plainTextEdit->clear();

    QString name = QHostInfo::localHostName();
    QHostInfo info = QHostInfo::fromName(name);
    ui->plainTextEdit->appendPlainText("本机主机名:" + name);
    ui->plainTextEdit->appendPlainText("\n");

    printResults(info);
}

void Widget::on_btn_network_host_name_ip_clicked()
{
    ui->plainTextEdit->clear();
    QString str = ui->lineEdit->text();
    QHostInfo::lookupHost(str,this, &Widget::printResults);
}

//QNetworkInterface使用
//返回接口名字
QString Widget::interfaceType(int type)
{
    switch (type) {
    case QNetworkInterface::Unknown:
        return QString("Unknown");
    case QNetworkInterface::Loopback:
        return QString("Loopback");
    case QNetworkInterface::Virtual:
        return QString("Virtual");
    case QNetworkInterface::Ethernet:
        return QString("Ethernet");

    case QNetworkInterface::Slip:
        return QString("Slip");
    case QNetworkInterface::CanBus:
        return QString("CanBus");
    case QNetworkInterface::Ppp:
        return QString("Ppp");
    case QNetworkInterface::Fddi:
        return QString("Fddi");

    case QNetworkInterface::Wifi:
        return QString("Wifi");
    case QNetworkInterface::Phonet:
        return QString("Phonet");
    case QNetworkInterface::Ieee802154:
        return QString("Ieee802154");

    case QNetworkInterface::SixLoWPAN:
        return QString("SixLoWPAN");
    case QNetworkInterface::Ieee80216:
        return QString("Ieee80216");
    case QNetworkInterface::Ieee1394:
        return QString("Ieee1394");
    default:
        break;
    }
    return QString(" ");
}
void Widget::on_btn_allAddresses_clicked()
{
    ui->plainTextEdit->clear();

    QList<QHostAddress>  list = QNetworkInterface::allAddresses();
    QHostInfo info;
    info.setAddresses(list);

    printResults(info);
}

void Widget::on_btn_allInterfaces_clicked()
{
    ui->plainTextEdit->clear();

    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    foreach(auto interface,list)
    {
        ui->plainTextEdit->appendPlainText("start----------------------------------------------------------");

        QString name = "设备底层名:" + interface.name();

        QString readname = "设备可读名:" +interface.humanReadableName();

        QString type = "接口类型:" + interfaceType(interface.type());

        QString macAddress = "硬件(MAC)地址:" + interface.hardwareAddress();

        QString maxValue = "最大传输单位:" + QString::number(interface.maximumTransmissionUnit());

        ui->plainTextEdit->appendPlainText(name);
        ui->plainTextEdit->appendPlainText(readname);
        ui->plainTextEdit->appendPlainText(type);
        ui->plainTextEdit->appendPlainText(macAddress);
        ui->plainTextEdit->appendPlainText(maxValue);


        QList<QNetworkAddressEntry> addrList= interface.addressEntries();
        foreach(auto addr,addrList)
        {
            QString ipaddr = "ip地址:" + addr.ip().toString();
            QString mask = "子网掩码:" + addr.netmask().toString();
            QString broad = "广播地址:" + addr.broadcast().toString();
            ui->plainTextEdit->appendPlainText(ipaddr);
            ui->plainTextEdit->appendPlainText(mask);
            ui->plainTextEdit->appendPlainText(broad);
            ui->plainTextEdit->appendPlainText("\r\n");
        }

        ui->plainTextEdit->appendPlainText("end----------------------------------------------------------");
        ui->plainTextEdit->appendPlainText("\n");
    }
}


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

点击链接可下载源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷久虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值