netmon中解析非1433端口的TDS协议

参考文献:

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的缘故。

 

 

posted @ 2012-08-23 10:24  xwdreamer  阅读(1802)  评论(0编辑  收藏  举报