MySql客户端的凭据包

时间:2017-11-20 20:23:10

标签: mysql c

与MySql服务器通信时,客户端的凭据包应该如何显示?

我正在使用微控制器与AWS上的MySql服务器进行通信。

一旦打开到服务器的TCP套接字,我就会收到服务器的问候数据包。但是,我在使用客户端的凭据包时遇到问题。

当我发送我在下面的代码中创建的数据包时,我没有收到服务器的响应。

作为旁注,我确实收到了错误"收到了无序的数据包"当我将数据包序列号设置为0而不是1.任何想法?

服务器问候语:

4e0000000a352e362e33372d6c6f67006a3300005871507a363d6e3400ffff0802007fc01500000000000000000000542d2364524c65392d752659006d7973716c5f6e61746976655f70617373776f726400

服务器的错误消息:

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;

1 个答案:

答案 0 :(得分:0)

我知道这不是一个问我问题的合适地方。但是,在发布之后,我确实在Github上找到了一个非常有用的存储库:https://github.com/ChuckBell/MySQL_Connector_Arduino 存储库包含编写连接到MySQL数据库的客户端所需的所有源代码。最重要的是,它显示了散列密码的正确方法。

我希望这对其他人有帮助,因为Oracle提供的MySQL文档非常少,除非您许可软件,常规客户端不提供源代码,并且观察数据包流量对握手过程的工作方式提供了有限的深入了解。