MySqlサーバーと通信する際に、クライアントの資格情報パケットがどのように表示されるべきですか?MySqlクライアントの資格情報パケット
マイクロコントローラを使用してAWSのMySqlサーバーと通信するために取り組んでいます。
サーバーへのTCPソケットを開くと、サーバーのグリーティングパケットが受信されます。ただし、クライアントの資格情報パケットに問題があります。
以下のコードで作成したパケットを送信すると、サーバーからの応答はありません。
パケットシーケンス番号を1ではなく0に設定すると、「Got packets out of order」というエラーが表示されます。
Serverの挨拶:
4e0000000a352e362e33372d6c6f67006a3300005871507a363d6e3400ffff0802007fc01500000000000000000000542d2364524c65392d752659006d7973716c5f6e61746976655f70617373776f726400
Serverのエラーメッセージ:
21000001ff8404233038533031476f74207061636b657473206f7574206f66206f72646572
char buf[76];
memset(buf, 0, sizeof(buf));
buf[0] = 0x4C;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x01;
buf[4] = 0x08 | 0x04;
buf[5] = 0x80 | 0x02 | 0x01;
buf[6] = 0x00;
buf[7] = 0x00;
buf[8] = 0xB8;
buf[9] = 0x0B;
buf[10] = 0x00;
buf[11] = 0x00;
buf[12] = 0x35;
char username[] = "username";
size_t usernameLength = sizeof(username);
strncpy(&buf[36],username,usernameLength-1);
buf[48] = 0x00;
char password[] = "password";
size_t passwordLength = sizeof(password);
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1(password, passwordLength-1, hash);
buf[49] = 0x14;
memcpy(&buf[50],&hash[0],20);
strncpy(&buf[70],"dbname",sizeof("dbname")-1);
buf[75] = 0x00;
これはオフサイトのリソース、つまりMySQLで使用されている通信プロトコルに関するドキュメントを要求するのと同じです。 WireSharkなどを使って、通常のクライアントとの通信を監視することについて考えることができます。または、MySQLライブラリのソースを入手し、それがどのように動作するかを確認することもできます。 –