hunting/utils/Servers/README.md
2024-06-15 08:36:44 +08:00

109 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. 服务器协议接口
## 1.1. 概述
   提供HTTP/FTP/SMTP协议的接口数据使用**curl+openssl开源库**二次封装。
## 1.2. 开发过程记录
1. 先编译openssl再编译curlcurl的构建配置需要指定openssl的输出文件目录否则curl将会构建失败
2. http协议指定url指定post数据curl即可按照POST发送请求
3. ftp/ftps协议对应不同的服务器IP必须一一对应
4. curl配置了忽略证书校验未知有什么实际影响
5. 分别对openssl和curl进行了裁剪
## 1.3. 关于MQTT
   curl源码包里并未提供MQTT相关的example网上搜索编码示例未找到。
## 1.4. Servers协议栈模块构建
   使用SifarSDK的构建体系进行编译编译curl时自动关联openssl进行编译。
* 配置文件(此处以/build/cmake/toolchain/linux.toolchain.cmake为示例
```
# ------------ build curl + openssl ------------ start
# 工具链前缀
set(CROSS_COMPILE_PREFIX "")
# 是否启动动态库(预留,暂未支持)
set(CURL_OPENSSL_LIB_SHARED_ENABLE "false")
# ------------ build curl + openssl ------------ end
```
* 项目根目录编译
```
make cmake
cd cmake-shell-linux/
make curl // 由于curl属于三方构建的开源库首次需要先编译curl + openssl
make Servers
```
## 1.5. Example
头文件servser.h
链接库libServers.a,libLog.a
三方依赖库(依次按序) libcurl.a,libssl.a,libcrypto.a
下述以FTP为例子
```
TEST(ServersTest, FtpsUpload)
{
const char *url = "ftp://150.109.112.64/ServersTest";test/bin/ServersTest";
const char *uploadFile = "./ServersTest";
const char *user_password = "ftp_user:Sifar%123456";
ServerParam init = {
.logFlag = LOG_FLAG_ENABLE, // 开启curl日志
.sslVerifyFlag = SSL_VERIFY_DISABLE, //关闭ssl的证书校验功能
};
InitLog(LOG_EASYLOGGING, nullptr); // 初始化自研log库
ServersInit(init); // 初始化Servers模块
LogInfo("servers test start.\n");
ServerFtp *ftp = NewServersFtp(url, FTPS_FLAG_ENABLE); // 创建ftp的参数“句柄”
if (ftp)
{
ftp->user_password = (char *)user_password;
ftp->filePath = (char *)uploadFile;
FtpUpload(ftp); // 使用FTP上传文件
if (SERVERS_CODE_OK == ftp->code)
{
LogInfo("ftp succeed.\n");
}
else
{
LogError("ftp failed, code = %d.\n", static_cast<int>(ftp->code));
}
DeleteServersFtp(ftp); // 释放ftp“句柄”
}
UnInitLog();
}
```
**注意:**
* 必须调用servers_init()函数初始化Servers协议栈库
* 必须使用模块接口创建对应的协议参数“句柄”示例为new_servers_ftp();
* 必须释放协议参数“句柄”;
更多示例详见:/test/component/Servers/src/ServersTest.cpp
## 1.6. 测试
&emsp;&emsp; libServers.a自研代码通过asan测试未存在内存安全相关漏洞。
测试用例详见:/test/component/Servers/src/ServersTest.cpp
* 测试用例编译
```
make cmake
cd cmake-shell-linux/
make ServersTest
```
## 1.7. 总结
* 实现http/https/ftp/ftps/smtp/smtps接口
* 交叉编译测试ftp/ftps上传下载速率大概为1M/s333DE芯片平台
* 裁剪openssl和curl后编译的demo大小 < 1.2M
## 1.8. S530项目配置
* 工具链
```
set(CMAKE_C_COMPILER /opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-gcc)
set(CMAKE_CXX_COMPILER /opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-g++)
```
* curl + openssl
```
# ------------ build curl + openssl ------------ start
set(CROSS_COMPILE_PREFIX "/opt/arm-ca9-linux-uclibcgnueabihf-8.4.01/usr/bin/arm-linux-")
set(CURL_OPENSSL_LIB_SHARED_ENABLE "false")
set(CURL_SHARED_LIBS_PATH "/mnt/mmc")
# ------------ build curl + openssl ------------ end
```