線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2420
推到 Plurk!
推到 Facebook!

抓取系統的DNS設定

答題得分者是:RaynorPao
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-27 18:12:41 IP:211.76.xxx.xxx 未訂閱
有人知道要怎麼取得目前網路連線的DNS設定嗎? 不是用註冊表(Registry)取得的方法 因為讀取註冊表的方式還要配合Windows的版本,所以不是很好用 找了好久的資料都沒有...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-28 09:02:50 IP:203.73.xxx.xxx 未訂閱
引言: 有人知道要怎麼取得目前網路連線的DNS設定嗎? 不是用註冊表(Registry)取得的方法 因為讀取註冊表的方式還要配合Windows的版本,所以不是很好用 找了好久的資料都沒有...
artist1002 你好: 先試試看這個 Win32 API 合不合用呢??
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-28 09:27:02 IP:61.30.xxx.xxx 未訂閱
這裏有一個DNS_STATUS的應用 原文在http://www.codeproject.com/internet/DNSQuery.asp 應用在smtp的host name    
BOOL CGetSMTPHostName::GetSmtpHostName(CString _EmailAddress,                                        CString& _HostName)
{
    BOOL bRV = TRUE;
    _HostName.Empty();
    int start = _EmailAddress.Find('@') 1;
    CString strDomain                   = _EmailAddress.Mid(start,_EmailAddress.GetLength()-start);
    if( ! strDomain.IsEmpty())
    {
         // First, look in our map to see if we have looked up this SMTP          // Host before
         m_SMTPHostIterator = m_SMTPHost.find(strDomain);
         if(m_SMTPHostIterator != m_SMTPHost.end())
         {
             // Great, we've looked this one up before...
             _HostName = (*m_SMTPHostIterator).second;
         // Is it unknown???
         if(_HostName == "UNK")
         {
             bRV=FALSE;
         _HostName.Empty();
         }
         }
     else
     {
         // OK, we haven't looked this up before, so look it up
         DNS_RECORD* ppQueryResultsSet = NULL;
         DNS_STATUS statusDNS = ::DnsQuery( strDomain, DNS_TYPE_MX, 
                                                DNS_QUERY_STANDARD, NULL, 
                                                &ppQueryResultsSet, NULL );
             if(statusDNS == ERROR_SUCCESS)
         {
             // Found the SMTP Host Name, insert it into our map
        _HostName = ppQueryResultsSet->Data.MX.pNameExchange;
        m_SMTPHost.insert(HostMapValue(strDomain,_HostName));
         }
         else
         {
        // I have opted to place unknown domains in the map to reduce
        // the time that I spend looking up the domain names.  You
        // may want to implement this differently for your usage.
        bRV = FALSE;
        DNS_STATUS theError = statusDNS;
        m_SMTPHost.insert(HostMapValue(strDomain,"UNK"));
         }
         }
    }
    else
    {
    // OOPS, is this a valid email address?
    bRV = FALSE;
    }
    return(bRV);
}
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-28 15:58:33 IP:211.76.xxx.xxx 未訂閱
謝謝 RaynorPao,turboted 的熱心回覆 可能是我的問題沒有問清楚... 我的問題是想要取的網路配接卡上面的TCP/IP協定中的DNS設定 並不是對DNS Server作Query的動作... 我找了一些Windows API和Winsock API好像都沒有 WMI中好像可以,但是沒辦法相容舊版的Windows 網路上查了一下資料都是從註冊表取的的 但是我測試的結果,在不同版本的Windows儲存的機碼位置不一樣 難道我要針對每一個Windows版本寫一種讀取方式嗎? 所以想要找一個可以相容不同版本的取得方法... 還是感謝先前回覆的兩位,我也會持續找資料的...希望能盡快解決
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-29 11:43:01 IP:203.73.xxx.xxx 未訂閱
引言: 謝謝 RaynorPao,turboted 的熱心回覆 可能是我的問題沒有問清楚... 我的問題是想要取的網路配接卡上面的TCP/IP協定中的DNS設定 並不是對DNS Server作Query的動作... 我找了一些Windows API和Winsock API好像都沒有 WMI中好像可以,但是沒辦法相容舊版的Windows 網路上查了一下資料都是從註冊表取的的 但是我測試的結果,在不同版本的Windows儲存的機碼位置不一樣 難道我要針對每一個Windows版本寫一種讀取方式嗎? 所以想要找一個可以相容不同版本的取得方法... 還是感謝先前回覆的兩位,我也會持續找資料的...希望能盡快解決
artist1002 你好: 應該是使用 Win32 API GetNetworkParams 可達成目的< > 請參考以下的連結文章(有完整的範例程式可以參考)< > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getnetworkparams.asp -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
artist1002
高階會員


發表:2
回覆:155
積分:151
註冊:2002-09-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-29 17:34:00 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 謝謝 RaynorPao,turboted 的熱心回覆 可能是我的問題沒有問清楚... 我的問題是想要取的網路配接卡上面的TCP/IP協定中的DNS設定 並不是對DNS Server作Query的動作... 我找了一些Windows API和Winsock API好像都沒有 WMI中好像可以,但是沒辦法相容舊版的Windows 網路上查了一下資料都是從註冊表取的的 但是我測試的結果,在不同版本的Windows儲存的機碼位置不一樣 難道我要針對每一個Windows版本寫一種讀取方式嗎? 所以想要找一個可以相容不同版本的取得方法... 還是感謝先前回覆的兩位,我也會持續找資料的...希望能盡快解決
artist1002 你好: 應該是使用 Win32 API GetNetworkParams 可達成目的< > 請參考以下的連結文章(有完整的範例程式可以參考)< > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getnetworkparams.asp -- Enjoy Researching & Developing --
感謝RaynorPao的熱心幫助, 終於解決了這個問題 原來這就是IP Helper的SDK...我之前一直找Windows的SDK 難怪找不到, 不過也讓我學了不少東西 分享一下 關於 GetNetworkParams 的使用需要連結 iphlpapi.lib 小弟不才, 從來沒有用過lib檔案 試了半天, 才知道原來只要include進專案就可以了... 哈哈...又學會了一點小皮毛. 還有 GetNetworkParams 沒有辦法在 Windows 95 上執行 不過這不是問題, 因為使用 Windows 95 的使用者很少了 還是再一次感謝 RaynorPao 的援助
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-12 08:03:19 IP:61.219.xxx.xxx 訂閱
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2017-10-18 17:12:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!