Verwalten von IP-Adressen mit 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 mit dem Namen dwSize. Diese Variablen werden als Parameter an die GetIpAddrTable-Funktion übergeben. Erstellen Sie außerdem 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 zu enthalten. Weitere Informationen finden Sie im nächsten Schritt.

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. Rufen Sie zunächst GetIpAddrTable auf, um die für die Variable dwSize benötigte Größe zu erhalten.

    Hinweis

    Dieser Aufruf der Funktion ist für einen Fehler gedacht und wird verwendet, um sicherzustellen, dass die variable dwSize eine Größe angibt, die ausreicht, um alle an pIPAddrTable zurückgegebenen Informationen zu enthalten. 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 den Wert an die DWORD-Variable dwRetVal 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 zugeordneten Arbeitsspeicher frei.

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

Hinweis

Die DWORD-Objekte dwAddr und dwMask werden als numerische Werte in Host-Byte-Reihenfolge zurückgegeben, nicht als Netzwerk-Bytefolge. Diese Werte sind keine gepunkteten IP-Adressen.

Nächster Schritt: Verwalten von DHCP-Leases mit ipReleaseAddress und IpRenewAddress

Vorheriger Schritt: Verwalten von Schnittstellen mit GetInterfaceInfo