16,173
社区成员
发帖
与我相关
我的任务
分享
//PIP_ADAPTER_INFO结构体存储本机网卡信息,包括本地网卡、无线网卡和虚拟网卡
PIP_ADAPTER_INFO pAdapterInfo=(IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
//调用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)
{
//pAdapter->Description中包含"PCI"为本地网卡,pAdapter->Type是71为无线网卡
if(strstr(pAdapterInfo->Description,"PCI") > 0|| pAdapterInfo->Type != 71)
{
//这里假设每个网卡只有一个IP
char * ipAddress=pAdapterInfo->IpAddressList.IpAddress.String;
char tempIpAddress[3]={'\0'};
memcpy(tempIpAddress,ipAddress,3);
//只显示IP以192开头的网卡信息
if(strstr(tempIpAddress,"192"))
{
// qDebug("------------------------------------------------------------\n");
// qDebug("Adapter Name: \t%s\n", pAdapterInfo->AdapterName);
// qDebug("Adapter Description: \t%s\n", pAdapterInfo->Description);
// qDebug("Adapter Address: \t");
// for (UINT i = 0; i < pAdapterInfo->AddressLength; i++)
// {
// qDebug("%02X%c", pAdapterInfo->Address[i],
// i == pAdapterInfo->AddressLength - 1 ? '\n' : '-');
// }
// qDebug("Adapter Type: \t%d\n", pAdapterInfo->Type);
char* str = (char*)pAdapterInfo->IpAddressList.IpAddress.String;
myIP = QString(QLatin1String(str));
// qDebug("IP Address: \t%s\n", str);
// qDebug("IP Mask: \t%s\n", pAdapterInfo->IpAddressList.IpMask.String);
}
}
pAdapterInfo = pAdapterInfo->Next;
}
}
else
{
qDebug("Call to GetAdaptersInfo failed.\n");
}
if(pAdapterInfo)
{
GlobalFree (pAdapterInfo);
}