tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

引き続きpacketについて

昨日見つけたmysql-snifferかProxySQLあたりでパケットをどう解析しているか見れば良さそう。

golangでも実装している人がいる。

https://github.com/zorkian/mysql-sniffer

ココらへん見るとcom-queryとしてクエリが取れてて、connection phaseとcommand phaseを区別している。

書いてて思ったのだが、connection phaseとcommand phaseを区別できるかといっているのは5byte目のcommand phaseの31種類のクエリタイプの部分でこの2phaseが判断できるかということで、完全にパケットをパースすればわかるのは当然のこと。

パースしてから不正なパケットかクエリ化判断するのは避けたいので、5byte目が03で、それ以降を文字列として読んでselect, update, ...が出てくるかで簡単に判断したい。stmt関連もそんな感じでルール書いてしまえば行けるだろうか?

パケット見ているとcom_delayed_insertとかもあってなんじゃこれってのがいくつかある

https://dev.mysql.com/doc/internals/en/command-phase.html

結局protocolはいくつかあれどpacketとして流れるのは2phaseのパケットとresponse packetだけだと思う。 もしかして44種類のパケットパースすれば全部?

.