天天看點

netmon中解析非1433端口的TDS協定

<a href="http://blogs.msdn.com/b/sqlblog/archive/2010/06/30/how-to-fix-tds-parser-to-display-tds-frames-when-sqlserver-is-listening-on-port-other-than-default-1433.aspx">How to enable TDS parser to display TDS frames when SQLServer is listening on port other than default 1433</a>

如果你使用netmon3.4抓sql server網絡包的話,在協定中你會發現有各種類型的協定,常見的由TCP/TDS/TLS等。如下圖所示:

但是,之是以我們能夠抓到TDS協定,是因為我們連接配接的是預設執行個體,其端口号是1433。如果我們連接配接的是命名執行個體,端口号不再是1433了,那麼我們就抓不到TDS協定了,如下圖所示:

在上圖中我們已經找不到prelogin,response,recrequest等關鍵字了,多了許多Flag=...AP...,我自己抓到的網絡包如下圖所示:

為了能夠讓netmon解析命名執行個體的TDS網絡包,我們需要對netmon進行一些修改。我們需要修改tcp.npl這個Praser,如下圖所示:

找到tcp.npl以後,打開這個檔案,在裡面搜尋1433,然後在case 1433之前添加命名執行個體的tcp端口号,如下圖所示:

修改完以後點選儲存,但是可能會出現如下錯誤:

這是因為tcp.npl這個檔案是隻讀的,我們需要在磁盤中找到這個檔案,去掉該檔案的隻讀屬性即可,這個檔案的路徑是:C:\ProgramData\Microsoft\Network Monitor 3\NPL\NetworkMonitor Parsers\Base。在這個目錄下找到tcp.npl,在屬性中去掉隻讀屬性,然後我們再次儲存tcp.npl檔案,此時儲存成功。點選“rebuild prasers”,最後重新開機netmon,否則修改不生效。

此時我們再次去抓sql server的網絡包,我們就會發現能夠解析TDS協定了,如下圖所示:

我抓到的網絡包如下圖所示:

再說一句題外話,上面我們可以看到使用的是NTLM驗證模式,而不是使用kerberos,這是因為我的sql server2012沒有注冊spn的緣故。

本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2012/08/23/2651975.html,如需轉載請自行聯系原作者