- IP Helper API
- ÇÎ ¶§¸®±â
- ³×Æ®¿öÅ© Ä«µå¿¡ ´ëÇÑ Á¤º¸ ¾Ë¾Æ³»±â
- ¸µÅ©
1 IP Helper API
IP Helper ÇÔ¼öµéÀº ·ÎÄà ¸Ó½ÅÀÇ ³×Æ®¿öÅ© ¼³Á¤À» °Ë»ö ¹× ¼öÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ÇÔ¼öµéÀÌ´Ù. ¶ÇÇÑ ³×Æ®¿öÅ© ¼³Á¤ÀÌ º¯°æµÈ °æ¿ì, À̸¦ ¾ÖÇø®ÄÉÀ̼ǿ¡°Ô ÅëÁöÇØÁÖ´Â ±â´Éµµ Á¦°øÇÑ´Ù.
2 ÇÎ ¶§¸®±â
#include <IPExport.h>
#include <icmpapi.h>
hostent* host = NULL;
in_addr inaddr;
inaddr.s_addr = ::inet_addr("155.230.29.10");
if (inaddr.s_addr == INADDR_NONE)
{
host = ::gethostbyname("155.230.29.10");
}
else
{
host = ::gethostbyaddr((const char*)&inaddr, sizeof(inaddr), AF_INET);
}
if (host != NULL)
{
// ICMP ÇÚµéÀ» »ý¼ºÇÑ´Ù. IPv6ÀÏ °æ¿ì¿¡´Â Icmp6CreateFile()À» »ç¿ëÇÑ´Ù.
HANDLE hICMP = ::IcmpCreateFile();
ICMP_ECHO_REPLY iep;
iep.RoundTripTime = 0xFFFFFFFF;
DWORD dw = ::IcmpSendEcho(hICMP,
*((ULONG*)host->h_addr_list[0]),
0,0,NULL,
&iep, sizeof(ICMP_ECHO_REPLY), 5000);
cout << "RoundTripTime:" << iep.RoundTripTime << endl;
::IcmpCloseHandle(hICMP);
} Ç÷§Æû SDK¸¦ ´Ù¿î·Îµå¹ÞÀº ´ÙÀ½, include ÆÐ½º Àâ¾ÆÁÖ°í, iphlpapi.lib¸¦ ¸µÅ©ÇØÁà¾ßÇÑ´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ÇØµµ iphlpapi.dll¿¡ IcmpCloseHandleÀÌ ¾ø´Ù°í ¿¡·¯°¡ ³µ´Ù. ¯³´Ù. MSDN¿¡ ºÁµµ ¹º°¡ Àϰü¼ºÀÌ ¾ø°í - ´Ù¸¥ ÇÔ¼öµéÀº iphlpapi.lib¸¦ ¸µÅ©Ç϶ó°í µÇ¾îÀִµ¥, IcmpCloseHandleÀº icmp.lib¸¦ ¸µÅ©Ç϶ó°í µÇ¾îÀִµ¥´Ù°¡, Ç÷§Æû SDK¿¡ ÀÌ·± ¶óÀ̺귯¸®°¡ ¾ø´Ù. - ¹®Á¦°¡ ¸¹Àº µí ÇÏ´Ù.
3 ³×Æ®¿öÅ© Ä«µå¿¡ ´ëÇÑ Á¤º¸ ¾Ë¾Æ³»±â
GetAdaptersInfo ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ·£ Ä«µåÀÇ IP ÁÖ¼Ò, MAC ÁÖ¼Ò, ÇöÀç °ÔÀÌÆ®¿þÀÌ µîÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
DWORD GetAdaptersInfo(
PIP_ADAPTER_INFO pAdapterInfo,
PULONG pOutBufLen
);
typedef struct _IP_ADAPTER_INFO
{
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; // MAC ÁÖ¼Ò
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList; // IP ÁÖ¼Ò
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; WMIÀÇ Win32_NetworkAdapterConfiguration Ŭ·¡½º¸¦ ÅëÇØ¼µµ ºñ½ÁÇÑ Á¤º¸¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. Âü°í·Î IP¸¸À» ¿øÇÏ´Â °ÍÀ̶ó¸é ´ÙÀ½°ú °°Àº ÄÚµå·Îµµ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ´Ù¸¸ ·çÇÁ¹é ÁÖ¼Ò(127.0.0.1)À» ÁÖÀÇÇϱ⠹ٶõ´Ù.
#include <iostream.h>
#include <winsock.h>
int main(int argc, char *argv[])
{
WSAData wsaData;
if (::WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
return 255;
try
{
char ac[80] = {0,};
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
{
cerr << "Error " << WSAGetLastError()
<< " when getting local host name." << endl;
throw;
}
cout << "Host name is " << ac << "." << endl;
struct hostent *phe = gethostbyname(ac);
if (phe == 0)
{
cerr << "Yow! Bad host lookup." << endl;
throw;
}
for (int i=0; phe->h_addr_list[i] != 0; i++)
{
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
cout << "Address " << i << ": " << inet_ntoa(addr) << endl;
}
}
catch (...)
{
cerr << "Something bad happen!" << endl;
}
::WSACleanup();
return 0;
}
4 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)