文章目錄
參考文獻:
How to enable TDS parser to display TDS frames when SQLServer is listening on port other than default 1433
本文
如果你使用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的緣故。