Obtenir le nom de l’interface réseau à partir de l’adresse IPv4

Compte tenu d’une adresse IPv4, comment puis-je obtenir le nom de l’interface réseau associée, par exemple “Connexion au réseau local de l’adaptateur Ethernet” sous Windows en utilisant C ++? Comment puis-je obtenir une liste des noms d’interface réseau et des adresses IPv4 pour l’ordinateur local? Je suis capable d’obtenir uniquement les adresses IPv4 en utilisant getaddrinfo et inet_ntoa .

 #include  #include  #include  #pragma comment(lib, "iphlpapi.lib") int main(int argc, char** argv) { PIP_ADAPTER_INFO pAdapterInfo; pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO)); ULONG buflen = sizeof(IP_ADAPTER_INFO); if(GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc(buflen); } if(GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) { PIP_ADAPTER_INFO 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.Ssortingng); printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.Ssortingng); printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.Ssortingng); if(pAdapter->DhcpEnabled) { printf("\tDHCP Enabled: Yes\n"); printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.Ssortingng); 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.Ssortingng); printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.Ssortingng); } else { printf("\tHave Wins: No\n"); } pAdapter = pAdapter->Next; } } else { printf("Call to GetAdaptersInfo failed.\n"); } } 

Je partagerai également ma version minimale:

 #include  #include  #include  #pragma comment(lib, "iphlpapi.lib") int main() { ULONG buflen = sizeof(IP_ADAPTER_INFO); IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen); if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen); } if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) { for (IP_ADAPTER_INFO *pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) { printf("%s (%s)\n", pAdapter->IpAddressList.IpAddress.Ssortingng, pAdapter->Description); } } if (pAdapterInfo) free(pAdapterInfo); return 0; }