Chinaunix

标题: 怎样确认一个数据包是 mysql 数据包? [打印本页]

作者: FightForWin    时间: 2011-07-18 15:12
标题: 怎样确认一个数据包是 mysql 数据包?
hi, 大家好.

有没有办法确认在网络上抓的包是一个 mysql 数据包, 比如是 mysql 登录或其他什么的。

我用 wireshark 抓包, 三次握手完他就知道数据包使用的协议是 mysql , 请问是用什么方法。 谢谢。
作者: 一路征程一路笑    时间: 2011-07-18 15:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: FightForWin    时间: 2011-07-18 15:44
但是端口变了呢?
mysql 服务器的端口并一定非用 3306 不可吧?
作者: 一路征程一路笑    时间: 2011-07-18 16:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: FightForWin    时间: 2011-07-18 22:28
那有方法判断数据包是否为 mysql 包吗?
mysql 协议有没有特殊的字段指明? 我看了 mysql 协议, 没看出什么来.
谢谢。
作者: 一路征程一路笑    时间: 2011-07-18 22:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: phphp    时间: 2011-07-25 23:19
本帖最后由 phphp 于 2011-07-25 23:22 编辑

对于新建请求,TCP三次握手后是服务端(mysqld)主动给客户端发送握手包,其中就包含mysql版本串(如mysql-5.1.58),可用这个做为特征。
  1. Handshake Initialization Packet
  2. From server to client during initial handshake. The follow is taken from sql/sql_acl.cc:
  3. Bytes                        Name
  4. -----                        ----
  5. 1                            protocol_version
  6. n (Null-Terminated String)   server_version//看这里
  7. 4                            thread_id
  8. 8                            scramble_buff
  9. 1                            (filler) always 0x00
  10. 2                            server_capabilities
  11. 1                            server_language
  12. 2                            server_status
  13. 2                            server capabilities (two upper bytes)
  14. 1                            length of the scramble
  15. 10                            (filler)  always 0
  16. n                            rest of the plugin provided data (at least 12 bytes)
  17. 1                            \0 byte, terminating the second part of a scramble
复制代码
对于已有连接上的包,可尝试用mysql协议去翻译,能正确识别就是mysql数据包。

参考:http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2