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!