diff options
| author | liuwentan <[email protected]> | 2023-03-30 15:22:33 +0800 |
|---|---|---|
| committer | liuwentan <[email protected]> | 2023-03-30 15:22:33 +0800 |
| commit | 96a5dfdeccbc44d17d526345f0c9da2a4825b412 (patch) | |
| tree | dc723347ea808718b4c9dbb50dee4be5530b2fdd | |
| parent | 690f8bc60204f3ee5daba9d62232d1b7d86ba0a9 (diff) | |
fix scan StreamFile bugv4.0.0-pre1
| -rw-r--r-- | src/inc_internal/maat_rule.h | 5 | ||||
| -rw-r--r-- | src/maat_api.c | 31 | ||||
| -rw-r--r-- | src/maat_compile.c | 35 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | test/file_test_tableinfo.conf | 43 | ||||
| -rw-r--r-- | test/maat_framework_gtest.cpp | 145 | ||||
| -rw-r--r-- | test/ntcrule/full/2018-10-09/NTC_UNIVERSAL_IP.0000050997 | 46 | ||||
| -rw-r--r-- | test/ntcrule/full/2018-10-09/WHITE_LIST_IP.0000050997 | 2 | ||||
| -rw-r--r-- | test/table_info.conf | 6 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.1 | 55 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.2 | 25 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.3 | 95 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.4 | 106 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.5 | 179 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.6 | 114 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.7 | 136 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.8 | 139 | ||||
| -rw-r--r-- | test/test_streamfiles/stream_dump.9 | 11 |
18 files changed, 1091 insertions, 85 deletions
diff --git a/src/inc_internal/maat_rule.h b/src/inc_internal/maat_rule.h index c77db0f..edd80ee 100644 --- a/src/inc_internal/maat_rule.h +++ b/src/inc_internal/maat_rule.h @@ -22,6 +22,7 @@ extern "C" #include <sys/time.h> #include <pthread.h> #include <sys/queue.h> +#include <dirent.h> #include <openssl/md5.h> #include "hiredis/hiredis.h" @@ -247,6 +248,10 @@ struct maat_state { struct maat_compile_state *compile_state; }; +int my_scandir(const char *dir, struct dirent ***namelist, + int(*filter)(const struct dirent *), + int(*compar)(const void *, const void *)); + enum scan_type maat_table_get_scan_type(enum table_type table_type); size_t parse_accept_tag(const char *value, struct rule_tag **result, struct log_handle *logger); diff --git a/src/maat_api.c b/src/maat_api.c index d59f613..0bbc31c 100644 --- a/src/maat_api.c +++ b/src/maat_api.c @@ -194,12 +194,12 @@ int maat_options_set_deferred_load_on(struct maat_options *opts) int maat_options_set_stat_on(struct maat_options *opts) { - + return 0; } int maat_options_set_perf_on(struct maat_options *opts) { - + return 0; } int maat_options_set_foreign_cont_dir(struct maat_options *opts, const char *dir) @@ -353,6 +353,18 @@ struct maat *maat_new(struct maat_options *opts, const char *table_info_path) maat_instance->logger = log_handle_create(log_path, opts->log_level); } + if (0 == strlen(opts->foreign_cont_dir)) { + snprintf(maat_instance->foreign_cont_dir, sizeof(maat_instance->foreign_cont_dir), + "%s_files", table_info_path); + } else { + memcpy(maat_instance->foreign_cont_dir, opts->foreign_cont_dir, strlen(opts->foreign_cont_dir)); + size_t len = strlen(maat_instance->foreign_cont_dir); + if (maat_instance->foreign_cont_dir[len - 1] == '/') { + maat_instance->foreign_cont_dir[len - 1] = '\0'; + } + } + system_cmd_mkdir(maat_instance->foreign_cont_dir); + maat_instance->input_mode = opts->input_mode; switch (maat_instance->input_mode) { @@ -1203,9 +1215,6 @@ int maat_scan_flag(struct maat *maat_instance, int table_id, state->scan_cnt++; if (NULL == maat_instance->maat_rt) { - log_error(maat_instance->logger, MODULE_MAAT_API, - "[%s:%d] table(table_id:%d) thread_id:%d maat_scan_flag error because of maat_runtime is NULL", - __FUNCTION__, __LINE__, table_id, state->thread_id); return MAAT_SCAN_OK; } @@ -1276,9 +1285,6 @@ int maat_scan_integer(struct maat *maat_instance, int table_id, state->scan_cnt++; if (NULL == maat_instance->maat_rt) { - log_error(maat_instance->logger, MODULE_MAAT_API, - "[%s:%d] table(table_id:%d) thread_id:%d maat_scan_integer error because of maat_runtime is NULL", - __FUNCTION__, __LINE__, table_id, state->thread_id); return MAAT_SCAN_OK; } @@ -1350,9 +1356,6 @@ int maat_scan_ipv4(struct maat *maat_instance, int table_id, state->scan_cnt++; if (NULL == maat_instance->maat_rt) { - log_error(maat_instance->logger, MODULE_MAAT_API, - "[%s:%d] table(table_id:%d) thread_id:%d maat_scan_ipv4 error because of maat_runtime is NULL", - __FUNCTION__, __LINE__, table_id, state->thread_id); return MAAT_SCAN_OK; } @@ -1432,9 +1435,6 @@ int maat_scan_ipv6(struct maat *maat_instance, int table_id, state->scan_cnt++; if (NULL == maat_instance->maat_rt) { - log_error(maat_instance->logger, MODULE_MAAT_API, - "[%s:%d] table(table_id:%d) thread_id:%d maat_scan_ipv6 error because of maat_runtime is NULL", - __FUNCTION__, __LINE__, table_id, state->thread_id); return MAAT_SCAN_OK; } @@ -1513,9 +1513,6 @@ int maat_scan_string(struct maat *maat_instance, int table_id, const char *data, state->scan_cnt++; if (NULL == maat_instance->maat_rt) { - log_error(maat_instance->logger, MODULE_MAAT_API, - "[%s:%d] table(table_id:%d) thread_id:%d maat_scan_string error because of maat_runtime is NULL", - __FUNCTION__, __LINE__, table_id, state->thread_id); return MAAT_SCAN_OK; } diff --git a/src/maat_compile.c b/src/maat_compile.c index c456da4..203785f 100644 --- a/src/maat_compile.c +++ b/src/maat_compile.c @@ -121,6 +121,7 @@ struct maat_compile { char table_name[NAME_MAX]; int actual_clause_num; int declared_clause_num; + double evaluation_order; int not_clause_cnt; void *user_data; void (*user_data_free)(void *); @@ -289,6 +290,15 @@ void *compile_schema_new(cJSON *json, struct table_manager *tbl_mgr, goto error; } + custom_item = cJSON_GetObjectItem(item, "evaluation_order"); + if (custom_item != NULL && custom_item->type == cJSON_Number) { + compile_schema->evaluation_order_column = custom_item->valueint; + } else { + log_error(logger, MODULE_COMPILE, + "[%s:%d] table %s has no evaluation_order column", table_name); + goto error; + } + compile_schema->ref_tbl_mgr = tbl_mgr; return compile_schema; error: @@ -478,6 +488,16 @@ compile_item_new(const char *line, struct compile_schema *compile_schema, } compile_item->declared_clause_num = atoi(line + column_offset); + ret = get_column_pos(line, compile_schema->evaluation_order_column, + &column_offset, &column_len); + if (ret < 0) { + log_error(logger, MODULE_COMPILE, + "[%s:%d] compile table(table_id:%d) line:%s has no evaluation_order", + __FUNCTION__, __LINE__, compile_schema->table_id, line); + goto error; + } + compile_item->evaluation_order = atof(line + column_offset); + return compile_item; error: FREE(compile_item); @@ -755,8 +775,8 @@ struct maat_compile *maat_compile_new(long long compile_id) } int maat_compile_set(struct maat_compile *compile, const char *table_name, - int declared_clause_num, void *user_data, - void (*user_data_free)(void *)) + double evaluation_order, int declared_clause_num, + void *user_data, void (*user_data_free)(void *)) { if (user_data != NULL && NULL == user_data_free) { return -1; @@ -764,6 +784,7 @@ int maat_compile_set(struct maat_compile *compile, const char *table_name, memset(compile->table_name, 0, sizeof(compile->table_name)); memcpy(compile->table_name, table_name, sizeof(compile->table_name)); + compile->evaluation_order = evaluation_order; compile->declared_clause_num = declared_clause_num; compile->user_data = user_data; compile->user_data_free = user_data_free; @@ -808,8 +829,9 @@ void maat_compile_hash_set(struct maat_compile **compile_hash, long long compile assert(tmp_compile != NULL); assert(tmp_compile->user_data == NULL); - maat_compile_set(tmp_compile, table_name, compile->declared_clause_num, - compile->user_data, compile->user_data_free); + maat_compile_set(tmp_compile, table_name, compile->evaluation_order, + compile->declared_clause_num, compile->user_data, + compile->user_data_free); } @@ -1465,13 +1487,13 @@ void compile_item_to_compile_rule(struct compile_item *compile_item, const char *table_line) { compile_rule->magic_num = COMPILE_RULE_MAGIC; + compile_rule->evaluation_order = compile_item->evaluation_order; compile_rule->declared_clause_num = compile_item->declared_clause_num; compile_rule->ref_table = compile_schema; compile_rule->ex_data = ALLOC(void *, 1); compile_rule->table_line_len = strlen(table_line) + 1; compile_rule->table_line = ALLOC(char, compile_rule->table_line_len); memcpy(compile_rule->table_line, table_line, compile_rule->table_line_len); - compile_rule->evaluation_order = compile_item->evaluation_order; if (compile_schema->ex_schema != NULL) { *(compile_rule->ex_data) = rule_ex_data_new(table_name, compile_schema->table_id, @@ -1600,7 +1622,8 @@ int compile_runtime_update(void *compile_runtime, void *compile_schema, return -1; } - maat_compile_set(compile, table_name, compile_rule->declared_clause_num, compile_rule, + maat_compile_set(compile, table_name, compile_rule->evaluation_order, + compile_rule->declared_clause_num, compile_rule, (void (*)(void *))destroy_compile_rule); struct maat_compile *tmp_compile = maat_compile_hash_find(&(compile_rt->compile_hash), compile_id); if (tmp_compile != NULL) { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1c565ce..5748ed2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -29,4 +29,5 @@ file(COPY literal_expr.conf DESTINATION ./) file(COPY regex_expr.conf DESTINATION ./) file(COPY maat_json.json DESTINATION ./) file(COPY ntcrule DESTINATION ./) -file(COPY testdata DESTINATION ./)
\ No newline at end of file +file(COPY testdata DESTINATION ./) +file(COPY test_streamfiles DESTINATION ./)
\ No newline at end of file diff --git a/test/file_test_tableinfo.conf b/test/file_test_tableinfo.conf index c633e7b..de233a4 100644 --- a/test/file_test_tableinfo.conf +++ b/test/file_test_tableinfo.conf @@ -1,7 +1,8 @@ [ { "table_id":0, - "table_name":["NTC_COMPILE", "WHITE_LIST_COMPILE"], + "table_name": "FILE_COMPILE", + "db_tables": ["NTC_COMPILE", "WHITE_LIST_COMPILE"], "table_type":"compile", "valid_column":8, "custom": { @@ -39,14 +40,18 @@ "table_id":3, "table_name":"NTC_UNIVERSAL_IP", "table_type":"ip_plus", - "valid_column":18, + "valid_column":11, "custom": { "item_id":1, "group_id":2, "addr_type":3, - "saddr_format":4, - "sip1":5, - "sip2":6 + "addr_format":4, + "ip1":5, + "ip2":6, + "port_format":7, + "port1":8, + "port2":9, + "protocol":10 } }, { @@ -65,23 +70,27 @@ "table_id":5, "table_name":"WHITE_LIST_IP", "table_type":"ip_plus", - "valid_column":18, + "valid_column":11, "custom": { "item_id":1, "group_id":2, "addr_type":3, - "saddr_format":4, - "sip1":5, - "sip2":6 + "addr_format":4, + "ip1":5, + "ip2":6, + "port_format":7, + "port1":8, + "port2":9, + "protocol":10 } }, { "table_id":7, - "table_name":["NTC_HTTP_URL", "WHITE_LIST_DOMAIN"], + "table_name":"FILE_HTTP_URL", + "db_tables": ["NTC_HTTP_URL", "WHITE_LIST_DOMAIN"], "table_type":"expr", "valid_column":7, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "keywords":3, @@ -92,11 +101,11 @@ }, { "table_id":8, - "table_name":["NTC_HTTP_REQ_HDR", "NTC_HTTP_RES_HDR"], + "table_name":"FILE_HTTP_HDR_REGION", + "db_tables":["NTC_HTTP_REQ_HDR", "NTC_HTTP_RES_HDR"], "table_type":"expr_plus", "valid_column":8, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "district":3, @@ -108,11 +117,11 @@ }, { "table_id":9, - "table_name":["NTC_HTTP_REQ_BODY", "NTC_HTTP_RES_BODY"], + "table_name":"FILE_HTTP_BODY_REGION", + "db_tables":["NTC_HTTP_REQ_BODY", "NTC_HTTP_RES_BODY"], "table_type":"expr", "valid_column":7, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "keywords":3, @@ -127,7 +136,6 @@ "table_type":"expr_plus", "valid_column":8, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "district":3, @@ -143,7 +151,6 @@ "table_type":"expr_plus", "valid_column":8, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "district":3, @@ -159,7 +166,6 @@ "table_type":"expr", "valid_column":7, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "keywords":3, @@ -174,7 +180,6 @@ "table_type":"expr", "valid_column":7, "custom": { - "pattern_type":"literal", "item_id":1, "group_id":2, "keywords":3, diff --git a/test/maat_framework_gtest.cpp b/test/maat_framework_gtest.cpp index 490f57e..ac232e3 100644 --- a/test/maat_framework_gtest.cpp +++ b/test/maat_framework_gtest.cpp @@ -1,4 +1,6 @@ #include <gtest/gtest.h> +#include <dirent.h> +#include <openssl/md5.h> #include "maat.h" #include "maat_rule.h" @@ -2782,31 +2784,69 @@ TEST_F(Policy, CompileEXData) { TEST_F(Policy, SubGroup) { long long results[ARRAY_SIZE] = {0}; size_t n_hit_result = 0; - struct maat_state *state = NULL; + int thread_id = 0; + struct maat *maat_instance = Policy::_shared_maat_instance; + struct maat_state *state = maat_state_new(maat_instance, thread_id); const char *scan_data = "[email protected]"; - uint32_t sip; - inet_pton(AF_INET,"10.0.6.205", &sip); + uint32_t ip_addr; + inet_pton(AF_INET,"10.0.6.205", &ip_addr); + uint16_t port = htons(50001); - int table_id = maat_get_table_id(g_maat_instance, "MAIL_ADDR"); + int table_id = maat_get_table_id(maat_instance, "MAIL_ADDR"); ASSERT_GT(table_id, 0); - int ret = maat_scan_string(g_maat_instance, table_id, scan_data, strlen(scan_data), - results, ARRAY_SIZE, &n_hit_result, &state); + int ret = maat_scan_string(maat_instance, table_id, scan_data, strlen(scan_data), + results, ARRAY_SIZE, &n_hit_result, state); EXPECT_EQ(ret, MAAT_SCAN_HALF_HIT); - table_id = maat_get_table_id(g_maat_instance, "IP_CONFIG"); + table_id = maat_get_table_id(maat_instance, "IP_CONFIG"); ASSERT_GT(table_id, 0); - ret = maat_scan_ipv4(g_maat_instance, table_id, sip, results, ARRAY_SIZE, - &n_hit_result, &state); + ret = maat_scan_ipv4(maat_instance, table_id, ip_addr, port, 6, + results, ARRAY_SIZE, &n_hit_result, state); EXPECT_EQ(ret, MAAT_SCAN_HIT); EXPECT_EQ(results[0], 153); - maat_state_free(&state); + maat_state_free(state); } #endif +TEST_F(Policy, EvaluationOrder) { + const char *url = "cavemancircus.com/2019/12/27/pretty-girls-6/"; + long long results[ARRAY_SIZE] = {0}; + size_t n_hit_result = 0; + int thread_id = 0; + struct maat *maat_instance = Policy::_shared_maat_instance; + struct maat_state *state = maat_state_new(maat_instance, thread_id); + + int table_id = maat_get_table_id(maat_instance, "HTTP_URL"); + ASSERT_GT(table_id, 0); + + int ret = maat_scan_string(maat_instance, table_id, url, strlen(url), + results, ARRAY_SIZE, &n_hit_result, state); + EXPECT_EQ(ret, MAAT_SCAN_HIT); + EXPECT_EQ(n_hit_result, 3); + EXPECT_EQ(results[0], 166); + EXPECT_EQ(results[1], 167); + EXPECT_EQ(results[2], 168); + + uint32_t ip_addr; + inet_pton(AF_INET, "192.168.23.23", &ip_addr); + uint16_t port = htons(65530); + + table_id = maat_get_table_id(maat_instance, "IP_PLUS_CONFIG"); + ASSERT_GT(table_id, 0); + + memset(results, 0, sizeof(results)); + ret = maat_scan_ipv4(maat_instance, table_id, ip_addr, port, 6, + results, ARRAY_SIZE, &n_hit_result, state); + EXPECT_EQ(ret, MAAT_SCAN_HIT); + EXPECT_EQ(n_hit_result, 1); + EXPECT_EQ(results[0], 165); + maat_state_free(state); +} + TEST_F(Policy, ReadColumn) { const char *ip = "192.168.0.1"; const char *tmp = "something"; @@ -2897,10 +2937,16 @@ protected: static void SetUpTestCase() { const char *rule_folder = "./ntcrule/full/index"; const char *table_info = "./file_test_tableinfo.conf"; + int scan_interval_ms = 500; + int effective_interval_ms = 0; struct maat_options *opts = maat_options_new(); + maat_options_set_caller_thread_number(opts, g_thread_num); + maat_options_set_instance_name(opts, "files"); maat_options_set_iris(opts, rule_folder, rule_folder); - maat_options_set_logger(opts, "./maat_input_mode_gtest.log", LOG_LEVEL_INFO); + maat_options_set_rule_update_checking_interval_ms(opts, scan_interval_ms); + maat_options_set_rule_effect_interval_ms(opts, effective_interval_ms); + maat_options_set_logger(opts, "./maat_framework_gtest.log", LOG_LEVEL_INFO); _shared_maat_instance = maat_new(opts, table_info); EXPECT_TRUE(_shared_maat_instance != NULL); @@ -2912,6 +2958,73 @@ protected: static struct maat *_shared_maat_instance; }; +struct maat *MaatFileTest::_shared_maat_instance; + +TEST_F(MaatFileTest, StreamFiles) { + const char test_data_dir[64] = "./test_streamfiles"; + const char *table_name = "NTC_HTTP_REQ_BODY"; + int thread_id = 0; + struct maat *maat_instance = MaatFileTest::_shared_maat_instance; + struct maat_state *state = maat_state_new(maat_instance, thread_id); + + int table_id = maat_get_table_id(maat_instance, table_name); + ASSERT_GT(table_id, 0); + + struct dirent **name_list; + int n = my_scandir(test_data_dir, &name_list, NULL, + (int (*)(const void*, const void*))alphasort); + ASSERT_GT(n, 0); + struct maat_stream *stream = maat_stream_new(maat_instance, table_id, state); + ASSERT_FALSE(stream == NULL); + + struct stat file_info; + size_t file_size = 0; + char file_path[PATH_MAX] = {0}; + long long results[ARRAY_SIZE] = {0}; + size_t n_hit_result = 0; + int hit_cnt = 0; + + for (int i = 0; i < n; i++) { + if ((strcmp(name_list[i]->d_name, ".") == 0) || + (strcmp(name_list[i]->d_name, "..") == 0)) { + continue; + } + + snprintf(file_path, sizeof(file_path), "%s/%s", test_data_dir, + name_list[i]->d_name); + int ret = stat(file_path, &file_info); + ASSERT_TRUE(ret == 0); + + file_size = file_info.st_size; + char *buff = ALLOC(char, file_size); + FILE *fp = fopen(file_path, "rb"); + if (fp == NULL) { + printf("fopen %s error.\n", file_path); + continue; + } + + int read_len = fread(buff, 1, file_size, fp); + ret = maat_stream_scan(stream, buff, read_len, results, ARRAY_SIZE, + &n_hit_result, state); + read_len = fread(buff, 1, sizeof(buff), fp); + if (ret > 0) { + hit_cnt++; + } + fclose(fp); + free(buff); + buff = NULL; + } + maat_state_free(state); + state = NULL; + maat_stream_free(stream); + EXPECT_GT(hit_cnt, 0); + + for (int i = 0; i < n; i++) { + free(name_list[i]); + } + + free(name_list); +} class MaatCmdTest : public testing::Test { @@ -2931,6 +3044,7 @@ protected: maat_cmd_flushDB(_shared_maat_instance); maat_free(_shared_maat_instance); + maat_options_set_foreign_cont_dir(opts, "./foreign_files/"); _shared_maat_instance = maat_new(opts, table_info_path); maat_options_free(opts); } @@ -3696,6 +3810,7 @@ int is_same_file(const char *filename1, const char *filename2) return 0; } } + int g_test_foregin_read_OK = 0, g_test_foreign_del_OK = 0; char file1_to_del[256], file2_to_del[256]; const char* empty_file_name = "An_empty_file"; @@ -3730,7 +3845,6 @@ void foreign_key_test_entry_cb(int table_id, const char *table_line, void *u_par } } -#if 0 TEST_F(MaatCmdTest, SetFile) { struct maat *maat_instance = MaatCmdTest::_shared_maat_instance; const char* table_name = "TEST_FOREIGN_KEY"; @@ -3741,7 +3855,7 @@ TEST_F(MaatCmdTest, SetFile) { int ret = maat_table_callback_register(maat_instance, table_id, NULL, foreign_key_test_entry_cb, NULL, NULL); - ASSERT_GT(ret, 1); + EXPECT_EQ(ret, 0); const char *file1_name = "./testdata/digest_test.data"; const char *file2_name = "./testdata/mesa_logo.jpg"; @@ -3817,7 +3931,7 @@ TEST_F(MaatCmdTest, SetFile) { sleep(WAIT_FOR_EFFECTIVE_S);//wait for callback triggered. EXPECT_EQ(g_test_foregin_read_OK, 1); } -#endif + struct user_info { char name[256]; char ip_addr[32]; @@ -4761,8 +4875,7 @@ TEST_F(MaatCmdTest, CompileDelete_TSG6548) { EXPECT_LE(hit_cnt, miss_cnt); maat_state_free(state); } - -#if 1 +#if 0 TEST_F(MaatCmdTest, UpdateDeadLockDetection) { const char* g2c_table_name = "GROUP2COMPILE"; const char* compile_table_name = "COMPILE"; diff --git a/test/ntcrule/full/2018-10-09/NTC_UNIVERSAL_IP.0000050997 b/test/ntcrule/full/2018-10-09/NTC_UNIVERSAL_IP.0000050997 index d270663..c5263eb 100644 --- a/test/ntcrule/full/2018-10-09/NTC_UNIVERSAL_IP.0000050997 +++ b/test/ntcrule/full/2018-10-09/NTC_UNIVERSAL_IP.0000050997 @@ -1,24 +1,24 @@ 0000000023 -977 962 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -1000 985 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -967 950 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -852 835 6 :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 fc00::1:1f FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 0 0 1 -992 977 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -863 846 4 0.0.0.0 255.255.255.255 0 65535 192.168.17.3 255.255.255.255 0 65535 0 0 1 -849 832 4 0.0.0.0 255.255.255.255 0 65535 192.168.17.3 255.255.255.255 0 65535 0 0 1 -995 980 4 10.11.36.59 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -931 914 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -739 723 4 10.11.36.26 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -619 603 4 10.11.36.26 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -742 726 4 10.3.57.1 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -938 921 4 10.11.36.5 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -997 982 4 10.11.36.59 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -625 609 4 10.3.57.1 255.255.255.255 2345 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -847 830 6 :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 fc00::1:1f FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 0 0 1 -865 848 4 0.0.0.0 255.255.255.255 0 65535 192.168.17.3 255.255.255.255 0 65535 0 0 1 -986 971 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -628 612 4 10.3.57.1 255.255.255.255 56345 65535 10.3.57.2 255.255.255.255 179 65535 0 0 1 -974 959 4 10.11.36.21 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -622 606 4 10.3.57.1 255.255.255.255 0 65535 0.0.0.0 255.255.255.255 0 65535 0 0 1 -867 850 6 :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 fc00::1:1f FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 0 0 1 -860 843 6 :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 fc00::1:1f FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0 65535 0 0 1 +977 962 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +1000 985 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +967 950 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +852 835 6 mask :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF range 0 65535 6 1 +992 977 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +863 846 4 mask 0.0.0.0 255.255.255.255 range 0 65535 6 1 +849 832 4 mask 0.0.0.0 255.255.255.255 range 0 65535 6 1 +995 980 4 mask 10.11.36.59 255.255.255.255 range 0 65535 6 1 +931 914 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +739 723 4 mask 10.11.36.26 255.255.255.255 range 0 65535 6 1 +619 603 4 mask 10.11.36.26 255.255.255.255 range 0 65535 6 1 +742 726 4 mask 10.3.57.1 255.255.255.255 range 0 65535 6 1 +938 921 4 mask 10.11.36.5 255.255.255.255 range 0 65535 6 1 +997 982 4 mask 10.11.36.59 255.255.255.255 range 0 65535 6 1 +625 609 4 mask 10.3.57.1 255.255.255.255 range 2345 65535 6 1 +847 830 6 mask :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF range 0 65535 6 1 +865 848 4 mask 0.0.0.0 255.255.255.255 range 0 65535 6 1 +986 971 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +628 612 4 mask 10.3.57.1 255.255.255.255 range 56345 65535 6 1 +974 959 4 mask 10.11.36.21 255.255.255.255 range 0 65535 6 1 +622 606 4 mask 10.3.57.1 255.255.255.255 range 0 65535 6 1 +867 850 6 mask :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF range 0 65535 6 1 +860 843 6 mask :: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF range 0 65535 6 1
\ No newline at end of file diff --git a/test/ntcrule/full/2018-10-09/WHITE_LIST_IP.0000050997 b/test/ntcrule/full/2018-10-09/WHITE_LIST_IP.0000050997 index 22dd219..2e792b9 100644 --- a/test/ntcrule/full/2018-10-09/WHITE_LIST_IP.0000050997 +++ b/test/ntcrule/full/2018-10-09/WHITE_LIST_IP.0000050997 @@ -1,2 +1,2 @@ 0000000001 -81 81 4 10.11.36.7 255.255.255.255 22222 65535 192.168.17.4 255.255.255.255 80 65535 0 0 1 +81 81 4 mask 10.11.36.7 255.255.255.255 range 22222 65535 6 1 diff --git a/test/table_info.conf b/test/table_info.conf index 9b6764f..44eeae2 100644 --- a/test/table_info.conf +++ b/test/table_info.conf @@ -8,7 +8,8 @@ "custom": { "compile_id":1, "tags":6, - "clause_num":9 + "clause_num":9, + "evaluation_order":10 } }, { @@ -34,7 +35,8 @@ "custom": { "compile_id":1, "tags":6, - "clause_num":9 + "clause_num":9, + "evaluation_order":10 } }, { diff --git a/test/test_streamfiles/stream_dump.1 b/test/test_streamfiles/stream_dump.1 new file mode 100644 index 0000000..fc48737 --- /dev/null +++ b/test/test_streamfiles/stream_dump.1 @@ -0,0 +1,55 @@ + <!doctype html> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> +<meta name="Generator" content="EditPlus®"> +<meta name="Author" content=""> +<meta name="Keywords" content=""> +<meta name="Description" content=""> +<!--框架样式 脚本引用--> +<link rel="stylesheet" type="text/css" href="http://s.teachercdn.com.cn/oel_teacherportal_static/css/base.css"/> +<link rel="stylesheet" type="text/css" href="http://s.teachercdn.com.cn/oel_teacherportal_static/css/teacher-conmon.css"/> +<script src="http://s.teachercdn.com.cn/oel_teacherportal_static/js/jquery.js"></script> +<script type="text/javascript" src="http://s.teachercdn.com.cn/oel_teacherportal_static/js/ps.common.js"></script> +<script type="text/javascript" src="http://s.teachercdn.com.cn/oel_teacherportal_static/js/in.min.js"></script> +<script type="text/javascript" src="http://s.teachercdn.com.cn/oel_teacherportal_static/js/json2.js"></script> +<title>全国中小学教师继续教育网</title> +</head> +<body> +<!--hearder--> +<div class="conmon-index-header"> +<script type="text/javascript"> + function search(id,form){ + var searchInfo = $("#"+id).val(); + //alert(searchInfo); + if(searchInfo!=''&&searchInfo!='请输入关键字'){ + $("#"+form).attr("action", "/search?info="+searchInfo).submit(); + } + } + $(document).ready(function(){ + logSatus(); + $(".al").mouseover(function(){ + $('.al').removeClass("btn-active"); + $(this).addClass("btn-active"); + }); + }); +function logSatus(){ + $.ajax({ + url: "/ajax/login/status?datetime="+new Date().getTime(), + type: 'GET', + //dataType: 'jsonp', + //jsonp: 'jsonpcallback', + success:function(data){ + //alert(data); + if(data!="false"){ + $("#login_status").show(); + $("#div_loginOut").hide(); + $("#login_status").html(data); + } + } + }); +} +/* + $(document).keydown(function(event) { + if (event.keyCode
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.2 b/test/test_streamfiles/stream_dump.2 new file mode 100644 index 0000000..b51f31b --- /dev/null +++ b/test/test_streamfiles/stream_dump.2 @@ -0,0 +1,25 @@ + == 13) { + search("searchInfo","theForm"); + } + }); +*/ + function togetherTop(){ + var text = $("#searchInfo").val(); + $("#searchAgain").val(text); + } + </script> + + <div class=" header-backcolor"> + <div class="conmon-header-con clear"> + <div class="ks-fl" id="login_status" style="display: none;"></div> + <div class="ks-fl" id="div_loginOut"> + <span><!--您好 ,欢迎来到继教网!--> <a href="http://menhu.teacher.com.cn" target="_blank" style="text-decoration:underline">返回旧版</a></span> + <!--<a class="al btn-default btn-active" href="http://i.teacher.com.cn/login">登录</a> + <a class="al btn-default" href="http://i.teacher.com.cn/register">注册</a>--> + </div> + <div class="input-search ks-fr"> + <form id="theForm" action="" method="post"> + <input id="searchInfo" style=" float:left; margin-top:10px;" value="请输入关键字" onfocus="if (value =='请输入关键字'){value =''}"onblur="if (value ==''){value='请输入关键字'}" onkeyup="togetherTop()"/> + <a class="search" href="javaScript:search('searchInfo','theForm');"> <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/conmon-index-search.gif" alt="" /></a> + <ul class=" ks-fr"> + <li><i class=" number"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/conmon-index-number.gif" alt="" /></i> <span>400-
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.3 b/test/test_streamfiles/stream_dump.3 new file mode 100644 index 0000000..75718d3 --- /dev/null +++ b/test/test_streamfiles/stream_dump.3 @@ -0,0 +1,95 @@ +812-1228</span></li> + <li><i class=" online"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/conmon-index-online.gif" alt="" /></i> <span><a href="http://vipwebchat6303.tq.cn/pageinfo.jsp?version=vip&admiuin=9693685<ype=0&iscallback=1&page_templete_id=41104&is_message_sms=0&is_send_mail=0&action=acd&acd=1&type_code=1" target=_blank>在线咨询</a></span></li> + <li><i class=" mail"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/conmon-index-mail.gif" alt="" /></i> <span><a href="mailto:[email protected]" target="_blank">[email protected]</a></span></li> + </ul> + </form> + </div> + </div> + </div> <!--banner--> + <a href="/"> + <div class="conmon-index-banner"></div> + </a> + <div class=" height26"></div> + <!--banner--> +<script type="text/javascript"> +$(document).ready(function(){ + $(".nav-one").bind("mouseover",function(){ + $(".floatDiv").hide(); + $(".slideBox").hide(); + $(this).find(".floatDiv").show(); + + }); + $(".floatDiv").bind("mouseleave",function(){ + $(".floatDiv").hide(); + $(".slideBox").show(); + }); +}) +</script> + +<!--下拉导航--> + <div class="container"> + <div class="conmon-index-nav clear"> + <ul class="index-nav-ul"> + <!--在职培训--> + <li class="nav-one" style="width:165px;"><a class="nav-a nav1 nava" href="/onjob/index">在职培训</a> + <!--在职培训--> + <div class="on-job floatDiv" style="display: none;"> + <div class="ks-fl on-job-fl"> + <span class=" ks-fl job-title">培训在线 +</span><span + class="ks-fr"><a href="/onjob/listType?type=1" + target="_blank" class="gray on-job-more">更多>></a></span> <div class=" clear"> + <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-job-1.gif" class=" ks-fl" /> + <div class="job-text-title"> + <b>河北2017年全员远程培训非义务教育阶段培训者集中培训会</b> + </div> + <div class=" job-text"> + <a></a><a + style="font-size: 12px; color: #005A84;" + href="/onjob/info?id=40443" target="_blank">[详细内容]</a> + </div> + </div> + <div class="clear"></div> + <div class=" height40"></div> + <div class=" clear"> + <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-job-1.gif" class=" ks-fl" /> + <div class="job-text-title"> + <b>“国培计划(2016)”——贵州教师工作坊项目福泉市小学数学工作坊第四小组子课题研修活动</b> + </div> + <div class=" job-text"> + <a></a><a + style="font-size: 12px; color: #005A84;" + href="/onjob/info?id=40442" target="_blank">[详细内容]</a> + </div> + </div> + <div class="clear"></div> + <div class=" height40"></div> + </div> + <div class="ks-fr job-fr"> + <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-job-3.gif" /> + </div> + </div> <!--在职培训--></li> + <!--在职培训--> + <!--自考助学--> +<li class="nav-one" style="width:165px;"><a href="/study" class="nav2 nava">自考助学</a> +<div class="on-self floatDiv" style=" display:none;"> + <div class=" clear ks-fl on-self-fl"> <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-self-1.gif" class=" ks-fl self-fl"/> </div> + <div class="ks-fr self-fr .on-self-fr"> <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-self-2.gif" /> + <div class=" height20 "></div> + <dl class="on-self-dl"> + <dt>高等教育在自学考试政策</dt> + <dd ><span class="ks-fl self-text"><a href="/study/info/467" target="_blank">关于印发《高等教育自学考试义务教育专业实践类课程考核办法》的通知</a></span><span class="ks-fr self-year">2011-03-08</span></dd> + <dd ><span class="ks-fl self-text"><a href="/study/info/466" target="_blank">全国考委关于开考教育技术水平考试的通知</a></span><span class="ks-fr self-year">2010-02-04</span></dd> + <dd ><span class="ks-fl self-text"><a href="/study/info/465" target="_blank">全国考委关于印发2010年高自考义务教育专业课程考试安排的通知</a></span><span class="ks-fr self-year">2009-12-11</span></dd> + <dd ><span class="ks-fl self-text"><a href="/study/info/464" target="_blank">关于“英特尔®未来教育”与“中小学教师教育技术能力建设计划”相衔接问题的通知</a></span><span class="ks-fr self-year">2009-08-25</span></dd> + <dd ><span class="ks-fl self-text"><a href="/study/info/463" target="_blank">关于实施“高自考义务教育专业”课程与在职中小学教师非学历培训课程学分互认试点工作的通知</a></span><span class="ks-fr self-year">2009-07-28</span></dd> + </dl> + </div> + </div> +</li> + + <!--自考助学--> + <!--本科后教育--> +<li class="nav-one" style="width:165px;"><a class="nav3 nava" href="/educate">本科后教育</a> + <!--本科后教育--> + <div class="on-
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.4 b/test/test_streamfiles/stream_dump.4 new file mode 100644 index 0000000..cff9ab4 --- /dev/null +++ b/test/test_streamfiles/stream_dump.4 @@ -0,0 +1,106 @@ +college floatDiv" style=" display:none;"> + <div class=" clear ks-fl college-fl"> <span class="college-fl-title">主考院校简介 :</span> + <p class="ks-fl college-text"> + <a href="/educate/examCollege/53" target="_blank"> + <img src="http://rsp.teacher.com.cn/getpic/277304" class="ks-fl " width="142px" height="141px"/> + </a> + <a><span style="color:#000000;"> 著名的高等学府东北师范大学是教育部直属高校,国家“211工程”重点建设大学。学校坐落在美丽的北国春城长春市。本部校区地处人民大街中段,净月校区设在风景如画的净月潭旅游开发区。学校占地面积167万平方米,其中本部校区占地7...</a> + <a class=" ks-fr blue" href="/educate/examCollege/53" target="_blank">全文>></a> + </p> + </div> + <div class="ks-fr college-fr"> + <p class="flaver"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-college-flaver.png" class="ks-fl flaver"/><a>招生专业</a></p> + <div class="height20"></div> + <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-college-list.gif"/> </div> + </div> + <!--本科后教育--> +</li> <!--本科后教育--> + <!--教师社区--> +<li class="nav-one" style="width:165px;"><a class="nav4 nava" href="http://c.teacher.com.cn" target="_blank">教师社区</a> +<div class="on-tea-Center floatDiv" style=" display:none;"> + <div class=" clear ks-fl tea-Center-fl"> + <dl class="teacher-list chang-teacher-list"> + + <dd><a href="http://c.teacher.com.cn/subject/1" target="_blank"> + <span class="xiaoxue"> + <p>小学</p> + </span></a> + <p class="teacher-text"> + <a href="http://c.teacher.com.cn/subject/10" target="_blank">小学语文</a> + <a href="http://c.teacher.com.cn/subject/11" target="_blank">小学数学</a> + <a href="http://c.teacher.com.cn/subject/12" target="_blank">小学英语</a> + <a href="http://c.teacher.com.cn/subject/16" target="_blank">小学科学</a> + <a href="http://c.teacher.com.cn/subject/17" target="_blank">小学品生品社</a> + </p> + </dd> + <dd><a href="http://c.teacher.com.cn/subject/2" target="_blank"> + <span class="chuzhong"> + <p>初中</p> + </span></a> + <p class="teacher-text"> + <a href="http://c.teacher.com.cn/subject/21" target="_blank">初中语文</a> + <a href="http://c.teacher.com.cn/subject/22" target="_blank">初中数学</a> + <a href="http://c.teacher.com.cn/subject/23" target="_blank">初中英语</a> + <a href="http://c.teacher.com.cn/subject/24" target="_blank">初中物理</a> + <a href="http://c.teacher.com.cn/subject/25" target="_blank">初中化学</a> + <a href="http://c.teacher.com.cn/subject/26" target="_blank">初中生物</a> + <a href="http://c.teacher.com.cn/subject/29" target="_blank">初中思品</a> + </p> + </dd> + <dd><a href="http://c.teacher.com.cn/subject/3" target="_blank"> + <span class="gaozhong"> + <p>高中</p> + </span></a> + <p class="teacher-text"> + <a href="http://c.teacher.com.cn/subject/36" target="_blank">高中语文</a> + <a href="http://c.teacher.com.cn/subject/37" target="_blank">高中数学</a> + <a href="http://c.teacher.com.cn/subject/38" target="_blank">高中英语</a> + <a href="http://c.teacher.com.cn/subject/39" target="_blank">高中物理</a> + <a href="http://c.teacher.com.cn/subject/40" target="_blank">高中化学</a> + <a href="http://c.teacher.com.cn/subject/41" target="_blank">高中生物</a> + <a href="http://c.teacher.com.cn/subject/42" target="_blank">高中政治</a> + <a href="http://c.teacher.com.cn/subject/49" target="_blank">高中通用技术</a> + </p> + </dd> + <dd><a href="http://c.teacher.com.cn/subject/4" target="_blank"> + <span class="qita"> + <p>其他</p> + </span></a> + <p class="teacher-text"> + <a href="http://c.teacher.com.cn/subject/6" target="_blank">幼儿教育</a> + <a href="http://c.teacher.com.cn/subject/9" target="_blank">中职教育</a> + <a href="http://c.teacher.com.cn/subject/13" target="_blank">音乐</a> + <a href="http://c.teacher.com.cn/subject/14" target="_blank">体育</a> + <a href="http://c.teacher.com.cn/subject/15" target="_blank">美术</a> + <a href="http://c.teacher.com.cn/subject/43" target="_blank">历史</a> + <a href="http://c.teacher.com.cn/subject/28" target="_blank">地理</a> + <a href="http://c.teacher.com.cn/subject/19" target="_blank">综合实践</a> + <a href="http://c.teacher.com.cn/subject/20" target="_blank">心理健康</a> + <a href="http://c.teacher.com.cn/subject/33" target="_blank">信息技术</a> + </p> + </dd> + </dl> + </div> + <div class="ks-fr tea-Center-fr"> + <div class="Center-left ks-fl"> + <span class="tea-Center-fr-title "><a class="blue" href="http://c.teacher.com.cn/topic/topicDetail/1506385?num=1" target="_blank">全通答题王 + </a> </span> + <p> <img src="http://rsp.teacher.com.cn/getdpic/899777/0.jpg" class="ks-fl"/> + <p class="tea-Center-fr-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1506385?num=1" target="_blank">继教网新产品!答题游戏小程序,等你来玩~!</a></p> + </p> + </div> + <div class="Center-left ks-fl"> + <span class="tea-Center-fr-title "><a class="blue" href="http://hdhcf.teacher.com.cn/activityController/frontHomePageIndex?activityId=299" target="_blank">2018专题活动—创课大赛 + </a> </span> + <p> <img src="http://rsp.teacher.com.cn/getdpic/899775/0.jpg" class="ks-fl"/> + <p class="tea-Center-fr-text"><a href="http://hdhcf.teacher.com.cn/activityController/frontHomePageIndex?activityId=299" target="_blank">继教网最新一轮创课大赛火热启动!</a></p> + </p> + </div> + <div class=" height20"></div> + <dl class="clear ks-fl"> + <dt>24小时热帖</dt> + <dd ><span class="ks-fl self-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1518728" target="_blank">让孩子喜欢作文的策略</a></span><span class="ks-fr self-year">2018-10-07</span></dd> + <dd ><span class="ks-fl self-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1518724" target="_blank">教师能没有爱吗?</a></span><span class="ks-fr self-year">2018-10-07</span></dd> + <dd ><span class="ks-fl self-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1518664" target="_blank">小数数学课堂教学的策略</a></span><span class="ks-fr self-year">2018-10-07</span></dd> + <dd ><span class="ks-fl self-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1518482" target="_blank">怎样有效开展课堂活动?</a></span><span class="ks-fr self-year">2018-10-06</span></dd> + <dd ><span class="ks-fl self-text"><a href="http://c.teacher.com.cn/topic/topicDetail/1518470" target="_blank">如何落�
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.5 b/test/test_streamfiles/stream_dump.5 new file mode 100644 index 0000000..2d47096 --- /dev/null +++ b/test/test_streamfiles/stream_dump.5 @@ -0,0 +1,179 @@ +�小学生的阅读量</a></span><span class="ks-fr self-year">2018-10-05</span></dd> + </dl> + </div> + </div> +</li> <!--教师社区--> + <!--教研文汇--> +<script type="text/javascript"> +$(document).ready(function(){ + $(".informationShow").mouseover(function(){ + $('.informationShow').removeClass("on-Teaching-active"); + $(this).addClass("on-Teaching-active"); + var data_showid = $(this).attr("data_showid"); + $('.Teaching-list').addClass("ks-hidden"); + $('.'+data_showid).removeClass("ks-hidden"); + //$("#"+data_showid).show(); + }); + /* + $(".informationShow").bind("mouseleave",function(){ + var data_showid = $(this).attr("data_showid"); + $("#"+data_showid).hide(); + }); + */ + +}) +</script> +<li class="nav-one" style="width:165px;"><a class="nav5 nava" href="/wenhui/index">教研文汇</a> +<div class="on-Teaching floatDiv" style=" display:none;"> + <div class=" clear ks-fl Teaching-fl"> <span class=" ks-fl Teaching-title">专题教研<span class="Teaching-more"><a class="gray" href="/wenhui/list/1/287" target="_blank">更多>></a> <!-- <a href="/wenhui/list/1/287" target="_blank">更多 >></a>--></span></span> + <ul class="on-Teaching-ul clear "> + <li class="informationShow on-Teaching-active" data_showid="informationShow1"> + <a>教研研究</a></li> + <li class="informationShow " data_showid="informationShow2"> + <a>教学理论</a></li> + <li class="informationShow " data_showid="informationShow3"> + <a>教学热点</a></li> + <li class="informationShow " data_showid="informationShow4"> + <a>课改专题</a></li> + </ul> + <div class="Teaching-list clear informationShow1 " > + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/40028">探究提高教师教研能力的方法</a> + <span class=" ks-fr">2016-04-25</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39861">中小学教研活动课程化的范例诠释及特征解析(上)</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39860">中小学教研活动课程化的范例诠释及特征解析(下)</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39849">那“课”却在灯火阑珊处</a> + <span class=" ks-fr">2016-01-20</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39814">当今农村小学如何提高校本教研活动的有效性</a> + <span class=" ks-fr">2016-01-07</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39768">中小学教师如何开展教育科研工作(上)</a> + <span class=" ks-fr">2015-12-29</span></p> + </div> + </div> + <div class="Teaching-list clear informationShow2 ks-hidden" > + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/40029">“体验----感悟”教学模式的探索</a> + <span class=" ks-fr">2016-04-25</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39942">勤总结、善反思是教师施教提质增效的法宝</a> + <span class=" ks-fr">2016-03-16</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39915">“生态评价”助推“研究性学习”</a> + <span class=" ks-fr">2016-03-07</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39863">在历史教学中运用评价的方式促进学生学习初探</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39862">“促进有效学习”教学管理策略初探</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39859">“四环六步”高效课堂教学模式初探</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + </div> + <div class="Teaching-list clear informationShow3 ks-hidden" > + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/40033">如何构建未成年人心理健康教育机制</a> + <span class=" ks-fr">2016-04-26</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39881">全面解读2016年高考命题改革</a> + <span class=" ks-fr">2016-02-02</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39865">浅谈信息技术和语文学科教学的有机整合</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39864">浅谈农村初中生心理健康教育</a> + <span class=" ks-fr">2016-01-21</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39770">浙江新高考首推学生成绩“诊断报告”</a> + <span class=" ks-fr">2015-12-30</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39769">信息技术与小学科学的有效整合</a> + <span class=" ks-fr">2015-12-29</span></p> + </div> + </div> + <div class="Teaching-list clear informationShow4 ks-hidden" > + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39934">浅谈“供给侧”背景下“研究性学习”资源拓展</a> + <span class=" ks-fr">2016-03-14</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39873">开发“烟台山文化圈”校本课程的思考</a> + <span class=" ks-fr">2016-01-28</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39773">全国高中新课改方案2016年出炉,2017年高中将使用新教材</a> + <span class=" ks-fr">2015-12-30</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39771">基于高中新课改的教师评价初探</a> + <span class=" ks-fr">2015-12-30</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39718">摭谈高中语文校本课程开发</a> + <span class=" ks-fr">2015-12-18</span></p> + </div> + <div > + <p><i></i> + <a class=" ks-fl" href="/wenhui/view/39685">“研究性学习”与“大数据”同行</a> + <span class=" ks-fr">2015-11-25</span></p> + </div> + </div> + </div> + <div class="ks-fr Teaching-fr"> + <div><a href="/wenhui/list/1/299"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/Teaching-xiaoxue.gif"/></a></div> + <div><a href="/wenhui/list/1/344"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/Teaching-chuzhong.gif"/></a></div> + <div><a href="/wenhui/list/1/414"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/Teaching-gaozhong.gif"/></a></div> + </div> + </div> +</li> <!--教研文汇--> + <!--继教咨讯--> +<li class="nav-one" style="width:165px;"><a class="nav6 nava" href="/information">继教资讯</a> +<div class="on-seek floatDiv" style=" display:none;"> + <div class=" clear ks-fl seek-fl"> + <p><a href="/information/readMore?dicId=1" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/seek-01.gif"/></a></
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.6 b/test/test_streamfiles/stream_dump.6 new file mode 100644 index 0000000..7fd9193 --- /dev/null +++ b/test/test_streamfiles/stream_dump.6 @@ -0,0 +1,114 @@ +p> + <p><a href="/information/readMore?dicId=1" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/seek-02.gif"/></a></p> + <p><a href="/information/readMore?dicId=1" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/seek-03.gif"/></a></p> + <p><a href="/information/readMore?dicId=1" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/seek-04.gif"/></a></p> + </div> + <div class=" seek-fr ks-fl "> + <div class="seek-list clear"> + <dl> + <dt><a href="/information/readMore?dicId=1" target="_blank">最新动态 +</a></dt> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40768" target="_blank">贵州:教师培训精品课程开发与应用研修项目精品课程开发指导师培训正式启航</a><span class="gray">2018-09-28</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40766" target="_blank">海南:2018年中学省级学科带头人提高培训开班</a><span class="gray">2018-09-26</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40765" target="_blank">贵州:2018年六盘水市中职学校“双师型”教师培训班</a><span class="gray">2018-09-25</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40764" target="_blank">2018年柳州市中小学教师信息技术应用能力提升工程培训项目培训者培训班</a><span class="gray">2018-09-25</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40761" target="_blank">云南:2018年双江县“语文主题学习”专题培训</a><span class="gray">2018-09-19</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40760" target="_blank">河北:张家口市宣化区、涿鹿县国培计划参训学员赴青岛市返岗实践总结提升</a><span class="gray">2018-09-19</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40758" target="_blank">“国培计划(2018)”——贵州省智库专家教师成长引领研修工作坊张佩玲智库专家工作坊项目启动会</a><span class="gray">2018-09-17</span></p> + </dd> + <dd> + <p><i class="tie"></i><a class="seek-list-a" href="/information/view?id=40756" target="_blank">贵州:吕传汉智库专家工作坊项目启动会</a><span class="gray">2018-09-17</span></p> + </dd> + </dl> + </div> + </div> + </div> +</li> + + <!--继教咨讯--> + <!--教育资源--> + <!-- +<li class="nav-one" style="width:141px;"><a class="nav7 nava">教育资源</a> +<div class="on-education floatDiv" style=" display:none;"> + <div class=" clear ks-fl education-fl"> <span class="ks-fl"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-write.gif"/></span> + <div class="ks-fl"> + <p><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-01.gif"/> <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-02.gif"/></p> + <p><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-03.gif"/> <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-04.gif"/></p> + <p>各类资源数量超过<span>20000</span>个,最新、最全、最实用!</p> + <p>各类教育机构数量超过<span>30000</span>家,最大的教育社区!</p> + <p>各类高端应用数量超过<span>40000</span>个,最前端的教育应用!</p> + </div> + </div> + <div class=" education-fr ks-fl "> <span class=" ks-fl"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-fr-01.gif"/> + <p>北大外语学院正音课程</p> + </span> <span class=" ks-fl"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-fr-02.gif"/> + <p>首奕动画教程</p> + </span><div class=" clear"></div> + <span class=" ks-fl"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-fr-03.gif"/> + <p>教师信息管理系统</p> + </span> <span class=" ks-fl"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/education-fr-04.gif"/> + <p>TEFL认证课程</p> + </span> </div> + </div> +</li> --> + <!--教育资源--> + <!--我们的服务--> + <!--include "/base/include/index_navbar_float8.ftl">--> + <!--我们的服务--> + </ul> + </div> + </div> + <!--下拉导航--> </div> +<!--hearder--> + +<input type="hidden" value="" id="searchAgain"/> +<!--content--> +<div class="container"> + <div class="row"> + <div class="index-content"> + <div class="zyy-chang clear"> + <!--图片新闻开始 --> + <div class="slideBox" + style="width: 663px; height: 335px; background-color: white; float: left;"> + <div id="newsImage"> + <ul class="items"> + <li><a href="/study/info/40762" title="2018继教网“创课大赛”等你参与"><img + width="671px" height="335px" src="http://rsp.teacher.com.cn/getpic/892921"></a></li> + <li><a href="/study/info/40736" title="全国继教网工作案例获评陕西省首批“国培计划”优秀工作案例"><img + width="671px" height="335px" src="http://rsp.teacher.com.cn/getpic/883923"></a></li> + <li><a href="/study/info/40731" title="研究院召开继教网专家领衔课程研发创新项目启动会"><img + width="671px" height="335px" src="http://rsp.teacher.com.cn/getpic/882702"></a></li> + <li><a href="/study/info/40718" title="研究院召开面培项目优化工作研讨会"><img + width="671px" height="335px" src="http://rsp.teacher.com.cn/getpic/880405"></a></li> + <li><a href="/study/info/40713" title="研究院召开新时代河北省高中和幼儿园教师专业能力提升调研工作启动会暨第一次研讨会"><img + width="671px" height="335px" src="http://rsp.teacher.com.cn/getpic/880208"></a></li> + </ul> + </div> + </div> + <!--图片新闻结束 --> + <div class="ks-fr index-content-fr"> + <ul> + <img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/con-index-install.gif" + class="ks-fl install" /> + <span class="new-dynamic">最新动态 +</span> <li> + <a href="/information/view?id=40768" target="_blank">贵州:教师培训精品课程开发与应用研修项目精品课程开发指导师培训正式启航(09-28)</a> + </li> + <li> + <a href="/information/view?id=40766" target="_blank">海南:2018年中学省级学科带头人提高培训开班(09-26)</a> + </li> + <li> + <a href="/information/view?id=40765" target="_blank">贵州:2018年六盘水市中职学校“双师型”教师培训班(09-25
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.7 b/test/test_streamfiles/stream_dump.7 new file mode 100644 index 0000000..cca4fe4 --- /dev/null +++ b/test/test_streamfiles/stream_dump.7 @@ -0,0 +1,136 @@ +)</a> + </li> + <li> + <a href="/information/view?id=40764" target="_blank">2018年柳州市中小学教师信息技术应用能力提升工程培训项目培训者培训班(09-25)</a> + </li> + <li> + <a href="/information/view?id=40761" target="_blank">云南:2018年双江县“语文主题学习”专题培训(09-19)</a> + </li> + </ul> + </div> + </div> + </div> + </div> +</div> +<div class="container"> + <!--广告--> + <div class="row bg"> + <!-- + <div class="index-ad"> <a><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-ad01.gif"/></a> <a><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/index-ad02.gif"/></a> </div> + --> + <div class="index-ad"> + <a href="http://hdhcf.teacher.com.cn/"><img src="http://rsp.teacher.com.cn/getpic/872315" /></a> + </div> + <div class="index-ad"> + <a href="http://jszgpxxm2016.e.px.teacher.com.cn/"><img src="http://rsp.teacher.com.cn/getpic/872309" /></a> + </div> + <div class="index-ad"> + <a href="http://www.teacher.com.cn/zhuanti/gpqdh/index.htm"><img src="http://rsp.teacher.com.cn/getpic/894257" /></a> + </div> + <div class="index-ad"> + <a href="http://www.teacher.com.cn/information/view?id=40669"><img src="http://rsp.teacher.com.cn/getpic/872307" /></a> + </div> + </div> + <!--广告--> + <div class="row bg index-row"> + <!-- community--> + <dl class="community-list"> + <dt> + <a href="/onjob/listType?type=2" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/study.community.gif" class="community-list-img"/>国培示范项目</a> + </dt> + <dd> + <a href="http://tmggjs2018.e.px.teacher.com.cn/" target="_blank">“国培计划(2018)”——示范性紧缺领域体育美育小学音乐骨干教师培训项目(沈阳师范大学)</a> + </dd> + <dd> + <a href="http://sfgjyx2018.e.px.teacher.com.cn/" target="_blank">“国培计划(2018)”——示范性培训团队高级研修项目(清华大学)</a> + </dd> + <dd> + <a href="http://sfyxxljk2017.e.px.teacher.com.cn/" target="_blank">“国培计划”——示范性综合改革项目 优秀心理健康青年教师助力研修项目(黑龙江省教育学院)</a> + </dd> + <dd> + <a href="http://sfzhpx2017.e.px.teacher.com.cn/" target="_blank">“国培计划”——示范性综合改革项目 初中语文骨干教师培训项目(黑龙江省教育学院)</a> + </dd> + <dd> + <a href="http://scmspx2017.w.px.teacher.com.cn/" target="_blank">“国培计划(2017)”——示范性名师高端研修 四川省小学特级教师高端研修项目(成都师范学院)</a> + </dd> + </dl> + <!-- community--> + <script type="text/javascript"> + $(document).ready(function() { + $('.dic').mouseover(function() { + var data_showid = $(this).attr("data_showid"); + $('.dic').removeClass("active"); + $(this).addClass("active"); + $('.onsite-training-fr').addClass("ks-hidden"); + $('.' + data_showid).removeClass("ks-hidden"); + }); + }) + </script> + <!-- training--> + <div class="onsite-training-list-1"> + <div class=" onsite-training-title-1"> + <a class="size18" href="/onjob/listType?type=3" target="_blank"><img src="http://s.teachercdn.com.cn/oel_teacherportal_static/images/training.gif" class="onsite-training-list-1-img"/>各类培训项目</a></a> + </div> + <div class="clear"> + <ul class="onsite-training-fl"> + <li class="dic active" + data_showid="dicShow1"><a><b>中小学教师</b></a></li> + <li class="dic " + data_showid="dicShow2"><a><b>幼儿园教师</b></a></li> + <li class="dic " + data_showid="dicShow3"><a><b>校(园)长</b></a></li> + <li class="dic " + data_showid="dicShow4"><a><b>职校教师</b></a></li> + <li class="dic " + data_showid="dicShow5"><a><b>班主任</b></a></li> + </ul> + <ul + class="onsite-training-fr dicShow1 "> + + <li><a href="http://fjsfczdf2018.e.px.teacher.com.cn/" target="_blank">教育部示范性项目(2018)中小学一线优秀教师和教研员研修平台(初中道德与法制)</a></li> + + <li><a href="http://hnzzs2018.e.px.teacher.com.cn" target="_blank">郑州市中学教师继续教育培训</a></li> + + <li><a href="http://gxlzts2018.w.px.teacher.com.cn/" target="_blank">2018年柳州市中小学教师信息技术应用能力提升工程培训项目</a></li> + + <li><a href="http://ynypx2018.w.px.teacher.com.cn/" target="_blank">2018年永平县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://cqlpq2018.w.px.teacher.com.cn" target="_blank">梁平区2018新教师岗前培训</a></li> + + <li><a href="http://rkzxb.stu.teacher.com.cn/" target="_blank">“国培计划(2018)”—西藏自治区日喀则市网络研修与校本研修示范校培训</a></li> + + <li><a href="http://jsycs2018.e.px.teacher.com.cn" target="_blank">2018年盐城市响水县新教师网络研修</a></li> + + <li><a href="http://ynjcx2018.w.px.teacher.com.cn/" target="_blank">2018年剑川县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://ahhns2018.e.px.teacher.com.cn" target="_blank">淮南市2018年中小学幼儿园教师转岗培训</a></li> + + <li><a href="http://ahhsjswy2018.e.px.teacher.com.cn/" target="_blank">黄山市2018中小学幼儿园(中职)教师全员网络研修项目</a></li> + + <li><a href="http://hbxrjs2018.e.px.teacher.com.cn" target="_blank">湖北省2018年新任教师学科网络培训</a></li> + + <li><a href="http://hnchq2018.e.px.teacher.com.cn" target="_blank">川汇区2018年小学、幼儿园教师继续教育岗位培训</a></li> + + <li><a href="http://ynwsx2018.w.px.teacher.com.cn/" target="_blank">2018年巍山县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://yneyx2018.w.px.teacher.com.cn/" target="_blank">2018年洱源县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://sclzx2018.w.px.teacher.com.cn" target="_blank">乐至县2018年中小学校长任职资格培训</a></li> + + <li><a href="http://jswxxsq2018.e.px.teacher.com.cn/" target="_blank">2018年无锡市锡山区中小幼教师全员远程培训</a></li> + + <li><a href="http://jsjnq2018.e.px.teacher.com.cn" target="_blank">2018年江宁区中小学教师信息技术应用能力提升远程培训</a></li> + + <li><a href="http://sxsyxz2018.p.px.teacher.com.cn" target="_blank">绍兴市上虞区中小学副校长高级研修班</a></li> + + <li><a href="http://ahxcjs2018.e.px.teacher.com.cn" target="_blank">“国培计划(2018)”——安徽省乡村中小学幼儿园教师工作坊研修项目</a></li> + + <li><a href="http://cxczjs2018.e.px.teacher.com.cn" target="_blank">慈溪市初中教师道德与法规培训班</a></li> + + <li><a href="http://cxyyjdsj2018.e.px.teacher.com.cn" target="_blank">慈溪市小学英语教材解读与教学设计能力提升培训班</a></li> + + <li><a href="http://tlqxjs2018.w.px.teacher.com.cn" target="_blank">铜梁区2018新教师岗前培训</a></li> + + <li><a href="http://gznlts2018.w.px.teacher.com.cn/" target="_blank">基于核心素养的“新课程、新课标、新高考”高中教师教学能力提升培训</a></li> + + <li><a href="http://zxnlts2018.w.px.teacher.com.cn" target="_blank">“
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.8 b/test/test_streamfiles/stream_dump.8 new file mode 100644 index 0000000..a1482e9 --- /dev/null +++ b/test/test_streamfiles/stream_dump.8 @@ -0,0 +1,139 @@ +知行合一”全市初中、小学教师课堂教学及精品课例锤炼做中学能力提升远程培训</a></li> + + <li><a href="http://sxxcjs2018.w.px.teacher.com.cn/" target="_blank">“国培计划(2018)” ——陕西省乡村教师工作坊研修项目</a></li> + + <li><a href="http://ncxztg2018.e.px.teacher.com.cn/" target="_blank">2018年南昌市第31期校长提高培训</a></li> + + <li><a href="http://zjwdxyjs2018.e.px.teacher.com.cn/" target="_blank">2018下半年温岭市小幼教师专业发展培训项目</a></li> + + <li><a href="http://wdxyjs2018.e.px.teacher.com.cn/" target="_blank">温岭小幼教师专业能力培训班</a></li> + + <li><a href="http://fjmspy2018.e.px.teacher.com.cn/" target="_blank">福建省名师培养工程项目研修平台(工作坊)</a></li> + + <li><a href="http://hnxjskt2018.e.px.teacher.com.cn" target="_blank">2018年湖南省衡南县教师课堂教学创新网络研修</a></li> + + <li><a href="http://zqqsgc2018.e.px.teacher.com.cn/" target="_blank">肇庆学院省强师工程2018年优秀传统文化--书法学科骨干教师培训</a></li> + + <li><a href="http://cqgzggjs2018.w.px.teacher.com.cn" target="_blank">市培(2018)—重庆市高中市级骨干教师培养对象培训(重庆第二师范学院高中历史)</a></li> + + <li><a href="http://ynszwlxb2018.w.px.teacher.com.cn/" target="_blank">2018年师宗县中小学教师网络与校本研修整合全员培训</a></li> + + <li><a href="http://hnybggjs2018.e.px.teacher.com.cn" target="_blank">“省培计划(2018)”一般性省级骨干教师培育项目</a></li> + + <li><a href="http://scwyxb2018.w.px.teacher.com.cn" target="_blank">“国培计划(2017)”-四川省教师网络研修与校本研修第二阶段培训</a></li> + + <li><a href="http://scjsgzf2018.w.px.teacher.com.cn" target="_blank">“国培计划(2017)”-四川省教师工作坊第二阶段网络培训</a></li> + + <li><a href="http://cqrcq2018.w.px.teacher.com.cn" target="_blank">荣昌区2018新教师岗前培训</a></li> + + <li><a href="http://hnwlxb2018.e.px.teacher.com.cn/" target="_blank">2018年湖南省“国培计划”教师网络研修与校本研修整合培训</a></li> + + <li><a href="http://hngg1.stu.teacher.com.cn" target="_blank">“省培计划(2018)”一般性省级骨干教师培育项目(小学数学)</a></li> + + <li><a href="http://jshazxxjs2018.e.px.teacher.com.cn" target="_blank">2018年淮安市淮安区中小学教师学科培训</a></li> + + <li><a href="http://xzglqxjs2018.e.px.teacher.com.cn" target="_blank">2018年徐州市鼓楼区新教师网络培训</a></li> + + <li><a href="http://hnzzggjs2018.e.px.teacher.com.cn" target="_blank">“省培计划(2018)”一般性省级小学骨干教师培育项目(郑州师范学院)</a></li> + + <li><a href="http://fjjybyxxz2018.e.px.teacher.com.cn/" target="_blank">教育部示范性项目(2018)中小学一线优秀教师和教研员研修平台(小学综合实践)</a></li> + + <li><a href="http://hnlnxqy2018.e.px.teacher.com.cn" target="_blank">洛宁县2018年中小学幼儿园教师全员岗位培训</a></li> + + <li><a href="http://bjfsggjs2018.e.px.teacher.com.cn" target="_blank">2018年北京市房山区中小学骨干教师研修平台</a></li> + + <li><a href="http://zjzxxjsx2018.e.px.teacher.com.cn/" target="_blank">2018下半年浙江省中小学教师专业发展培训项目</a></li> + + <li><a href="http://cxczyw2018.e.px.teacher.com.cn/" target="_blank">18年长兴县初中语文(90学分)培训班</a></li> + + <li><a href="http://cxsyxx2018.e.px.teacher.com.cn/" target="_blank">18年长兴县实验小学共同体师德培训班</a></li> + + <li><a href="http://ynybx2018.w.px.teacher.com.cn/" target="_blank">2018年漾濞县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://hngsxgp2018.e.px.teacher.com.cn/" target="_blank">固始县2018年度高中、初中岗位培训项目</a></li> + + <li><a href="http://bjfsyspx2018.e.px.teacher.com.cn" target="_blank">2018年北京市房山区卓越工程——领航计划 暨中小学骨干教师混合研修培训演示平台</a></li> + + <li><a href="http://ddkqxjs2018.w.px.teacher.com.cn/" target="_blank">大渡口区2018年中小学新教师培训</a></li> + + <li><a href="http://zqggyz2018.e.px.teacher.com.cn" target="_blank">肇庆学院省强师工程2018年跨年度递进式培训项目--幼儿园骨干园长能力提升高端研修</a></li> + + <li><a href="http://zqggjs2018.e.px.teacher.com.cn" target="_blank">肇庆学院省强师工程2018年跨年度递进式培训项目--幼儿园骨干教师能力提升高端研修</a></li> + + <li><a href="http://nmgzqpx2018.e.px.teacher.com.cn/" target="_blank">内蒙古自治区2017年职业院校教师示范培训</a></li> + + <li><a href="http://jsxzglq2018.e.px.teacher.com.cn" target="_blank">2018年徐州市鼓楼区中小学校干"毓秀计划"远程培训</a></li> + + <li><a href="http://ybxpjs2018.w.px.teacher.com.cn" target="_blank">渝北区2018年新聘教师培训</a></li> + + <li><a href="http://hndfbxs2018.e.px.teacher.com.cn" target="_blank">登封市小学幼儿园教师继续教育补学时岗位培训</a></li> + + <li><a href="http://gdlz2018.e.px.teacher.com.cn" target="_blank">2018年连州市德与法视角下的教师职业道德修养专题培训</a></li> + + <li><a href="http://jtxsdpx2018.w.px.teacher.com.cn/" target="_blank">2018年景泰县中小学(幼儿园)教师师德培训项目</a></li> + + <li><a href="http://bbczjswy2018.e.px.teacher.com.cn/" target="_blank">蚌埠市2017-2018学年度初中教师网络研修项目</a></li> + + <li><a href="http://gszhtc2016.w.px.teacher.com.cn/" target="_blank">2018年甘肃省陇东学院团队置换研修项目</a></li> + + <li><a href="http://hnyzrz2018.e.px.teacher.com.cn" target="_blank">2018年河南省幼儿园园长任职资格培训(远程)</a></li> + + <li><a href="http://lzx18.stu.teacher.com.cn" target="_blank">乐至县2018年新教师远程培训</a></li> + + <li><a href="http://sdrzxjs2018.e.px.teacher.com.cn" target="_blank">2018年山东省日照市经济技术开发区新教师远程培训</a></li> + + <li><a href="http://tmggjs2018.e.px.teacher.com.cn/" target="_blank">“国培计划(2018)”——示范性紧缺领域体育美育小学音乐骨干教师培训项目(沈阳师范大学)</a></li> + + <li><a href="http://zqxxxz2018.e.px.teacher.com.cn" target="_blank">肇庆学院省强师工程2018年中小学校长信息化领导力提升专项研修培训</a></li> + + <li><a href="http://zqxcjs2018.e.px.teacher.com.cn" target="_blank">肇庆学院省强师工程2018年跨年度递进式培训项目--乡村教师置换培训</a></li> + + <li><a href="http://sfgjyx2018.e.px.teacher.com.cn/" target="_blank">“国培计划(2018)”——示范性培训团队高级研修项目(清华大学)</a></li> + + <li><a href="http://sdrzjx2018.e.px.teacher.com.cn" target="_blank">2018年山东省日照市莒县新教师网络培训</a></li> + + <li><a href="http://fs2018ybsfxxm.e.px.teacher.com.cn/" target="_blank">合肥市2018园本示范性项目</a></li> + + <li><a href="http://jlxcjsfy2018.e.px.teacher.com.cn" target="_blank">“国培计划(2018)”——吉林省乡村教师工作坊坊员研修项目</a></li> + + <li><a href="http://yixingxjs2018.e.px.teacher.com.cn" target="_blank">宜兴市2018年新教师岗前培训</a></li> + + <li><a href="http://jlxcjsfz2018.e.px.teacher.com.cn" target="_blank">“国培计划(2018)”——吉林省乡村教师工作坊坊主研修项目</a></li> + + <li><a href="http://ahbzgzpx2018.e.px.teacher.com.cn/" target="_blank">亳州市2018高中教师全员网络研修</a></li> + + <li><a href="http://wuhai2018.e.px.teacher.com.cn/" target="_blank">2018年乌海市教师人文素养网络研修</a></li> + + <li><a href="http://scpkxm2018.w.px.teacher.com.cn" target="_blank">四川省2018年深度贫困项目县教师工作坊网络研修项目</a></li> + + <li><a href="http://yzgyqy2018.e.px.teacher.com.cn" target="_blank">2018年扬州高邮市全员教师培训</a></li> + + <li><a href="http://yzggjs2018.e.px.teacher.com.cn" target="_blank">2018年扬州市骨干教师高级研修班</a></li> + + <li><a href="http://yjxzgwy2018.e.px.teacher.com.cn" target="_blank">延津县小学全科教师转岗培训网络研修</a></li> + + <li><a href="http://gxnn8.stu.teacher.com.cn/" target="_blank">2018年南宁市新任教师岗前培训及教师网络研修社区项目</a></li> + + <li><a href="http://ynnjx2018.w.px.teacher.com.cn/" target="_blank">2018年南涧县中小学幼儿园教师远程全员培训</a></li> + + <li><a href="http://hlber2018.e.px.teacher.com.cn/" target="_blank">呼伦贝尔市初、高中教师网络研修全员培训</a></li> + + <li><a href="http://xunxian2018.e.px.teacher.com.cn" target="_blank">2018年浚县小学、幼儿园教师继续教育远程培训</a></li> + + <li><a href="http://nxqygp2018.w.px.teacher.com.cn/" target="_blank">2018年宁夏中小学幼儿园教师全员岗位培训继续教育网络培训</a></li> + + <li><a href="http://hhszxxswpx2018.e.px.teacher.com.cn/" target="_blank">黑河市中小学(幼儿园)教师信息技术应用能力提升工程收尾培训</a></li> + + <li><a href="http://jyxjs2018.e.px.teacher.com.cn" target="_blank">2018年江阴市新教师网络培训课程</a></li> + + <li><a href="http://hbxpt2018.e.px.teacher.com.cn" target="_blank">“国培计划(2018)”——湖北省项目县培训团队集中研修</a></li> + + <li><a href="http://lyjlqu2018.e.px.teacher.com.cn" target="_blank">洛阳市吉利区中小学幼儿园教师岗位培训</a></li> + + <li><a href="http://cgx2018.w.px.teacher.com.cn" target="_blank">城固县2018年专业技术人员专业科目网络培训</a></li> + + <li><a href="http://dwqjsts2018.e.px.teacher.com.cn/" target="_blank">2017年哈尔滨市道外区小学教师远程通识培训项目</a></li> + + <li><a href="http://jsycsygzqypx2018.e.px.teacher.com.cn" target="_blank">2018年盐城市射阳县高中全员教师网络研修</a></li> + + <li><a href="http://gxfmxxqypx2018.w.px.teacher.com.cn/" target="_blank">2018年
\ No newline at end of file diff --git a/test/test_streamfiles/stream_dump.9 b/test/test_streamfiles/stream_dump.9 new file mode 100644 index 0000000..68482f5 --- /dev/null +++ b/test/test_streamfiles/stream_dump.9 @@ -0,0 +1,11 @@ +广西玉林市福绵区小学教师继续教育全员培训项目</a></li> + + <li><a href="http://jyzspx2018.e.px.teacher.com.cn" target="_blank">教育部直属师范大学2018届公费师范毕业生岗前培训</a></li> + + <li><a href="http://hnlysycxgwpx2018.e.px.teacher.com.cn" target="_blank">洛阳市伊川县中小学教师继续教育岗位补培</a></li> + + <li><a href="http://zgs2018.w.px.teacher.com.cn" target="_blank">2018年自贡市教育人才队伍建设“三大工程”培训</a></li> + + <li><a href="http://pdqypx2018.e.px.teacher.com.cn" target="_blank">平顶山市继续教育全员培训</a></li> + + <li><a href="http://luliang2018.w.px.teacher.com.cn/" target="_blank">2018年陆良
\ No newline at end of file |
