資源簡介
使用windows sdk提供的API函數GetAdaptersInfo獲得本機所有網卡的網卡名、網卡描述、網卡MAC地址、網卡IP、網卡類型等信息,并用IP_ADAPTER_INFO結構體存儲,使用GetIfEntry獲取網卡的狀態,可有效判斷出網卡通訊是否正常,是否插入網線等......

代碼片段和文件信息
#include?
#include?
#include?
using?namespace?std;
#pragma?comment(lib“Iphlpapi.lib“)?//需要添加Iphlpapi.lib庫
bool?getAdapterState(DWORD?index);
//int?_tmain(int?argc?_TCHAR*?argv[])
int?__cdecl?main()
{
//PIP_ADAPTER_INFO結構體指針存儲本機網卡信息
PIP_ADAPTER_INFO?pIpAdapterInfo?=?new?IP_ADAPTER_INFO();
PIP_ADAPTER_INFO?pAdapter?=?NULL;
//得到結構體大小用于GetAdaptersInfo參數
unsigned?long?stSize?=?sizeof(IP_ADAPTER_INFO);
//調用GetAdaptersInfo函數填充pIpAdapterInfo指針變量;其中stSize參數既是一個輸入量也是一個輸出量
int?nRel?=?GetAdaptersInfo(pIpAdapterInfo&stSize);
//記錄網卡數量
int?netCardNum?=?0;
//記錄每張網卡上的IP地址數量
int?IPnumPerNetCard?=?0;
if?(ERROR_BUFFER_OVERFLOW?==?nRel)
{
//如果函數返回的是ERROR_BUFFER_OVERFLOW
//則說明GetAdaptersInfo參數傳遞的內存空間不夠同時其傳出stSize表示需要的空間大小
//這也是說明為什么stSize既是一個輸入量也是一個輸出量
//釋放原來的內存空間
delete?pIpAdapterInfo;
//重新申請內存空間用來存儲所有網卡信息
pIpAdapterInfo?=?(PIP_ADAPTER_INFO)new?BYTE[stSize];
//再次調用GetAdaptersInfo函數填充pIpAdapterInfo指針變量
nRel=GetAdaptersInfo(pIpAdapterInfo&stSize);????
}
if?(ERROR_SUCCESS?==?nRel)
{
//輸出網卡信息
//可能有多網卡因此通過循環去判斷
pAdapter?=?pIpAdapterInfo;
while?(pAdapter)
{
cout<<“網卡數量:“<<++netCardNum< cout<<“網卡名稱:“<AdapterName< cout<<“網卡描述:“<Description< switch(pAdapter->Type)
{
case?MIB_IF_TYPE_OTHER:
cout<<“網卡類型:“<<“OTHER“< break;
case?MIB_IF_TYPE_ETHERNET:
cout<<“網卡類型:“<<“ETHERNET“< break;
case?MIB_IF_TYPE_TOKENRING:
cout<<“網卡類型:“<<“TOKENRING“< break;
case?MIB_IF_TYPE_FDDI:
cout<<“網卡類型:“<<“FDDI“< break;
case?MIB_IF_TYPE_PPP:
printf(“PP\n“);
cout<<“網卡類型:“<<“PPP“< break;
case?MIB_IF_TYPE_LOOPBACK:
cout<<“網卡類型:“<<“LOOPBACK“< break;
case?MIB_IF_TYPE_SLIP:
cout<<“網卡類型:“<<“SLIP“< break;
default:
break;
}
cout<<“網卡MAC地址:“;
for?(DWORD?i?=?0;?i?AddressLength;?i++)
if?(i?AddressLength-1)
{
printf(“%02X-“?pAdapter->Address[i]);
}
else
{
printf(“%02X\n“?pAdapter->Address[i]);
}
cout<<“網卡IP地址如下:“< //可能網卡有多IP因此通過循環去判斷
IP_ADDR_STRING?*pIpAddrString?=&(pAdapter->IpAddressList);
IPnumPerNetCard?=?0;
do?
{
cout<<“該網卡上的IP數量:“<<++IPnumPerNetCard< cout<<“IP?地址:“<IpAddress.String< cout<<“子網地址:“<IpMask.String< cout<<“網關地址:“<GatewayList.IpAddress.String< pIpAddrString=pIpAddrString->Next;
}?while?(pIpAddrString);
if(getAdapterState(pAdapter->Index))
cout<<“網卡工作正常“< else
cout<<“網卡工作異常“< pAdapter?=?pAdapter->Next;
cout<<“--------------------------------------------------------------------“< }
}
//釋放內存空間
if?(pIpAdapterInfo)
{
delete?[]pIpAdapterInfo;
pIpAdapterInfo=NULL;
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3934??2016-06-29?08:19??AdapterInfoInEng\AdapterInfoInEng\AdapterInfoInEng.vcproj
?????文件???????1419??2016-06-29?09:27??AdapterInfoInEng\AdapterInfoInEng\AdapterInfoInEng.vcproj.LUHAISONG-N.LHS.user
?????文件????????663??2016-06-29?08:19??AdapterInfoInEng\AdapterInfoInEng\Debug\AdapterInfoInEng.exe.em
?????文件????????728??2016-06-29?08:19??AdapterInfoInEng\AdapterInfoInEng\Debug\AdapterInfoInEng.exe.em
?????文件????????621??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\AdapterInfoInEng.exe.intermediate.manifest
?????文件???????6900??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\BuildLog.htm
?????文件??????41357??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\main.obj
?????文件?????????60??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\mt.dep
?????文件?????420864??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\vc90.idb
?????文件?????126976??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\Debug\vc90.pdb
?????文件???????5554??2016-06-29?08:43??AdapterInfoInEng\AdapterInfoInEng\main.cpp
?????文件???11865088??2016-06-29?09:27??AdapterInfoInEng\AdapterInfoInEng.ncb
?????文件????????914??2016-06-29?08:17??AdapterInfoInEng\AdapterInfoInEng.sln
????..A..H.??????8192??2016-06-29?09:27??AdapterInfoInEng\AdapterInfoInEng.suo
?????文件??????31744??2016-06-29?08:43??AdapterInfoInEng\Debug\AdapterInfoInEng.exe
?????文件?????326348??2016-06-29?08:43??AdapterInfoInEng\Debug\AdapterInfoInEng.ilk
?????文件?????510976??2016-06-29?08:43??AdapterInfoInEng\Debug\AdapterInfoInEng.pdb
?????文件???????3934??2016-06-29?08:57??AdapterInfoInCHN\AdapterInfoInCHN\AdapterInfoInCHN.vcproj
?????文件???????1419??2016-06-29?09:25??AdapterInfoInCHN\AdapterInfoInCHN\AdapterInfoInCHN.vcproj.LUHAISONG-N.LHS.user
?????文件????????663??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\AdapterInfoInCHN.exe.em
?????文件????????728??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\AdapterInfoInCHN.exe.em
?????文件????????621??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\AdapterInfoInCHN.exe.intermediate.manifest
?????文件??????10656??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\BuildLog.htm
?????文件??????69287??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\main.obj
?????文件?????????60??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\mt.dep
?????文件?????527360??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\vc90.idb
?????文件?????266240??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\Debug\vc90.pdb
?????文件???????4027??2016-06-29?08:58??AdapterInfoInCHN\AdapterInfoInCHN\main.cpp
?????文件???12897280??2016-06-29?09:25??AdapterInfoInCHN\AdapterInfoInCHN.ncb
?????文件????????914??2016-06-29?08:54??AdapterInfoInCHN\AdapterInfoInCHN.sln
............此處省略16個文件信息
評論
共有 條評論