mysql 协议的FieldList命令包及解析

git

https://github.com/sea-boat/mysql-protocol

概况

当mysql客户端使用show column命令时即对应这个FieldList命令包。

mysql通信报文结构

类型 名字 描述
int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头
int<1> 序列号
string payload 报文体,长度即为前面指定的payload长度

FieldList命令包

Payload

1              [04] COM_FIELD_LIST
string[NUL]    table
string[EOF]    field wildcard

更多详情 : http://dev.mysql.com/doc/internals/en/com-field-list.html

FieldList命令包操作

  1. FieldList命令包类
/**
 *
 * <pre><b>mysql field list packet.</b></pre>
 * @author
 * <pre>seaboat</pre>
 * <pre><b>email: </b>[email protected]</pre>
 * <pre><b>blog: </b>http://blog.csdn.net/wangyangzhizhou</pre>
 * @version 1.0
 * @see http://dev.mysql.com/doc/internals/en/com-field-list.html
 */
public class FieldListPacket extends MySQLPacket {
    public byte flag;
    public byte[] table;
    public byte[] fieldWildcard;

    @Override
    public void read(byte[] data) {
        MySQLMessage mm = new MySQLMessage(data);
        packetLength = mm.readUB3();
        packetId = mm.read();
        flag = mm.read();
        table = mm.readBytesWithNull();
        fieldWildcard = mm.readBytes();
    }

    @Override
    public void write(ByteBuffer buffer) {
        BufferUtil.writeUB3(buffer, calcPacketSize());
        buffer.put(packetId);
        buffer.put(COM_FIELD_LIST);
        BufferUtil.writeWithNull(buffer, table);
        buffer.put(fieldWildcard);
    }

    @Override
    public int calcPacketSize() {
        int i = 1;
        i += table.length + 1;
        i += fieldWildcard.length;
        return i;
    }

    @Override
    protected String getPacketInfo() {
        return "MySQL Field List Packet";
    }

}
时间: 2024-07-28 22:26:30

mysql 协议的FieldList命令包及解析的相关文章

mysql协议分析2---认证包

主人看到navicat和mysql在那嘻嘻哈哈,眉来眼去的,好不快乐,忽然也想自己写个程序,直接去访问Mysql,虽然现在已经有很多现成的中间件可以直接拿来用了,程序只要负责写sql语句就行了,但是主人想要自己通过mysql协议直接和mysql通讯,一窥究竟.于是主人找到Mysql说:亲爱的mysql,我以前和你交流总要通过第三方的驱动在中间传话,总感觉我们之间还有一个隔阂,有些话也不方便说,我现在有些心里话想直接和你交流...你说行吗? mysql说:当然行啊,mysql受宠若惊,要和我打交道

Go命令行参数解析flag包

go语言提供的flag包可以解析命令行的参数,代码: package main import ( "flag" "fmt" ) func main() { //第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明 username := flag.String("name", "", "Input your username") flag.Parse() fmt.Println("Hell

MySQL协议分析2

MySQL协议分析 议程 协议头 协议类型 网络协议相关函数 NET缓冲 VIO缓冲 MySQL API 协议头 ● 数据变成在网络里传输的数据,需要额外的在头部添加4 个字节的包头. . packet length(3字节), 包体的长度 . packet number(1字节), 从0开始的递增的 ● sql “select 1” 的网络协议是? 协议头 ● packet length三个字节意味着MySQL packet最大16M大于16M则被分包(net_write_command, m

利用Wireshark截取数据包,并对数据包进行解析

利用Wireshark截取ICMP数据包,并对数据包进行解析 wireshark安装文件下载地址:http://yunpan.cn/QiHGK5sPtWRyN (提取码:0bbc) 安装步骤: 解压文件之后,在\wireshark-win32-1.4.9中文版\文件夹中找到安装文件,双击即可安装. 安装完成之后,双击wireshark图标即可启动,界面如下: 抓包步骤: 1.点击开始按钮列出可以抓包的接口: 2.点击选项可以配置抓包参数: 3.配置完成点击开始,即可开始抓包: 4.点击停止完成抓

第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. 设置好Monkey的CLASSPATH环境变量以指定"/system/framework /framework/monkey.jar"后,/system/bin/monkey这个shell脚本就会通

MySQL中EXPLAIN解释命令详解

MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句. 1.EXPLAIN的使用方法:在select语句前加上explain就可以了. 如:explain select surname,first_name form a,b where a.id=b.id 2.EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型.从最好到最

MySQL中EXPLAIN解释命令

explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.uid,s.username,s.name,f.email,f.mobile,f.phone,f.postalcode,f.addressFROM uchome_space ASs,uchome_spacefieldASfWHERE 1 AND s.groupid=0AND s.uid=f.uid 1. i

python+scapy 抓包与解析

1. 简介 最近一直在使用做流量分析,今天把 scapy 部分做一个总结. python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用. 2. 用法实例 安装 作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux. 推荐下载 pip,直接:(当然得在 su 权限下) pip install scapy 在 terminal 中输入 scapy, 如果有下面形式即安装好了

MySQL 5.6.35 RPM包方式的安装

Mysql 5.6.35版本 RPM包方式的安装 一.删除旧的RPM包: 查询 rpm -qa | grep -i mysql如果有需要先删除rpm -ev mysql-libs- --nodepsrpm -e --nodeps mysql-devel-5.1.73rpm -e --nodeps mysql-5.1.73*加--nodeps是强力删除 二.在安装要确保先禁用selinux,关闭防火墙iptables 禁用selinux临时禁用命令setenforce 0 永久禁用使用文本编辑工具