文档章节

prelogin数据包之response包

harris2016
 harris2016
发布于 2016/07/08 16:24
字数 648
阅读 46
收藏 0

    prelogin数据包的详细讲解可以见《SQL server jdbc之prelogin数据包》,本文主要讲解这个包的响应包,在jdbc中日志中可以得到这个响应包的内容如下所示:

04 01 00 1F 00 00 01 00 00 00 10 00 06 01 00 16   ................
00 01 05 00 17 00 00 FF 0D 00 06 41 00 00 00      ...........A...

针对响应包的内容解析是在文件SQLServerConnection.java文件的Prelogin函数中。首先函数通过tdsChannel累中的read函数读取响应包的内容。再针对这些内容进行解析。

第一个字节(0x04):表示的是包的类型

第二个字节(0x01):表示的是响应的状态(status),必须为01,否则报错

第三,四字节(0x00 0x1F):表示包的长度

第9个字节(0x00):这个字节如果为-1,则会显示“Prelogin response is missing version and/or encryption option.”的警告信息,并且终止解析后的内容(记为v1)。

第10,11个字节(0x00 0x10):这两个字节的十进制值+8必须要大于0(记为v2),这个是选项的偏移量.

第12,13两个字节(0x00 0x06):这个字节的十进制值必须要大于0(记为v3),这个是选项的长度

如果v2+v3大于了包的长度,则得到异常信息与警告信息。

包剩下的内容就是选项的内容了,需要根据v1的值来选择不同的处理方法,v1的取值为0或者1.其他的都为得到Ignoring prelogin response option的日志信息。

下面根据不同的v1的值来进行讲解,剩下的内容如下所示:

01 00 16   ................
00 01 05 00 17 00 00 FF 0D 00 06 41 00 00 00      ...........A...

1. 当v1的值为0

1)判断v3的值是否为6.如果不为6,则抛出异常,并且打印警告日志为:Version option length:" + v3 + " is incorrect.  Correct value is 6。

2) 根据v2的值来取serverMajorVersion。从上面的数据包内容可以得到serverMajorVersion是0x0D(13)。

2. 当v1的值为1

1)判断v3的值是否为1,如果不为1,则抛出异常,并且打印警告日志为:Encryption option length:" + v3 + " is incorrect.  Correct value is 1.

2)从v2的值作为数据包的下标来取得negotiatedEncryptionLevel的值。这个值必须是在0,1,2,3这四个数字之一。

如果客户端要求加密(连接串中设置了encrypt为true),则negotiatedEncryptionLevel的值必须为1或者3.

如果requestedEncryptionLevel是2,则negotiatedEncryptionLevel不能为3.

上面就是整个prelogin包的响应包的解析情况。

 

 

 

 

 

 

 

© 著作权归作者所有

harris2016
粉丝 10
博文 54
码字总数 30661
作品 0
杭州
程序员
私信 提问
SQL server jdbc之prelogin数据包

为了做sql server的监控功能,需要了解SQL SERVER jdbc与SQL SERVER之间的通信协议。目前在Windows上面安装了sqlserver2016的developer版本。并且通过jdbc来操作数据库,可以得到jdbc的日志情...

harris2016
2016/07/08
48
0
测试JDBC连接sqlserver2000时的奇葩错误,数据库在其他电脑上,局域网内。

代码部分: public static void main(String[] args) { Connection conn = null; Statement ps = null; ResultSet rs = null; //因为测试远程1433被占用,所以就修改为1443端口。 final Stri......

开怼吥丶
2014/02/11
1K
1
求助...! 请求帮助。jdbc连接sqlserver 2008 出现错误

又出了一个问题 希望大家帮帮忙谢谢! 错误如下 com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“驱动程序收到意外的登录...

刘轩麟
2014/03/20
1K
0
netmon工作原理

参考文献: netmon中解析非1433端口的TDS协议 TDS的解析 在前面一篇博客netmon中解析非1433端口的TDS协议中我们提到了netmon如何去解析非1433端口的TDS。我们是通过在tcp.npl这个文件中添加命...

嗯哼9925
2017/12/27
0
0
sql server 通过sql server 协议进行登录的解析

为了在oneproxy-monitor中实现sql server的前后端登录分离,经过一段时间的研究终于把sql server的登录搞定了。目前可以做到前端通过一个密码连接到中间件oneproxy-for-sqlserver(oneproxy-m...

harris2016
2016/10/19
401
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部