实战解析丨如何对Mysql连接请求的tcpdump内容进行分析
摘要:tcpdump是通过拦截发送和收到的网络连接中的TCP/IP和其他数据包,通过tcpdump工具帮助我们分析三次握手或者四次挥手的数据包情况,就能很容易的帮助我们分析出网络在哪一个步骤出的问题。
tcpdump是通过拦截发送和收到的网络连接中的TCP/IP和其他数据包,通常在我们WEB开发中,我们提供http服务或者调用http服务的过程中经常会遇到read time out/connect reset等网络异常信息,通过tcpdump工具帮助我们分析三次握手或者四次挥手的数据包情况,就能很容易的帮助我们分析出网络在哪一个步骤出的问题。
接下来我们通过分析Mysql的连接请求,来了解网络的请求过程和协议的具体内容。
0x0000: 4500 0039 3881 4000 4006 7fcf c0a8 00d7
0x0010: c0a8 0047 a034 0cea 860b e11e c2fc 7f64
0x0020: 8018 296a 2b0e 0000 0101 080a 2de4 786b
0x0030: 3a4f 5980 0100 0000 0e
这样一份报文通常有3部分组成
1. IP报头

2. TCP协议

3. mysql协议

逐行分析如下
4500 0039 3881 4000 4006 7fcf c0a8 00d7
- 45 - 4 为Version 5 为Header Length,那么这个协议头的长度就是5字节
我们读出接下来的5字节 00 0039 3881
- 00 Type Of Service标识优先级 延迟要求 吞吐量信息等
- 0039 Total Length 换算十进制结果是 57 与我们获取到的结果的字节数量一致
- 3881 IP报文头的Identification
- 4000 - 为IP Flags和Fragment Offset
- 000 IP Flags
0 0100 0000 0000 Fragment :相对0原始报文头的偏移量
- 4006 - 40 为TTL 一个协议访问的生存周期 06 代表TCP协议
- 7fcf - Header Checksum 首部查错
- c0a8 00d7 - 源主机IP地址段 c0(192) a8(168) 00(0) d7 (215)
c0a8 0047 a034 0cea 860b e11e c2fc 7f64
- c0a8 0047 - 代表目标主机的IP地址 (到这里IP协议部分就结束了,恰好是20字节,接下来就要进入TCP部分解析了)
- a034 - 源端口号 转换十进制 41012
- 0cea - 目标端口 转换十进制 3306
- 860b e11e - 序列号 2248925470
- c2fc 7f64 - 确认号 3271327588
8018 296a 2b0e 0000 0101 080a 2de4 786b
- 80 - 8表示偏移 Offset 0 为保留位
- 18 - tcp的传说状态 1 Ack 8表示PUSH 这大概就是第一行 [P.]的由来把
- 296a - 滑动窗口的大小10602
- 2b0e - TCP部分的Checksum
- 0000 - TCP部分的紧急指针
到Options部分
- 0101 - NOP填错没有实际意义
- 080a - 代表开启timestamp
- 2de4 786b - 对应的具体时间戳的值769947755
3a4f 5980 0100 0000 0e
- 3a4f 5980 - 还是时间戳的一部分 ecr值
- 0100 00 - 表示具体内容长度1字节
- 00 - 表示seqid 递增
- 0e - 通过查询mysql语义,代表 COM_PING 测试联通性
以下列举了所有在客户端请求部分16进制数代表的mysql语义,通过不同的语义需要进行不同的转换才能获得想要的内容,这里就不列举更多例子了
0x00 COM_SLEEP (内部线程状态)
0x01 COM_QUIT 关闭连接
0x02 COM_INIT_DB 切换数据库
0x03 COM_QUERY SQL查询请求
0x04 COM_FIELD_LIST 获取数据表字段信息
0x05 COM_CREATE_DB 创建数据库
0x06 COM_DROP_DB 删除数据库
0x07 COM_REFRESH 清除缓存
0x08 COM_SHUTDOWN 停止服务器
0x09 COM_STATISTICS 获取服务器统计信息
0x0A COM_PROCESS_INFO 获取当前连接的列表
0x0B COM_CONNECT (内部线程状态)
0x0C COM_PROCESS_KILL 中断某个连接
0x0D COM_DEBUG 保存服务器调试信息
0x0E COM_PING 测试连通性
0x0F COM_TIME (内部线程状态)
0x10 COM_DELAYED_INSERT (内部线程状态)
0x11 COM_CHANGE_USER 重新登陆(不断连接)
0x12 COM_BINLOG_DUMP 获取二进制日志信息
0x13 COM_TABLE_DUMP 获取数据表结构信息
0x14 COM_CONNECT_OUT (内部线程状态)
0x15 COM_REGISTER_SLAVE 从服务器向主服务器进行注册
0x16 COM_STMT_PREPARE 预处理SQL语句
0x17 COM_STMT_EXECUTE 执行预处理语句
0x18 COM_STMT_SEND_LONG_DATA 发送BLOB类型的数据
0x19 COM_STMT_CLOSE 销毁预处理语句
0x1A COM_STMT_RESET 清除预处理语句参数缓存
0x1B COM_SET_OPTION 设置语句选项
0x1C COM_STMT_FETCH 获取预处理语句的执行结果
在mysql请求过程中还有产生其他类型协议包数据,故需要我们对mysql请求过程有基本的认识。
mysql 请求过程介绍
1.建立tcp连接三次握手
2.与Mysql服务器建立连接
- Server --> Client: Handshake(握手)
1字节:协议版本号
NullTerminatedString:数据库版本信息
4字节:连接MySQL Server启动的线程ID
8字节:挑战随机数,用于数据库认证
1字节:填充值(0x00)
2字节:用于与客户端协商通讯方式
1字节:数据库的编码
2字节:服务器状态
13字节:预留字节
12字节:挑战随机数,用于数据库认证
1字节:填充值(0x00)
- Client --> Server: Authentication (认证)
4字节:用于与客户端协商通讯方式
4字节:客户端发送请求报文时所支持的最大消息长度值
1字节:标识通讯过程中使用的字符编码
23字节:保留字节
NullTerminatedString:用户名
LengthEncodedString:加密后的密码
NullTerminatedString:数据库名称(可选)
- Server --> Client: 返回认证结果包
3.认证通过以后,服务器端接收客户端命令包,返回对应的响应包
实战解析丨如何对Mysql连接请求的tcpdump内容进行分析的更多相关文章
- php和mysql连接方式(短 长 池)
一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...
- MySQL 主从复制实战解析
前言:前面几篇文章讲解了在应用层读写分离的配置和使用,这篇文章将来个主从复制的实战解析. 说明:主从复制,读写分离结构图 原理图 主库生成一个线程: Binlog Dump线程 1.此线程运行在主库, ...
- Mysql 连接路径 url 参数解析
1.mysql - url 参数解析 url:jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8 u ...
- GJM : Unity3D 常用网络框架与实战解析 【笔记】
Unity常用网络框架与实战解析 1.Http协议 Http协议 存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...
- Mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'
在远程连接mysql的时候,连接不上,出现如下报错:Lost connection to MySQL server at 'waiting for initial communication pack ...
- mysql连接错误:Cannot get hostname for your address
问题 环境:win7 + 64Bit + 本地mysql5.6 问题:navicat连接本地mysql数据库,提示“Cannot get hostname for your address”,但是连接 ...
- 解决mysql连接linux上mysql服务器的问题
在远程连接mysql的时候,连接不上,出现如下报错:Lost connection to MySQL server at 'waiting for initial communication pack ...
- bind9+dlz+mysql连接断开问题
前言 关于bind-dlz介绍:http://bind-dlz.sourceforge.net/ DLZ(Dynamically Loadable Zones)与传统的BIND9不同,BIND的不足之 ...
- 【DataBase】mysql连接错误:Cannot get hostname for your address
问题 环境:win7 + 64Bit + 本地mysql5.6 问题:navicat连接本地mysql数据库,提示“Cannot get hostname for your address”,但是连接 ...
- 使用navicat连接mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'
使用navicat时,报错截图如下: 原因分析: mysql开启了DNS的反向解析功能,这样mysql对连接的客户端会进行DNS主机名查找. mysql处理客户端解析过程: 当mysql的client ...
随机推荐
- 01-spfile和pfile的区别,生成,加载和修复
oracle数据库的配置文件指的是系统在启动到"nomount"阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件. 不同的数据库配 ...
- jq工具及其常用用法
近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此. 在处理JSON数据时,我们经常需要在命令行中进行过滤.查询和编辑的操 ...
- 15. 从零开始编写一个类nginx工具, 如果将nginx.conf转成yaml,toml,json会怎么样
wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...
- [WPF]浅析资源引用(pack URI)
WPF中我们引用资源时常常提到一个概念:pack URI,这是WPF标识和引用资源最常见的方式,但不是唯一的方式.本文将介绍WPF中引用资源的几种方式,并回顾一下pack URI标识引用在不同位置的资 ...
- gametime
这道题是动态调试的考点,看了wp才有思路 像这样的游戏题一定要搞清楚他的具体游戏流程才能更好的做出来,然后根据他的思路去改掉相关的判断就可以了 攻防世界逆向高手题之gametime_攻防世界 game ...
- 在Window系统中安装VMware虚拟机搭建Linux服务器
1.什么是VMware Workstation VMware Workstation Pro是一款桌面虚拟化软件.我们可以通过Workstation Pro在Windows或Linux PC上运行多个 ...
- 确定性有限状态自动机 DFA
前言 在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机.对于一个给定的属于该自动机的状态和一 ...
- 平稳扩展:可支持RevenueCat每日12亿次API请求的缓存
平稳扩展:可支持RevenueCat每日12亿次API请求的缓存 目录 平稳扩展:可支持RevenueCat每日12亿次API请求的缓存 低延迟 建立连接池 故障检测 Up and warm 对故障做 ...
- 海量电商数据与用友YS系统数据对接案例
案例背景 客户是历史比较悠久的企业.企业内部用的系统多达十几套,专门成立信息化公司进行数字化转型,第一期需求系统旺店通的ERP以及旺店通的WMS并且启用京东的沧海外仓. 在选型ERP用友ERP和金蝶E ...
- 10个PPT制作实用小技巧
当制作PPT时,您可以使用一些实用的小技巧来提升演示效果和工作效率.以下是10个PPT制作实用小技巧的详细描述: 第一.选择合适的模板 选择合适的PPT模板非常重要,因为模板可以决定整个演示的风格和视 ...