【问题标题】:Qt c++ How to change MAC Address?Qt c++如何更改MAC地址?
【发布时间】:2020-03-08 18:51:06
【问题描述】:

我使用的是基于 Qt 5.12.2 的 Windows 10 和 Qt Creator 4.8.2。我想更改mac地址,但我不知道如何。还有ip地址、网关和dns。 谢谢

【问题讨论】:

  • 在问一个新问题之前,检查它是否已经被问过。这个似乎已经在stackoverflow.com/questions/8627728/… 进行了扩展讨论。代码是C,但我想它可以在C++中工作
  • 试试这个,但是我在Qt中不工作,至少不是那样,你必须修改一些东西,这对我不起作用。询问是否有人直接在 Qt 中完成。问候并感谢您的回答。
  • 1) 到目前为止,您尝试过什么? (这不是代码编写服务)2)“你必须修改一些对我不起作用的东西”......你可能想详细说明什么对你不起作用- 我们无法读懂你的想法,你知道

标签: windows macos qt dns ip


【解决方案1】:

这里有如何更改 MAC 地址、ips 和 dns。 Qt creator 4.8.2 基于Qt 5.12.2 (MSVC 2015, 32 bit)

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include<QProcess>
#include<QSettings>
#include<QString>
#include<QDebug>
#include<QFile>
#include<QVariant>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void restartNetwork();
    void setNetEnabled (bool isEnabled);
    void runCMD (QString cmdlst);

    void configNet(QString ip1, QString ip2, QString ip3, QString ip4, QString gateway, QString dns1, QString dns2);

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

void MainWindow::on_pushButton_clicked()
{
    QSettings settings(R"(HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0001)", QSettings::NativeFormat);

    settings.setValue("NetworkAddress", "AABBCCDDEEFF");

    qDebug() << settings.value("NetworkAddress");

    configNet("10.10.0.10", "192.168.0.242", "192.168.10.200", "10.20.0.30", "10.10.0.1", "190.190.223.225", "190.190.223.235");

    restartNetwork();
}

void MainWindow::restartNetwork()
{
    setNetEnabled (false);
    setNetEnabled (true);
}

void MainWindow::setNetEnabled(bool isEnabled)
{
    QString cmdlst;

    if(isEnabled)
    {
        cmdlst = "netsh interface set interface Ethernet ENABLED";
    }
    else
    {
        cmdlst = "netsh interface set interface Ethernet DISABLED";
    }

    runCMD(cmdlst);
}

void MainWindow::configNet(QString ip1, QString ip2, QString ip3, QString ip4, QString gateway, QString dns1, QString dns2)
{
    QString ip1CMD, ip2CMD, ip3CMD, ip4CMD, dns1CMD, dns2CMD;

    if(ip1!="")
    {
        ip1CMD = QString("netsh interface ip set address Ethernet static %1 255.255.255.0 %2").arg(ip1).arg(gateway);
        runCMD(ip1CMD);
    }

    if(ip2!="")
    {
        ip2CMD = QString("netsh interface ip add address Ethernet %1 255.255.255.0").arg(ip2);
        runCMD(ip2CMD);
    }

    if(ip3!="")
    {
        ip3CMD = QString("netsh interface ip add address Ethernet %1 255.255.255.0").arg(ip3);
        runCMD(ip3CMD);
    }

    if(ip4!="")
    {
        ip4CMD = QString("netsh interface ip add address Ethernet %1 255.255.255.0").arg(ip4);
        runCMD(ip4CMD);
    }

    if(dns1!="")
    {
        dns1CMD = QString("netsh interface ip add dns Ethernet %1").arg(dns1);
        runCMD(dns1CMD);
    }

    if(dns1!="")
    {
        dns2CMD = QString("netsh interface ip add dns Ethernet %1").arg(dns2);
        runCMD(dns2CMD);
    }
}

void MainWindow::runCMD(QString cmdlst)
{
    QProcess process;

    process.start(cmdlst);

    qDebug ()<<cmdlst;

    process.waitForStarted();
    process.waitForFinished();

    qDebug()<<QString::fromLocal8Bit(process.readAllStandardOutput());
}

希望对你有帮助!!!

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多