Verwalten von IP-Adressen mithilfe von GetIpAddrTable
Die GetIpAddrTable-Funktion füllt einen Zeiger auf eine MIB_IPADDRTABLE-Struktur mit Informationen zu den aktuellen IP-Adressen, die dem System zugeordnet sind.
So verwenden Sie GetIpAddrTable
Deklarieren Sie einen Zeiger auf ein MIB_IPADDRTABLE-Objekt namens pIPAddrTable und ein DWORD-Objekt namens dwSize. Diese Variablen werden als Parameter an die GetIpAddrTable-Funktion übergeben. Erstellen Sie auch eine DWORD-Variable namens dwRetVal (wird für die Fehlerüberprüfung verwendet).
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
Ordnen Sie Arbeitsspeicher für die Struktur zu.
Hinweis
Die Größe von dwSize reicht nicht aus, um die Informationen aufzunehmen. Mehr dazu finden Sie im nächsten Schritt.
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
Führen Sie einen ersten Aufruf von GetIpAddrTable aus, um die erforderliche Größe in die dwSize-Variable abzurufen.
Hinweis
Dieser Aufruf der Funktion ist für einen Fehler gedacht und wird verwendet, um sicherzustellen, dass die dwSize-Variable eine Größe angibt, die ausreicht, um alle an pIPAddrTable zurückgegebenen Informationen zu speichern. Dies ist ein gängiges Programmiermodell für Datenstrukturen und Funktionen dieses Typs.
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
Führen Sie einen zweiten Aufruf von GetIpAddrTable mit allgemeiner Fehlerüberprüfung durch, und geben Sie ihren Wert an die DWORD-VariabledwRetVal zurück (für eine erweiterte Fehlerüberprüfung).
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
Wenn der Aufruf erfolgreich war, greifen Sie über die Datenstruktur pIPAddrTable auf die Daten zu.
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);
Geben Sie den für die pIPAddrTable-Struktur zugewiesenen Arbeitsspeicher frei.
if (pIPAddrTable) free(pIPAddrTable);
Hinweis
Die DWORD-ObjektedwAddr und dwMask werden als numerische Werte in Hostbytereihenfolge und nicht als Netzwerkbytereihenfolge zurückgegeben. Diese Werte sind keine gepunkteten IP-Adressen.
Nächster Schritt: Verwalten von DHCP-Leases mithilfe von IpReleaseAddress und IpRenewAddress
Vorheriger Schritt: Verwalten von Schnittstellen mithilfe von GetInterfaceInfo