上网行为管理agent(开源产品deskvideosys代理)
接上一篇終端上網行為管理開源框架己經介紹的服務器端開源代碼,其實同時還開源了agent端的代碼,agent使用的是vc++,能運行在windows7以上操作系統上,目前代碼還不是太多,主要是收集了pc端的程序運行信息,我給大家大致解讀下,具體的源碼地?址為boxiaojishu/windata (github.com)
代碼中先是實現了一個公共讀取windows操作系統的硬件信息
bool getDevcieInfo(char* cmd, list<string>& resultList) {
?? ?char buffer[BUFFER_SIZE];
?? ?bool ret = false;
?? ?FILE* pipe = _popen(cmd, "r"); //打開管道,并執行命令
?? ?if (!pipe)
?? ?return ret;
?? ?const char* name[20] = { "UUID","ProcessorId","SerialNumber" };
?? ?int len0 = strlen(name[0]), len1 = strlen(name[1]), len2 = strlen(name[2]);
?? ?bool isOk = false;
?? ?while (!feof(pipe))
?? ?{
?? ?if (fgets(buffer, BUFFER_SIZE, pipe))
?? ?{
?? ?if (strncmp(name[0], buffer, len0) == 0
?? ?|| strncmp(name[1], buffer, len1) == 0
?? ?|| strncmp(name[2], buffer, len2) == 0) // 能夠正確獲取信息
?? ?{
?? ?isOk = true;
?? ?continue;
?? ?}
?? ?if (isOk == false
?? ?|| strcmp("\r\n", buffer) == 0) //去掉windows無用的空行
?? ?{
?? ?continue;
?? ?}
?? ?ret = true;
?? ?resultList.push_back(string(buffer));
?? ?}
?? ?}
?? ?_pclose(pipe); // 關閉管道
?? ?return ret;
}
接著實現了一個讀取主板UUID信息,如果主板UUID不存在,使用CPUID、BIOS序列號、硬盤序列號生成機器指紋
代碼如下:
string getDeviceFingerPrint() {
?? ?list<string> strList;
?? ?list<string>::iterator it;
?? ?hash<string> str_hash;
?? ?size_t num;
?? ?char tmp[11] = { 0 };
?? ?// 主板UUID存在,就使用主板UUID生成機器指紋
?? ?if (getDevcieInfo((char*)"wmic csproduct get UUID", strList)
?? ?&& (*strList.begin()).compare("FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF\r\n") != 0)
?? ?{
?? ?//cout << *strList.begin() << endl;
?? ?cout << (*strList.begin()).substr(0, (*strList.begin()).length() - 4) << endl;
?? ?num = str_hash(*strList.begin());
?? ?sprintf_s(tmp, "%u", num);
?? ?//cout << string(tmp) << endl;
?? ?return string((*strList.begin()).substr(0, (*strList.begin()).length() - 4));
?? ?}
?? ?// 主板UUID不存在,使用CPUID、BIOS序列號、硬盤序列號生成機器指紋
?? ?string otherStr("");
?? ?strList.clear();
?? ?if (getDevcieInfo((char*)"wmic cpu get processorid", strList)) {
?? ?//otherStr.append((*strList.begin()).pop_back());
?? ?otherStr.append((*strList.begin()).substr(0, (*strList.begin()).length() - 4));
?? ?cout << *strList.begin() << endl;
?? ?}
?? ?cout << otherStr << endl;
?? ?strList.clear();
?? ?if (getDevcieInfo((char*)"wmic bios get serialnumber", strList)) {
?? ?otherStr.append((*strList.begin()).substr(0, (*strList.begin()).length() - 9));
?? ?cout << *strList.begin() << endl;
?? ?cout << otherStr << endl;
?? ?}
?? ?strList.clear();
?? ?if (getDevcieInfo((char*)"wmic diskdrive get serialnumber", strList)) {
?? ?string allDiskNum("");
?? ?// 硬盤可能有多塊
?? ?for (it = strList.begin(); it != strList.end(); it++)
?? ?{
?? ?allDiskNum.append(*it);
?? ?}
?? ?cout << *strList.begin() << endl;
?? ?otherStr.append((*strList.begin()).substr(0, (*strList.begin()).length() - 4));
?? ?}
?? ?cout << otherStr << endl;
?? ?num = str_hash(otherStr);
?? ?sprintf_s(tmp, "%u", num);
?? ?//cout << string(tmp) << endl;
?? ?return string(otherStr);
}
先解讀到這里,后面的代碼大家先自己看,待有空再來解讀
總結
以上是生活随笔為你收集整理的上网行为管理agent(开源产品deskvideosys代理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aps助油田服务与设备行业实现数字化
- 下一篇: stm32中UART和USART的区别