登陆mysql数据库,抓取mysql从建立连接到断开连接的双向流量,如下图所示
python print_tcp_session.py


由上图所示,
MySQL采用的二进制协议,采用的小端字节序
MySQL报文结构由消息头与消息体构成,而消息头又由消息体长度与序列号构成。
消息头为固定长度4个字节,消息头长度占3个字节,序列号占1个字节。
一次失败的认证过程为
服务端-> 客户端:Server Greeting,Packet Number 00
客户端-> 服务端: Login Request,Packet Number 01
服务端->客户端: Response Error,Packet Number02
一次成功的认证过程为
服务端-> 客户端:Server Greeting, Packet Number 00
客户端-> 服务端: Login Request,Packet Number 01
服务端->客户端: Response OK,Packet Number 02
客户端认证报文的消息体组成![三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体 三、TCP/IP协议分析-MySQL认证协议分析 - 碳基体 - 碳基体]()

(1) Server Greeting后,明文传输
客户端权能标志client capabilities 2个字节
+ 客户端全能标志(扩展)extended client capabilities 2个字节
+ 最大消息长度max packet 4个字节
+ 字符编码charset 1个字节
+ 填充值 23个字节(全是00)
+ 用户名 username(不固定长度,以0x00结束)
+密码串长度(1个字节)
+密码的加密串(不固定长度,由密码串长度决定)
+ 数据库名称schema(不固定长度,以0x00结束) #由客户端权能标志CLIENT_CONNECT_WITH_DB决定是否返回
+其他可选
(2) Server Greeting后,SSL传输
客户端权能标志2个字节
+ 客户端全能标志(扩展)2个字节
+ 最大消息长度 4个字节
+ 字符编码 1个字节
+ 填充值 23个字节(全是00)
其中客户端与服务端握手后,后续是否切换到ssl传输,由客户端全能标志位决定


服务端响应报文的消息体组成
(1)成功响应

状态标识(1个字节) #00表示成功/FF表示失败
+ 受影响的行数 变长
+ 索引ID 变长
+ 服务器状态 2个字节
+ 告警计数 2个字节
+ 服务器消息 变长
(2)失败响应

状态标识 1个字节 #00表示成功/FF表示失败
+ 错误码 2个字节
+ # 1个字节 固定为 0x23
+ sql 状态 5个字节
+错误消息(不固定长度)
参考: