Netzwerkadapter auflisten



  • Hi zusammen,

    ich habe folgendes Problem.
    Ich benötige die IP-Adresse, mit der ich eine Verbindung ins Internet bzw. zu einem anderen Rechner habe. Nun hab ich aber mehrere Netzwerkadapter aufm PC und einer davon ist der MS Loopbackadapter, der auch eine IP hat.
    Bisher hab ich es so gemacht, dass ich einfach auf "wasistmeineip.de" gegangen bin und mir dann die IP raugeholt habe. Allerdings funktioniert diese Methode nicht, wenn ich auf einen Server zugreifen will und ich keine I-NET habe.
    Mit folgendem Code kann ich mir zwar alle IP- Adressen in einem Vekor zurückgeben lassen, aber ich weiß nicht, welche ich nehmen kann. Ich möchte dann, dass man ein Netzwerkgerät auswählen kann und dessen IP- verwendet wird. Kann man irgendwie auflisten, welche Netzwerkadapter der Rechner hat und die dazugehörige IP?
    Geht das mit so WMI-Klassen? Wie verwendet man die?

    vector<string> ConnectionManager::getMyIps()
    {
    	vector<string> toReturn;
    	WSAData wsa;
        char HostName[255];
        hostent* HostEntry = NULL;
        in_addr InetAddress;
        int RetVal = 0;
    
        // Winsock initialisieren:
        if(WSAStartup( MAKEWORD(2, 1), &wsa) == 0)
        {
            // eigene Hostnamen herausfinden:
            if(gethostname(HostName, 255))
                return toReturn;
    
            // Hostinformationen abrufen:
            HostEntry = gethostbyname(HostName);
            if(HostEntry == NULL)
                return toReturn;
    
            // IP-Adressen auslesen
            for(int AddrIndex=0; HostEntry->h_addr_list[AddrIndex]; AddrIndex++)
            {
                InetAddress.S_un.S_addr = *((DWORD*)HostEntry->h_addr_list[AddrIndex]);
                toReturn.push_back(inet_ntoa(InetAddress));
                RetVal++;
            }
        }
        else
            return toReturn;
        WSACleanup();
        return toReturn; 
    
    }
    

    Vielen Dank und Grüße,
    Soccertrash



  • GetAdaptersInfo

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <Iphlpapi.h>
    #pragma comment(lib, "Iphlpapi.lib")
    
    int _tmain()
    {
    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    
    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    
    // Make an initial call to GetAdaptersInfo to get
    // the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
      free(pAdapterInfo);
      pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); 
    }
    
    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
      pAdapter = pAdapterInfo;
      while (pAdapter) {
        printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
        printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
        printf("\tAdapter Addr: \t%ld\n", pAdapter->Address);
        printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
    
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
        printf("\t***\n");
        if (pAdapter->DhcpEnabled) {
          printf("\tDHCP Enabled: Yes\n");
          printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
          printf("\tLease Obtained: %ld\n", pAdapter->LeaseObtained);
        }
        else
          printf("\tDHCP Enabled: No\n");
    
        if (pAdapter->HaveWins) {
          printf("\tHave Wins: Yes\n");
          printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
          printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
        }
        else
          printf("\tHave Wins: No\n");
        pAdapter = pAdapter->Next;
      }
    }
    else {
      printf("Call to GetAdaptersInfo failed.\n");
    }
    }
    


  • Hey, super! Danke!


Anmelden zum Antworten