//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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.