//pro文件中加入network模块
#include <QNetworkInterface>
#include <QProcess>
//Windows API相关依赖
#include"iphlpapi.h"
#pragma comment(lib,"Iphlpapi.lib")
//Windows API相关依赖
//PIP_ADAPTER_INFO结构体存储本机网卡信息,包括本地网卡、无线网卡、虚拟网卡、外接USB网卡、蓝牙
void AddNetInfo()
{
PIP_ADAPTER_INFO pAdapterInfo=(IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
char szMacAddr[20];
string sDestinationMac = "";
QString strName = "";
//调用GetAdaptersInfo函数,填充pAdapterInfo指针变量,其中ulOutBufLen参数既是输入也是输出
if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS)
{
//如果分配失败,释放后重新分配
GlobalFree (pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
}
if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == NO_ERROR)
{
while (pAdapterInfo)
{
//这里输出的名称是一个英文数字字符串,描述为该网卡的硬件描述
qDebug()<< QString::fromLocal8Bit("网卡名称:") << pAdapterInfo->AdapterName << endl;
qDebug()<< QString::fromLocal8Bit("网卡描述:") << pAdapterInfo->Description << endl;
//pAdapter->Description中包含"PCI"为本地网卡,pAdapterInfo->Type是6为以太网卡
if(strstr(pAdapterInfo->Description,"PCI") > 0|| pAdapterInfo->Type == 6)
{
sprintf_s(szMacAddr, 20, "%02X:%02X:%02X:%02X:%02X:%02X",
pAdapterInfo->Address[0],
pAdapterInfo->Address[1],
pAdapterInfo->Address[2],
pAdapterInfo->Address[3],
pAdapterInfo->Address[4],
pAdapterInfo->Address[5]);
sDestinationMac = szMacAddr;
qDebug()<< QString::fromLocal8Bit("MAC 地址:") << szMacAddr << endl;
}
pAdapterInfo= pAdapterInfo->Next;
}
else
{
qDebug()<<QString("Call to GetAdaptersInfo failed")<< endl;
if(pAdapterInfo)
{
GlobalFree (pAdapterInfo);
}
return;
}
if(pAdapterInfo)
{
GlobalFree (pAdapterInfo);
}
//获取所有网卡信息,根据已有目标网卡Mac地址匹配别名
QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
for each(QNetworkInterface interfaceItem, interfaceList)
{
if(sDestinationMac.compare(interfaceItem.hardwareAddress().toStdString()) == 0) //与目标Mac地址一致
{
strName = interfaceItem.humanReadableName();
}
/*
//输出每个网卡的IP等信息
QList<QNetworkAddressEntry> addressEntryList=interfaceItem.addressEntries();
for each(QNetworkAddressEntry addressEntryItem, addressEntryList)
{
if(addressEntryItem.ip().protocol()==QAbstractSocket::IPv4Protocol)
{
qDebug()<<"IP Address:"<<addressEntryItem.ip().toString();
qDebug()<<"IP Mask:"<<addressEntryItem.netmask().toString();
}
}
*/
}
//IP、子网掩码、网关
QString strCmd = QString("netsh interface ipv4 add address %1 %2 %3 %4").arg(strName).arg(QString("255.255.255.0")) .arg(QString("192.168.1.1")) ;
QProcess::startDetached(strCmd);
}
Qt+Windows API给指定网卡增加IP
最新推荐文章于 2024-05-09 15:37:08 发布