2017-11-20 13 views
-2

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; 
+0

これはオフサイトのリソース、つまりMySQLで使用されている通信プロトコルに関するドキュメントを要求するのと同じです。 WireSharkなどを使って、通常のクライアントとの通信を監視することについて考えることができます。または、MySQLライブラリのソースを入手し、それがどのように動作するかを確認することもできます。 –

答えて

0

私はこれは私が持っていた質問をするための適切な場所ではなかったことを理解しています。しかし、投稿後、私はここGithubの非常に役に立つリポジトリを見つけました:https://github.com/ChuckBell/MySQL_Connector_Arduino リポジトリには、MySQLデータベースに接続するクライアントを書くために必要なすべてのソースコードが含まれています。最も重要なことは、パスワードをハッシュする適切な方法を示しています。

ソフトウェアのライセンスを取得していない通常のクライアントはソースコードを提供せず、パケットトラフィックを監視することでハンドシェイクプロセスの仕組みが制限されています。

関連する問題