ZBLOG

用Qt实现通过nmcli指令查询和修改系统的IP、dns ,网关,子网掩码的程序

下面是一个使用Qt实现通过nmcli指令查询和修改系统的IP、DNS、网关、子网掩码的示例程序:

#include <QCoreApplication>
#include <QProcess>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 查询当前网络连接的名称
    QString connectionName = "";
    QProcess listConnectionProcess;
    listConnectionProcess.start("nmcli connection show --active");
    if (listConnectionProcess.waitForFinished() && listConnectionProcess.exitCode() == 0) {
        QString output = listConnectionProcess.readAllStandardOutput();
        QStringList lines = output.split('\n');
        if (lines.size() > 1) {
            QStringList connectionInfo = lines[1].split(QRegExp("\\s+"), Qt::SkipEmptyParts);
            if (connectionInfo.size() > 0) {
                connectionName = connectionInfo[0];
            }
        }
    }

    // 查询当前网络连接的详细信息
    QString ipAddress = "";
    QString dnsServers = "";
    QString gateway = "";
    QString subnetMask = "";

    QProcess showConnectionProcess;
    showConnectionProcess.start(QString("nmcli connection show %1").arg(connectionName));
    if (showConnectionProcess.waitForFinished() && showConnectionProcess.exitCode() == 0) {
        QString output = showConnectionProcess.readAllStandardOutput();
        QStringList lines = output.split('\n');
        foreach (const QString& line, lines) {
            QStringList keyValue = line.split(QRegExp("\\s+"), Qt::SkipEmptyParts);
            if (keyValue.size() >= 2) {
                if (keyValue[0] == "IP4.ADDRESS[1]") {
                    ipAddress = keyValue[1].split("/")[0];
                    subnetMask = keyValue[1].split("/")[1];
                } else if (keyValue[0] == "IP4.GATEWAY") {
                    gateway = keyValue[1];
                } else if (keyValue[0] == "IP4.DNS[1]") {
                    dnsServers += keyValue[1] + ",";
                }
            }
        }
    }

    // 打印当前网络连接的信息
    qDebug() << "Connection Name: " << connectionName;
    qDebug() << "IP Address: " << ipAddress;
    qDebug() << "Subnet Mask: " << subnetMask;
    qDebug() << "Gateway: " << gateway;
    qDebug() << "DNS Servers: " << dnsServers;

    // 修改网络连接的IP、DNS、网关和子网掩码
    QString newIpAddress = "";      // 新的IP地址
    QString newDnsServers = "";     // 新的DNS服务器(以逗号分隔)
    QString newGateway = "";        // 新的网关
    QString newSubnetMask = "";     // 新的子网掩码

    QStringList modifyCommand;
    
	// 设置要修改的属性及对应值,如果不需要修改某个属性,可以留空或注释掉相关代码
	if (!newIpAddress.isEmpty()) {
		modifyCommand.append("ipv4.addresses");
		modifyCommand.append(QString("%1/%2").arg(newIpAddress).arg(newSubnetMask));
	}
	if (!newGateway.isEmpty()) {
		modifyCommand.append("ipv4.gateway");
		modifyCommand.append(newGateway);
	}
	if (!newDnsServers.isEmpty()) {
		modifyCommand.append("ipv4.dns");
		modifyCommand.append(newDnsServers);
	}

	if (!modifyCommand.isEmpty()) {
	    modifyCommand.prepend("nmcli", "connection", "modify", connectionName);
	    QProcess modifyConnectionProcess;
	    modifyConnectionProcess.start("sudo", modifyCommand); // 如果需要管理员权限,请确保程序以管理员权限运行
	    if (modifyConnectionProcess.waitForFinished() && modifyConnectionProcess.exitCode() == 0) {
	        qDebug() << "网络连接信息修改成功!";
	    } else {
	        qDebug() << "网络连接信息修改失败:" << modifyConnectionProcess.readAllStandardError();
	    }
	}
    
    return 0;
}

这个程序首先使用nmcli命令查询当前活动的网络连接名称,然后使用该名称查询详细的连接信息,包括IP地址、子网掩码、网关和DNS服务器。接下来,你可以设置新的IP地址、子网掩码、网关和DNS服务器,并使用nmcli connection modify命令将其应用到网络连接上。

请注意,为了执行这些命令,程序需要具有足够的权限(例如以管理员身份运行)。如果你在Linux上运行此程序时遇到问题,请确保已经正确安装了network-manager工具。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3883

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?