获取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