//===========================================================================================
//============================================================================================
BOOL GetLocalIPAddressRange(SCAN_IP_STRUCT *lpsIP) {
char szLocalHost[MIN_BUFF] = {0};
char szNetMask[MIN_BUFF] = {0};
PIP_ADAPTER_INFO pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
}
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR) {
if(pAdapterInfo) { // Grab the First Adapter we "See", and Run with it.
// MessageBox(lpsIP->hList, pAdapter->Description, "Adapter Description", MB_OK); // Dev Mgr Name
// MessageBox(lpsIP->hList, pAdapter->AdapterName, "Adapter Name", MB_OK); // Class ID
StringCbCopy(szLocalHost, MIN_BUFF, pAdapterInfo->IpAddressList.IpAddress.String);
StringCbCopy(szNetMask, MIN_BUFF, pAdapterInfo->IpAddressList.IpMask.String);
free(pAdapterInfo);
}else{
return FALSE;
}
}
//----------------------------------------------------------------------------->
u_long host_addr = inet_addr(szLocalHost); //-+-//-//> Local IP Address
u_long net_mask = inet_addr(szNetMask); //-+-//-//-> LAN (Sub)NetMask
u_long net_addr = host_addr & net_mask; //-+-//-//+-+-+-+-+-> 192.168.5.0
u_long bcast_addr = net_addr | (~net_mask); //-//-+-+-+-+-+-> 192.168.5.255
net_addr = ntohl(net_addr); //-+-// Convert Network Addy to Network Byte Order,
bcast_addr = ntohl(bcast_addr); // Convert Broadcast Addy to Network Byte Order
//-//-+-+-+-//-+-//-+-//-+-//-//-+-+-+-+-+->
net_addr +=1; //-//-+-> Add 1 to Get from Network Address to First IP in Subnet,
bcast_addr -=1; // Subtract 1 to Get from Broadcast Address to Last IP in Subnet
//-//-+-+-+-//-+-//-+-//-+-//-//-+-+-+-+-+->
net_addr = htonl(net_addr); //-+-// Convert Network Addy Back to Host Byte Order,
bcast_addr = htonl(bcast_addr); // Convert Broadcast Addy Back to Host Byte Order
//----------------------------------------------------------------------------->
strcpy_s(lpsIP->szStartIP, MIN_BUFF, inet_ntoa(*((struct in_addr *)&net_addr)));
strcpy_s(lpsIP->szEndIP, MIN_BUFF, inet_ntoa(*((struct in_addr *)&bcast_addr)));
strcpy_s(lpsIP->szNetMask, MIN_BUFF, szNetMask);
//----------------------------------------------------------------------------->
return TRUE;
}