Netzwerk Adapter frage



  • Wenn mein Laptop zwei Netzwerkverbindungen hat, eine per WLAN 172.16.0.3 und eine per LAN - Netzwerkkabel rj45 172.16.0.4, wie weis dann meine Anwendung welchen adapter sie verwenden soll bzw. über welches gerät gesendet wird?

    Denn ich möchte die Ip Finden über die meine Andwendung Sendet!

    int GetAdapterAddrStr(int adapterindex ,char *addrstr ,int addrstrlen)
    {
    
        /* Variables used by GetIpAddrTable */
        PMIB_IPADDRTABLE pIPAddrTable;
        DWORD dwSize = 0;
        DWORD dwRetVal = 0;
        IN_ADDR IPAddr;
    
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc( sizeof(MIB_IPADDRTABLE) );
    
        if(pIPAddrTable) {
    
            if(GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
                free(pIPAddrTable);
                pIPAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
            }
            if(pIPAddrTable == NULL) {
                printf("Memory allocation failed for GetIpAddrTable\n");
                exit(1);
            }
        }
    
        if( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
            printf("GetIpAddrTable failed with error %d\n", dwRetVal);
            exit(1);
        }
    
        printf("\tNum Entries: %ld\n", pIPAddrTable->dwNumEntries);
    
        for(i=0; i < (int) pIPAddrTable->dwNumEntries; i++) {
    
    		if( pIPAddrTable->table[i].dwIndex == adapterindex ) {
    			IPAddr.S_un.S_addr = (unsigned long) pIPAddrTable->table[i].dwAddr;
    			strcpy(addrstr ,inet_ntoa(IPAddr) );
    		}
        }
    
        if(pIPAddrTable) {
            free(pIPAddrTable);
            pIPAddrTable = NULL;
        }
    
    	return 1;
    }
    

    Jetz weiss ich ja nicht über welchen Adapter mein Programm daten verschickt...
    Gibt es da eine Reihenfolge?

    Danke für das Licht da Du ins Dunkle bringst!


  • Mod

    Ich würde WMI nutzen:
    SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True



  • Aber ich möchte kein WMI verwenden!

    Sollte doch ne API möglichkeit geben!?

    gruss


  • Mod

    Ich habemir noch mal Deine Frage durchgelesen und merke gerade, dass ich Dir falsch geantwortet habe.

    Ich glaube, dass Du ohne dass Du eine Verbindug wirklich erzeugst das nicht heruasbekommen wirst über welche Karte Dein Zugriff abgefertigt wird.

    Es gibt ja Fälle in denen beide eine Verbindung liefern könnten.



  • Es gibt GetBestInterface und GetBestRoute, vllt. sind die halbwegs brauchbar?



  • ...kommt darauf an, was du am Ende machen willst. Wenn du z.B. Sockets nutzen willst, kannst du die lokale IP z.B. auf 'beliebig' (= 0.0.0.0) oder auf eine bestimmte setzen. Guck mal unter socket, bind(), listen() usw.

    Ulli


Anmelden zum Antworten