[C++]如何取得系統內預設的 dns server

有關於C/C++的語法, 程式等
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

[C++]如何取得系統內預設的 dns server

文章 tim »

配合 iphlpapi.dll (IP Help Api)進行操作, 使用 GetNetworkParams 來取得 dns 資訊, 程式碼如下,

代碼: 選擇全部

     
    // link iphlpapi.lib 
    #include <iphlpapi.h> 
    .... 
    bool GetDNS(char *dns) 
    { 
        
       FIXED_INFO * FixedInfo; 
       ULONG    ulOutBufLen; 
       DWORD    dwRetVal; 
       //IP_ADDR_STRING * pIPAddr; 
       bool ret; 
       char dnstmp[4*4];  
        
        
       ret = false; 
       dns[0]=0; 
     
       FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, sizeof( FIXED_INFO ) ); 
       ulOutBufLen = sizeof( FIXED_INFO ); 
        
       if( ERROR_BUFFER_OVERFLOW == GetNetworkParams( FixedInfo, &ulOutBufLen ) ) { 
          GlobalFree( FixedInfo ); 
          FixedInfo = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen ); 
       } 
     
       if ( dwRetVal = GetNetworkParams( FixedInfo, &ulOutBufLen ) ) { 
            //printf( "Call to GetNetworkParams failed. Return value: %08xn", dwRetVal ); 
       } 
       else {       
          sprintf( dnstmp, "%s", FixedInfo -> DnsServerList.IpAddress.String );       
        strcat(dns, dnstmp); 
           
        // if want to get more than one dns 
        /* 
        pIPAddr = FixedInfo -> DnsServerList.Next; 
          while ( pIPAddr ) {      
             sprintf( dnstmp, "%s", pIPAddr ->IpAddress.String ); 
             pIPAddr = pIPAddr ->Next; 
         strcat(dns, dnstmp);     
          } 
        */ 
     
        ret = true; 
     
       } 
     
       GlobalFree( (HGLOBAL) FixedInfo ); 
        
       return ret; 
    } 
     
    // usage 
      char dns[255]; 
      if (GetDNS(dns)) 
          MessageBox(dns); 

iphlpapi.h 及 iphlpapi.lib 皆在 platform sdk 裡有, 或下載: http://www.lastbit.com/trafmeter/iphlpapi.zip
多多留言, 整理文章, 把經驗累積下來.....
回覆文章