CTP-GetSystemInfo


获取AES加密和RSA加密的终端信息。该函数来自采集终端信息的动态链接库(安卓版的函数名和使用方法较windows和linux有所区别,请注意阅读API包相关说明文档)。

仅中继模式下的客户端需要调用此函数来采集信息。中继需要将客户端采集到的信息上报给CTP。

直连模式下,登录的时候自动采集并上报终端信息,所以无需调用。

采集库在win、linux、android上不是线程安全的,不要并发调用,ios是线程安全的

采集库暂时不采集IPv6地址

1. 函数原型

int CTP_GetSystemInfo(char* pSystemInfo, int& nLen);

2. 参数

pSystemInfo:空间需要调用者自己分配至少270个字节。

要注意这并不是一个字符串,而是数组,因为多次加密后可能断串,使用memcpy拷贝值而不是strcpy

nLen:获取到的采集信息的长度。

3. 返回

0 为正确,非0为错误。

具体哪个采集项有问题需要做如下判断:

windows返回值定义:
    从低位开始分别标示 终端信息 ->系统盘分区信息
    返回值 & (0x01 << 0) 不为0 表示终端类型未采集到
    返回值 & (0x01 << 1) 不为0 表示 信息采集时间获取异常
    返回值 & (0x01 << 2) 不为0 表示ip 获取失败  (采集多个相同类型信息的场景有一个采集到 即表示采集成功)
    返回值 & (0x01 << 3) 不为0 表示mac 获取失败
    返回值 & (0x01 << 4) 不为0 表示 设备名 获取失败
    返回值 & (0x01 << 5) 不为0 表示 操作系统版本 获取失败
    返回值 & (0x01 << 6) 不为0 表示 硬盘序列号 获取失败
    返回值 & (0x01 << 7) 不为0 表示 CPU序列号 获取失败
    返回值 & (0x01 << 8) 不为0 表示 BIOS 获取失败
    返回值 & (0x01 << 9) 不为0 表示 系统盘分区信息 获取失败
Linux返回值定义:
    从低位开始分别标示 终端信息 -> BIOS信息
    返回值 & (0x01 << 0) 不为0 表示终端类型未采集到
    返回值 & (0x01 << 1) 不为0 表示 信息采集时间获取异常
    返回值 & (0x01 << 2) 不为0 表示ip 获取失败  (采集多个相同类型信息的场景有一个采集到 即表示采集成功)
    返回值 & (0x01 << 3) 不为0 表示mac 获取失败
    返回值 & (0x01 << 4) 不为0 表示 设备名 获取失败
    返回值 & (0x01 << 5) 不为0 表示 操作系统版本 获取失败
    返回值 & (0x01 << 6) 不为0 表示 硬盘序列号 获取失败
    返回值 & (0x01 << 7) 不为0 表示 CPU序列号 获取失败
    返回值 & (0x01 << 8) 不为0 表示 BIOS 获取失败

4. 调用示例

char pSystemInfo[344];
int len = 0;
int i = CTP_GetSystemInfo(pSystemInfo, len);

// windows:
    if( ( i & ( 0x01 << 0) ) != 0 ) std::cout << " 终端类型未采集到" << std::endl;
    if( ( i & ( 0x01 << 1) ) != 0 ) std::cout << " 信息采集时间获取异常" << std::endl;
    if( ( i & ( 0x01 << 2) ) != 0 ) std::cout << " ip 获取失败  (采集多个相同类型信息的场景有一个采集到 即表示采集成功)" << std::endl;
    if( ( i & ( 0x01 << 3) ) != 0 ) std::cout << " mac 获取失败" << std::endl;
    if( ( i & ( 0x01 << 4) ) != 0 ) std::cout << " 设备名 获取失败" << std::endl;
    if( ( i & ( 0x01 << 5) ) != 0 ) std::cout << " 操作系统版本 获取失败" << std::endl;
    if( ( i & ( 0x01 << 6) ) != 0 ) std::cout << " 硬盘序列号 获取失败" << std::endl;
    if( ( i & ( 0x01 << 7) ) != 0 ) std::cout << " CPU序列号 获取失败" << std::endl;
    if( ( i & ( 0x01 << 8) ) != 0 ) std::cout << " BIOS 获取失败" << std::endl;
    if( ( i & ( 0x01 << 9) ) != 0 ) std::cout << " 系统盘分区信息 获取失败" << std::endl;
    
// linux:
    if( ( i & (0x01 << 0) ) != 0 ) std::cout << " 终端类型未采集到" << std::endl;
    if( ( i & (0x01 << 1) ) != 0 ) std::cout << " 信息采集时间获取异常" << std::endl;
    if( ( i & (0x01 << 2) ) != 0 ) std::cout << " ip 获取失败  (采集多个相同类型信息的场景有一个采集到 即表示采集成功) " << std::endl;
    if( ( i & (0x01 << 3) ) != 0 ) std::cout << " mac 获取失败" << std::endl;
    if( ( i & (0x01 << 4) ) != 0 ) std::cout << " 设备名 获取失败" << std::endl;
    if( ( i & (0x01 << 5) ) != 0 ) std::cout << " 操作系统版本 获取失败" << std::endl;
    if( ( i & (0x01 << 6) ) != 0 ) std::cout << " 硬盘序列号 获取失败" << std::endl;
    if( ( i & (0x01 << 7) ) != 0 ) std::cout << " CPU序列号 获取失败" << std::endl;
    if( ( i & (0x01 << 8) ) != 0 ) std::cout << " BIOS 获取失败" << std::endl;

5. FAQ

终端采集到的信息,保存到数据库里后显示为乱码,怎么办?

可以使用BASE64转码成可见字符后再存储。

在windows下调用该函数后,控制台窗口打印出一些日志,提示找不到wmic之类的信息,这个有关系吗?

有关系,采集函数需要调用相关windows组件来采集设备信息,如果没有对应组件,则会采集不到相应信息,不符合监管要求。

在linux下调用该函数后,控制台窗口会输出一些报错日志,提示没有权限之类的错误,这个有关系吗?

有关系,采集函数需要调用linux命令来采集设备信息,如果没有对应权限,则会采集不到相应信息,不符合监管要求。


< 前页 回目录 后页 >