Gestion des adresses IP à l’aide de GetIpAddrTable
La fonction GetIpAddrTable remplit un pointeur vers une structure de MIB_IPADDRTABLE avec des informations sur les adresses IP actuelles associées au système.
Pour utiliser GetIpAddrTable
Déclarez un pointeur vers un objet MIB_IPADDRTABLE appelé pIPAddrTable et un objet DWORD appelé dwSize. Ces variables sont passées en tant que paramètres à la fonction GetIpAddrTable . Créez également une variable DWORD appelée dwRetVal (utilisée pour la vérification des erreurs).
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
Allouez de la mémoire à la structure.
Notes
La taille de dwSize n’est pas suffisante pour contenir les informations. Consultez l’étape suivante.
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
Effectuez un appel initial à GetIpAddrTable pour obtenir la taille nécessaire dans la variable dwSize .
Notes
Cet appel à la fonction est destiné à échouer et est utilisé pour garantir que la variable dwSize spécifie une taille suffisante pour contenir toutes les informations retournées à pIPAddrTable. Il s’agit d’un modèle de programmation courant pour les structures de données et les fonctions de ce type.
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
Effectuez un deuxième appel à GetIpAddrTable avec une vérification générale des erreurs et retournez sa valeur à la variable DWORD dwRetVal (pour une vérification des erreurs plus avancée).
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
Si l’appel a réussi, accédez aux données à partir de la structure de données 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);
Libérez toute la mémoire allouée à la structure pIPAddrTable .
if (pIPAddrTable) free(pIPAddrTable);
Notes
Les objets DWORD dwAddr et dwMask sont retournés en tant que valeurs numériques dans l’ordre des octets de l’hôte, et non dans l’ordre des octets réseau. Ces valeurs ne sont pas des adresses IP en pointillés.
Étape suivante : Gestion des baux DHCP à l’aide d’IpReleaseAddress et IpRenewAddress
Étape précédente : Gestion des interfaces à l’aide de GetInterfaceInfo