From bcdc8d20486027a3ed0957389eb8537b2cc1b7a7 Mon Sep 17 00:00:00 2001 From: “pengxuanzheng” Date: Mon, 20 Jun 2022 03:13:02 +0000 Subject: ✨ feat: 增加 识别influxdb的lua脚本 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/CMakeLists.txt | 3 + example/luatest/conf/default.conf | 11 ++- example/luatest/pcap/influxdb.pcap | Bin 0 -> 354 bytes example/luatest/script/checktools.conf | 5 + .../luatest/script/feature_X-Influxdb-Build.lua | 48 ++++++++++ example/test.cpp | 104 +++++++++++++++++++++ 6 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 example/luatest/pcap/influxdb.pcap create mode 100644 example/luatest/script/checktools.conf create mode 100644 example/luatest/script/feature_X-Influxdb-Build.lua create mode 100644 example/test.cpp diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index e672a03..072dc60 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.5) project (single_thread) project (multithread) +project (testlua) link_directories("${CMAKE_BINARY_DIR}/src") link_libraries(tsglua pthread) @@ -9,7 +10,9 @@ add_definitions(-g -W -Wall) add_executable(single_thread single_thread.cpp) add_executable(multithread multithread.cpp) +add_executable(testlua test.cpp) add_dependencies(single_thread ${lib_name}_shared) add_dependencies(multithread ${lib_name}_shared) +add_dependencies(testlua ${lib_name}_shared) add_subdirectory(luatest) \ No newline at end of file diff --git a/example/luatest/conf/default.conf b/example/luatest/conf/default.conf index ce3ce46..3307afd 100644 --- a/example/luatest/conf/default.conf +++ b/example/luatest/conf/default.conf @@ -1,8 +1,15 @@ #file_type 1:text_file 2:pcap_file +# thread_num 1 +# feature weixinnum +# lib ./lib/libc_handle_weixinnum.so +# script ./script/handle_weixinnum.lua +# input ./pcap/test.pcap +# file_type 2 + thread_num 1 -feature weixinnum +feature X-Influxdb-Build lib ./lib/libc_handle_weixinnum.so script ./script/handle_weixinnum.lua -input ./pcap/test.pcap +input ../influxdb.pcap file_type 2 diff --git a/example/luatest/pcap/influxdb.pcap b/example/luatest/pcap/influxdb.pcap new file mode 100644 index 0000000..1bf563f Binary files /dev/null and b/example/luatest/pcap/influxdb.pcap differ diff --git a/example/luatest/script/checktools.conf b/example/luatest/script/checktools.conf new file mode 100644 index 0000000..2f651f5 --- /dev/null +++ b/example/luatest/script/checktools.conf @@ -0,0 +1,5 @@ +[script] +feature_X-Influxdb-Build.lua + +[data] +influxdb_cs_01.pcap diff --git a/example/luatest/script/feature_X-Influxdb-Build.lua b/example/luatest/script/feature_X-Influxdb-Build.lua new file mode 100644 index 0000000..4a87c7f --- /dev/null +++ b/example/luatest/script/feature_X-Influxdb-Build.lua @@ -0,0 +1,48 @@ +local data = TSG.data --TSG.data 获取待处理数据 +local data_len = string.len(data) +local feature = "X-Influxdb-Build: " --待识别的特征 +local offset = 4 -- 字符串长度所占位数 +local locate = 0 -- 字符串中当前正在处理的位置 + + +-- 查找字符串X-Influxdb-Build位置 +if data == nil then + --print("TSG.data is nil") + return 1, false +else + --print("TSG.data len:"..data_len) +end + +-- local _start, _end = TSG.memmem(data, data_len, feature, string.len(feature)) +-- if not _end then +-- --print("false, mememem not find feature.") +-- return 1, false +-- end +local _start, _end = string.find(data, feature) +if not _end then + return 1, false +end +--print("_start:".._start.."_end:".._end) + +locate = _end +-- 查找结尾标识符0d0a,这个是windows下的\r\n换行符 +local cur_data = string.sub(data, _end+1, -1) +local newline = "\r\n" +_start, _end = TSG.memmem(cur_data, data_len-locate, newline, 2) +if not _end then + print("false, not find newline.") + return 1, false +end + +-- 获取x_influxdb_build对应值字符串 +local x_influxdb_build = string.sub(cur_data, 0, _start) +local x_influxdb_build_len = _start + +-- x_influxdb_build对应值字符串是否可以转换为数字 +if tostring(x_influxdb_build) then + --print("x_influxdb_build_len:"..x_influxdb_build_len.."\nx_influxdb_build:"..x_influxdb_build) + return x_influxdb_build_len, x_influxdb_build +else + --print("false, not to string.") + return 1, false +end diff --git a/example/test.cpp b/example/test.cpp new file mode 100644 index 0000000..dcba390 --- /dev/null +++ b/example/test.cpp @@ -0,0 +1,104 @@ +/************************************************************************* + > File Name: main.c + > Author: pxz + > Created Time: Thu 09 Jul 2020 07:08:40 AM CST + ************************************************************************/ +extern "C" +{ + #include + #include + #include +} +#include"../include/tsg_lua_interface.h" + +static char *get_file_to_buffer(const char *file, size_t *len) +{ + FILE *fp = fopen(file, "r"); + if (fp) + { + fseek(fp, 0, 2); + *len = ftell(fp); + fseek(fp, 0, 0); + if (*len == 0) + { + fclose(fp); + return NULL; + } + char *buff = (char *)malloc((*len) + 1); + int num = fread(buff, 1, *len, fp); + if (num != 0) + { + buff[num] = 0; + *len = num - 1; + fclose(fp); + return buff; + } + free(buff); + fclose(fp); + } + return NULL; +} + +int main(int argc, const char *argv[]) +{ + if (argc < 3) + { + printf("please input datafile and script."); + return -1; + } + const char *filename = argv[1]; + const char *script = argv[2]; + tsg_lua_handle L = NULL; + + size_t data_len = 0; + char *data = get_file_to_buffer(filename, &data_len); + + /* 初始化1个虚拟机 */ + printf("\n*********************tsg_lua_vm_create************************\n"); + printf("[C]:call tsg_lua_vm_create...\n"); + L = tsg_lua_vm_create(); + if (L == NULL) + { + printf("[C]:call tsg_lua_vm_create failed.\n"); + free(data); + return -1; + } + printf("[C]:call tsg_lua_vm_create success.\t lua:%p\n", L); + + char out[255]; + memset(out, 0, sizeof(out)); + size_t out_len; + size_t out_type; + printf("\n=============================file==================================\n"); + printf("\n*********************tsg_lua_exec_file************************\n"); + printf("[C]:call tsg_lua_exec_file, exec %s ...\n", script); + int ret = tsg_lua_exec_file(L, script, data, data_len, out, &out_len, &out_type); + if (ret < 0) + { + printf("[C]:call tsg_lua_exec_file failed.\n"); + free(data); + return -1; + } + printf("[C]:call tsg_lua_exec_file success.\n"); + printf("[C]:out_len:%zu\n", out_len); + printf("[C]:out_type:%zu\n", out_type); + switch(out_type) + { + case STRING: + printf("[C]:out_data:%s\n", out); + break; + case INTEGER: + printf("[C]:out_data:%ld\n", *(long int *)out); + break; + case BOOLEAN: + printf("[C]:out_data:%d\n", out[0]); + break; + } + + /* 关闭lua */ + tsg_destory_lua(L); + printf("[C]:Every day is good day!\n"); + + free(data); + return 0; +} -- cgit v1.2.3