TAG:
用IP Helper API来获得网卡地址 ×××××××××××××××××××××××××××××××××××××××× 呵呵,最常用的方法放在了最后 用 GetAdaptersInfo函数 这里获得了一个网卡的大部分信息,朋友们可酌情选用^_^ #include <Iphlpapi.h> #pragma comment(lib, "Iphlpapi.lib") typedef struct tagAdapterInfo { char szDeviceName[128]; // 名字 char szIPAddrStr[16]; // IP char szHWAddrStr[18]; // MAC DWORD dwIndex; // 编号 }INFO_ADAPTER, *PINFO_ADAPTER; INFO_ADAPTER AdapterList[ 10]; // 网卡列表,比如十个 /**************************************************************************** * Name & Params:: * formatMACToStr * ( * LPSTR lpHWAddrStr : 显示出来的加 "-"的 mac字符串 * unsigned char *HWAddr : 传入的MAC字符串 * ) * Purpose: * 将用户输入的MAC地址字符转成相应格式 ****************************************************************************/ void formatMACToStr(LPSTR lpHWAddrStr,const unsigned char *HWAddr) { int i; short temp; char szStr[3]; strcpy(lpHWAddrStr, ""); for (i=0; i<6; ++i) { temp = (short)(*(HWAddr + i)); _itoa(temp, szStr, 16); if (strlen(szStr) == 1) strcat(lpHWAddrStr, "0"); strcat(lpHWAddrStr, szStr); if (i<5) strcat(lpHWAddrStr, "-"); // 加上 - } } // 填充结构 void GetAdapterInfo() { char tempChar; ULONG uListSize=1; PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息 int nAdapterIndex = 0; DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize); // 关键函数 if (dwRet == ERROR_BUFFER_OVERFLOW) { PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]); dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize); if (dwRet == ERROR_SUCCESS) { pAdapter = pAdapterListBuffer; while (pAdapter) // 枚举网卡 { CString strTemp = pAdapter->AdapterName; // 网卡名字 strTemp = "\\\\Device\\\\NPF_" + strTemp; // 加上前缀 strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp); strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP formatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr, pAdapter->Address ); // MAC!!!!!!!!!!!!!!!!! AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; // 编号 pAdapter = pAdapter->Next; nAdapterIndex ++; } delete pAdapterListBuffer; } } } (PiggyXP) |