Windows 使用QT读取IP地址并修改IP地址

读取Windows的IP地址有三种方法:

  1. QT的QNetworkInterface   
  2. IPHlpApi
  3. QT的QSettings读注册表

修改windows的IP地址使用 netsh

netsh interface ipv4 set address name = "以太网" source = static address = 192.168.0.106 mask = 255.255.255.0 gateway = 192.168.0.1 

代码:

QT的QNetworkInterface   

void QtNetwork::initNetwork()
{
	ui.comboBox->clear();

	QString text;
	QTextStream out(&text);
	QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();
	for (int i = 0; i < ifaceList.count(); i++)
	{
		QNetworkInterface var = ifaceList.at(i);
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("接口名称:") << var.humanReadableName() << endl;
		out << QString::fromLocal8Bit("设备名称:") << var.name() << endl;
		out << QString::fromLocal8Bit("硬件地址:") << var.hardwareAddress() << endl;

		ui.comboBox->addItem(var.name());

		out << QString::fromLocal8Bit("IP地址列表:") << endl;
		// 读取一个IP地址的关联信息列表
		QList<QNetworkAddressEntry> entryList = var.addressEntries();
		for(int j = 0; j < entryList.count(); j++)
		{
			QNetworkAddressEntry entry = entryList.at(j);
			out << QString::fromLocal8Bit("%1_地址:").arg(j) << endl;
			out << QString::fromLocal8Bit(" IP地址:") << entry.ip().toString() << endl;
			out << QString::fromLocal8Bit(" 子网掩码:") << entry.netmask().toString() << endl;
			out << QString::fromLocal8Bit(" 广播地址:") << entry.broadcast().toString() << endl;
		}
	}

	ui.textEdit->setPlainText(text);
}
IPHlpApi
void QtNetwork::initNetwork_IPHlpApi()
{
	QString text;
	QTextStream out(&text);

	//IP_ADAPTER_INFO结构体
	PIP_ADAPTER_INFO pIpAdapterInfo = NULL;
	pIpAdapterInfo = new IP_ADAPTER_INFO;

	//结构体大小
	unsigned long ulSize = sizeof(IP_ADAPTER_INFO);

	//获取适配器信息
	int nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize);

	if (ERROR_BUFFER_OVERFLOW == nRet)
	{
		//空间不足,删除之前分配的空间
		delete[]pIpAdapterInfo;

		//重新分配大小
		pIpAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[ulSize];

		//获取适配器信息
		nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize);

		//获取失败
		if (ERROR_SUCCESS != nRet)
		{
			if (pIpAdapterInfo != NULL)
			{
				delete[]pIpAdapterInfo;
			}
			return;
		}
	}

	//MAC 地址信息
	char szMacAddr[20];
	//赋值指针
	PIP_ADAPTER_INFO pIterater = pIpAdapterInfo;
	int i = 0;
	while (pIterater)
	{
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("网卡名称:") << pIterater->AdapterName << endl;
		out << QString::fromLocal8Bit("网卡描述:") << pIterater->Description << endl;

		sprintf_s(szMacAddr, 20, "%02X-%02X-%02X-%02X-%02X-%02X",
			pIterater->Address[0],
			pIterater->Address[1],
			pIterater->Address[2],
			pIterater->Address[3],
			pIterater->Address[4],
			pIterater->Address[5]);

		out << QString::fromLocal8Bit("MAC 地址:") << szMacAddr << endl;

		out << QString::fromLocal8Bit("IP地址列表:") << endl;

		//指向IP地址列表
		int j = 0;
		PIP_ADDR_STRING pIpAddr = &pIterater->IpAddressList;
		while (pIpAddr)
		{
			out << QString::fromLocal8Bit("%1_地址:").arg(j) << endl;
			out << QString::fromLocal8Bit(" IP地址:") << pIpAddr->IpAddress.String << endl;
			out << QString::fromLocal8Bit(" 子网掩码:") << pIpAddr->IpMask.String << endl;

			//指向网关列表
			PIP_ADDR_STRING pGateAwayList = &pIterater->GatewayList;
			while (pGateAwayList)
			{
				out << QString::fromLocal8Bit(" 网关:") << pGateAwayList->IpAddress.String << endl;

				pGateAwayList = pGateAwayList->Next;
			}

			pIpAddr = pIpAddr->Next;
			j++;
		}

		pIterater = pIterater->Next;
		i++;
	}

	//清理
	if (pIpAdapterInfo)
	{
		delete[]pIpAdapterInfo;
	}

	ui.textEdit_2->setPlainText(text);
}
QT的QSettings读注册表
void QtNetwork::initNetwork_reg()
{
	QString text;
	QTextStream out(&text);

	QSettings reg("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces\\", QSettings::NativeFormat);
	QStringList groupsList = reg.childGroups();
	qDebug() << "read size:" << groupsList.size();

	int i = 0;
	foreach(QString group, groupsList)
	{
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("设备名称:") << group << endl;

		reg.beginGroup(group);

		QString ip = reg.value("IPAddress").toString();
		if (!ip.isEmpty())
		{
			out << QString::fromLocal8Bit(" IP地址:") << ip << endl;
		}

		QString netmask = reg.value("SubnetMask").toString();
		if (!netmask.isEmpty())
		{
			out << QString::fromLocal8Bit(" 子网掩码:") << netmask << endl;
		}

		QString gateway = reg.value("DefaultGateway").toString();
		if (!gateway.isEmpty())
		{
			out << QString::fromLocal8Bit(" 网关:") << gateway << endl;
		}

		reg.endGroup();
		i++;
	}

	ui.textEdit_3->setPlainText(text);
}

修改IP地址

void QtNetworkEditDlg::on_pushButton_ok_clicked()
{
	QString name = m_interface.humanReadableName();
	QString ip = ui.lineEdit_ip->text();
	QString netmask = ui.lineEdit_netmask->text();

	QProcess cmd(this);

	// netsh interface ipv4 set address name = "以太网" source = static 
	// address = 192.168.0.106 mask = 255.255.255.0 gateway = 192.168.0.1 gwmetric = 0
	QString command = "netsh interface ipv4 set address name = "
		+ name + " source = static address = " + ip
		+ " mask = " + netmask;
	cmd.start(command);
	cmd.waitForFinished();

	accept();
}

截图


程序下载连接: https://download.csdn.net/download/xiao503/10403325
  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值