Freigeben über


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

  1. 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;
    
    
  2. 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) );
    
    
  3. 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 );
    }
    
    
  4. 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);
    }
    
    
  5. 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);
    
    
  6. 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