本系列共两篇文章, 本文罗列代码(函数). 可以拿来直接使用的函数. 不过要加上另外一篇文章中提供的 .h 文件才行....
有错别字(母),请自行更正. 其中 MAX_IP 可以定义为 16 .随你便,只要能保存到***.***.***.*** 就行. :D
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/*******************************************************************
* 函数名称:GetLocalIP
* 功能描述: 获取网卡信息
* 参数列表:
* szIPAddr: 保存ip地址
* szIPMask: 保存子网掩码
* GateWay: 保存网关
* myMac: 保存mac地址
* 文件支持:
* #include "drIPHlpApi.h" //我组织的头文件, 在另外一篇文章中有说明.
* #include "stdio.h"
* #include "winsock2.h"
* 完成操作:
* 获取网卡的ip地址, 子网掩码, 网关, mac地址
* 说明:
* 处理失误, 只能读取到一组信息, 就是说双网卡就会漏掉东西
* 返回结果:
* 如上.
********************************************************************/
void GetLocalIP(char szIPAddr[MAX_IP], char szIPMask[MAX_IP], CHAR myMac[7], CHAR GateWay[MAX_IP])
{
HINSTANCE iphlpapi_dll;
iphlpapi_dll = LoadLibrary("iphlpapi.dll");
if(iphlpapi_dll == NULL)
{
cout<<"加载iphlpapi.dll出错"<<endl;
return;
}
lpGetAdaptersInfo = (GAI)GetProcAddress(iphlpapi_dll, "GetAdaptersInfo");
DWORD dwRet;
ULONG ulLen=6;
PIP_ADAPTER_INFO pAdapterInfo=0,pTmp=0;
dwRet = lpGetAdaptersInfo(pAdapterInfo, &ulLen);
if(dwRet != ERROR_BUFFER_OVERFLOW)
{
cout<<"不溢出才怪!"<<endl;
return;
}
pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulLen);
if(!pAdapterInfo)
{
cout<<"分配空间失败"<<endl;
return;
}
dwRet = lpGetAdaptersInfo(pAdapterInfo, &ulLen);
if(dwRet != ERROR_SUCCESS)
{
cout<<"获取网卡信息失败!"<<endl;
return;
}
pTmp = pAdapterInfo;
memcpy(myMac,pTmp->Address,6); //get the mac
memcpy(szIPAddr, (void *)&pTmp->IpAddressList.IpAddress, 16); //get the ip
memcpy(szIPMask, (void *)&pTmp->IpAddressList.IpMask, 16); //get the mask
memcpy(GateWay,(void *)&pTmp->GatewayList.IpAddress,16); //get the gateway
return;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^