adsl拨号软件是enternet300,我用GetAdaptersInfo函数获取到所有网络适配器的IP地址,但是无法用程序判断哪个是拨号后的IP地址。

解决方案 »

  1.   

    struct hostent *phost;
         char ip[20];
         char hostname[50];  gethostname(hostname,50);
         phost=gethostbyname(hostname);      char **names;
          names=phost->h_aliases;
          char **iplist;
          iplist=phost->h_addr_list;
          while(* iplist)
          {
              strcpy(ip,inet_ntoa(*(struct in_addr *)*iplist));
              iplist++;
           }    CString LocalIp=ip;
       //if(LocalIp.GetLength()<7)
       if (!strncmp(LocalIp,"192.168.",8))
       AfxMessageBox("得IP失败,可能还没有拔号!");
           return LocalIp;
      

  2.   

    typedef struct _IP_ADAPTER_INFO {
      struct _IP_ADAPTER_INFO* Next;
      DWORD ComboIndex;
      char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
      char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
      UINT AddressLength;
      BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
      DWORD Index;
      UINT Type;
      UINT DhcpEnabled;
      PIP_ADDR_STRING CurrentIpAddress;
      IP_ADDR_STRING IpAddressList;
      IP_ADDR_STRING GatewayList;
      IP_ADDR_STRING DhcpServer;
      BOOL HaveWins;
      IP_ADDR_STRING PrimaryWinsServer;
      IP_ADDR_STRING SecondaryWinsServer;
      time_t LeaseObtained;
      time_t LeaseExpires; 
    } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;看上面结构中的Type域。