GetIpAddrTable을 사용하여 IP 주소 관리
GetIpAddrTable 함수는 MIB_IPADDRTABLE 구조체에 대한 포인터를 시스템과 연결된 현재 IP 주소에 대한 정보로 채웁니다.
GetIpAddrTable을 사용하려면
pIPAddrTable이라는 MIB_IPADDRTABLE 개체와 dwSize라는 DWORD 개체에 대한 포인터를 선언합니다. 이러한 변수는 GetIpAddrTable 함수에 매개 변수로 전달됩니다. 또한 dwRetVal이라는 DWORD 변수를 만듭니다(오류 검사에 사용됨).
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
구조체에 대한 메모리를 할당합니다.
참고
dwSize의 크기는 정보를 보유하기에 충분하지 않습니다. 다음 단계를 참조하세요.
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
GetIpAddrTable을 처음 호출하여 dwSize 변수에 필요한 크기를 가져옵니다.
참고
함수에 대한 이 호출은 실패하기 위한 것이며 , dwSize 변수가 pIPAddrTable에 반환된 모든 정보를 보유하기에 충분한 크기를 지정하는 데 사용됩니다. 이 형식의 데이터 구조 및 함수에 대한 일반적인 프로그래밍 모델입니다.
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
일반적인 오류 검사를 사용하여 GetIpAddrTable 을 두 번째로 호출하고 DWORD 변수 dwRetVal (고급 오류 검사를 위해)에 해당 값을 반환합니다.
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
호출에 성공하면 pIPAddrTable 데이터 구조의 데이터에 액세스합니다.
printf("IP Address: %ld\n", pIPAddrTable->table[0].dwAddr); printf("IP Mask: %ld\n", pIPAddrTable->table[0].dwMask); printf("IF Index: %ld\n", pIPAddrTable->table[0].dwIndex); printf("Broadcast Addr: %ld\n", pIPAddrTable->table[0].dwBCastAddr); printf("Re-assembly size: %ld\n", pIPAddrTable->table[0].dwReasmSize);
pIPAddrTable 구조에 할당된 메모리를 해제합니다.
if (pIPAddrTable) free(pIPAddrTable);
참고
DWORD 개체 dwAddr 및 dwMask는 네트워크 바이트 순서가 아닌 호스트 바이트 순서의 숫자 값으로 반환됩니다. 이러한 값은 점선 IP 주소가 아닙니다.
다음 단계: IpReleaseAddress 및 IpRenewAddress를 사용하여 DHCP 임대 관리
이전 단계: GetInterfaceInfo를 사용하여 인터페이스 관리