获取和修改Windows系统IP地址

获取Windows系统IP地址

有三种方法:QNetworkInterface、QSettings、IPHlpApi

通过QNetworkInterface

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;
 
	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;
	}
}

通过QSettings读注册表

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++;
}

通过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;
}

修改Windows系统IP地址

使用命令 netsh

1.设置动态IP(DHCP自动获取IP)

netsh interface ip set address "本地连接" dhcp

2.设置指定的IP,此处以设置本机IP为10.16.15.226,子网掩码为255.255.255.0,网关IP为10.16.15.1为例

netsh interface ip set address "本地连接" static 10.16.15.226 255.255.255.0 10.16.15.1

或者

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

3.设置动态DNS(DHCP自动获取DNS)

netsh interface ip set dns "本地连接" dhcp

4.设置指定的DNS,此处以设置DNS为210.45.240.10为例

netsh interface ip set dns "本地连接"static 210.45.240.10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值