Get network interface name from IPv4 address

后端 未结 2 1299
醉梦人生
醉梦人生 2021-01-03 10:03

Given an IPv4 address, how can I obtain its associated network interface name, like \"Ethernet adapter Local Area Connection\", in Windows using C++? Alternately, how can I

相关标签:
2条回答
  • 2021-01-03 10:18
    #include <windows.h>
    #include <iphlpapi.h>
    #include <stdio.h>
    
    #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.String);
          printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
          printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
          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");
      }
    }
    

    As @sonyisda1 mentioned, this is taken from MSDN.

    0 讨论(0)
  • 2021-01-03 10:41

    I'll share my minimal version as well:

    #include <windows.h>
    #include <iphlpapi.h>
    #include <stdio.h>
    
    #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.String, pAdapter->Description);
            }
        }
    
        if (pAdapterInfo) free(pAdapterInfo);
        return 0;
    }
    
    0 讨论(0)
提交回复
热议问题