Condividi tramite


Gestione degli indirizzi IP tramite GetIpAddrTable

La funzione GetIpAddrTable riempie un puntatore a una struttura MIB_IPADDRTABLE con informazioni sugli indirizzi IP correnti associati al sistema.

Per usare GetIpAddrTable

  1. Dichiarare un puntatore a un oggetto MIB_IPADDRTABLE denominato pIPAddrTable e un oggetto DWORD denominato dwSize. Queste variabili vengono passate come parametri alla funzione GetIpAddrTable . Creare anche una variabile DWORD denominata dwRetVal (utilizzata per il controllo degli errori).

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. Allocare memoria per la struttura.

    Nota

    Le dimensioni di dwSize non sono sufficienti per contenere le informazioni. Vedere il passaggio successivo.

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. Eseguire una chiamata iniziale a GetIpAddrTable per ottenere le dimensioni necessarie nella variabile dwSize .

    Nota

    Questa chiamata alla funzione deve avere esito negativo e viene usata per assicurarsi che la variabile dwSize specifica una dimensione sufficiente per contenere tutte le informazioni restituite a pIPAddrTable. Si tratta di un modello di programmazione comune per strutture di dati e funzioni di questo tipo.

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. Eseguire una seconda chiamata a GetIpAddrTable con controllo degli errori generali e restituire il relativo valore alla variabile DWORD dwRetVal (per un controllo degli errori più avanzato).

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. Se la chiamata ha esito positivo, accedere ai dati dalla struttura di dati 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. Liberare qualsiasi memoria allocata per la struttura pIPAddrTable .

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

Nota

Gli oggetti DWORDdwAddr e dwMask vengono restituiti come valori numerici nell'ordine di byte host, non in ordine di byte di rete. Questi valori non sono indirizzi IP punteggiati.

 

Passaggio successivo: Gestione di lease DHCP tramite IpReleaseAddress e IpRenewAddress

Passaggio precedente: Gestione delle interfacce tramite GetInterfaceInfo