#include <windows.h>
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi")
#pragma comment(lib,"WS2_32")
/**
* 检测remote_ip地址是否为内网ip
*
* @return 1 是.
* @return 0 否.
*/
int is_LAN(const char *remote_ip)
{
PIP_ADAPTER_INFO pAdapterInfo = NULL;
// 客户端地址,本地IP地址,子网掩码
unsigned long ulRemote = 0, ulLocalIP = 0, ulMask = 0, ulLen = 0;
if(NULL == remote_ip)
return 0;
ulRemote = inet_addr(remote_ip);
// localhost
if(ulRemote == inet_addr("127.0.0.1"))
return 1;
// 为适配器结构申请内存
GetAdaptersInfo(pAdapterInfo, &ulLen);
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, ulLen);
if (GetAdaptersInfo(pAdapterInfo, &ulLen) == ERROR_SUCCESS)
{
if (pAdapterInfo != NULL)
{
// 本地IP地址
ulLocalIP = inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
// 本地子网掩码
ulMask = inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
}
else
{
return 0;
}
}
else
{
return 0;
}
// 判断网络号是否相同
if ((ulRemote & ulMask) == (ulLocalIP & ulMask))
return 1;
return 0;
}