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
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;
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) );
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 ); }
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); }
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);
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