这台机器有两块网卡。只需要提示有哪些相关API,我再查资料,多谢!

解决方案 »

  1.   

    采用下面的代码可以获得本机IP地址: 
        char szHostName[128]; 
         
        if( gethostname(szHostName, 128) == 0 ) 
        { 
         // Get host adresses 
         struct hostent * pHost; 
         int i; 
         
         pHost = gethostbyname(szHostName); 
         
         for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ ) 
         { 
         CString str; 
         int j; 
         
         for( j = 0; j < pHost->h_length; j++ ) 
         { 
         CString addr; 
         
         if( j > 0 ) 
         str += "."; 
         
         addr.Format("%u", (unsigned int)((unsigned 
         char*)pHost->h_addr_list[i])[j]); 
         str += addr; 
         } 
         // str now contains one local IP address - do whatever you want to do with it (probably add it to a list) 
         } 
        } 
      

  2.   

    // getiplist.cpp : Defines the entry point for the console application.
    //#include "stdafx.h"
    #include <windows.h>
    #include <stdlib.h>
    #include <IPIfCons.h>
    #include "Iphlpapi.h"
    #pragma comment(lib,"Iphlpapi")void Print_IP_ADAPTER_INFO(IP_ADAPTER_INFO* pAdapterInfo);
    void Print_IP_ADDR_STRING(IP_ADDR_STRING* paddr);
    int main(int argc, char* argv[])
    {
    PIP_ADAPTER_INFO  pAdapterInfo = NULL;
    PIP_ADAPTER_INFO  pOriginalPtr;
    ULONG             ulSizeAdapterInfo = 0;
    DWORD             dwStatus; // Find out how big our buffer needs to be to hold the data
    dwStatus = GetAdaptersInfo(pAdapterInfo, &ulSizeAdapterInfo);
    if (dwStatus == ERROR_BUFFER_OVERFLOW) {
       // Allocate a buffer of the appropriate size
       if (!(pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulSizeAdapterInfo))) {
      printf("\n Insufficient Memory ");
      return(1);
       }
       // Obtain the Adapter Info
       dwStatus = GetAdaptersInfo(pAdapterInfo, &ulSizeAdapterInfo);
    }
       
    if (dwStatus != ERROR_SUCCESS) {
       return(1);
    } pOriginalPtr = pAdapterInfo; if (pAdapterInfo == NULL)
       printf("\n No Interfaces Present.\n");
    else
    {
       // Step through the adapter list
       while (pAdapterInfo != NULL) 
       {
       Print_IP_ADAPTER_INFO(pAdapterInfo);
      pAdapterInfo = pAdapterInfo->Next;
       } 
    }
    return 0;
    }void Print_IP_ADAPTER_INFO(IP_ADAPTER_INFO* pAdapterInfo)
    {
    if(pAdapterInfo==NULL)
    return;
    printf("\tAdapterName:%s\n",pAdapterInfo->AdapterName);
    printf("\tDescription:%s\n",pAdapterInfo->Description);
    printf("\tAddressLength:%d\n",pAdapterInfo->AddressLength);
    printf("\tAdrress:");
    for(int i=0 ; i< pAdapterInfo->AddressLength ; i++)
    {
    BYTE b=pAdapterInfo->Address[i];
    printf("%02x",b);
    }
    printf("\n");
      printf("\tAdapterIndex:%d\n",pAdapterInfo->Index);
      printf("\tAdapter Type:");
      switch(pAdapterInfo->Type)
      {
      case MIB_IF_TYPE_OTHER :
      printf("MIB_IF_TYPE_OTHER \n");
      break;
      case MIB_IF_TYPE_ETHERNET  :
      printf("MIB_IF_TYPE_ETHERNET  \n");
      break;
      case MIB_IF_TYPE_TOKENRING :
      printf("MIB_IF_TYPE_TOKENRING \n");
      break;
      case MIB_IF_TYPE_FDDI :
      printf("MIB_IF_TYPE_FDDI \n");
      break;
      case MIB_IF_TYPE_PPP :
      printf("MIB_IF_TYPE_PPP \n");
      break;
      case MIB_IF_TYPE_LOOPBACK :
      printf("MIB_IF_TYPE_LOOPBACK \n");
      break;
      case MIB_IF_TYPE_SLIP :
      printf("MIB_IF_TYPE_SLIP \n");
      break;
      default:
      printf("unknown\n");
      break;
      }
      
      printf("\tDHCPEnabled:%d\n",pAdapterInfo->DhcpEnabled);
      printf("\tCurrentIPAddress:");
      Print_IP_ADDR_STRING(pAdapterInfo->CurrentIpAddress);
      printf("\tIpAddressList:");
      Print_IP_ADDR_STRING(&(pAdapterInfo->IpAddressList));
      printf("\tGatewayList:");
      Print_IP_ADDR_STRING(&(pAdapterInfo->GatewayList));
      printf("\tDhcpServer:");
      Print_IP_ADDR_STRING(&(pAdapterInfo->DhcpServer));
      if(pAdapterInfo->HaveWins)
      {
      printf("\tHaveWins\n");
      printf("\tPrimaryWinsServer:");
      Print_IP_ADDR_STRING(&(pAdapterInfo->PrimaryWinsServer));
      printf("\tSecondaryWinsServer:");
      Print_IP_ADDR_STRING(&(pAdapterInfo->SecondaryWinsServer));
      }
      else
      printf("\tHaveWins---FALSE\n");   
      printf("\n");
    }
    void Print_IP_ADDR_STRING(IP_ADDR_STRING* paddr)
    {
    if(paddr==NULL)
    printf("\n");
    while(paddr)
    {
    printf("IPAdress:%s,IPMask:%s,context:%d\n",paddr->IpAddress.String,paddr->IpMask.String,paddr->Context);
    paddr=paddr->Next;
    }
    }
      

  3.   

    用 GetIpAddrTable也可以。
    只不过不能直接看到对应什么网卡,只能给你一个网卡INDEX。
    DWORD GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable,PULONG pdwSize,BOOL bOrder);
    pipaddrtable先设为NULL,pdwsize=0.
    这样先得到应该的dwsize,再new pipaddrtable.
    然后再调用。border基本上没什么用,他问你要不要把结果排序pipaddrtable第一个数据成员就是一共多少个IP地址。(包括那个127.0.0.1)
    后面是一个IP信息数组。
    有IP地址(DWORD),MASK等等。
    再转换
    in_addr ia=...
      

  4.   

    redby: gethostbyname()
    masterz: GetAdaptersInfo()
    matq2008: 注册表
    sevencat: GetIpAddrTable()
    再次感谢!