遇上一点点的小麻烦,在包含 Iphlpapi.lib和include "Iphlpapi.h"可能会提示找不到头文件,要先在电脑里面找到windows的SDK,然后添加到include目录下,vc 6.0的一般在工具—>选项 -> 目录里面添加即可。添加好之后如果出现其他的一些情况,可能就是SDK与IDE版本的问题,一般来说微软的IDE是向下兼容的,所以换个高级的IDE,如vc 6不行就换vc 8 或者vc 9 一般就能正常工作了。
下面是写好的代码:一般来说,你的电脑中有几个网卡适配器就会出现几个不同的适配器信息。数量应该是一致的。
#include <windows.h>
#include <stdio.h>
#include <IPHlpApi.h>
#pragma comment(lib,"Iphlpapi.lib")
#pragma comment(lib,"WS2_32.lib")
u_char g_ucLocalMac[6];
DWORD g_dwGatewayIp;
DWORD g_dwLocalIP;
DWORD g_dwMask;
bool GetGlobal()
{
PIP_ADAPTER_INFO padapterInfo = NULL;
PIP_ADAPTER_INFO pAdapter = NULL;
ULONG ullen =sizeof(PIP_ADAPTER_INFO);
padapterInfo = (PIP_ADAPTER_INFO) malloc(ullen);
DWORD dwRetVal = GetAdaptersInfo(padapterInfo,&ullen);
if(dwRetVal == ERROR_BUFFER_OVERFLOW)
{
free(padapterInfo);
padapterInfo = (PIP_ADAPTER_INFO ) malloc(ullen);
dwRetVal = GetAdaptersInfo(padapterInfo,&ullen);
}
//padapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ullen);
//
//if(GetAdaptersInfo(padapterInfo,&ullen) == ERROR_SUCCESS)
if(dwRetVal == NO_ERROR )
{
pAdapter = padapterInfo;
while(pAdapter != NULL)
{
memcpy(g_ucLocalMac,pAdapter->Address,6);
g_dwGatewayIp = inet_addr(pAdapter->GatewayList.IpAddress.String);
g_dwLocalIP = inet_addr(pAdapter->GatewayList.IpAddress.String);
g_dwMask = inet_addr(pAdapter ->IpAddressList.IpMask.String);
printf("Adapter name: %s",pAdapter ->AdapterName);
pAdapter = pAdapter->Next;
in_addr in;
in.S_un.S_addr = g_dwLocalIP;
printf("Ip Address: %s \n",inet_ntoa(in));
in.S_un.S_addr = g_dwMask;
printf("Ip Address: %s \n",inet_ntoa(in));
in.S_un.S_addr = g_dwGatewayIp;
printf("Ip Address: %s \n",inet_ntoa(in));
u_char *p = g_ucLocalMac;
printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]);
printf("\n");
}
}
printf("本机信息为:");
return true;
}
int main()
{
GetGlobal();
system("pause");
return 0;
}