#include "Global.h" #include #pragma comment(lib,"Iphlpapi.lib") #include #include std::vector g_AdapterInfo; void UpdateAdapterInfo() { PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; 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 ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { pAdapter = pAdapterInfo; while (pAdapter) { if(strcmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") != 0) g_AdapterInfo.push_back(pAdapter->IpAddressList.IpAddress.String); /* printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName); printf("\tAdapter Desc: \t%s\n", pAdapter->Description); printf("\tAdapter Addr: \t%ld\n", pAdapter->Address); printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String); printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String); printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String); printf("\t***\n"); if (pAdapter->DhcpEnabled) { printf("\tDHCP Enabled: Yes\n"); printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String); printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained); } else printf("\tDHCP Enabled: No\n"); if (pAdapter->HaveWins) { printf("\tHave Wins: Yes\n"); printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String); printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String); } else printf("\tHave Wins: No\n"); */ pAdapter = pAdapter->Next; } } /* else { printf("Call to GetAdaptersInfo failed.\n"); } */ free(pAdapterInfo); } BOOL GetLocalIP(WCHAR* pLocalIP_Out, BOOL bClosedIP) { if(g_AdapterInfo.empty()) UpdateAdapterInfo(); // °íÁ¤¾ÆÀÌÇǰ¡ ÀÖÀ¸¸é °íÁ¤¾ÆÀÌÇÇ ¸®ÅÏ // °íÁ¤¾ÆÀÌÇǰ¡ ¾ø°í °¡»ó¾ÆÀÌÇǸ¸ Á¸ÀçÇÏ¸é °¡»ó¾ÆÀÌÇÇ ¸®ÅÏ int isize = g_AdapterInfo.size(); for(int i = 0; i < isize; ++i) { wcscpy(pLocalIP_Out, Nave::ToUnicode(g_AdapterInfo[i]).c_str()); if(bClosedIP) // ³»ºÎ¾ÆÀÌÇǸ¦ ¾ò¾î¿Í¶ó. { if(wcsncmp(pLocalIP_Out, L"0", 1) == 0) continue; else if(wcsncmp(pLocalIP_Out, L"192", 3) == 0) return TRUE; else if(wcsncmp(pLocalIP_Out, L"127", 3) == 0) return TRUE; } else // ¿ÜºÎ ¾ÆÀÌÇǸ¦ ¾ò¾î¿Í¶ó { if(wcsncmp(pLocalIP_Out, L"0", 1) == 0) continue; else if(wcsncmp(pLocalIP_Out, L"192", 3) == 0) continue; else if(wcsncmp(pLocalIP_Out, L"127", 3) == 0) continue; return TRUE; } } if(!bClosedIP) return GetLocalIP(pLocalIP_Out, TRUE); return FALSE; } BOOL GetLocalIP(CHAR* pLocalIP_Out, BOOL bClosedIP) { if(g_AdapterInfo.empty()) UpdateAdapterInfo(); // °íÁ¤¾ÆÀÌÇǰ¡ ÀÖÀ¸¸é °íÁ¤¾ÆÀÌÇÇ ¸®ÅÏ // °íÁ¤¾ÆÀÌÇǰ¡ ¾ø°í °¡»ó¾ÆÀÌÇǸ¸ Á¸ÀçÇÏ¸é °¡»ó¾ÆÀÌÇÇ ¸®ÅÏ int isize = g_AdapterInfo.size(); for(int i = 0; i < isize; ++i) { strcpy(pLocalIP_Out, g_AdapterInfo[i].c_str()); if(bClosedIP) // ³»ºÎ¾ÆÀÌÇǸ¦ ¾ò¾î¿Í¶ó. { if(strncmp(pLocalIP_Out, "0", 1) == 0) continue; else if(strncmp(pLocalIP_Out, "192", 3) == 0) return TRUE; else if(strncmp(pLocalIP_Out, "127", 3) == 0) return TRUE; } else // ¿ÜºÎ ¾ÆÀÌÇǸ¦ ¾ò¾î¿Í¶ó { if(strncmp(pLocalIP_Out, "0", 1) == 0) continue; else if(strncmp(pLocalIP_Out, "192", 3) == 0) continue; else if(strncmp(pLocalIP_Out, "127", 3) == 0) continue; return TRUE; } } if(!bClosedIP) return GetLocalIP(pLocalIP_Out, TRUE); return FALSE; }