다음을 통해 공유


GetIpAddrTable을 사용하여 IP 주소 관리

GetIpAddrTable 함수는 MIB_IPADDRTABLE 구조체에 대한 포인터를 시스템과 연결된 현재 IP 주소에 대한 정보로 채웁니다.

GetIpAddrTable을 사용하려면

  1. pIPAddrTable이라는 MIB_IPADDRTABLE 개체와 dwSize라는 DWORD 개체에 대한 포인터를 선언합니다. 이러한 변수는 GetIpAddrTable 함수에 매개 변수로 전달됩니다. 또한 dwRetVal이라는 DWORD 변수를 만듭니다(오류 검사에 사용됨).

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. 구조체에 대한 메모리를 할당합니다.

    참고

    dwSize의 크기는 정보를 보유하기에 충분하지 않습니다. 다음 단계를 참조하세요.

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. GetIpAddrTable을 처음 호출하여 dwSize 변수에 필요한 크기를 가져옵니다.

    참고

    함수에 대한 이 호출은 실패하기 위한 것이며 , dwSize 변수가 pIPAddrTable에 반환된 모든 정보를 보유하기에 충분한 크기를 지정하는 데 사용됩니다. 이 형식의 데이터 구조 및 함수에 대한 일반적인 프로그래밍 모델입니다.

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. 일반적인 오류 검사를 사용하여 GetIpAddrTable 을 두 번째로 호출하고 DWORD 변수 dwRetVal (고급 오류 검사를 위해)에 해당 값을 반환합니다.

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. 호출에 성공하면 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);
    
    
  6. pIPAddrTable 구조에 할당된 메모리를 해제합니다.

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

참고

DWORD 개체 dwAddrdwMask는 네트워크 바이트 순서가 아닌 호스트 바이트 순서의 숫자 값으로 반환됩니다. 이러한 값은 점선 IP 주소가 아닙니다.

 

다음 단계: IpReleaseAddress 및 IpRenewAddress를 사용하여 DHCP 임대 관리

이전 단계: GetInterfaceInfo를 사용하여 인터페이스 관리