✨ feat(integration decoders): http and glimpse_detector
compile pass, todo test
This commit is contained in:
0
test/http_decoder/.gitkeep
Normal file
0
test/http_decoder/.gitkeep
Normal file
33
test/http_decoder/CMakeLists.txt
Normal file
33
test/http_decoder/CMakeLists.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
set(DECODER_NAME http_decoder)
|
||||
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml DEPS_SRC)
|
||||
|
||||
add_library(${DECODER_NAME}_test SHARED http_decoder_test_plug.cpp md5.c ${DEPS_SRC})
|
||||
add_dependencies(${DECODER_NAME}_test ${DECODER_NAME})
|
||||
target_link_libraries(${DECODER_NAME}_test MESA_prof_load cjson-static)
|
||||
set_target_properties(${DECODER_NAME}_test PROPERTIES PREFIX "")
|
||||
|
||||
add_library(${DECODER_NAME}_perf SHARED http_decoder_perf_plug.cpp)
|
||||
add_dependencies(${DECODER_NAME}_perf ${DECODER_NAME})
|
||||
set_target_properties(${DECODER_NAME}_perf PROPERTIES PREFIX "")
|
||||
|
||||
set(TEST_RUN_DIR /home/mesasoft/sapp_run)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR}/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/deps)
|
||||
include_directories(/opt/tsg/stellar/include/)
|
||||
include_directories(/opt/tsg/framework/include/)
|
||||
include_directories(/opt/MESA/include/MESA)
|
||||
include_directories(${CMAKE_BINARY_DIR}/vendor/vbuild/include)
|
||||
include_directories(${CMAKE_BINARY_DIR}/vendor/cjson/src/cjson/include)
|
||||
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/mempool PERF_TEST_DEP_SRC)
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/toml PERF_TEST_DEP_SRC)
|
||||
aux_source_directory(${PROJECT_SOURCE_DIR}/src PERF_TEST_DEP_SRC)
|
||||
|
||||
# add_executable(httpd_perf_test ${PERF_TEST_DEP_SRC} http_decoder_perf_main.cpp http_decoder_perf_plug.cpp http_stellar_mock.cpp)
|
||||
# target_link_libraries(httpd_perf_test z brotlidec llhttp-static fieldstat4 pthread)
|
||||
|
||||
add_executable(httpd_gtest http_decoder_gtest.cpp http_stellar_mock.cpp ${PROJECT_SOURCE_DIR}/src/http_decoder_utils.cpp)
|
||||
target_link_libraries(httpd_gtest gtest stellar_devel)
|
||||
164
test/http_decoder/base64.c
Normal file
164
test/http_decoder/base64.c
Normal file
@@ -0,0 +1,164 @@
|
||||
/* This is a public domain base64 implementation written by WEI Zhicheng. */
|
||||
|
||||
#include "base64.h"
|
||||
|
||||
#define BASE64_PAD '='
|
||||
#define BASE64DE_FIRST '+'
|
||||
#define BASE64DE_LAST 'z'
|
||||
|
||||
/* BASE 64 encode table */
|
||||
static const char base64en[] = {
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
||||
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
|
||||
'w', 'x', 'y', 'z', '0', '1', '2', '3',
|
||||
'4', '5', '6', '7', '8', '9', '+', '/',
|
||||
};
|
||||
|
||||
/* ASCII order for BASE 64 decode, 255 in unused character */
|
||||
static const unsigned char base64de[] = {
|
||||
/* nul, soh, stx, etx, eot, enq, ack, bel, */
|
||||
255, 255, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* bs, ht, nl, vt, np, cr, so, si, */
|
||||
255, 255, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* dle, dc1, dc2, dc3, dc4, nak, syn, etb, */
|
||||
255, 255, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* can, em, sub, esc, fs, gs, rs, us, */
|
||||
255, 255, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* sp, '!', '"', '#', '$', '%', '&', ''', */
|
||||
255, 255, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* '(', ')', '*', '+', ',', '-', '.', '/', */
|
||||
255, 255, 255, 62, 255, 255, 255, 63,
|
||||
|
||||
/* '0', '1', '2', '3', '4', '5', '6', '7', */
|
||||
52, 53, 54, 55, 56, 57, 58, 59,
|
||||
|
||||
/* '8', '9', ':', ';', '<', '=', '>', '?', */
|
||||
60, 61, 255, 255, 255, 255, 255, 255,
|
||||
|
||||
/* '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', */
|
||||
255, 0, 1, 2, 3, 4, 5, 6,
|
||||
|
||||
/* 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', */
|
||||
7, 8, 9, 10, 11, 12, 13, 14,
|
||||
|
||||
/* 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', */
|
||||
15, 16, 17, 18, 19, 20, 21, 22,
|
||||
|
||||
/* 'X', 'Y', 'Z', '[', '\', ']', '^', '_', */
|
||||
23, 24, 25, 255, 255, 255, 255, 255,
|
||||
|
||||
/* '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', */
|
||||
255, 26, 27, 28, 29, 30, 31, 32,
|
||||
|
||||
/* 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', */
|
||||
33, 34, 35, 36, 37, 38, 39, 40,
|
||||
|
||||
/* 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', */
|
||||
41, 42, 43, 44, 45, 46, 47, 48,
|
||||
|
||||
/* 'x', 'y', 'z', '{', '|', '}', '~', del, */
|
||||
49, 50, 51, 255, 255, 255, 255, 255
|
||||
};
|
||||
|
||||
unsigned int
|
||||
base64_encode(const unsigned char *in, unsigned int inlen, char *out)
|
||||
{
|
||||
int s;
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
unsigned char c;
|
||||
unsigned char l;
|
||||
|
||||
s = 0;
|
||||
l = 0;
|
||||
for (i = j = 0; i < inlen; i++) {
|
||||
c = in[i];
|
||||
|
||||
switch (s) {
|
||||
case 0:
|
||||
s = 1;
|
||||
out[j++] = base64en[(c >> 2) & 0x3F];
|
||||
break;
|
||||
case 1:
|
||||
s = 2;
|
||||
out[j++] = base64en[((l & 0x3) << 4) | ((c >> 4) & 0xF)];
|
||||
break;
|
||||
case 2:
|
||||
s = 0;
|
||||
out[j++] = base64en[((l & 0xF) << 2) | ((c >> 6) & 0x3)];
|
||||
out[j++] = base64en[c & 0x3F];
|
||||
break;
|
||||
}
|
||||
l = c;
|
||||
}
|
||||
|
||||
switch (s) {
|
||||
case 1:
|
||||
out[j++] = base64en[(l & 0x3) << 4];
|
||||
out[j++] = BASE64_PAD;
|
||||
out[j++] = BASE64_PAD;
|
||||
break;
|
||||
case 2:
|
||||
out[j++] = base64en[(l & 0xF) << 2];
|
||||
out[j++] = BASE64_PAD;
|
||||
break;
|
||||
}
|
||||
|
||||
out[j] = 0;
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
base64_decode(const char *in, unsigned int inlen, unsigned char *out)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
unsigned char c;
|
||||
|
||||
if (inlen & 0x3) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = j = 0; i < inlen; i++) {
|
||||
if (in[i] == BASE64_PAD) {
|
||||
break;
|
||||
}
|
||||
if (in[i] < BASE64DE_FIRST || in[i] > BASE64DE_LAST) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
c = base64de[(unsigned char)in[i]];
|
||||
if (c == 255) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (i & 0x3) {
|
||||
case 0:
|
||||
out[j] = (c << 2) & 0xFF;
|
||||
break;
|
||||
case 1:
|
||||
out[j++] |= (c >> 4) & 0x3;
|
||||
out[j] = (c & 0xF) << 4;
|
||||
break;
|
||||
case 2:
|
||||
out[j++] |= (c >> 2) & 0xF;
|
||||
out[j] = (c & 0x3) << 6;
|
||||
break;
|
||||
case 3:
|
||||
out[j++] |= c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return j;
|
||||
}
|
||||
28
test/http_decoder/base64.h
Normal file
28
test/http_decoder/base64.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef BASE64_H
|
||||
#define BASE64_H
|
||||
|
||||
#define BASE64_ENCODE_OUT_SIZE(s) ((unsigned int)((((s) + 2) / 3) * 4 + 1))
|
||||
#define BASE64_DECODE_OUT_SIZE(s) ((unsigned int)(((s) / 4) * 3))
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
/*
|
||||
* out is null-terminated encode string.
|
||||
* return values is out length, exclusive terminating `\0'
|
||||
*/
|
||||
unsigned int
|
||||
base64_encode(const unsigned char *in, unsigned int inlen, char *out);
|
||||
|
||||
/*
|
||||
* return values is out length
|
||||
*/
|
||||
unsigned int
|
||||
base64_decode(const char *in, unsigned int inlen, unsigned char *out);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* BASE64_H */
|
||||
0
test/http_decoder/conf/.gitkeep
Normal file
0
test/http_decoder/conf/.gitkeep
Normal file
3
test/http_decoder/conf/gtest_entry.toml
Normal file
3
test/http_decoder/conf/gtest_entry.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[entry]
|
||||
name="http_decoder_test_state_entry"
|
||||
topic="HTTP_DECODER_MESSAGE"
|
||||
18
test/http_decoder/conf/http_decoder.toml
Normal file
18
test/http_decoder/conf/http_decoder.toml
Normal file
@@ -0,0 +1,18 @@
|
||||
[basic]
|
||||
# Switch for decompress body, open(1) closed(0), default(0)
|
||||
decompress=1
|
||||
|
||||
# per session mempool size, default(32Ki)
|
||||
mempool_size=32768
|
||||
|
||||
# per session http parsed result queue length
|
||||
result_queue_len=16
|
||||
|
||||
# call fieldstat every stat_interval_pkts
|
||||
stat_interval_pkts=1000
|
||||
|
||||
# fieldstat output interval
|
||||
stat_output_interval=1
|
||||
|
||||
# connect tunnel
|
||||
proxy_enable=0
|
||||
64
test/http_decoder/http_decoder_gtest.cpp
Normal file
64
test/http_decoder/http_decoder_gtest.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include "http_decoder.h"
|
||||
#include "http_decoder_inc.h"
|
||||
|
||||
void httpd_url_decode(const char *string, size_t length, char *ostring, size_t *olen);
|
||||
TEST(url_decoder, none)
|
||||
{
|
||||
char decode_url_buf[2048];
|
||||
size_t decode_url_len = sizeof(decode_url_buf);
|
||||
const char *encode_url = "https://docs.geedge.net/#all-updates";
|
||||
httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len);
|
||||
|
||||
EXPECT_STREQ("https://docs.geedge.net/#all-updates", decode_url_buf);
|
||||
EXPECT_EQ(decode_url_len, strlen("https://docs.geedge.net/#all-updates"));
|
||||
}
|
||||
|
||||
TEST(url_decoder, simple)
|
||||
{
|
||||
char decode_url_buf[2048];
|
||||
size_t decode_url_len = sizeof(decode_url_buf);
|
||||
const char *encode_url = "http://a.b.cn/%A1%B2%C3%D4";
|
||||
httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len);
|
||||
|
||||
const unsigned char expect_result[] =
|
||||
{0x68, 0x74, 0x74, 0x70,
|
||||
0x3A, 0x2F, 0x2F, 0x61,
|
||||
0x2E, 0x62, 0x2E, 0x63,
|
||||
0x6E, 0x2F, 0xA1, 0xB2,
|
||||
0xC3, 0xD4, 0x00
|
||||
};
|
||||
EXPECT_STREQ((char *)expect_result, decode_url_buf);
|
||||
EXPECT_EQ(decode_url_len, sizeof(expect_result)-1);
|
||||
}
|
||||
|
||||
TEST(url_decoder, chinese1)
|
||||
{
|
||||
char decode_url_buf[2048];
|
||||
size_t decode_url_len = sizeof(decode_url_buf);
|
||||
const char *encode_url = "http://www.baidu.com/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87%E8%A7%A3%E7%A0%81";
|
||||
httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len);
|
||||
|
||||
EXPECT_STREQ("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81", decode_url_buf);
|
||||
EXPECT_EQ(decode_url_len, strlen("http://www.baidu.com/\xE6\xB5\x8B\xE8\xAF\x95\xE4\xB8\xAD\xE6\x96\x87\xE8\xA7\xA3\xE7\xA0\x81"));
|
||||
}
|
||||
|
||||
TEST(url_decoder, chinese2)
|
||||
{
|
||||
char decode_url_buf[2048];
|
||||
size_t decode_url_len = sizeof(decode_url_buf);
|
||||
const char *encode_url = "http%3A%2F%2Fwww.baidu.com%2F%E7%BC%96%E8%A7%A3%E7%A0%81%E6%B5%8B%E8%AF%95%E5%93%88%E5%93%88";
|
||||
httpd_url_decode(encode_url, strlen(encode_url), decode_url_buf, &decode_url_len);
|
||||
|
||||
EXPECT_STREQ("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88", decode_url_buf);
|
||||
EXPECT_EQ(decode_url_len, strlen("http://www.baidu.com/\xE7\xBC\x96\xE8\xA7\xA3\xE7\xA0\x81\xE6\xB5\x8B\xE8\xAF\x95\xE5\x93\x88\xE5\x93\x88"));
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, (char **)argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
66
test/http_decoder/http_decoder_gtest.h
Normal file
66
test/http_decoder/http_decoder_gtest.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#pragma once
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include <stellar/session.h>
|
||||
#include <stellar/stellar_mq.h>
|
||||
#include <stellar/stellar_exdata.h>
|
||||
#include <stellar/stellar.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#include "http_decoder.h"
|
||||
#include "md5.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <pcap/pcap.h>
|
||||
#include "cJSON.h"
|
||||
|
||||
#define TRUE 1
|
||||
#define FLASE 0
|
||||
|
||||
#define JSON_KEY_VALUE_STRING_MAX_LEN (4096)
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a, b) ((a) >= (b) ? (a) : (b))
|
||||
#endif
|
||||
#ifndef MIN
|
||||
#define MIN(a, b) ((a) >= (b) ? (b) : (a))
|
||||
#endif
|
||||
|
||||
#define MMALLOC(type, size) ((type *)calloc(1, size))
|
||||
#define MFREE(p) \
|
||||
do \
|
||||
{ \
|
||||
free(p); \
|
||||
p = NULL; \
|
||||
} while (0)
|
||||
|
||||
#if 0
|
||||
#define DEBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)
|
||||
#else
|
||||
#define DEBUG_PRINT(fmt, ...)
|
||||
#endif
|
||||
|
||||
#define EX_DATA_MAX_SIZE 10
|
||||
#define PIPELINE_MAX_NUM 8
|
||||
|
||||
#define GTEST_FIX_PAYLOAD_CSTR "<Hello http decoder World!!!>"
|
||||
#define GTEST_FIX_PAYLOAD_MD5 "e91e072f772737c7a45013cc3b1a916c"
|
||||
|
||||
#define GTEST_HTTP_URL_NAME "__X_HTTP_URL"
|
||||
#define GTEST_HTTP_TRANS_NAME "__X_HTTP_TRANSACTION"
|
||||
#define GTEST_HTTP_TRANS_SEQ_NAME "__X_HTTP_TRANSACTION_SEQ"
|
||||
#define GTEST_HTTP_TUPLE4_NAME "__X_HTTP_TUPLE4"
|
||||
#define GTEST_HTTP_PAYLOAD_NAME "__X_HTTP_PAYLOAD"
|
||||
#define GTEST_HTTP_RAW_PAYLOAD_MD5_NAME "__X_HTTP_RAW_PAYLOAD_MD5"
|
||||
#define GTEST_HTTP_DECOMPRESS_PAYLOAD_MD5_NAME "__X_HTTP_DECOMPRESS_PAYLOAD_MD5"
|
||||
|
||||
struct stellar *stellar_init(void);
|
||||
void stellar_destroy(struct stellar *st);
|
||||
int stellar_load_plugin(struct stellar *st, void *(plugin_init_cb)(struct stellar *st));
|
||||
struct session *stellar_session_new(struct stellar *st, int topic_id, const char *payload, size_t payload_len, u_int8_t dir);
|
||||
void stellar_session_active(struct stellar *st, struct session *sess, int topic_id, const char *payload, size_t payload_len, u_int8_t dir);
|
||||
void stellar_session_close(struct stellar *st, struct session *sess, int topic_id);
|
||||
226
test/http_decoder/http_decoder_perf_main.cpp
Normal file
226
test/http_decoder/http_decoder_perf_main.cpp
Normal file
@@ -0,0 +1,226 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include <stellar/session.h>
|
||||
#include <stellar/stellar_mq.h>
|
||||
#include <stellar/stellar_exdata.h>
|
||||
#include <stellar/stellar.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <fieldstat/fieldstat_easy.h>
|
||||
#include "http_decoder_gtest.h"
|
||||
|
||||
#define TIME_MEASURE 1
|
||||
#if TIME_MEASURE
|
||||
#define TIME_START() struct timespec _start_time, _end_time; long long time_diff_ns; clock_gettime(CLOCK_REALTIME, &_start_time)
|
||||
#define TIME_UPDATE() clock_gettime(CLOCK_REALTIME, &_start_time)
|
||||
#define TIME_DIFF() \
|
||||
do { \
|
||||
clock_gettime(CLOCK_REALTIME, &_end_time); \
|
||||
if (_end_time.tv_sec == _start_time.tv_sec)\
|
||||
{\
|
||||
time_diff_ns = (_end_time.tv_nsec - _start_time.tv_nsec);\
|
||||
}else{\
|
||||
time_diff_ns = (_end_time.tv_sec * 1000 * 1000 * 1000 + _end_time.tv_nsec) - (_start_time.tv_sec * 1000 * 1000 * 1000 + _start_time.tv_nsec);\
|
||||
}\
|
||||
}while (0)
|
||||
#else
|
||||
#define TIME_START()
|
||||
#define TIME_DIFF()
|
||||
#endif
|
||||
|
||||
struct test_packet{
|
||||
const char *payload;
|
||||
size_t payload_len;
|
||||
u_int8_t dir;
|
||||
};
|
||||
extern "C" void *http_decoder_perf_plug_init(struct stellar *st);
|
||||
extern "C" void *http_decoder_init(struct stellar *st);
|
||||
extern "C" void http_decoder_exit(void *plugin_env);
|
||||
extern "C" void *httpd_session_ctx_new_cb(struct session *sess, void *plugin_env);
|
||||
extern "C" void _httpd_ex_data_free_cb(struct session *s, int idx,void *ex_data, void *arg);
|
||||
extern "C" void http_decoder_tcp_stream_msg_cb(struct session *sess, int topic_id, const void *msg, void *no_use_ctx, void *plugin_env);
|
||||
extern "C" void http_decoder_perf_entry(struct session *sess, int topic_id, const void *raw_msg, void *per_session_ctx, void *plugin_env);
|
||||
|
||||
static struct fieldstat_easy *fs4_instance;
|
||||
static int fs4_simple_id;
|
||||
static int fs4_long_long_url_id;
|
||||
static int fs4_frag_id;
|
||||
|
||||
static void perf_test_loop(struct stellar *st, int tcp_stream_topic_id, struct test_packet *test_payload, int test_payload_index_max, int fs4_metric_id)
|
||||
{
|
||||
int idx = 0;
|
||||
struct session *sess;
|
||||
TIME_START();
|
||||
sess = stellar_session_new(st, tcp_stream_topic_id, test_payload[idx].payload, test_payload[idx].payload_len, test_payload[idx].dir);
|
||||
idx++;
|
||||
TIME_DIFF();
|
||||
fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns);
|
||||
|
||||
for(; idx < test_payload_index_max; idx++){
|
||||
TIME_UPDATE();
|
||||
stellar_session_active(st, sess, tcp_stream_topic_id, test_payload[idx].payload, test_payload[idx].payload_len, test_payload[idx].dir);
|
||||
TIME_DIFF();
|
||||
fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns);
|
||||
}
|
||||
|
||||
TIME_UPDATE();
|
||||
stellar_session_close(st, sess, tcp_stream_topic_id);
|
||||
TIME_DIFF();
|
||||
fieldstat_easy_histogram_record(fs4_instance, 0, fs4_metric_id, NULL, 0, time_diff_ns);
|
||||
}
|
||||
|
||||
#define SET_DATA_LENGTH_DIR(pkt_payload, cstr_in_heap, cur_dir, tmp_index) \
|
||||
pkt_payload.payload = cstr_in_heap; \
|
||||
pkt_payload.payload_len = strlen(pkt_payload.payload); \
|
||||
pkt_payload.dir = cur_dir;\
|
||||
tmp_index++;
|
||||
|
||||
static void init_test_data_simple(struct test_packet *test_payload, int *index)
|
||||
{
|
||||
int tmp_index = 0;
|
||||
const char *c2s_payload = strdup("GET / HTTP/1.1\r\nHost: www.simple.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n");
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], c2s_payload, FLOW_DIRECTION_C2S , tmp_index);
|
||||
|
||||
const char *content = "Hello, http decoder perf test simple!!!";
|
||||
int content_length = strlen(content);
|
||||
char *s2c_payload = (char *)malloc(1024);
|
||||
snprintf(s2c_payload, 1024, "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nConnection: keep-alive\r\nDate: Sat, 01 May 2024 01:36:57 GMT\r\nContent-Type: text/html;charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s", content_length, content);
|
||||
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index);
|
||||
*index = tmp_index;
|
||||
}
|
||||
|
||||
static void init_test_data_frag(struct test_packet *test_payload, int *index)
|
||||
{
|
||||
int tmp_index = 0;
|
||||
/* c2s */
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("GET / HTTP/1.1\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Host: www.fragment.com\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Cache-Control: max-age=0\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Connection: keep-alive\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Referer: http://fragment.com/register.jsp?redirect:http://aa.bb.cc.dd.com/?\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Cookie: JSESSIONID=385C79E211D561C0CA13D90F150F603D34875GH87FSHG8S7RTHG74875GHS8R7THG87SRTH\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Accept: */*\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Accept-Encoding: gzip, deflate\r\n"), FLOW_DIRECTION_C2S , tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("\r\n"), FLOW_DIRECTION_C2S , tmp_index); //header EOF
|
||||
|
||||
/* s2c */
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("HTTP/1.1 200 OK\r\n"), FLOW_DIRECTION_S2C, tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Server: Apache-Coyote/1.1\r\n"), FLOW_DIRECTION_S2C, tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Connection: keep-alive\r\n"), FLOW_DIRECTION_S2C, tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Content-Type: text/html;charset=UTF-8\r\n"), FLOW_DIRECTION_S2C, tmp_index);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("Date: Sat, 01 May 2024 01:36:57 GMT\r\n"), FLOW_DIRECTION_S2C, tmp_index);
|
||||
|
||||
char *cont_len_buf = (char *)malloc(1024);
|
||||
const char *s2c_payload = strdup("Hello, http decoder perf test fragment!!!");
|
||||
int content_length = strlen(s2c_payload);
|
||||
snprintf(cont_len_buf, 1024, "Content-Length: %d\r\n", content_length);
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], cont_len_buf, FLOW_DIRECTION_S2C, tmp_index);
|
||||
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], strdup("\r\n"), FLOW_DIRECTION_S2C, tmp_index); //header EOF
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index);
|
||||
*index = tmp_index;
|
||||
}
|
||||
|
||||
static void init_test_data_long_long_url(struct test_packet *test_payload, int *index)
|
||||
{
|
||||
int tmp_index = 0;
|
||||
|
||||
const char *request_line_frag1 = strdup("GET /long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/");
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag1, FLOW_DIRECTION_C2S , tmp_index);
|
||||
|
||||
const char *request_line_frag2 = strdup("long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/\
|
||||
/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long.index.html HTTP/1.1\r\n");
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag2, FLOW_DIRECTION_C2S , tmp_index);
|
||||
|
||||
const char *request_line_frag3 = strdup("Host: www.long-long-url.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n");
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], request_line_frag3, FLOW_DIRECTION_C2S , tmp_index);
|
||||
|
||||
const char *content = "Hello, http decoder perf test long long url!!!";
|
||||
int content_length = strlen(content);
|
||||
char *s2c_payload = (char *)malloc(1024);
|
||||
snprintf(s2c_payload, 1024, "HTTP/1.1 200 OK\r\nServer: Apache-Coyote/1.1\r\nConnection: keep-alive\r\nDate: Sat, 01 May 2024 01:36:57 GMT\r\nContent-Type: text/html;charset=UTF-8\r\nContent-Length: %d\r\n\r\n%s", content_length, content);
|
||||
|
||||
SET_DATA_LENGTH_DIR(test_payload[tmp_index], s2c_payload, FLOW_DIRECTION_S2C, tmp_index);
|
||||
*index = tmp_index;
|
||||
}
|
||||
|
||||
static void test_payload_free(struct test_packet *test_payload, int test_payload_index_max)
|
||||
{
|
||||
for(int i = 0; i < test_payload_index_max; i++){
|
||||
if(test_payload[i].payload){
|
||||
free((void *)test_payload[i].payload);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void perf_stat_init(void)
|
||||
{
|
||||
fs4_instance = fieldstat_easy_new(1, "http_decoder_test", NULL, 0);
|
||||
fieldstat_easy_enable_auto_output(fs4_instance, "./httpd_hisgram.json", 1);
|
||||
|
||||
fs4_simple_id = fieldstat_easy_register_histogram(fs4_instance, "simple", 1, 99999999, 5);
|
||||
fs4_frag_id = fieldstat_easy_register_histogram(fs4_instance, "frag", 1, 99999999, 5);
|
||||
fs4_long_long_url_id = fieldstat_easy_register_histogram(fs4_instance, "long-url", 1, 99999999, 5);
|
||||
}
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
struct test_packet test_payload_simple [4] = {};
|
||||
int payload_index_simple = 0;
|
||||
struct test_packet test_payload_long_long_url [8] = {};
|
||||
int payload_index_long_long_url = 0;
|
||||
struct test_packet test_payload_frag [32] = {};
|
||||
int payload_index_frag = 0;
|
||||
|
||||
struct stellar *st = stellar_init();
|
||||
|
||||
int tcp_stream_topic_id = stellar_mq_get_topic_id(st, TOPIC_TCP_STREAM);
|
||||
|
||||
if(stellar_load_plugin(st, http_decoder_init) < 0){
|
||||
fprintf(stderr, "load plugin 'http_decoder_init' failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(stellar_load_plugin(st, http_decoder_perf_plug_init) < 0){
|
||||
fprintf(stderr, "load plugin 'http_decoder_perf_plug_init' failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
perf_stat_init();
|
||||
init_test_data_simple(test_payload_simple, &payload_index_simple);
|
||||
init_test_data_long_long_url(test_payload_long_long_url, &payload_index_long_long_url);
|
||||
init_test_data_frag(test_payload_frag, &payload_index_frag);
|
||||
|
||||
// while(1){
|
||||
for(int i = 0; i < 1000; i++){
|
||||
perf_test_loop(st, tcp_stream_topic_id,test_payload_simple, payload_index_simple, fs4_simple_id);
|
||||
perf_test_loop(st, tcp_stream_topic_id,test_payload_long_long_url, payload_index_long_long_url, fs4_long_long_url_id);
|
||||
perf_test_loop(st, tcp_stream_topic_id,test_payload_frag, payload_index_frag, fs4_frag_id);
|
||||
}
|
||||
|
||||
test_payload_free(test_payload_simple, sizeof(test_payload_simple)/sizeof(struct test_packet)) ;
|
||||
test_payload_free(test_payload_long_long_url, sizeof(test_payload_long_long_url)/sizeof(struct test_packet)) ;
|
||||
test_payload_free(test_payload_frag, sizeof(test_payload_frag)/sizeof(struct test_packet)) ;
|
||||
stellar_destroy(st);
|
||||
sleep(1);
|
||||
fieldstat_easy_free(fs4_instance);
|
||||
return 0;
|
||||
}
|
||||
143
test/http_decoder/http_decoder_perf_plug.cpp
Normal file
143
test/http_decoder/http_decoder_perf_plug.cpp
Normal file
@@ -0,0 +1,143 @@
|
||||
#include "http_decoder.h"
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#include "http_decoder_inc.h"
|
||||
#include "cJSON.h"
|
||||
}
|
||||
#endif
|
||||
|
||||
#define MAX_KEY_STR_LEN 2048
|
||||
|
||||
static int g_result_count = 0;
|
||||
static int g_header_count = 1;
|
||||
static int g_exdata_idx = -1;
|
||||
static int g_topic_id = -1;
|
||||
static int g_plugin_id = -1;
|
||||
|
||||
#define DEBUG_PRINT(fmt, ...) //printf(fmt, ##__VA_ARGS__)
|
||||
|
||||
extern "C" void http_decoder_perf_entry(struct session *sess, int topic_id, const void *raw_msg, void *per_session_ctx, void *plugin_env)
|
||||
{
|
||||
struct http_request_line req_line = {0};
|
||||
struct http_response_line res_line = {0};
|
||||
struct http_header header = {0};
|
||||
hstring url = {};
|
||||
hstring body = {};
|
||||
struct http_message *msg = (struct http_message *)raw_msg;
|
||||
enum http_message_type msg_type = http_message_type_get(msg);
|
||||
void *ret1, *ret2;
|
||||
|
||||
switch (msg_type)
|
||||
{
|
||||
case HTTP_MESSAGE_REQ_LINE:
|
||||
DEBUG_PRINT("---------------------------------------------------------------\n");
|
||||
http_message_request_line_get0(msg, &req_line);
|
||||
if (req_line.uri.iov_base)
|
||||
{
|
||||
DEBUG_PRINT("req_line.method.iov_base: %.*s\n", req_line.method.iov_len, req_line.method.iov_base);
|
||||
ret1 = memmem(req_line.method.iov_base, req_line.method.iov_len, "PUT", 3);
|
||||
DEBUG_PRINT("req_line.version.iov_base: %.*s\n", req_line.version.iov_len, req_line.version.iov_base);
|
||||
}
|
||||
break;
|
||||
case HTTP_MESSAGE_REQ_HEADER:
|
||||
while (http_message_header_next(msg, &header) >= 0)
|
||||
{
|
||||
ret1 = memmem(header.key.iov_base, header.key.iov_len, "key", 3);
|
||||
ret2 = memmem(header.val.iov_base, header.val.iov_len, "val", 3);
|
||||
DEBUG_PRINT("REQ header: %.*s : %.*s\n", (int)header.key.iov_len, header.key.iov_base, (int)header.val.iov_len, header.val.iov_base);
|
||||
}
|
||||
http_message_raw_url_get0(msg, &url);
|
||||
if(url.iov_base && url.iov_len){
|
||||
DEBUG_PRINT("URL: %.*s\n", url.iov_len, url.iov_base);
|
||||
}
|
||||
break;
|
||||
case HTTP_MESSAGE_REQ_BODY:
|
||||
// http_message_get_request_raw_body(msg, &body);
|
||||
// output_http_body(&body, 0);
|
||||
http_message_decompress_body_get0(msg, &body);
|
||||
// output_http_body(&body, 1);
|
||||
ret1 = memmem(body.iov_base, body.iov_len, "</html>", 7);
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_LINE:
|
||||
http_message_response_line_get0(msg, &res_line);
|
||||
ret1 = memmem(res_line.status.iov_base, res_line.status.iov_len, "OK", 2);
|
||||
DEBUG_PRINT("res_line.status.iov_base: %.*s\n", (int)res_line.status.iov_len, res_line.status.iov_base);
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_HEADER:
|
||||
while (http_message_header_next(msg, &header) >= 0)
|
||||
{
|
||||
ret1 = memmem(header.key.iov_base, header.key.iov_len, "key", 3);
|
||||
ret2 = memmem(header.val.iov_base, header.val.iov_len, "val", 3);
|
||||
DEBUG_PRINT("RES header: %.*s : %.*s\n", (int)header.key.iov_len, header.key.iov_base, (int)header.val.iov_len, header.val.iov_base);
|
||||
}
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_BODY_START:
|
||||
case HTTP_MESSAGE_RES_BODY:
|
||||
case HTTP_MESSAGE_RES_BODY_END:
|
||||
http_message_raw_body_get0(msg, &body);
|
||||
if(body.iov_base!=NULL && body.iov_len > 0){
|
||||
DEBUG_PRINT("res raw body: %.*s\n", body.iov_len, body.iov_base);
|
||||
}
|
||||
// output_http_body(&body, 0);
|
||||
http_message_decompress_body_get0(msg, &body);
|
||||
if(body.iov_base!=NULL && body.iov_len > 0){
|
||||
// output_http_body(&body, 1);
|
||||
ret1 = memmem(body.iov_base, body.iov_len, "</html>", 7);
|
||||
DEBUG_PRINT("res unzip body: %.*s\n", body.iov_len, body.iov_base);
|
||||
DEBUG_PRINT("---------------------------------------------------------------\n");
|
||||
}
|
||||
break;
|
||||
// to do: check payload
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
static on_session_msg_cb_func*g_entry_fun = &http_decoder_perf_entry;
|
||||
|
||||
static void http_decoder_test_exdata_free(int idx, void *ex_ptr, void *arg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
extern "C" void *http_decoder_perf_plug_init(struct stellar *st)
|
||||
{
|
||||
g_plugin_id = stellar_session_plugin_register(st, NULL, NULL, NULL);
|
||||
g_exdata_idx = stellar_exdata_new_index(st, "HTTP_DECODER_REQ_TEST",
|
||||
http_decoder_test_exdata_free,
|
||||
NULL);
|
||||
if (g_exdata_idx < 0)
|
||||
{
|
||||
printf("[%s:%d]: can't get http_decoder exdata index !!!\n", __FUNCTION__, __LINE__);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
g_topic_id = stellar_mq_get_topic_id(st, "HTTP_DECODER_MESSAGE");
|
||||
if (g_topic_id < 0)
|
||||
{
|
||||
printf("[%s:%d]: can't get http_decoder topic id !!!\n", __FUNCTION__, __LINE__);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
stellar_session_mq_subscribe(st, g_topic_id, g_entry_fun, g_plugin_id);
|
||||
// printf("http_decoder_test_init OK!\n");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern "C" void http_decoder_perf_plug_exit(void *test_ctx)
|
||||
{
|
||||
if (test_ctx != NULL)
|
||||
{
|
||||
FREE(test_ctx);
|
||||
}
|
||||
printf("http_decoder_perf plug exit OK!\n");
|
||||
}
|
||||
661
test/http_decoder/http_decoder_test_plug.cpp
Normal file
661
test/http_decoder/http_decoder_test_plug.cpp
Normal file
@@ -0,0 +1,661 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "http_decoder.h"
|
||||
#include "http_decoder_inc.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#include "cJSON.h"
|
||||
#include "http_decoder_gtest.h"
|
||||
#include "md5.h"
|
||||
#include "toml/toml.h"
|
||||
|
||||
int commit_test_result_json(cJSON *node, const char *name);
|
||||
extern void http_decoder_test_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env);
|
||||
extern void http_decoder_test_state_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env);
|
||||
extern void http_decoder_tunnel_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env);
|
||||
static on_session_msg_cb_func *g_entry_fun = http_decoder_test_entry;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define MAX_KEY_STR_LEN 2048
|
||||
#define GTEST_PLUG_ENTRY_CFG "./etc/http/gtest_entry.toml"
|
||||
|
||||
struct plug_entry_t
|
||||
{
|
||||
const char *name;
|
||||
on_session_msg_cb_func *entry;
|
||||
};
|
||||
|
||||
static struct plug_entry_t g_entry_tbl[] = {
|
||||
{"http_decoder_test_entry", http_decoder_test_entry},
|
||||
{"http_decoder_test_state_entry", http_decoder_test_state_entry},
|
||||
{"http_decoder_tunnel_entry", http_decoder_tunnel_entry},
|
||||
{NULL, NULL}};
|
||||
|
||||
enum http_transaction_type
|
||||
{
|
||||
HTTP_TRANSACTION_REQ = 0,
|
||||
HTTP_TRANSACTION_RES,
|
||||
HTTP_TRANSACTION_SESSION, // global session info
|
||||
HTTP_TRANSACTION_MAX
|
||||
};
|
||||
|
||||
enum payload_compress_mode
|
||||
{
|
||||
PAYLOAD_RAW = 0,
|
||||
PAYLOAD_DECOMPRESS = 1,
|
||||
PAYLOAD_MAX = 2,
|
||||
};
|
||||
|
||||
struct gtest_plug_exdata_t
|
||||
{
|
||||
cJSON *result_jnode[HTTP_TRANSACTION_MAX];
|
||||
MD5_CTX *payload_md5ctx[PAYLOAD_MAX][HTTP_TRANSACTION_MAX];
|
||||
};
|
||||
|
||||
static int g_result_count = 0;
|
||||
static int g_header_count = 1;
|
||||
static int g_http_gtest_plugin_id = -1;
|
||||
static int g_exdata_idx = -1;
|
||||
static int g_topic_id = -1;
|
||||
|
||||
#if 0
|
||||
void output_http_req_line(struct http_request_line *req_line)
|
||||
{
|
||||
char tmp_str[MAX_KEY_STR_LEN] = {0};
|
||||
memcpy(tmp_str, req_line->method.iov_base, req_line->method.iov_len);
|
||||
printf("req_method:%s\n", tmp_str);
|
||||
|
||||
memset(tmp_str, 0, sizeof(tmp_str));
|
||||
memcpy(tmp_str, req_line->uri.iov_base, req_line->uri.iov_len);
|
||||
printf("req_uri:%s\n", tmp_str);
|
||||
|
||||
memset(tmp_str, 0, sizeof(tmp_str));
|
||||
memcpy(tmp_str, req_line->version.iov_base, req_line->version.iov_len);
|
||||
printf("req_version:%s\n", tmp_str);
|
||||
}
|
||||
|
||||
void output_http_res_line(struct http_response_line *res_line)
|
||||
{
|
||||
char tmp_str[MAX_KEY_STR_LEN] = {0};
|
||||
memcpy(tmp_str, res_line->version.iov_base, res_line->version.iov_len);
|
||||
printf("res_version:%s\n", tmp_str);
|
||||
|
||||
memset(tmp_str, 0, sizeof(tmp_str));
|
||||
memcpy(tmp_str, res_line->status.iov_base, res_line->status.iov_len);
|
||||
printf("res_status:%s\n", tmp_str);
|
||||
}
|
||||
|
||||
void output_http_header(struct http_header *header)
|
||||
{
|
||||
char tmp_key[MAX_KEY_STR_LEN] = {0};
|
||||
char tmp_val[MAX_KEY_STR_LEN] = {0};
|
||||
|
||||
memcpy(tmp_key, header->key.iov_base, header->key.iov_len);
|
||||
memcpy(tmp_val, header->val.iov_base, header->val.iov_len);
|
||||
printf("<%s:%s>\n", tmp_key, tmp_val);
|
||||
}
|
||||
|
||||
void output_http_body(hstring *body, int decompress_flag)
|
||||
{
|
||||
int counter = 0;
|
||||
|
||||
if (1 == decompress_flag)
|
||||
{
|
||||
printf("\n\n----------------decompress body len:%zu---------------\n",
|
||||
body->iov_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n\n----------------raw body len:%zu---------------\n",
|
||||
body->iov_len);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < body->iov_len; i++)
|
||||
{
|
||||
if (counter % 16 == 0)
|
||||
{
|
||||
printf("\n");
|
||||
}
|
||||
printf("%02x ", (unsigned char)body->iov_base[i]);
|
||||
counter++;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
static void append_http_payload(struct session *sess, struct gtest_plug_exdata_t *gtest_plug_exdata, enum payload_compress_mode mode,
|
||||
const hstring *body, enum http_transaction_type type)
|
||||
{
|
||||
if (NULL == body->iov_base || 0 == body->iov_len)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (NULL == gtest_plug_exdata->payload_md5ctx[mode][type])
|
||||
{
|
||||
gtest_plug_exdata->payload_md5ctx[mode][type] = MMALLOC(MD5_CTX, sizeof(MD5_CTX));
|
||||
MD5Init(gtest_plug_exdata->payload_md5ctx[mode][type]);
|
||||
}
|
||||
MD5Update(gtest_plug_exdata->payload_md5ctx[mode][type], (unsigned char *)body->iov_base, body->iov_len);
|
||||
}
|
||||
|
||||
int http_field_to_json(cJSON *object, const char *key, char *val, size_t val_len)
|
||||
{
|
||||
if (NULL == object || NULL == key || NULL == val || 0 == val_len)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *tmp = CALLOC(char, val_len + 1);
|
||||
memcpy(tmp, val, val_len);
|
||||
cJSON_AddStringToObject(object, key, tmp);
|
||||
FREE(tmp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void transaction_index_to_json(cJSON *ctx, int transaction_index)
|
||||
{
|
||||
cJSON_AddNumberToObject(ctx, GTEST_HTTP_TRANS_SEQ_NAME, transaction_index);
|
||||
}
|
||||
|
||||
void req_line_to_json(cJSON *ctx, struct http_request_line *req_line)
|
||||
{
|
||||
http_field_to_json(ctx, "method", (char *)req_line->method.iov_base,
|
||||
req_line->method.iov_len);
|
||||
http_field_to_json(ctx, "uri", (char *)req_line->uri.iov_base, req_line->uri.iov_len);
|
||||
http_field_to_json(ctx, "req_version", (char *)req_line->version.iov_base,
|
||||
req_line->version.iov_len);
|
||||
|
||||
cJSON_AddNumberToObject(ctx, "major_version", req_line->major_version);
|
||||
cJSON_AddNumberToObject(ctx, "minor_version", req_line->minor_version);
|
||||
}
|
||||
|
||||
void res_line_to_json(cJSON *ctx, struct http_response_line *res_line)
|
||||
{
|
||||
http_field_to_json(ctx, "res_version", (char *)res_line->version.iov_base,
|
||||
res_line->version.iov_len);
|
||||
http_field_to_json(ctx, "res_status", (char *)res_line->status.iov_base,
|
||||
res_line->status.iov_len);
|
||||
|
||||
cJSON_AddNumberToObject(ctx, "major_version", res_line->major_version);
|
||||
cJSON_AddNumberToObject(ctx, "minor_version", res_line->minor_version);
|
||||
cJSON_AddNumberToObject(ctx, "status_code", res_line->status_code);
|
||||
}
|
||||
|
||||
void http_header_to_json(cJSON *ctx, struct http_header *header)
|
||||
{
|
||||
char key[MAX_KEY_STR_LEN] = {0};
|
||||
if ((header->key.iov_base == NULL) || (header->val.iov_base == NULL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(key, header->key.iov_base, header->key.iov_len);
|
||||
|
||||
if (cJSON_HasObjectItem(ctx, key) == FALSE)
|
||||
{
|
||||
http_field_to_json(ctx, key, (char *)header->val.iov_base, header->val.iov_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ctx already has the key, so rename key by key%d
|
||||
char new_key[MAX_KEY_STR_LEN] = {0};
|
||||
sprintf(new_key, "%s%d", key, g_header_count++);
|
||||
http_field_to_json(ctx, new_key, (char *)header->val.iov_base, header->val.iov_len);
|
||||
}
|
||||
}
|
||||
|
||||
void http_url_add_to_json(cJSON *ctx, struct http_message *msg)
|
||||
{
|
||||
hstring raw_url_result = {};
|
||||
|
||||
if (cJSON_GetObjectItem(ctx, GTEST_HTTP_URL_NAME))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
http_message_raw_url_get0(msg, &raw_url_result);
|
||||
if (raw_url_result.iov_base == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
struct http_header raw_url_header_result = {};
|
||||
|
||||
raw_url_header_result.key.iov_base = (char *)GTEST_HTTP_URL_NAME;
|
||||
raw_url_header_result.key.iov_len = strlen(GTEST_HTTP_URL_NAME);
|
||||
raw_url_header_result.val = raw_url_result;
|
||||
|
||||
http_header_to_json(ctx, &raw_url_header_result);
|
||||
|
||||
hstring decode_url_result = {};
|
||||
struct http_header decode_url_header_result = {};
|
||||
http_message_decoded_url_get0(msg, &decode_url_result);
|
||||
if (decode_url_result.iov_len != raw_url_result.iov_len)
|
||||
{
|
||||
decode_url_header_result.key.iov_base = (char *)"__X_HTTP_DECODED_URL";
|
||||
decode_url_header_result.key.iov_len = strlen("__X_HTTP_DECODED_URL");
|
||||
decode_url_header_result.val = decode_url_result;
|
||||
http_header_to_json(ctx, &decode_url_header_result);
|
||||
}
|
||||
}
|
||||
|
||||
static void commit_payload_md5sum(cJSON *last_jnode, struct gtest_plug_exdata_t *gtest_plug_exdata, enum http_transaction_type type)
|
||||
{
|
||||
// finish md5 streming hash
|
||||
for (int mode = 0; mode < PAYLOAD_MAX; mode++)
|
||||
{
|
||||
if (gtest_plug_exdata->payload_md5ctx[mode][type])
|
||||
{
|
||||
unsigned char md5_result_bin[16] = {0};
|
||||
unsigned char md5_result_cstr[33] = {0};
|
||||
MD5Final(md5_result_bin, gtest_plug_exdata->payload_md5ctx[mode][type]);
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
sprintf((char *)md5_result_cstr + 2 * i, "%02x", md5_result_bin[i]);
|
||||
md5_result_cstr[32] = '\0';
|
||||
if(mode == PAYLOAD_RAW){
|
||||
cJSON_AddStringToObject(last_jnode, GTEST_HTTP_RAW_PAYLOAD_MD5_NAME, (char *)md5_result_cstr);
|
||||
}else{
|
||||
cJSON_AddStringToObject(last_jnode, GTEST_HTTP_DECOMPRESS_PAYLOAD_MD5_NAME, (char *)md5_result_cstr);
|
||||
}
|
||||
FREE(gtest_plug_exdata->payload_md5ctx[mode][type]);
|
||||
gtest_plug_exdata->payload_md5ctx[mode][type] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Full duplex
|
||||
static void commit_last_half_flow_data(struct gtest_plug_exdata_t *gtest_plug_exdata,
|
||||
struct http_message *msg, enum http_transaction_type type, int final)
|
||||
{
|
||||
char result_name[MAX_KEY_STR_LEN] = {0};
|
||||
|
||||
cJSON *last_jnode = gtest_plug_exdata->result_jnode[type];
|
||||
if (last_jnode)
|
||||
{
|
||||
commit_payload_md5sum(last_jnode, gtest_plug_exdata, type);
|
||||
sprintf(result_name, "%d", g_result_count);
|
||||
commit_test_result_json(last_jnode, result_name);
|
||||
gtest_plug_exdata->result_jnode[type] = NULL;
|
||||
g_result_count++;
|
||||
}
|
||||
|
||||
if (0 == final)
|
||||
{
|
||||
gtest_plug_exdata->result_jnode[type] = cJSON_CreateObject();
|
||||
if (HTTP_TRANSACTION_REQ == type)
|
||||
{
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[type], GTEST_HTTP_TRANS_NAME, "request");
|
||||
}
|
||||
else if (HTTP_TRANSACTION_RES == type)
|
||||
{
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[type], GTEST_HTTP_TRANS_NAME, "response");
|
||||
}
|
||||
if (msg)
|
||||
{
|
||||
transaction_index_to_json(gtest_plug_exdata->result_jnode[type], http_message_get_transaction_seq(msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void http_decoder_test_update_session_tuple4(struct session *sess, struct gtest_plug_exdata_t *gtest_plug_exdata)
|
||||
{
|
||||
if (gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION] == NULL)
|
||||
{
|
||||
const char *human_addr_cstr = session_get0_readable_addr(sess);
|
||||
if (NULL == human_addr_cstr)
|
||||
{
|
||||
fprintf(stderr, "can't get readable_addr, to use session_get0_readable_addr() the sapp_log.conf level must <= INFO\n");
|
||||
return;
|
||||
}
|
||||
char result_name[MAX_KEY_STR_LEN] = {0};
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION] = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], GTEST_HTTP_TUPLE4_NAME, human_addr_cstr);
|
||||
sprintf(result_name, "%d", g_result_count++);
|
||||
commit_test_result_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], result_name);
|
||||
}
|
||||
}
|
||||
|
||||
static int get_gtest_plug_entry(const char *cfg_path, char *entry_name, int max_len, char *topic_name, int topic_max_len)
|
||||
{
|
||||
FILE *fp = fopen(cfg_path, "r");
|
||||
if (NULL == fp)
|
||||
{
|
||||
fprintf(stderr, "[%s:%d]Can't open config file:%s",
|
||||
__FUNCTION__, __LINE__, cfg_path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ret = 0;
|
||||
char errbuf[256] = {0};
|
||||
|
||||
toml_table_t *root = toml_parse_file(fp, errbuf, sizeof(errbuf));
|
||||
fclose(fp);
|
||||
|
||||
toml_table_t *basic_sec_tbl = toml_table_in(root, "entry");
|
||||
if (NULL == basic_sec_tbl)
|
||||
{
|
||||
fprintf(stderr, "[%s:%d]config file:%s has no key: [entry]",
|
||||
__FUNCTION__, __LINE__, cfg_path);
|
||||
toml_free(root);
|
||||
return -1;
|
||||
}
|
||||
|
||||
toml_datum_t str_val = toml_string_in(basic_sec_tbl, "name");
|
||||
if (str_val.ok != 0)
|
||||
{
|
||||
strncpy(entry_name, str_val.u.s, max_len);
|
||||
free(str_val.u.s);
|
||||
}
|
||||
|
||||
toml_datum_t topic_str_val = toml_string_in(basic_sec_tbl, "topic");
|
||||
if (str_val.ok != 0)
|
||||
{
|
||||
strncpy(topic_name, topic_str_val.u.s, topic_max_len);
|
||||
free(topic_str_val.u.s);
|
||||
}
|
||||
|
||||
toml_free(root);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void set_gtest_plug_entry(const char *entry_name)
|
||||
{
|
||||
if (NULL == entry_name)
|
||||
{
|
||||
g_entry_fun = http_decoder_test_entry; // set default
|
||||
return;
|
||||
}
|
||||
for (size_t i = 0; g_entry_tbl[i].name != NULL; i++)
|
||||
{
|
||||
if (strcmp(entry_name, g_entry_tbl[i].name) == 0)
|
||||
{
|
||||
g_entry_fun = g_entry_tbl[i].entry;
|
||||
return;
|
||||
}
|
||||
}
|
||||
g_entry_fun = http_decoder_test_entry; // set default
|
||||
}
|
||||
|
||||
extern "C" void http_decoder_test_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env)
|
||||
{
|
||||
struct http_request_line req_line = {0};
|
||||
struct http_response_line res_line = {0};
|
||||
struct http_header header = {0};
|
||||
hstring body = {0};
|
||||
struct http_message *msg = (struct http_message *)raw_msg;
|
||||
enum http_message_type msg_type = http_message_type_get(msg);
|
||||
|
||||
struct gtest_plug_exdata_t *gtest_plug_exdata = (struct gtest_plug_exdata_t *)session_exdata_get(sess, g_exdata_idx);
|
||||
if (NULL == gtest_plug_exdata)
|
||||
{
|
||||
gtest_plug_exdata = (struct gtest_plug_exdata_t *)calloc(1, sizeof(struct gtest_plug_exdata_t));
|
||||
session_exdata_set(sess, g_exdata_idx, gtest_plug_exdata);
|
||||
}
|
||||
|
||||
if (http_message_type_is_req(sess, msg_type))
|
||||
{
|
||||
cJSON *json = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ];
|
||||
}
|
||||
else
|
||||
{
|
||||
cJSON *json = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES];
|
||||
}
|
||||
|
||||
http_decoder_test_update_session_tuple4(sess, gtest_plug_exdata);
|
||||
|
||||
switch (msg_type)
|
||||
{
|
||||
case HTTP_MESSAGE_REQ_LINE:
|
||||
commit_last_half_flow_data(gtest_plug_exdata, msg, HTTP_TRANSACTION_REQ, 0);
|
||||
http_message_request_line_get0(msg, &req_line);
|
||||
req_line_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], &req_line);
|
||||
break;
|
||||
case HTTP_MESSAGE_REQ_HEADER:
|
||||
while (http_message_header_next(msg, &header) >= 0)
|
||||
{
|
||||
http_header_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], &header);
|
||||
}
|
||||
g_header_count = 1;
|
||||
break;
|
||||
case HTTP_MESSAGE_REQ_HEADER_END:
|
||||
http_url_add_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], msg);
|
||||
break;
|
||||
case HTTP_MESSAGE_REQ_BODY_START:
|
||||
case HTTP_MESSAGE_REQ_BODY:
|
||||
memset(&body, 0, sizeof(hstring));
|
||||
http_message_raw_body_get0(msg, &body);
|
||||
if (body.iov_base && body.iov_len)
|
||||
{
|
||||
append_http_payload(sess, gtest_plug_exdata, PAYLOAD_RAW, &body, HTTP_TRANSACTION_REQ);
|
||||
}
|
||||
// output_http_body(&body, 0);
|
||||
http_message_decompress_body_get0(msg, &body);
|
||||
// output_http_body(&body, 1);
|
||||
if (body.iov_base && body.iov_len)
|
||||
{
|
||||
append_http_payload(sess, gtest_plug_exdata, PAYLOAD_DECOMPRESS, &body, HTTP_TRANSACTION_REQ);
|
||||
}
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_LINE:
|
||||
commit_last_half_flow_data(gtest_plug_exdata, msg, HTTP_TRANSACTION_RES, 0);
|
||||
http_message_response_line_get0(msg, &res_line);
|
||||
res_line_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], &res_line);
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_HEADER:
|
||||
while (http_message_header_next(msg, &header) >= 0)
|
||||
{
|
||||
http_header_to_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], &header);
|
||||
}
|
||||
g_header_count = 1;
|
||||
break;
|
||||
case HTTP_MESSAGE_RES_BODY_START:
|
||||
case HTTP_MESSAGE_RES_BODY:
|
||||
memset(&body, 0, sizeof(hstring));
|
||||
http_message_raw_body_get0(msg, &body);
|
||||
if (body.iov_base && body.iov_len)
|
||||
{
|
||||
append_http_payload(sess, gtest_plug_exdata, PAYLOAD_RAW, &body, HTTP_TRANSACTION_RES);
|
||||
}
|
||||
// output_http_body(&body, 0);
|
||||
memset(&body, 0, sizeof(hstring));
|
||||
http_message_decompress_body_get0(msg, &body);
|
||||
// output_http_body(&body, 1);
|
||||
if (body.iov_base && body.iov_len)
|
||||
{
|
||||
append_http_payload(sess, gtest_plug_exdata, PAYLOAD_DECOMPRESS, &body, HTTP_TRANSACTION_RES);
|
||||
}
|
||||
break;
|
||||
|
||||
// to do: check payload
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void http_decoder_test_exdata_free(int idx, void *ex_ptr, void *arg)
|
||||
{
|
||||
if (ex_ptr != NULL)
|
||||
{
|
||||
struct gtest_plug_exdata_t *gtest_plug_exdata = (struct gtest_plug_exdata_t *)ex_ptr;
|
||||
if (gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ])
|
||||
{
|
||||
commit_last_half_flow_data(gtest_plug_exdata, NULL, HTTP_TRANSACTION_REQ, 1);
|
||||
}
|
||||
if (gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES])
|
||||
{
|
||||
commit_last_half_flow_data(gtest_plug_exdata, NULL, HTTP_TRANSACTION_RES, 1);
|
||||
}
|
||||
free(ex_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
static int update_config_file(const char *filename, const char *key, const char *value)
|
||||
{
|
||||
char cmd_buf[1024] = {};
|
||||
snprintf(cmd_buf, 1024, "sed 's/^[ \t]*%s=.*/%s=%s/g' -i %s", key, key, value, filename);
|
||||
int ret = system(cmd_buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
extern "C" void http_decoder_test_state_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env)
|
||||
{
|
||||
static int msg_index = 0;
|
||||
char msg_index_name[64] = {};
|
||||
char msg_index_value[64] = {};
|
||||
cJSON *json_object = NULL;
|
||||
enum http_message_type msg_type = http_message_type_get((struct http_message *)raw_msg);
|
||||
|
||||
struct gtest_plug_exdata_t *gtest_plug_exdata = (struct gtest_plug_exdata_t *)session_exdata_get(sess, g_exdata_idx);
|
||||
if (NULL == gtest_plug_exdata)
|
||||
{
|
||||
gtest_plug_exdata = (struct gtest_plug_exdata_t *)calloc(1, sizeof(struct gtest_plug_exdata_t));
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ] = cJSON_CreateObject();
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES] = cJSON_CreateObject();
|
||||
session_exdata_set(sess, g_exdata_idx, gtest_plug_exdata);
|
||||
}
|
||||
|
||||
if (http_message_type_is_req(sess, msg_type))
|
||||
{
|
||||
json_object = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ];
|
||||
}
|
||||
else
|
||||
{
|
||||
json_object = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES];
|
||||
}
|
||||
if (HTTP_TRANSACTION_END == msg_type)
|
||||
{
|
||||
unsigned char flow_flag;
|
||||
session_is_symmetric(sess, &flow_flag);
|
||||
if (SESSION_SEEN_C2S_FLOW == flow_flag)
|
||||
{
|
||||
json_object = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ];
|
||||
}
|
||||
else if (SESSION_SEEN_S2C_FLOW == flow_flag)
|
||||
{
|
||||
json_object = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES];
|
||||
}
|
||||
else
|
||||
{ // is symmetric
|
||||
json_object = gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES];
|
||||
}
|
||||
}
|
||||
int cur_transaction_id = http_message_get_transaction_seq((const http_message *)raw_msg);
|
||||
|
||||
if (HTTP_TRANSACTION_START == msg_type || HTTP_TRANSACTION_END == msg_type)
|
||||
{
|
||||
snprintf(msg_index_name, sizeof(msg_index_name), "msg_%d", msg_index++);
|
||||
snprintf(msg_index_value, sizeof(msg_index_value), "%s_transaction_%d", http_message_type_to_string(msg_type), cur_transaction_id);
|
||||
cJSON_AddStringToObject(json_object, msg_index_name, msg_index_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(msg_index_name, sizeof(msg_index_name), "msg_%d", msg_index++);
|
||||
cJSON_AddStringToObject(json_object, msg_index_name, http_message_type_to_string(msg_type));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
extern "C" void http_decoder_tunnel_entry(struct session *sess, int topic_id, const void *raw_msg, void *no_use_ctx, void *plugin_env)
|
||||
{
|
||||
struct gtest_plug_exdata_t *gtest_plug_exdata;
|
||||
enum http_tunnel_message_type tmsg_type = http_tunnel_message_type_get((const struct http_tunnel_message *)raw_msg);
|
||||
static size_t req_payload_block = 0, req_payload_size = 0;
|
||||
static size_t res_payload_block = 0, res_payload_size = 0;
|
||||
gtest_plug_exdata = (struct gtest_plug_exdata_t *)session_exdata_get(sess, g_exdata_idx);
|
||||
|
||||
switch (tmsg_type)
|
||||
{
|
||||
case HTTP_TUNNEL_OPENING:
|
||||
{
|
||||
if (NULL == gtest_plug_exdata)
|
||||
{
|
||||
gtest_plug_exdata = (struct gtest_plug_exdata_t *)calloc(1, sizeof(struct gtest_plug_exdata_t));
|
||||
session_exdata_set(sess, g_exdata_idx, gtest_plug_exdata);
|
||||
}
|
||||
const char *human_addr_cstr = session_get0_readable_addr(sess);
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ] = cJSON_CreateObject();
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES] = cJSON_CreateObject();
|
||||
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION] = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], GTEST_HTTP_TUPLE4_NAME, human_addr_cstr);
|
||||
commit_test_result_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], "TUNNEL_NEW");
|
||||
}
|
||||
// OPENING state has payload, go on
|
||||
|
||||
case HTTP_TUNNEL_ACTIVE:
|
||||
{
|
||||
enum flow_direction curdir = session_get_current_flow_direction(sess);
|
||||
hstring tunnel_payload = {};
|
||||
http_tunnel_message_get_payload((const struct http_tunnel_message *)raw_msg, &tunnel_payload);
|
||||
if (FLOW_DIRECTION_C2S == curdir)
|
||||
{
|
||||
req_payload_block++;
|
||||
req_payload_size += tunnel_payload.iov_len;
|
||||
}
|
||||
else
|
||||
{
|
||||
res_payload_block++;
|
||||
res_payload_size += tunnel_payload.iov_len;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case HTTP_TUNNEL_CLOSING:
|
||||
{
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], "flow", "C2S");
|
||||
cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], "flow", "S2C");
|
||||
cJSON_AddNumberToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], "payload_block", req_payload_block);
|
||||
cJSON_AddNumberToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_REQ], "payload_size", req_payload_size);
|
||||
cJSON_AddNumberToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], "payload_block", res_payload_block);
|
||||
cJSON_AddNumberToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_RES], "payload_size", res_payload_size);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void *http_decoder_test_init(struct stellar *st)
|
||||
{
|
||||
g_http_gtest_plugin_id = stellar_session_plugin_register(st, NULL, NULL, NULL);
|
||||
g_exdata_idx = stellar_exdata_new_index(st, "HTTP_DECODER_GTEST_EXDATA", http_decoder_test_exdata_free, NULL);
|
||||
if (g_exdata_idx < 0)
|
||||
{
|
||||
printf("[%s:%d]: can't get http_decoder exdata index !!!\n", __FUNCTION__, __LINE__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char entry_name[64] = "";
|
||||
char topic_name[64] = "";
|
||||
get_gtest_plug_entry(GTEST_PLUG_ENTRY_CFG, entry_name, sizeof(entry_name) - 1, topic_name, sizeof(topic_name) - 1);
|
||||
set_gtest_plug_entry(entry_name);
|
||||
g_topic_id = stellar_mq_get_topic_id(st, topic_name);
|
||||
if (g_topic_id < 0)
|
||||
{
|
||||
printf("[%s:%d]: can't get http_decoder topic:%s id !!!\n", __FUNCTION__, __LINE__, topic_name);
|
||||
return NULL;
|
||||
}
|
||||
stellar_session_mq_subscribe(st, g_topic_id, g_entry_fun, g_http_gtest_plugin_id);
|
||||
printf("http_decoder_gtest_init succ, plugin_id:%d, sub_topic_id:%d\n", g_http_gtest_plugin_id, g_topic_id);
|
||||
|
||||
return (void *)strdup("http_decoder_test_ctx");
|
||||
}
|
||||
|
||||
extern "C" void http_decoder_test_exit(void *test_ctx)
|
||||
{
|
||||
if (test_ctx != NULL)
|
||||
{
|
||||
FREE(test_ctx);
|
||||
}
|
||||
printf("http_decoder_test_exit OK!\n");
|
||||
}
|
||||
BIN
test/http_decoder/http_pcap/http_6over4_single_trans.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_6over4_single_trans.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_chn_encode_url.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_chn_encode_url.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_chunked_res_gzip.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_chunked_res_gzip.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_connect_flood.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_connect_flood.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_error.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_error.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_fin.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_fin.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_encoded_uri.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_encoded_uri.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_long_cookie.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_long_cookie.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_malformed.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_malformed.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_multi_trans.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_multi_trans.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_req_pipeline.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_req_pipeline.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_get_single_trans.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_get_single_trans.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_gzip_out_of_order.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_gzip_out_of_order.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_hdr_truncated_after_kv.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_hdr_truncated_in_kv.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_hdr_value_empty.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_hdr_value_empty.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_hdrs_exceed_maximum.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_hdrs_exceed_maximum.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_multi_parse_error.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_multi_parse_error.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_no_content_length.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_no_content_length.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_out_of_order.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_out_of_order.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_over_pppoe.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_over_pppoe.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_over_tcp_keepalive.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_over_tcp_keepalive.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_over_tls.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_over_tls.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_pipeline_C2S.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_pipeline_C2S.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_pipeline_S2C.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_pipeline_S2C.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_post.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_post.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_post_c2s.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_post_c2s.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_post_multipart_form_data.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_post_multipart_form_data.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_post_s2c.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_post_s2c.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_post_single_trans.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_post_single_trans.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_req_1byte_sliding_window.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_req_1byte_sliding_window.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_res_1byte_sliding_window.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_res_1byte_sliding_window.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_res_gzip.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_res_gzip.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_session_exception_c2s.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_session_exception_c2s.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_session_exception_s2c.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_session_exception_s2c.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_trans_pipeline.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_trans_pipeline.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_tunnel_for_http.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_tunnel_for_http.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_tunnel_for_http_C2S.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_tunnel_for_http_C2S.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_tunnel_for_http_S2C.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_tunnel_for_http_S2C.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_tunnel_for_pop3.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_tunnel_for_pop3.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_tunnel_s2c_only_hdr.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_tunnel_s2c_only_hdr.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_upgrade_http2.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_upgrade_http2.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_upgrade_websocket.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_upgrade_websocket.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_url_test_with_host.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_url_test_with_host.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_url_test_without_host.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_url_test_without_host.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_url_test_without_host_v6.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_url_test_without_host_v6.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_whitespace_before_header.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_whitespace_before_header.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/http_zlib_deadlock.pcap
Normal file
BIN
test/http_decoder/http_pcap/http_zlib_deadlock.pcap
Normal file
Binary file not shown.
BIN
test/http_decoder/http_pcap/non_http.pcap
Normal file
BIN
test/http_decoder/http_pcap/non_http.pcap
Normal file
Binary file not shown.
287
test/http_decoder/http_stellar_mock.cpp
Normal file
287
test/http_decoder/http_stellar_mock.cpp
Normal file
@@ -0,0 +1,287 @@
|
||||
#include "uthash-2.3.0/include/utlist.h"
|
||||
#include "http_decoder_gtest.h"
|
||||
#include "http_stellar_mock.h"
|
||||
|
||||
static int G_TCP_STREAM_TOPIC_ID = -1;
|
||||
static int G_UDP_TOPIC_ID = -1;
|
||||
static struct stellar *G_STELLAR;
|
||||
static struct plugin_mgr *g_plugin_mgr_list_head = NULL;
|
||||
static struct stellar *g_st;
|
||||
|
||||
static void stellar_internal_msg_free_cb_func(void *msg, void *msg_free_arg) {/* do nothing*/}
|
||||
static void stellar_register_internal_topic(struct stellar *st)
|
||||
{
|
||||
G_TCP_STREAM_TOPIC_ID = stellar_mq_get_topic_id(st, TOPIC_TCP_STREAM);
|
||||
if(G_TCP_STREAM_TOPIC_ID < 0){
|
||||
G_TCP_STREAM_TOPIC_ID = stellar_mq_create_topic(st, TOPIC_TCP_STREAM, stellar_internal_msg_free_cb_func, NULL);
|
||||
}
|
||||
G_UDP_TOPIC_ID = stellar_mq_get_topic_id(st, TOPIC_UDP);
|
||||
if(G_UDP_TOPIC_ID < 0){
|
||||
G_UDP_TOPIC_ID = stellar_mq_create_topic(st, TOPIC_UDP, stellar_internal_msg_free_cb_func, NULL);
|
||||
}
|
||||
}
|
||||
void stellar_session_plugin_dettach_current_session(struct session *sess) { return; }
|
||||
int stellar_mq_destroy_topic(struct stellar *st, int topic_id) { return 0; }
|
||||
int stellar_get_worker_thread_num(struct stellar *st) { return 1; }
|
||||
uint16_t stellar_get_current_thread_index(void) { return 0; }
|
||||
int stellar_get_current_thread_index(struct session *sess) { return 0; }
|
||||
int session_mq_ignore_message(struct session *sess, int topic_id, int plugin_id) { return 0; }
|
||||
int session_mq_unignore_message(struct session *sess, int topic_id, int plugin_id) { return 0; }
|
||||
int stellar_session_exdata_new_index(struct stellar *st, const char *name, stellar_exdata_free *free_func,void *arg)
|
||||
{
|
||||
int list_count = 0;
|
||||
struct exdata_mgr *tmp, *new_exdata = (struct exdata_mgr *)calloc(1, sizeof(struct exdata_mgr));
|
||||
DL_FOREACH(st->exdata_mgr_head, tmp){
|
||||
if(0 == strcmp(tmp->name, name) && (strlen(tmp->name) == strlen(name))){
|
||||
return 0; //already exist
|
||||
}
|
||||
}
|
||||
DL_COUNT(st->exdata_mgr_head, tmp, list_count);
|
||||
new_exdata->exdata_id = list_count;
|
||||
new_exdata->name = strdup(name);
|
||||
new_exdata->free_func = free_func;
|
||||
new_exdata->arg = arg;
|
||||
DL_APPEND(st->exdata_mgr_head, new_exdata);
|
||||
return 0;
|
||||
}
|
||||
int session_exdata_set(struct session *sess, int idx, void *ex_ptr)
|
||||
{
|
||||
struct exdata_mgr *el = NULL;
|
||||
DL_FOREACH(sess->runtime_exdata_head, el){
|
||||
if(el->exdata_id == idx){
|
||||
el->user_ptr = ex_ptr;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
struct exdata_mgr *new_exdata = (struct exdata_mgr *)calloc(1, sizeof(struct exdata_mgr));
|
||||
new_exdata->exdata_id = idx;
|
||||
new_exdata->user_ptr = ex_ptr;
|
||||
DL_APPEND(sess->runtime_exdata_head, new_exdata);
|
||||
return 0;
|
||||
}
|
||||
void *session_exdata_get(struct session *sess, int idx)
|
||||
{
|
||||
struct exdata_mgr *el = NULL;
|
||||
DL_FOREACH(sess->runtime_exdata_head, el){
|
||||
if(el->exdata_id == idx){
|
||||
return el->user_ptr;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
enum session_state session_get_current_state(struct session *sess)
|
||||
{
|
||||
return sess->sess_state;
|
||||
}
|
||||
const char *session_get0_current_payload(struct session *sess, uint16_t *payload_len)
|
||||
{
|
||||
const struct packet *test_payload = &sess->pkt;
|
||||
*payload_len = test_payload->payload_len;
|
||||
return test_payload->payload;
|
||||
}
|
||||
struct session_addr *session_get0_addr(struct session *sess, enum session_addr_type *addr_type)
|
||||
{
|
||||
*addr_type = SESSION_ADDR_TYPE_IPV4_TCP;
|
||||
return &sess->addr;
|
||||
}
|
||||
|
||||
const struct packet *session_get0_current_packet(struct session *sess)
|
||||
{
|
||||
return &sess->pkt;
|
||||
}
|
||||
int session_is_symmetric(struct session *sess, unsigned char *flag)
|
||||
{
|
||||
*flag = (SESSION_SEEN_C2S_FLOW | SESSION_SEEN_S2C_FLOW);
|
||||
return 1;
|
||||
}
|
||||
static struct plugin_mgr *get_stat_by_plugin_id(int plugin_id)
|
||||
{
|
||||
struct plugin_mgr *plugin = NULL;
|
||||
DL_FOREACH(g_plugin_mgr_list_head, plugin){
|
||||
if(plugin->plugin_id == plugin_id){
|
||||
break;
|
||||
}
|
||||
}
|
||||
return plugin;
|
||||
}
|
||||
int stellar_session_mq_subscribe(struct stellar *st, int topic_id, on_session_msg_cb_func *plugin_on_msg_cb, int plugin_id)
|
||||
{
|
||||
struct topic_mgr *topic_el = NULL;
|
||||
DL_FOREACH(st->topic_mgr_head, topic_el){
|
||||
if(topic_el->topic_id == topic_id){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(NULL == topic_el){
|
||||
return -1;
|
||||
}
|
||||
struct plugin_mgr *plugin = get_stat_by_plugin_id(plugin_id);
|
||||
struct sub_topic_cb_list *sub_cb_list = (struct sub_topic_cb_list *)calloc(1, sizeof(struct sub_topic_cb_list));
|
||||
sub_cb_list->sub_cb = plugin_on_msg_cb;
|
||||
sub_cb_list->plugin_id = plugin_id;
|
||||
sub_cb_list->plugin_env = plugin->plugin_env;
|
||||
DL_APPEND(topic_el->sub_free_cb_list_head, sub_cb_list);
|
||||
return 0;
|
||||
}
|
||||
int stellar_mq_get_topic_id(struct stellar *st, const char *topic_name)
|
||||
{
|
||||
struct topic_mgr *el = NULL;
|
||||
DL_FOREACH(st->topic_mgr_head, el){
|
||||
if(0 == strcmp(el->topic_name, topic_name) && (strlen(el->topic_name) == strlen(topic_name))){
|
||||
return el->topic_id;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
int stellar_session_mq_create_topic(struct stellar *st, const char *topic_name, stellar_msg_free_cb_func *msg_free_cb, void *msg_free_arg)
|
||||
{
|
||||
int topic_id = stellar_mq_get_topic_id(st, topic_name);
|
||||
if(topic_id >= 0){
|
||||
return topic_id;//already exist
|
||||
}
|
||||
struct topic_mgr *tmp, *new_topic = (struct topic_mgr *)calloc(1, sizeof(struct topic_mgr));
|
||||
int list_count;
|
||||
DL_APPEND(st->topic_mgr_head, new_topic);
|
||||
DL_COUNT(st->topic_mgr_head, tmp, list_count);
|
||||
new_topic->topic_id = list_count;
|
||||
new_topic->pub_free_cb = msg_free_cb;
|
||||
new_topic->pub_free_arg = msg_free_arg;
|
||||
new_topic->topic_name = strdup(topic_name);
|
||||
return new_topic->topic_id;
|
||||
}
|
||||
|
||||
int stellar_session_plugin_register(struct stellar *st, session_ctx_new_func session_ctx_new,
|
||||
session_ctx_free_func session_ctx_free, void *plugin_env)
|
||||
{
|
||||
int list_count;
|
||||
struct plugin_mgr *tmp, *plugin = (struct plugin_mgr *)calloc(1, sizeof(struct plugin_mgr));
|
||||
DL_APPEND(g_plugin_mgr_list_head, plugin);
|
||||
DL_COUNT(g_plugin_mgr_list_head, tmp, list_count);
|
||||
plugin->plugin_id = list_count;
|
||||
plugin->plugin_env = plugin_env;
|
||||
plugin->session_ctx_new = session_ctx_new;
|
||||
plugin->session_ctx_free = session_ctx_free;
|
||||
return plugin->plugin_id;
|
||||
}
|
||||
int session_mq_publish_message(struct session *sess, int topic_id, void *msg)
|
||||
{
|
||||
struct topic_mgr *el = NULL;
|
||||
DL_FOREACH(sess->st->topic_mgr_head, el){
|
||||
if(el->topic_id == topic_id){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(NULL == el){
|
||||
return -1;
|
||||
}
|
||||
sub_topic_cb_list *sub_cb_node = NULL;
|
||||
DL_FOREACH(el->sub_free_cb_list_head, sub_cb_node){
|
||||
(*sub_cb_node->sub_cb)(sess, topic_id, msg, NULL, sub_cb_node->plugin_env); //todo
|
||||
}
|
||||
el->pub_free_cb(msg, el->pub_free_arg);
|
||||
return 0;
|
||||
}
|
||||
int stellar_load_plugin(struct stellar *st, void *(plugin_init_cb)(struct stellar *st))
|
||||
{
|
||||
plugin_init_cb(st);
|
||||
return 0;
|
||||
}
|
||||
struct session *stellar_session_new(struct stellar *st, int topic_id, const char *payload, size_t payload_len, u_int8_t dir)
|
||||
{
|
||||
struct session *sess = (struct session *)calloc(1, sizeof(struct session));
|
||||
sess->st = st;
|
||||
sess->sess_state = SESSION_STATE_OPENING;
|
||||
sess->addr.ipv4.saddr = 0x7f000001;
|
||||
sess->addr.ipv4.daddr = 0x7f000002;
|
||||
sess->addr.ipv4.sport = htons(12345);
|
||||
sess->addr.ipv4.dport = htons(80);
|
||||
if(G_TCP_STREAM_TOPIC_ID == topic_id){
|
||||
sess->addr_type = SESSION_ADDR_TYPE_IPV4_TCP;
|
||||
}else{
|
||||
sess->addr_type = SESSION_ADDR_TYPE_IPV4_UDP;
|
||||
}
|
||||
sess->pkt.dir = dir;
|
||||
sess->pkt.payload = payload;
|
||||
sess->pkt.payload_len = payload_len;
|
||||
stellar_message *message = (stellar_message *)&sess->pkt;
|
||||
session_mq_publish_message(sess, topic_id, message);
|
||||
return sess;
|
||||
}
|
||||
void stellar_session_active(struct stellar *st, struct session *sess, int topic_id, const char *payload, size_t payload_len, u_int8_t dir)
|
||||
{
|
||||
sess->sess_state = SESSION_STATE_ACTIVE;
|
||||
sess->pkt.dir = dir;
|
||||
sess->pkt.payload = payload;
|
||||
sess->pkt.payload_len = payload_len;
|
||||
stellar_message *message = (stellar_message *)&sess->pkt;
|
||||
session_mq_publish_message(sess, topic_id, message);
|
||||
return;
|
||||
}
|
||||
static void session_plugin_exdata_free(struct stellar *st, struct session *sess, int exdata_idx, void *user_ptr)
|
||||
{
|
||||
struct exdata_mgr *el = NULL;
|
||||
DL_FOREACH(st->exdata_mgr_head, el){
|
||||
if(el->exdata_id == exdata_idx){
|
||||
el->free_func(exdata_idx, user_ptr, el->arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
static void session_plugin_exdata_free_all(struct stellar *st, struct session *sess)
|
||||
{
|
||||
struct exdata_mgr *el = NULL, *tmp = NULL;
|
||||
DL_FOREACH_SAFE(sess->runtime_exdata_head, el, tmp){
|
||||
session_plugin_exdata_free(st, sess, el->exdata_id, el->user_ptr);
|
||||
DL_DELETE(sess->runtime_exdata_head, el);
|
||||
free(el);
|
||||
}
|
||||
}
|
||||
static void stellar_session_free(struct stellar *st, struct session *sess)
|
||||
{
|
||||
session_plugin_exdata_free_all(st, sess);
|
||||
free(sess);
|
||||
}
|
||||
void stellar_session_close(struct stellar *st, struct session *sess, int topic_id)
|
||||
{
|
||||
sess->sess_state = SESSION_STATE_CLOSING;
|
||||
sess->pkt.payload = NULL;
|
||||
sess->pkt.payload_len = 0;
|
||||
stellar_message *message = (stellar_message *)&sess->pkt;
|
||||
session_mq_publish_message(sess, topic_id, message);
|
||||
stellar_session_free(st, sess);
|
||||
return;
|
||||
}
|
||||
struct stellar *stellar_init(void)
|
||||
{
|
||||
if(NULL == g_st){
|
||||
g_st = (struct stellar *)calloc(1, sizeof(struct stellar));
|
||||
}
|
||||
stellar_register_internal_topic(g_st);
|
||||
return g_st;
|
||||
}
|
||||
static void stellar_sub_topi_mgr_destroy(struct topic_mgr *topic_mgr)
|
||||
{
|
||||
struct sub_topic_cb_list *sub_cb_node = NULL, *tmp = NULL;
|
||||
DL_FOREACH_SAFE(topic_mgr->sub_free_cb_list_head, sub_cb_node, tmp){
|
||||
DL_DELETE(topic_mgr->sub_free_cb_list_head, sub_cb_node);
|
||||
free(sub_cb_node);
|
||||
}
|
||||
return;
|
||||
}
|
||||
void stellar_destroy(struct stellar *st)
|
||||
{
|
||||
struct exdata_mgr *el = NULL, *tmp;
|
||||
DL_FOREACH_SAFE(st->exdata_mgr_head, el, tmp){
|
||||
free((void *)el->name);
|
||||
DL_DELETE(st->exdata_mgr_head, el);
|
||||
free(el);
|
||||
}
|
||||
struct topic_mgr *el_topic, *tmp_topic;
|
||||
DL_FOREACH_SAFE(st->topic_mgr_head, el_topic, tmp_topic){
|
||||
DL_DELETE(st->topic_mgr_head, el_topic);
|
||||
stellar_sub_topi_mgr_destroy(el_topic);
|
||||
free((void *)el_topic->topic_name);
|
||||
free(el_topic);
|
||||
}
|
||||
free(st);
|
||||
return;
|
||||
}
|
||||
112
test/http_decoder/http_stellar_mock.h
Normal file
112
test/http_decoder/http_stellar_mock.h
Normal file
@@ -0,0 +1,112 @@
|
||||
#pragma once
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
#include </usr/include/bits/types/struct_iovec.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include <stellar/session.h>
|
||||
#include <stellar/stellar_mq.h>
|
||||
#include <stellar/stellar_exdata.h>
|
||||
#include <stellar/stellar.h>
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
struct packet{
|
||||
const char *payload;
|
||||
size_t payload_len;
|
||||
u_int8_t dir; //FLOW_DIRECTION_C2S FLOW_DIRECTION_S2C
|
||||
};
|
||||
typedef struct packet stellar_message;
|
||||
struct exdata_mgr{
|
||||
const char *name;
|
||||
int exdata_id;
|
||||
void *arg;
|
||||
void *user_ptr;
|
||||
stellar_exdata_free *free_func;
|
||||
struct exdata_mgr *next, *prev;
|
||||
};
|
||||
struct sub_topic_mgr{
|
||||
int topic_id;
|
||||
int plugin_id;
|
||||
void *plugin_env;
|
||||
};
|
||||
struct topic_mgr{
|
||||
struct topic_mgr *next, *prev;
|
||||
const char *topic_name;
|
||||
int topic_id;
|
||||
stellar_msg_free_cb_func *pub_free_cb;
|
||||
void *pub_free_arg;
|
||||
struct sub_topic_cb_list *sub_free_cb_list_head;
|
||||
};
|
||||
struct stellar{
|
||||
struct topic_mgr *topic_mgr_head;
|
||||
struct exdata_mgr *exdata_mgr_head;
|
||||
};
|
||||
|
||||
//todo, native stellar can't get addr
|
||||
enum session_addr_type
|
||||
{
|
||||
SESSION_ADDR_TYPE_IPV4_TCP,
|
||||
SESSION_ADDR_TYPE_IPV4_UDP,
|
||||
SESSION_ADDR_TYPE_IPV6_TCP,
|
||||
SESSION_ADDR_TYPE_IPV6_UDP,
|
||||
SESSION_ADDR_TYPE_UNKNOWN,
|
||||
__SESSION_ADDR_TYPE_MAX,
|
||||
};
|
||||
struct session_addr_ipv4{
|
||||
uint32_t saddr; /* network order */
|
||||
uint32_t daddr; /* network order */
|
||||
uint16_t sport; /* network order */
|
||||
uint16_t dport; /* network order */
|
||||
};
|
||||
|
||||
#include <netinet/in.h>
|
||||
#ifndef IPV6_ADDR_LEN
|
||||
#define IPV6_ADDR_LEN (sizeof(struct in6_addr))
|
||||
#endif
|
||||
struct session_addr_ipv6
|
||||
{
|
||||
uint8_t saddr[IPV6_ADDR_LEN] ;
|
||||
uint8_t daddr[IPV6_ADDR_LEN] ;
|
||||
uint16_t sport; /* network order */
|
||||
uint16_t dport; /* network order */
|
||||
};
|
||||
|
||||
struct session_addr
|
||||
{
|
||||
union
|
||||
{
|
||||
struct session_addr_ipv4 ipv4;
|
||||
struct session_addr_ipv6 ipv6;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
struct session{
|
||||
struct stellar *st;
|
||||
enum session_state sess_state;
|
||||
enum session_addr_type addr_type;
|
||||
struct session_addr addr;
|
||||
void *exdata;
|
||||
struct packet pkt;
|
||||
struct exdata_mgr *runtime_exdata_head;
|
||||
};
|
||||
struct plugin_mgr{
|
||||
struct plugin_mgr *next, *prev;
|
||||
int plugin_id;
|
||||
void *plugin_env;
|
||||
session_ctx_new_func *session_ctx_new;
|
||||
session_ctx_free_func *session_ctx_free;
|
||||
};
|
||||
struct sub_topic_cb_list{
|
||||
int plugin_id;
|
||||
void *plugin_env;
|
||||
on_session_msg_cb_func *sub_cb;
|
||||
struct sub_topic_cb_list *next, *prev;
|
||||
};
|
||||
356
test/http_decoder/md5.c
Normal file
356
test/http_decoder/md5.c
Normal file
@@ -0,0 +1,356 @@
|
||||
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm */
|
||||
|
||||
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include "md5.h"
|
||||
|
||||
/* Constants for MD5Transform routine. */
|
||||
|
||||
#define S11 7
|
||||
#define S12 12
|
||||
#define S13 17
|
||||
#define S14 22
|
||||
#define S21 5
|
||||
#define S22 9
|
||||
#define S23 14
|
||||
#define S24 20
|
||||
#define S31 4
|
||||
#define S32 11
|
||||
#define S33 16
|
||||
#define S34 23
|
||||
#define S41 6
|
||||
#define S42 10
|
||||
#define S43 15
|
||||
#define S44 21
|
||||
|
||||
static void MD5Transform PROTO_LIST((UINT4[4], unsigned char[64]));
|
||||
static void Encode PROTO_LIST((unsigned char *, UINT4 *, unsigned int));
|
||||
static void Decode PROTO_LIST((UINT4 *, unsigned char *, unsigned int));
|
||||
static void MD5_memcpy PROTO_LIST((POINTER, POINTER, unsigned int));
|
||||
static void MD5_memset PROTO_LIST((POINTER, int, unsigned int));
|
||||
|
||||
static unsigned char PADDING[64] = {
|
||||
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
/* F, G, H and I are basic MD5 functions. */
|
||||
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
|
||||
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define I(x, y, z) ((y) ^ ((x) | (~z)))
|
||||
|
||||
/* ROTATE_LEFT rotates x left n bits. */
|
||||
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
|
||||
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
|
||||
Rotation is separate from addition to prevent recomputation. */
|
||||
#define FF(a, b, c, d, x, s, ac) \
|
||||
{ \
|
||||
(a) += F((b), (c), (d)) + (x) + (UINT4)(ac); \
|
||||
(a) = ROTATE_LEFT((a), (s)); \
|
||||
(a) += (b); \
|
||||
}
|
||||
#define GG(a, b, c, d, x, s, ac) \
|
||||
{ \
|
||||
(a) += G((b), (c), (d)) + (x) + (UINT4)(ac); \
|
||||
(a) = ROTATE_LEFT((a), (s)); \
|
||||
(a) += (b); \
|
||||
}
|
||||
#define HH(a, b, c, d, x, s, ac) \
|
||||
{ \
|
||||
(a) += H((b), (c), (d)) + (x) + (UINT4)(ac); \
|
||||
(a) = ROTATE_LEFT((a), (s)); \
|
||||
(a) += (b); \
|
||||
}
|
||||
#define II(a, b, c, d, x, s, ac) \
|
||||
{ \
|
||||
(a) += I((b), (c), (d)) + (x) + (UINT4)(ac); \
|
||||
(a) = ROTATE_LEFT((a), (s)); \
|
||||
(a) += (b); \
|
||||
}
|
||||
|
||||
/* MD5 initialization. Begins an MD5 operation, writing a new context. */
|
||||
void MD5Init(MD5_CTX *context)
|
||||
{
|
||||
context->count[0] = context->count[1] = 0;
|
||||
/* Load magic initialization constants.*/
|
||||
context->state[0] = 0x67452301;
|
||||
context->state[1] = 0xefcdab89;
|
||||
context->state[2] = 0x98badcfe;
|
||||
context->state[3] = 0x10325476;
|
||||
}
|
||||
|
||||
/* MD5 block update operation. Continues an MD5 message-digest
|
||||
operation, processing another message block, and updating the
|
||||
context. */
|
||||
void MD5Update(
|
||||
MD5_CTX *context, /* context */
|
||||
unsigned char *input, /* input block */
|
||||
unsigned int inputLen) /* length of input block */
|
||||
{
|
||||
unsigned int i, index, partLen;
|
||||
|
||||
/* Compute number of bytes mod 64 */
|
||||
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
|
||||
|
||||
/* Update number of bits */
|
||||
if ((context->count[0] += ((UINT4)inputLen << 3))
|
||||
|
||||
< ((UINT4)inputLen << 3))
|
||||
context->count[1]++;
|
||||
context->count[1] += ((UINT4)inputLen >> 29);
|
||||
|
||||
partLen = 64 - index;
|
||||
|
||||
/* Transform as many times as possible.*/
|
||||
if (inputLen >= partLen)
|
||||
{
|
||||
MD5_memcpy((POINTER)&context->buffer[index], (POINTER)input, partLen);
|
||||
MD5Transform(context->state, context->buffer);
|
||||
|
||||
for (i = partLen; i + 63 < inputLen; i += 64)
|
||||
MD5Transform(context->state, &input[i]);
|
||||
|
||||
index = 0;
|
||||
}
|
||||
else
|
||||
i = 0;
|
||||
|
||||
/* Buffer remaining input */
|
||||
MD5_memcpy((POINTER)&context->buffer[index], (POINTER)&input[i],
|
||||
inputLen - i);
|
||||
}
|
||||
|
||||
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
|
||||
the message digest and zeroizing the context. */
|
||||
void MD5Final(
|
||||
unsigned char digest[16], /* message digest */
|
||||
MD5_CTX *context) /* context */
|
||||
{
|
||||
unsigned char bits[8];
|
||||
unsigned int index, padLen;
|
||||
|
||||
/* Save number of bits */
|
||||
Encode(bits, context->count, 8);
|
||||
|
||||
/* Pad out to 56 mod 64.*/
|
||||
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
|
||||
padLen = (index < 56) ? (56 - index) : (120 - index);
|
||||
MD5Update(context, PADDING, padLen);
|
||||
|
||||
/* Append length (before padding) */
|
||||
MD5Update(context, bits, 8);
|
||||
|
||||
/* Store state in digest */
|
||||
Encode(digest, context->state, 16);
|
||||
|
||||
/* Zeroize sensitive information.*/
|
||||
MD5_memset((POINTER)context, 0, sizeof(*context));
|
||||
}
|
||||
|
||||
/* MD5 basic transformation. Transforms state based on block. */
|
||||
static void MD5Transform(
|
||||
UINT4 state[4],
|
||||
unsigned char block[64])
|
||||
{
|
||||
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
|
||||
|
||||
Decode(x, block, 64);
|
||||
|
||||
/* Round 1 */
|
||||
FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
|
||||
FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
|
||||
FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
|
||||
FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
|
||||
FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
|
||||
FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
|
||||
FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
|
||||
FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
|
||||
FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
|
||||
FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
|
||||
FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
|
||||
FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
|
||||
FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
|
||||
FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
|
||||
FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
|
||||
FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
|
||||
|
||||
/* Round 2 */
|
||||
GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
|
||||
GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
|
||||
GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
|
||||
GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
|
||||
GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
|
||||
GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
|
||||
GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
|
||||
GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
|
||||
GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
|
||||
GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
|
||||
GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
|
||||
|
||||
GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
|
||||
GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
|
||||
GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
|
||||
GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
|
||||
GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
|
||||
|
||||
/* Round 3 */
|
||||
HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
|
||||
HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
|
||||
HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
|
||||
HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
|
||||
HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
|
||||
HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
|
||||
HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
|
||||
HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
|
||||
HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
|
||||
HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
|
||||
HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
|
||||
HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
|
||||
HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
|
||||
HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
|
||||
HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
|
||||
HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
|
||||
|
||||
/* Round 4 */
|
||||
II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
|
||||
II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
|
||||
II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
|
||||
II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
|
||||
II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
|
||||
II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
|
||||
II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
|
||||
II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
|
||||
II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
|
||||
II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
|
||||
II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
|
||||
II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
|
||||
II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
|
||||
II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
|
||||
II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
|
||||
II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
|
||||
|
||||
state[0] += a;
|
||||
state[1] += b;
|
||||
state[2] += c;
|
||||
state[3] += d;
|
||||
|
||||
/* Zeroize sensitive information. */
|
||||
MD5_memset((POINTER)x, 0, sizeof(x));
|
||||
}
|
||||
|
||||
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
|
||||
a multiple of 4. */
|
||||
static void Encode(
|
||||
unsigned char *output,
|
||||
const UINT4 *input,
|
||||
unsigned int len)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
for (i = 0, j = 0; j < len; i++, j += 4)
|
||||
{
|
||||
output[j] = (unsigned char)(input[i] & 0xff);
|
||||
output[j + 1] = (unsigned char)((input[i] >> 8) & 0xff);
|
||||
output[j + 2] = (unsigned char)((input[i] >> 16) & 0xff);
|
||||
output[j + 3] = (unsigned char)((input[i] >> 24) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
|
||||
a multiple of 4. */
|
||||
static void Decode(
|
||||
UINT4 *output,
|
||||
unsigned char *input,
|
||||
unsigned int len)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
for (i = 0, j = 0; j < len; i++, j += 4)
|
||||
output[i] = ((UINT4)input[j]) | (((UINT4)input[j + 1]) << 8) |
|
||||
(((UINT4)input[j + 2]) << 16) | (((UINT4)input[j + 3]) << 24);
|
||||
}
|
||||
|
||||
/* Note: Replace "for loop" with standard memcpy if possible. */
|
||||
|
||||
static void MD5_memcpy(
|
||||
POINTER output,
|
||||
const POINTER input,
|
||||
unsigned int len)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
|
||||
output[i] = input[i];
|
||||
}
|
||||
|
||||
/* Note: Replace "for loop" with standard memset if possible. */
|
||||
static void MD5_memset(
|
||||
POINTER output,
|
||||
int value,
|
||||
unsigned int len)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
((char *)output)[i] = (char)value;
|
||||
}
|
||||
|
||||
char *MESA_MD5_sum_str(unsigned char *raw_data, unsigned int raw_data_len, char result[33])
|
||||
{
|
||||
int i;
|
||||
MD5_CTX context;
|
||||
unsigned char digest[16];
|
||||
|
||||
MD5Init(&context);
|
||||
MD5Update(&context, raw_data, raw_data_len);
|
||||
MD5Final(digest, &context);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
sprintf(result + 2 * i, "%02x", digest[i]);
|
||||
result[32] = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
char *MESA_MD5_sum_bin(unsigned char *raw_data, unsigned int raw_data_len, char result[16])
|
||||
{
|
||||
MD5_CTX context;
|
||||
|
||||
MD5Init(&context);
|
||||
MD5Update(&context, raw_data, raw_data_len);
|
||||
MD5Final(result, &context);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
74
test/http_decoder/md5.h
Normal file
74
test/http_decoder/md5.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/* MD5.H - header file for MD5C.C */
|
||||
|
||||
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
rights reserved.
|
||||
|
||||
License to copy and use this software is granted provided that it
|
||||
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
Algorithm" in all material mentioning or referencing this software
|
||||
or this function.
|
||||
|
||||
License is also granted to make and use derivative works provided
|
||||
that such works are identified as "derived from the RSA Data
|
||||
Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
mentioning or referencing the derived work.
|
||||
|
||||
RSA Data Security, Inc. makes no representations concerning either
|
||||
the merchantability of this software or the suitability of this
|
||||
software for any particular purpose. It is provided "as is"
|
||||
without express or implied warranty of any kind.
|
||||
|
||||
These notices must be retained in any copies of any part of this
|
||||
documentation and/or software. */
|
||||
#ifndef __MD5_H
|
||||
#define __MD5_H
|
||||
|
||||
#ifndef PROTOTYPES
|
||||
#define PROTOTYPES 0
|
||||
#endif
|
||||
|
||||
/* POINTER defines a generic pointer type */
|
||||
typedef unsigned char *POINTER;
|
||||
|
||||
/* UINT2 defines a two byte word */
|
||||
typedef unsigned short int UINT2;
|
||||
|
||||
/* UINT4 defines a four byte word */
|
||||
// typedef unsigned long int UINT4;
|
||||
typedef unsigned int UINT4;
|
||||
|
||||
/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
|
||||
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
|
||||
returns an empty list. */
|
||||
|
||||
#if PROTOTYPES
|
||||
#define PROTO_LIST(list) list
|
||||
#else
|
||||
#define PROTO_LIST(list) ()
|
||||
#endif
|
||||
|
||||
/* MD5 context. */
|
||||
typedef struct
|
||||
{
|
||||
UINT4 state[4]; /* state (ABCD) */
|
||||
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
|
||||
unsigned char buffer[64]; /* input buffer */
|
||||
} MD5_CTX;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
void MD5Init(MD5_CTX *context);
|
||||
void MD5Update(
|
||||
MD5_CTX *context, /* context */
|
||||
unsigned char *input, /* input block */
|
||||
unsigned int inputLen); /* length of input block */
|
||||
void MD5Final(
|
||||
unsigned char digest[16], /* message digest */
|
||||
MD5_CTX *context); /* context */
|
||||
char *MESA_MD5_sum_str(unsigned char *raw_data, unsigned int raw_data_len, char result[33]);
|
||||
char *MESA_MD5_sum_bin(unsigned char *raw_data, unsigned int raw_data_len, char result[16]);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
142
test/http_decoder/test_based_on_stellar/CMakeLists.txt
Normal file
142
test/http_decoder/test_based_on_stellar/CMakeLists.txt
Normal file
@@ -0,0 +1,142 @@
|
||||
set(DECODER_NAME http_decoder)
|
||||
|
||||
set(TEST_RUN_DIR ${CMAKE_INSTALL_PREFIX}/stellar)
|
||||
set(SAPP_DEVEL_DIR ${TEST_RUN_DIR}/lib)
|
||||
set(TEST_MAIN plugin_test_main)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR}/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/test)
|
||||
include_directories(/usr/local/include/cjson)
|
||||
include_directories(/opt/tsg/framework/include/stellar)
|
||||
include_directories(/opt/MESA/include/MESA)
|
||||
include_directories(/opt/tsg/stellar/include/)
|
||||
|
||||
#various ways to add -rdynamic for centos7, centos8, and different cmake version
|
||||
add_definitions(-rdynamic)
|
||||
link_directories(${SAPP_DEVEL_DIR})
|
||||
|
||||
add_executable(plugin_test_main plugin_test_main.cpp)
|
||||
set_target_properties(plugin_test_main
|
||||
PROPERTIES
|
||||
LINK_OPTIONS
|
||||
"-rdynamic"
|
||||
)
|
||||
set_target_properties(plugin_test_main
|
||||
PROPERTIES
|
||||
LINK_FLAGS
|
||||
"-rdynamic"
|
||||
)
|
||||
set(LINK_FLAGS "-rdynamic")
|
||||
target_link_libraries(plugin_test_main gtest cjson-static stellar_devel)
|
||||
|
||||
# assemble test env
|
||||
add_test(NAME STELLAR_MKDIR_METRIC COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/metrics; mkdir -p ${TEST_RUN_DIR}/plugin; mkdir -p ${TEST_RUN_DIR}/log; mkdir -p ${TEST_RUN_DIR}/pcap")
|
||||
add_test(NAME STELLAR_INSTALL_TEST_MAIN COMMAND sh -c "cp ${CMAKE_CURRENT_BINARY_DIR}/${TEST_MAIN} ${TEST_RUN_DIR}/${TEST_MAIN}")
|
||||
add_test(NAME STELLAR_COPY_SPEC COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/plugin/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/spec.toml ${TEST_RUN_DIR}/plugin/spec.toml")
|
||||
add_test(NAME STELLAR_COPY_STELLAR_CONF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/conf/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/stellar.toml ${TEST_RUN_DIR}/conf/stellar.toml")
|
||||
add_test(NAME STELLAR_COPY_STELLAR_LOG_CONF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/conf/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/log.toml ${TEST_RUN_DIR}/conf/log.toml")
|
||||
add_test(NAME STELLAR_COPY_HTTP_DECODER_CONF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/etc/http && cp ${PROJECT_SOURCE_DIR}/conf/http_decoder.toml ${TEST_RUN_DIR}/etc/http/")
|
||||
add_test(NAME STELLAR_COPY_HTTP_GTEST_ENTRY_CONF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/etc/http && cp ${PROJECT_SOURCE_DIR}/conf/gtest_entry.toml ${TEST_RUN_DIR}/etc/http/")
|
||||
|
||||
# update config files
|
||||
add_test(NAME UPDATE_GTEST_PLUG_ENTRY COMMAND bash -c "sed -i 's/name=.*/name=\\x22http_decoder_test_entry\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml")
|
||||
add_test(NAME UPDATE_GTEST_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_DECODER_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml")
|
||||
|
||||
# update plugin to be tested
|
||||
add_test(NAME STELLAR_HTTP_DECODER_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/src/${DECODER_NAME}.so ${TEST_RUN_DIR}/plugin/${DECODER_NAME}.so")
|
||||
add_test(NAME STELLAR_HTTP_DECODER_GTEST_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/${DECODER_NAME}_test.so ${TEST_RUN_DIR}/plugin/${DECODER_NAME}_test.so")
|
||||
|
||||
set_tests_properties(STELLAR_MKDIR_METRIC STELLAR_INSTALL_TEST_MAIN STELLAR_COPY_SPEC STELLAR_COPY_HTTP_DECODER_CONF STELLAR_COPY_HTTP_GTEST_ENTRY_CONF
|
||||
STELLAR_COPY_STELLAR_CONF STELLAR_COPY_STELLAR_LOG_CONF
|
||||
STELLAR_HTTP_DECODER_SO STELLAR_HTTP_DECODER_GTEST_SO
|
||||
UPDATE_GTEST_PLUG_ENTRY UPDATE_GTEST_PLUG_TOPIC
|
||||
PROPERTIES FIXTURES_SETUP TestFixture)
|
||||
|
||||
set(TEST_JSON_DIR ${PROJECT_SOURCE_DIR}/test/test_result_json)
|
||||
set(TEST_PCAP_DIR ${PROJECT_SOURCE_DIR}/test/http_pcap)
|
||||
|
||||
# run tests
|
||||
add_test(NAME STELLAR_HTTP_GET_SINGLE_TRANS_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_single_trans.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_single_trans.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GET_MULTI_TRANS_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_multi_trans.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_multi_trans.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GET_LONG_COOKIE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_long_cookie.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_long_cookie.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GET_ENCODED_URI_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_encoded_uri.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_encoded_uri.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_RES_GZIP_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_res_gzip.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_res_gzip.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_CHUNKED_RES_GZIP_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_chunked_res_gzip.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_chunked_res_gzip.json"WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_OVER_TCP_KEEPALIVE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_over_tcp_keepalive.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_tcp_keepalive.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_OVER_PPPOE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_over_pppoe.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_pppoe.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_OVER_TLS_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_over_tls.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_tls.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_NON_HTTP_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/non_http.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/non_http.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_REQ_1BYTE_SLIDING_WINDOW_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_req_1byte_sliding_window.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_req_1byte_sliding_window.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_RES_1BYTE_SLIDING_WINDOW_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_res_1byte_sliding_window.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_res_1byte_sliding_window.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_NO_CONTENT_LENGTH_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_no_content_length.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_no_content_length.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_POST_MULTIPART_FORM_DATA_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post_multipart_form_data.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_post_multipart_form_data.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_HEADERS_EXCEED_MAXIMUM_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_hdrs_exceed_maximum.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdrs_exceed_maximum.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GET_MALFORMED_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_malformed.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_malformed.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_URL_WITHOUT_HOST_V4_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_url_test_without_host.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_url_test_without_host.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_URL_WITHOUT_HOST_V6_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_url_test_without_host_v6.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_url_test_without_host_v6.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
#no SYN, steallar not support !
|
||||
# add_test(NAME STELLAR_HTTP_HEADER_VALUE_EMPTY_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_hdr_value_empty.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_value_empty.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_UPGRADE_WEBSOCKET_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_upgrade_websocket.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_upgrade_websocket.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MULTI_PARSE_ERROR_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_multi_parse_error.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_multi_parse_error.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GET_REQ_PIPELINE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_req_pipeline.pcap ${TEST_RUN_DIR}/pcap/test.pcap;./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_req_pipeline.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_TRANS_PIPELINE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_trans_pipeline.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_trans_pipeline.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
#no SYN, steallar not support !
|
||||
# add_test(NAME STELLAR_HTTP_HEADER_TRUNCATED_IN_KV_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_hdr_truncated_in_kv.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_truncated_in_kv.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
# add_test(NAME STELLAR_HTTP_HEADER_TRUNCATED_AFTER_KV_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_truncated_after_kv.json -r ${TEST_PCAP_DIR}/http_hdr_truncated_after_kv.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_FIN_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_fin.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/non_http.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
# add_test(NAME STELLAR_HTTP_TUNNEL_ONLY_HDR_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_tunnel_s2c_only_hdr.json
|
||||
# -r ${TEST_PCAP_DIR}/http_tunnel_s2c_only_hdr.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_CHN_ENCODE_URL COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_chn_encode_url.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_chn_encode_url.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_ZLIB_DEADLOCK COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_zlib_deadlock.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_zlib_deadlock.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_OUT_OF_ORDER COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_out_of_order.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_out_of_order.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_GZIP_OUT_OF_ORDER COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_gzip_out_of_order.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_gzip_out_of_order.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
|
||||
set_tests_properties(STELLAR_HTTP_GET_SINGLE_TRANS_TEST
|
||||
STELLAR_HTTP_GET_MULTI_TRANS_TEST
|
||||
STELLAR_HTTP_GET_LONG_COOKIE_TEST
|
||||
STELLAR_HTTP_GET_ENCODED_URI_TEST
|
||||
STELLAR_HTTP_RES_GZIP_TEST
|
||||
STELLAR_HTTP_CHUNKED_RES_GZIP_TEST
|
||||
STELLAR_HTTP_OVER_TCP_KEEPALIVE_TEST
|
||||
STELLAR_HTTP_OVER_PPPOE_TEST
|
||||
STELLAR_HTTP_OVER_TLS_TEST
|
||||
STELLAR_NON_HTTP_TEST
|
||||
STELLAR_HTTP_REQ_1BYTE_SLIDING_WINDOW_TEST
|
||||
STELLAR_HTTP_RES_1BYTE_SLIDING_WINDOW_TEST
|
||||
STELLAR_HTTP_NO_CONTENT_LENGTH_TEST
|
||||
STELLAR_HTTP_POST_MULTIPART_FORM_DATA_TEST
|
||||
STELLAR_HTTP_HEADERS_EXCEED_MAXIMUM_TEST
|
||||
STELLAR_HTTP_GET_MALFORMED_TEST
|
||||
STELLAR_HTTP_URL_WITHOUT_HOST_V4_TEST
|
||||
STELLAR_HTTP_URL_WITHOUT_HOST_V6_TEST
|
||||
STELLAR_HTTP_MULTI_PARSE_ERROR_TEST
|
||||
STELLAR_HTTP_UPGRADE_WEBSOCKET_TEST
|
||||
STELLAR_HTTP_GET_REQ_PIPELINE_TEST
|
||||
STELLAR_HTTP_TRANS_PIPELINE_TEST
|
||||
STELLAR_HTTP_FIN_TEST
|
||||
STELLAR_HTTP_CHN_ENCODE_URL
|
||||
STELLAR_HTTP_ZLIB_DEADLOCK
|
||||
STELLAR_HTTP_OUT_OF_ORDER
|
||||
STELLAR_HTTP_GZIP_OUT_OF_ORDER
|
||||
PROPERTIES FIXTURES_REQUIRED TestFixture)
|
||||
|
||||
add_test(NAME UPDATE_STATE_PLUG_ENTRY COMMAND bash -c "sed -i 's/name=.*/name=\\x22http_decoder_test_state_entry\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml")
|
||||
add_test(NAME UPDATE_STATE_PLUG_TOPIC COMMAND bash -c "sed -i 's/topic=.*/topic=\\x22HTTP_DECODER_MESSAGE\\x22/' ${TEST_RUN_DIR}/etc/http/gtest_entry.toml")
|
||||
|
||||
set_tests_properties(UPDATE_STATE_PLUG_ENTRY UPDATE_STATE_PLUG_TOPIC STELLAR_HTTP_DECODER_SO STELLAR_HTTP_DECODER_GTEST_SO STELLAR_MKDIR_METRIC
|
||||
PROPERTIES FIXTURES_SETUP TestState)
|
||||
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_C2S_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post_c2s.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_c2s.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_S2C_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_post_s2c.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_s2c.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_PIPELINE_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_get_multi_trans.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_pipeline.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_SES_EXCEPTION_C2S_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_session_exception_c2s.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_exception_c2s.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
add_test(NAME STELLAR_HTTP_MSG_TYPE_STATE_SES_EXCEPTION_S2C_TEST COMMAND sh -c "ln -sf ${TEST_PCAP_DIR}/http_session_exception_s2c.pcap ${TEST_RUN_DIR}/pcap/test.pcap; ./${TEST_MAIN} ${TEST_JSON_DIR}/http_msg_type_state_exception_s2c.json" WORKING_DIRECTORY ${TEST_RUN_DIR})
|
||||
|
||||
set_tests_properties(STELLAR_HTTP_MSG_TYPE_STATE_TEST
|
||||
STELLAR_HTTP_MSG_TYPE_STATE_C2S_TEST
|
||||
STELLAR_HTTP_MSG_TYPE_STATE_S2C_TEST
|
||||
STELLAR_HTTP_MSG_TYPE_STATE_PIPELINE_TEST
|
||||
STELLAR_HTTP_MSG_TYPE_STATE_SES_EXCEPTION_C2S_TEST
|
||||
STELLAR_HTTP_MSG_TYPE_STATE_SES_EXCEPTION_S2C_TEST
|
||||
PROPERTIES FIXTURES_REQUIRED TestState)
|
||||
4
test/http_decoder/test_based_on_stellar/env/log.toml
vendored
Normal file
4
test/http_decoder/test_based_on_stellar/env/log.toml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
[log]
|
||||
output = file # stderr, file
|
||||
file = "log/stellar.log"
|
||||
level = DEBUG # TRACE, DEBUG, INFO, WARN, ERROR, FATAL
|
||||
9
test/http_decoder/test_based_on_stellar/env/spec.toml
vendored
Normal file
9
test/http_decoder/test_based_on_stellar/env/spec.toml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
[[plugin]]
|
||||
path = "./plugin/http_decoder.so"
|
||||
init = "http_decoder_init"
|
||||
exit = "http_decoder_exit"
|
||||
|
||||
[[plugin]]
|
||||
path = "./plugin/http_decoder_test.so"
|
||||
init = "http_decoder_test_init"
|
||||
exit = "http_decoder_test_exit"
|
||||
57
test/http_decoder/test_based_on_stellar/env/stellar.toml
vendored
Normal file
57
test/http_decoder/test_based_on_stellar/env/stellar.toml
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
[id_generator]
|
||||
snowflake_worker_id_base = 1 # [0, 31]
|
||||
snowflake_worker_id_offset = 2 # [0, 127]
|
||||
|
||||
[packet_io]
|
||||
mode = dumpfile # dumpfile, marsio
|
||||
app_symbol = stellar
|
||||
dev_symbol = nf_0_fw
|
||||
|
||||
dumpfile_dir = "./pcap"
|
||||
nr_threads = 1 # [1, 256]
|
||||
#cpu_mask = [5, 6, 7, 8, 9, 10, 11, 12]
|
||||
cpu_mask = [5]
|
||||
|
||||
[ip_reassembly]
|
||||
enable = 1
|
||||
timeout = 10000 # range: [1, 60000] (ms)
|
||||
bucket_entries = 256 # range: [1, 4294967295] (must be power of 2)
|
||||
bucket_num = 4096 # range: [1, 4294967295]
|
||||
|
||||
[session_manager]
|
||||
# max session number
|
||||
max_tcp_session_num = 1000
|
||||
max_udp_session_num = 1000
|
||||
|
||||
# session overload evict
|
||||
tcp_overload_evict_old_sess = 1 # 1: evict old session, 0: bypass new session
|
||||
udp_overload_evict_old_sess = 1 # 1: evict old session, 0: bypass new session
|
||||
|
||||
# TCP timeout
|
||||
tcp_init_timeout = 10 # range: [1, 60000] (ms)
|
||||
tcp_handshake_timeout = 10 # range: [1, 60000] (ms)
|
||||
tcp_data_timeout = 10 # range: [1, 15999999000] (ms)
|
||||
tcp_half_closed_timeout = 10 # range: [1, 604800000] (ms)
|
||||
tcp_time_wait_timeout = 10 # range: [1, 600000] (ms)
|
||||
tcp_discard_timeout = 10 # range: [1, 15999999000] (ms)
|
||||
tcp_unverified_rst_timeout = 10 # range: [1, 600000] (ms)
|
||||
# UDP timeout
|
||||
udp_data_timeout = 10 # range: [1, 15999999000] (ms)
|
||||
udp_discard_timeout = 10 # range: [1, 15999999000] (ms)
|
||||
|
||||
# duplicate packet filter
|
||||
duplicated_packet_filter_enable = 0
|
||||
duplicated_packet_filter_capacity = 1000000 # range: [1, 4294967295]
|
||||
duplicated_packet_filter_timeout = 10 # range: [1, 60000] (ms)
|
||||
duplicated_packet_filter_error_rate = 0.00001 # range: [0.0, 1.0]
|
||||
|
||||
# evicted session filter
|
||||
evicted_session_filter_enable = 0
|
||||
evicted_session_filter_capacity = 1000000 # range: [1, 4294967295]
|
||||
evicted_session_filter_timeout = 10 # range: [1, 60000] (ms)
|
||||
evicted_session_filter_error_rate = 0.00001 # range: [0.0, 1.0]
|
||||
|
||||
# TCP reassembly (Per direction)
|
||||
tcp_reassembly_enable = 1
|
||||
tcp_reassembly_max_timeout = 10 # range: [1, 60000] (ms)
|
||||
tcp_reassembly_max_segments = 256 # range: [2, 4096]
|
||||
151
test/http_decoder/test_based_on_stellar/plugin_test_main.cpp
Normal file
151
test/http_decoder/test_based_on_stellar/plugin_test_main.cpp
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "stream.h"
|
||||
#include "cJSON.h"
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include "http_decoder_gtest.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include "stellar/stellar.h"
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
// #define IGNORE_PRINTF
|
||||
#ifdef IGNORE_PRINTF
|
||||
#define printf(fmt, ...) (0)
|
||||
#endif
|
||||
|
||||
static cJSON *g_test_result_root = NULL;
|
||||
static cJSON *g_load_result_root = NULL;
|
||||
static const char *result_json_path = NULL;
|
||||
|
||||
extern "C" int commit_test_result_json(cJSON *node, const char *name)
|
||||
{
|
||||
if (g_test_result_root)
|
||||
{
|
||||
// cJSON_AddItemToObject(g_test_result_root, name, node);
|
||||
// cJSON_AddStringToObject(node, "name", name);
|
||||
cJSON_AddItemToArray(g_test_result_root, node);
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void hdgt_prune_non_result_item(cJSON *benchmark_json_root)
|
||||
{
|
||||
int array_size = cJSON_GetArraySize(benchmark_json_root);
|
||||
|
||||
for (int i = 0; i < array_size; i++)
|
||||
{
|
||||
cJSON *object_root = cJSON_GetArrayItem(benchmark_json_root, i);
|
||||
cJSON_DeleteItemFromObject(object_root, GTEST_HTTP_PAYLOAD_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
static cJSON *load_result_from_jsonfile(const char *json_path)
|
||||
{
|
||||
if (json_path == NULL)
|
||||
return NULL;
|
||||
|
||||
long file_len = 0;
|
||||
char *file_content = NULL;
|
||||
FILE *fp = NULL;
|
||||
|
||||
fp = fopen(json_path, "r+");
|
||||
if (NULL == fp)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
fseek(fp, 0, SEEK_END);
|
||||
file_len = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
if (file_len == 0)
|
||||
{
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
file_content = (char *)malloc(file_len + 1);
|
||||
fread(file_content, file_len, 1, fp);
|
||||
file_content[file_len] = '\0';
|
||||
cJSON *load = cJSON_Parse(file_content);
|
||||
free(file_content);
|
||||
fclose(fp);
|
||||
|
||||
hdgt_prune_non_result_item(load);
|
||||
|
||||
return load;
|
||||
}
|
||||
|
||||
TEST(PROTOCOL, compare_result_json)
|
||||
{
|
||||
EXPECT_EQ(cJSON_GetArraySize(g_test_result_root), cJSON_GetArraySize(g_load_result_root));
|
||||
int ret = cJSON_Compare(g_test_result_root, g_load_result_root, 0);
|
||||
EXPECT_EQ(1, ret);
|
||||
|
||||
if (ret != 1)
|
||||
{
|
||||
char *load_json_str = cJSON_Print(g_load_result_root);
|
||||
printf("LOAD Raw:\n%s\n", load_json_str);
|
||||
free(load_json_str);
|
||||
char *result_json_str = cJSON_Print(g_test_result_root);
|
||||
printf("TEST Raw:\n%s\n", result_json_str);
|
||||
free(result_json_str);
|
||||
|
||||
cJSON *t_load = g_load_result_root->child, *t_test = g_test_result_root->child;
|
||||
while (t_load != NULL)
|
||||
{
|
||||
ret = cJSON_Compare(t_load, t_test, 0);
|
||||
if (ret != 1)
|
||||
{
|
||||
load_json_str = cJSON_Print(t_load);
|
||||
printf("LOAD Diff:\n%s\n", load_json_str);
|
||||
free(load_json_str);
|
||||
result_json_str = cJSON_Print(t_test);
|
||||
printf("TEST Diff:\n%s\n", result_json_str);
|
||||
free(result_json_str);
|
||||
goto fail;
|
||||
}
|
||||
t_load = t_load->next;
|
||||
t_test = t_test->next;
|
||||
}
|
||||
}
|
||||
cJSON_Delete(g_load_result_root);
|
||||
cJSON_Delete(g_test_result_root);
|
||||
return;
|
||||
fail:
|
||||
cJSON_Delete(g_load_result_root);
|
||||
cJSON_Delete(g_test_result_root);
|
||||
return;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret = 0;
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("Usage: %s <result_json_path>\n", argv[0]);
|
||||
result_json_path = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
result_json_path = argv[1];
|
||||
g_test_result_root = cJSON_CreateArray();
|
||||
g_load_result_root = load_result_from_jsonfile(result_json_path);
|
||||
assert(g_load_result_root != NULL && g_test_result_root != NULL);
|
||||
}
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
if (stellar_run(argc - 1, argv + 1) < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (result_json_path != NULL)
|
||||
{
|
||||
ret = RUN_ALL_TESTS();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "2001:da8:200:900e:200:5efe:d24d:58a3.52556>2600:140e:6::1702:1058.80"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/ncsi.txt",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Connection": "Close",
|
||||
"User-Agent": "Microsoft NCSI",
|
||||
"Host": "www.msftncsi.com",
|
||||
"__X_HTTP_URL": "www.msftncsi.com/ncsi.txt"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Content-Length": "14",
|
||||
"Date": "Tue, 01 Dec 2015 03:41:27 GMT",
|
||||
"Connection": "close",
|
||||
"Content-Type": "text/plain",
|
||||
"Cache-Control": "max-age=30, must-revalidate",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "cd5a4d3fdd5bffc16bf959ef75cf37bc",
|
||||
"__X_HTTP_PAYLOAD": "TWljcm9zb2Z0IE5DU0k="
|
||||
}
|
||||
]
|
||||
42
test/http_decoder/test_result_json/http_chn_encode_url.json
Normal file
42
test/http_decoder/test_result_json/http_chn_encode_url.json
Normal file
@@ -0,0 +1,42 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "2607:5d00:2:2::38:2:56343-240e:928:101:80::80:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "www.airchina.com.cn",
|
||||
"Connection": "keep-alive",
|
||||
"DNT": "1",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cookie": "_gcl_au=1.1.240068387.1720059437; _ga_CGYVD7S4G4=GS1.1.1720059448.3.0.1720059453.0.0.0; HMF_CI=7967e38cc3874dbbefa260b8dcbee31fa827a01fc2b7073105a5e05f4a1ea361c74f6d4c37fb199bfc9470036f06fb537da2a74e96450b7949e0b686f0569f9680; HMY_JC=84f9c8a99e076ee2dda5ba48cd953f61c4dc2707823205d8171c8818eea9d60fda,; _ga=GA1.3.822493162.1711101509; _gid=GA1.3.304369429.1721120134; arialoadData=true; ariawapChangeViewPort=false; C3VK=be8842; HBB_HC=faa7f3e2477e14525534a5560ed6a307b29ae2c324e1f631a428e53fb74c9d72575c155d682554ba15cc9e52afe31218b1; mbox=check#true#1721120252|session#1721120133635-517642#1721122052; s_pers=%20s_fid%3D52863027521849CD-3A72894997C48527%7C1878886591105%3B; s_sess=%20s_cc%3Dtrue%3B",
|
||||
"__X_HTTP_URL": "www.airchina.com.cn/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81",
|
||||
"__X_HTTP_DECODED_URL": "www.airchina.com.cn/测试中文URL编解码"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "Moved Temporarily",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 302,
|
||||
"Date": "Tue, 16 Jul 2024 08:57:32 GMT",
|
||||
"Content-Length": "0",
|
||||
"Connection": "keep-alive",
|
||||
"Server": "waf/4.39.0-0.el7",
|
||||
"Location": "https://www.airchina.com.cn/%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87URL%E7%BC%96%E8%A7%A3%E7%A0%81",
|
||||
"x-ws-origin-error": "-",
|
||||
"X-Via": "1.1 PSjsczBGPiv194:0 (Cdn Cache Server V2.0), 1.1 PStjdxpn34:6 (Cdn Cache Server V2.0)",
|
||||
"X-Ws-Request-Id": "669635fc_PStjdxks32_7630-15285"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "127.0.0.1:33412-127.0.0.1:8080-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "www.wireshark.org:8080",
|
||||
"User-Agent": "curl/7.46.0",
|
||||
"Accept": "*/*",
|
||||
"Connection": "close",
|
||||
"Accept-Encoding": "chunked, gzip",
|
||||
"__X_HTTP_URL": "www.wireshark.org:8080/"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "cloudflare-nginx",
|
||||
"Date": "Wed, 06 Jan 2016 20:42:10 GMT",
|
||||
"Content-Type": "text/html",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Connection": "close",
|
||||
"Set-Cookie": "__cfduid=d8d37b52eaa3137bdfd7fd67a4ffc8a7a1452112929; expires=Thu, 05-Jan-17 20:42:09 GMT; path=/; domain=.wireshark.org; HttpOnly",
|
||||
"X-Frame-Options": "SAMEORIGIN",
|
||||
"Strict-Transport-Security": "max-age=31536000;",
|
||||
"X-Slogan": "It's a great product with a great story to tell. I'm pumped!",
|
||||
"X-Mod-Pagespeed": "1.9.32.11-7550",
|
||||
"Vary": "Accept-Encoding",
|
||||
"Cache-control": "max-age=0, no-cache, no-store",
|
||||
"X-Slogan1": "Go deep.",
|
||||
"CF-RAY": "260a3f709d7b0761-AMS",
|
||||
"Content-Encoding": "gzip",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "5387fc115327b819ba920ad6ce8f3e3a",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "855f8310be999de806e89a420a95435d"
|
||||
}
|
||||
]
|
||||
686
test/http_decoder/test_result_json/http_connect_flood.json
Normal file
686
test/http_decoder/test_result_json/http_connect_flood.json
Normal file
@@ -0,0 +1,686 @@
|
||||
[
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18762>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_1"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18746>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_2"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18744>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_3"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18748>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_4"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18750>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_5"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18752>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_6"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18754>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_7"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18756>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_8"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18758>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_9"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18760>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_10"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18762>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:38 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_11"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18768>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Safari/5.00 (Macintosh; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_12"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18766>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_13"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18770>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_14"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18772>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_15"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18776>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "GooglePocket/2.1 ( http://www.googlePocket.com/Pocket.html)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_16"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18774>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_17"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18780>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030505 Mozilla Firebird/0.6",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_18"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18778>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_19"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18782>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "IE/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322;)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_20"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18784>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_21"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18768>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_22"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18766>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_23"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18770>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_24"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18772>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_25"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18776>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_26"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18780>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_27"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18774>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_28"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18778>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_29"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18782>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_30"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18784>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:39 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_31"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18790>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Safari/5.00 (Macintosh; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_32"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18792>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_33"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18796>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_34"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18794>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Opera/9.00 (Windows NT 5.1; U; en)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_35"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18798>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "GooglePocket/2.1 ( http://www.googlePocket.com/Pocket.html)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_36"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18800>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030505 Mozilla Firebird/0.6",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_37"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18804>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_38"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18802>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.4.0",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_39"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18806>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "IE/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322;)",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_40"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18808>10.0.0.2.80",
|
||||
"method": "CONNECT",
|
||||
"uri": "test.mazebolt.com:80",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.mazebolt.com",
|
||||
"User-Agent": "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110929 Iceweasel/3.5.16",
|
||||
"Accept": "*/*",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Content-Length": "0",
|
||||
"name": "HTTP_DECODER_RESULT_41"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18790>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_42"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18792>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_43"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18796>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_44"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18798>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_45"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18794>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_46"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18800>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_47"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18804>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_48"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18802>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_49"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18806>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_50"
|
||||
},
|
||||
{
|
||||
"Tuple4": "10.128.0.2.18808>10.0.0.2.80",
|
||||
"res_version": "1.1",
|
||||
"res_status": "Forbidden",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 403,
|
||||
"Date": "Thu, 03 Sep 2020 10:26:41 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "199",
|
||||
"Content-Type": "text/html; charset=iso-8859-1",
|
||||
"name": "HTTP_DECODER_RESULT_51"
|
||||
}
|
||||
]
|
||||
81
test/http_decoder/test_result_json/http_get_encoded_uri.json
Normal file
81
test/http_decoder/test_result_json/http_get_encoded_uri.json
Normal file
@@ -0,0 +1,81 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.117.60:39655-58.16.70.122:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "POST",
|
||||
"uri": "/disAll/tcCertType.html",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
|
||||
"Accept": "*/*",
|
||||
"Accept-Language": "en-US,en;q=0.8,en-us,en;q=0.5",
|
||||
"Origin": "http://58.16.70.122",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"Referer": "http://58.16.70.122/register.jsp?redirect:http://58.16.70.122.r87.com/?",
|
||||
"Cache-Control": "no-cache",
|
||||
"X-Scanner": "Netsparker",
|
||||
"Cookie": "JSESSIONID=385C79E211D561C0CA13D90F150F603D",
|
||||
"Host": "58.16.70.122",
|
||||
"Content-Length": "0",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"__X_HTTP_URL": "58.16.70.122/disAll/tcCertType.html"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "Apache-Coyote/1.1",
|
||||
"Pragma": "No-cache",
|
||||
"Expires": "Thu, 01 Jan 1970 00:00:00 GMT",
|
||||
"Content-Type": "text/html;charset=UTF-8",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Date": "Sat, 18 May 2019 01:36:57 GMT",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "d545e0faf20f7ffe90e31cfc1aef1782",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "d545e0faf20f7ffe90e31cfc1aef1782"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"method": "GET",
|
||||
"uri": "/upload/%E6%B3%95%E5%BE%8B%E6%B3%95%E8%A7%84/%E5%B8%82%E4%BA%BA%E6%B0%91%E6%94%BF%E5%BA%9C%E5%8A%9E%E5%85%AC%E5%8E%85%E5%8D%B0%E5%8F%91%E8%B4%B5%E9%98%B3%E5%B8%82%E5%85%B3%E4%BA%8E%E6%8E%A8%E8%BF%9B%E5%B7%A5%E5%95%86%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7%E3%80%81%E7%BB%84%E7%BB%87%E6%9C%BA%E6%9E%84%E4%BB%A3%E7%A0%81%E8%AF%81%E5%92%8C%E7%A8%8E%E5%8A%A1%E7%99%BB%E8%AE%B0%E8%AF%81%E2%80%9C%E4%B8%89%E8%AF%81%E5%90%88%E4%B8%80%E2%80%9D%E7%99%BB%E8%AE%B0%E5%88%B6%E5%BA%A6%E6%94%B9%E9%9D%A9%E5%AE%9E%E6%96%BD%E6%96%B9%E6%A1%88%E7%9A%84%E9%80%9A%E7%9F%A5%EF%BC%88%E7%AD%91%E5%BA%9C%E5%8A%9E%E5%87%BD%E3%80%902015%E3%80%91162%E5%8F%B7%EF%BC%89.docx?nsextt=N3TSP4RKE2",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
|
||||
"Cache-Control": "no-cache",
|
||||
"Accept-Language": "en-us,en;q=0.5",
|
||||
"X-Scanner": "Netsparker",
|
||||
"Cookie": "JSESSIONID=385C79E211D561C0CA13D90F150F603D",
|
||||
"Host": "58.16.70.122",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"__X_HTTP_URL": "58.16.70.122/upload/%E6%B3%95%E5%BE%8B%E6%B3%95%E8%A7%84/%E5%B8%82%E4%BA%BA%E6%B0%91%E6%94%BF%E5%BA%9C%E5%8A%9E%E5%85%AC%E5%8E%85%E5%8D%B0%E5%8F%91%E8%B4%B5%E9%98%B3%E5%B8%82%E5%85%B3%E4%BA%8E%E6%8E%A8%E8%BF%9B%E5%B7%A5%E5%95%86%E8%90%A5%E4%B8%9A%E6%89%A7%E7%85%A7%E3%80%81%E7%BB%84%E7%BB%87%E6%9C%BA%E6%9E%84%E4%BB%A3%E7%A0%81%E8%AF%81%E5%92%8C%E7%A8%8E%E5%8A%A1%E7%99%BB%E8%AE%B0%E8%AF%81%E2%80%9C%E4%B8%89%E8%AF%81%E5%90%88%E4%B8%80%E2%80%9D%E7%99%BB%E8%AE%B0%E5%88%B6%E5%BA%A6%E6%94%B9%E9%9D%A9%E5%AE%9E%E6%96%BD%E6%96%B9%E6%A1%88%E7%9A%84%E9%80%9A%E7%9F%A5%EF%BC%88%E7%AD%91%E5%BA%9C%E5%8A%9E%E5%87%BD%E3%80%902015%E3%80%91162%E5%8F%B7%EF%BC%89.docx?nsextt=N3TSP4RKE2",
|
||||
"__X_HTTP_DECODED_URL": "58.16.70.122/upload/法律法规/市人民政府办公厅印发贵阳市关于推进工商营业执照、组织机构代码证和税务登记证“三证合一”登记制度改革实施方案的通知(筑府办函【2015】162号).docx?nsextt=N3TSP4RKE2"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "Apache-Coyote/1.1",
|
||||
"Accept-Ranges": "bytes",
|
||||
"ETag": "W/\"1703517-1546572172000\"",
|
||||
"Last-Modified": "Fri, 04 Jan 2019 03:22:52 GMT",
|
||||
"Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8",
|
||||
"Content-Length": "1703517",
|
||||
"Date": "Sat, 18 May 2019 01:37:00 GMT",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "3598c468910611a3128d068e20ae0e82",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3598c468910611a3128d068e20ae0e82"
|
||||
}
|
||||
]
|
||||
24
test/http_decoder/test_result_json/http_get_long_cookie.json
Normal file
24
test/http_decoder/test_result_json/http_get_long_cookie.json
Normal file
@@ -0,0 +1,24 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "202.127.156.91:27282-14.17.32.203:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http%3A%2F%2Fsports.qq.com%2Fa%2F20160106%2F008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "livep.l.qq.com",
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36",
|
||||
"Accept": "*/*",
|
||||
"Referer": "http://imgcache.qq.com/tencentvideo_v1/player/TPout.swf?max_age=86400&v=20140714",
|
||||
"Accept-Encoding": "gzip,deflate,sdch",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8",
|
||||
"__X_HTTP_URL": "livep.l.qq.com/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http%3A%2F%2Fsports.qq.com%2Fa%2F20160106%2F008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105",
|
||||
"__X_HTTP_DECODED_URL": "livep.l.qq.com/livemsg?imagemd5=02f5efd8a349c50280f8540b2735bd54&tailroll=1&plugin=1.3.8&pf=out&si=3766845706&url=http://sports.qq.com/a/20160106/008987.htm&soid=CA7F9C5B0120568CDC2F68726300&chid=0&ping_data=dXNlcl9pbmZvPXVCWDluVDg5SFJhOUFQK0JQVGdKRUxVYi9Kdz0&t=0&iptype=0&vptag=&pid=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&adtype=LD&oadid=6012&ev=3236&l=4020&ufc_filter=0&imagelog=1&pid2=7F993E38C0E676ACC07DE764D1F3DEF56AA8F90A&mt=15000&coverid=&reqtime=1452071981&requestl=4020&isthirdip=0&cid=0&isfloatindex=0&o=100654557&lcount=2&refluence=4020&from=0&vid=m01794rm5ej&cip=202.127.156.91&aver=0&ip_filter=0&adlength=30000&tagid=&v=TencentPlayerOutV3.2.19.346&live=0&dura=105",
|
||||
"Cookie": "flashuser=95621BA8CB862E09; piao_city=179; lv_irt_id=3628e1bbe25a6c941da9fac02ec2df8b; cm_cookie=V1,10017&-EP5mRruXhQarsCl5LD-2YzgjVTvyr2K&AQEBh7uoLMUB9lnaB5Tz9XdYnGIWflXmsDrU&150723&150723,10035&7t-tEmfJ076VAsM9&AQEBh7uoLMUB9lnc4tpW7vbazqdrRdBYOUCi&150724&150807,110054&ucO0Z0gctNn3&AQEBh7uoLMUB9llxMNl45F3RAIsKK0iMOJAG&150716&151008,10040&ACZ1r0A70NaEFcGT&AQEBh7uoLMUB9lmVgSoTwuuXZi896zSVsXIF&150818&151014,110015&1&AQEBh7uoLMUB9lkt2LUHO6ARwODHLI_Y51rj&150928&151103,10037&1433388364186289251984&AQEBh7uoLMUB9llIBencOqTAEh2aQ2SURSSQ&150909&151110,10011&jL40Z03uUFI0&AQEBh7uoLMUB9lkfw2sJVNx9g12Fzs12rPSN&150717&151125,10016&F64E6LFZs0W&AQEBh7uoLMUB9llE4yoPFNUykSj7WKaRK5lH&150805&151127,10019&WQAO-C1K9qI5OP8W_t2pSw&AQEBh7uoLMUB9llhpZE87GmOk3XGo_MJgV6K&150826&151130,10015&820490997316506147&AQEBh7uoLMUB9llXiynsGYRhMO3XuPnkuHUt&150715&151201,10012&x3X1yY6b&AQEBh7uoLMUB9ll9mraU_LJCDBYsE0Sbk_V9&151202&151202,110065&ucO0Z0gctNn3&AQEBh7uoLMUB9lkJcK3KDBQTKF0YfZ5wB7r5&150716&151203,110066&jL40Z03uUFI0&AQEBh7uoLMUB9lnyvKSYhcJD1X_rSs_DLVWx&150916&151221,10013&ePyYB2MSKa0TCbebpxKjmU&AQEBh7uoLMUB9ln6_6nGNidqml4nFKXhtE58&151221&151221,110061&d9cfa518d82abee&AQEBh7uoLMUB9llj2NYzmCjxaLWXALTcAGIH&150818&151224,10038&CAESEPZbUhToZJ39CS9MlgXGUSQ&AQEBh7uoLMUB9lmhnrDM5lIGtl6vc1NxMD6F&151110&151224,10077&820490997316506147&AQEBh7uoLMUB9lmkUdUe2xSHGkvM0IRu9Jt9&151214&151228,10008&0yPSvk92ie1nhB8wTUlTq&AQEBh7uoLMUB9lnL5ZCYvXJNvlv53G0CKEkj&150817&151228,10045&0&AQEBh7uoLMUB9llW3v1Vh7W72lv14RlAjUXn&151023&151228,110064&jL40Z03uUFI0&AQEBh7uoLMUB9lkBYuCUDLDrOcGURJcilogv&151016&160104,110069&26d49ecc&AQEBh7uoLMUB9lmlBLTxQY9BkCmimkMFqTo5&151204&160105,10079&B8hGto5y1e3uDXwCMsIun3rjk--dVCof&AQEBh7uoLMUB9llxnFrhDtdNMjZ1hs1il5J4&151214&160105; LHTturn=24; ptisp=ctc; RK=hRWyd82Gd8; pgv_pvi=7567882240; image_md5=bd21d5fb2f401b37cf3a02724dc06545; LTPturn=27; pt2gguin=o0583115900; uin=o0583115900; skey=@Mp9aCinaO; ptcz=10d4b1b7bde835d64663338a8008fd4f81e2c6b5f0ba81a90da3627ee617c7ee; pgv_info=ssid=s4768939310; pgv_pvid=6872592818; o_cookie=583115900; lv_play_index_textAd=47; lv_play_indexl.=32; dc_vplaying=1; LKBturn=29; Lturn=29; adid=583115900; appuser=95621BA8CB862E09; o_minduid=phhdxyNLkxBWMa74VTm5zU4y5EbUv5vR; appuser_95621BA8CB862E09_0=2b7gwp=1453219199_6&2btemv=1455551999_1&2c8311=1453305599_3&2cfx4j=1453651199_3&2cfx9l=1453651199_1&2d49y9=1453823999_2&2d67kl=1454255999_2&2d69mf=1454255999_3&2dxv8l=1455465599_6&2dzhfl=1452614399_1&f_pogvwp=1452095999_1&f_pogvwv=1452095999_2&f_pogw0m=1452095999_1&fd_15bm2t7=1452095999_1&fd_1h2pbsd=1452095999_2&fd_1k6so62=1452095999_1&fd_rhmjmq=1452095999_2&m_roiw0t=1452095999_3&m_xty8wl=1452095999_1&pogree=1452095999_2; TX.boid=100655474=1452072582_1&701041365=1452072585_1; appuser_95621BA8CB862E09_effect_0=fd_1ez2rcc=1452095999_1&fd_qdh7zw=1452095999_1&fd_ul215j=1452095999_1; psessionid=ca7f9c5b_1452071982_583115900_30754; psessiontime=1452071990"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
[
|
||||
]
|
||||
149
test/http_decoder/test_result_json/http_get_multi_trans.json
Normal file
149
test/http_decoder/test_result_json/http_get_multi_trans.json
Normal file
@@ -0,0 +1,149 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.50.18:60400-192.168.42.1:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/account/login.htm",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.pro.testin.cn",
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=531AACA879469EDAB825E28113490E10",
|
||||
"__X_HTTP_URL": "test.pro.testin.cn/account/login.htm"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 302,
|
||||
"Server": "nginx/1.16.1",
|
||||
"Date": "Tue, 31 May 2022 06:41:23 GMT",
|
||||
"Content-Length": "0",
|
||||
"Connection": "keep-alive",
|
||||
"Set-Cookie": "JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA; Path=/; HttpOnly",
|
||||
"Set-Cookie1": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie2": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Location": "http://test.pro.testin.cn/enterprise/index.htm",
|
||||
"Content-Language": "zh-CN"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"method": "GET",
|
||||
"uri": "/enterprise/index.htm",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.pro.testin.cn",
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA",
|
||||
"__X_HTTP_URL": "test.pro.testin.cn/enterprise/index.htm"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"res_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 302,
|
||||
"Server": "nginx/1.16.1",
|
||||
"Date": "Tue, 31 May 2022 06:41:23 GMT",
|
||||
"Content-Length": "0",
|
||||
"Connection": "keep-alive",
|
||||
"Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Location": "http://test.pro.testin.cn/enterprise/into.htm?eid=1",
|
||||
"Content-Language": "zh-CN"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 2,
|
||||
"method": "GET",
|
||||
"uri": "/enterprise/into.htm?eid=1",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.pro.testin.cn",
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA",
|
||||
"__X_HTTP_URL": "test.pro.testin.cn/enterprise/into.htm?eid=1"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 2,
|
||||
"res_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 302,
|
||||
"Server": "nginx/1.16.1",
|
||||
"Date": "Tue, 31 May 2022 06:41:23 GMT",
|
||||
"Content-Length": "0",
|
||||
"Connection": "keep-alive",
|
||||
"Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Location": "http://test.pro.testin.cn/realmachine/index.htm",
|
||||
"Content-Language": "zh-CN"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 3,
|
||||
"method": "GET",
|
||||
"uri": "/realmachine/index.htm",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "test.pro.testin.cn",
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"Cookie": "Hm_lvt_1b8c1194303ef64e02f003f0cb8a1906=1653898514; _gcl_au=1.1.1010551181.1653898515; _ga=GA1.2.1419569885.1653898515; _gid=GA1.2.2007113907.1653898515; authtoken_pro=tea83b3beef07488bb8571811385db42; userId_pro=1160; pid_pro=1; eid_pro=1; pname_pro=name; Hm_lpvt_1b8c1194303ef64e02f003f0cb8a1906=1653961741; JSESSIONID=CFAB9C0C3F4D9D6C2837E3BA9425AFCA",
|
||||
"__X_HTTP_URL": "test.pro.testin.cn/realmachine/index.htm"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 3,
|
||||
"res_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx/1.16.1",
|
||||
"Date": "Tue, 31 May 2022 06:41:23 GMT",
|
||||
"Content-Type": "text/html;charset=UTF-8",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Connection": "keep-alive",
|
||||
"Vary": "Accept-Encoding",
|
||||
"Set-Cookie": "authtoken_pro=tea83b3beef07488bb8571811385db42; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie1": "userId_pro=1160; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie2": "pid_pro=1; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie3": "eid_pro=1; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Set-Cookie4": "pname_pro=name; Max-Age=28800; Expires=Tue, 31-May-2022 14:41:23 GMT; Domain=testin.cn; Path=/; HttpOnly",
|
||||
"Content-Language": "zh-CN",
|
||||
"Content-Encoding": "gzip",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "5d761720e42f13d01ba981fb19b850ca",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "39cb5f3a9cbcfbd16f66e040ec49b8c4"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,68 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.40.81:52802-192.168.40.137:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/aa.mp4?asf=sdaf",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "113.31.27.226",
|
||||
"Connection": "keep-alive",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36",
|
||||
"Accept-Encoding": "gzip,deflate,sdch",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8",
|
||||
"__X_HTTP_URL": "113.31.27.226/aa.mp4?asf=sdaf"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"method": "GET",
|
||||
"uri": "/fetch_ldns.png",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "ns.pb.cachecn.net",
|
||||
"Connection": "keep-alive",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36",
|
||||
"Accept-Encoding": "gzip,deflate,sdch",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8",
|
||||
"__X_HTTP_URL": "ns.pb.cachecn.net/fetch_ldns.png"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 2,
|
||||
"method": "GET",
|
||||
"uri": "/40x.jpg",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "ns.pb.cachecn.net",
|
||||
"Connection": "keep-alive",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36",
|
||||
"Accept-Encoding": "gzip,deflate,sdch",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8",
|
||||
"__X_HTTP_URL": "ns.pb.cachecn.net/40x.jpg"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.0",
|
||||
"res_status": "File not found",
|
||||
"major_version": 1,
|
||||
"minor_version": 0,
|
||||
"status_code": 404,
|
||||
"Server": "SimpleHTTP/0.6 Python/2.7.5",
|
||||
"Date": "Wed, 25 Oct 2023 06:43:35 GMT",
|
||||
"Content-Type": "text/html",
|
||||
"Connection": "close",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "6fb335f443cfc8a9d952d27cf3dc1059",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "6fb335f443cfc8a9d952d27cf3dc1059"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,34 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.38.73:50806-192.168.40.137:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/index.html",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "192.168.40.137",
|
||||
"User-Agent": "curl/7.79.1",
|
||||
"Accept": "*/*",
|
||||
"__X_HTTP_URL": "192.168.40.137/index.html"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.0",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 0,
|
||||
"status_code": 200,
|
||||
"Server": "SimpleHTTP/0.6 Python/2.7.5",
|
||||
"Date": "Thu, 30 Nov 2023 08:42:24 GMT",
|
||||
"Content-type": "text/html",
|
||||
"Content-Length": "144",
|
||||
"Last-Modified": "Thu, 30 Nov 2023 08:38:54 GMT",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "3e11876cd3a234541ae37d833c088a76"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,39 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.61.10:2064-192.168.40.139:8088-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "192.168.40.139:8088",
|
||||
"Connection": "keep-alive",
|
||||
"DNT": "1",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9",
|
||||
"__X_HTTP_URL": "192.168.40.139:8088/"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.0",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 0,
|
||||
"status_code": 200,
|
||||
"Server": "BaseHTTP/0.6 Python/3.6.8",
|
||||
"Date": "Tue, 13 Aug 2024 14:21:42 GMT",
|
||||
"Content-type": "text/html; charset=utf-8",
|
||||
"Content-Encoding": "gzip",
|
||||
"Content-length": "28425",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "873ed9c8c691a5f9f144fbf0fbfca011",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "7047cf4ae8ce6fd7bcd363e2b626f338"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,311 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "196.188.112.76.51494>23.246.50.149.80"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABQSwLpJi-yDFZ7k9eqarY3x3-b99vNxxOt5xDeIOapZB6Y5QXPSa54b7cbWYTXYdFimDKCeJ4s7ngqpqByvtt0aLh85nSucLTcR3-OKleuNwVltHUscQhSgVfHc.jpg?r=392"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABUWN8S1k3yM2coX2bwxbP699Jdr0BUqBRzIfiAJXKC5Ywt7DXqJOCjrBSYs36Tny8277IXm2BF_cgTmY18NJlocglKjhaoJhFeGoIg1cwntFduyxyRPP2EJQL5Y.jpg?r=e0e"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 2,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABR1YQS01SaHGzoxgWBJF1Gas0Gv9_DPebb4irdCTRjcQ_FUaVbXFTTrJ68_bvJds1sb28VMq22Qn3oSSKKJ7DdLN8ybgkJooYlCD3gAntrqgIFugqv5Z3kV8rRE.jpg?r=ec7"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "18377",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Wed, 10 Nov 2021 08:00:14 GMT",
|
||||
"ETag": "\"c289a42885b30107ad119e2a6e405e4d\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c289a42885b30107ad119e2a6e405e4d"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 3,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABYo5IGwDn1LaWbeaa7amS0JhH3bU5MEVlcBsC4OK0mGbea97_xoi8EbqJt8_Zp0bMuuKPE80qUUjb4wq5po_lBtulA.jpg?r=c83"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 4,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABaYF3Rmi954cg6Afu9jOtirnvF3iIMHPZCCnP34eDeYQXfRGG9Vg0qgn7hHpMVV4jOr8OZmcD2Nb7MhQv6gl-fNmVQ.jpg?r=257"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 5,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABfC-ByjFJSfWZf7MFtjVl3ONnaQ69824xWP1l-cpAFGgAfaNFk4XR9uoHNWwnbG8N2UVDctVKz0a4Uyv0mEnC2kI9Q.jpg?r=532"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 6,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSyGFXaB0IqQ6VR92uKMi38mNtoz7eeWxDziAf9VYKfauhh5Qo7FnnCRb31ff6Ez9yTXsqRszsGuz0GA9FVDf_NLn-9F60IcUHm59J73eYX6BD0h4wLLK0Da6YM.jpg?r=aaa"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 7,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABZbHXQr7bRUpSQ2vQe8F8p3xODTJjUbSjEcLgQrFVyGsPgQT1GVhqGWFetJhebcGrVeZGOTmQ3qvHTe9eBRJdjFsVg.jpg?r=723"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 1,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "13488",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Mon, 08 Nov 2021 19:50:54 GMT",
|
||||
"ETag": "\"35d56b6a0ef3b5857013f44620bd8888\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "35d56b6a0ef3b5857013f44620bd8888"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 2,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "14129",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Tue, 26 Oct 2021 15:12:58 GMT",
|
||||
"ETag": "\"bb83961ad5fe366dcbb5240ead69f650\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "bb83961ad5fe366dcbb5240ead69f650"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 3,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "11493",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Thu, 04 Nov 2021 20:44:22 GMT",
|
||||
"ETag": "\"c5be6a7137482da270bb2adc8d44a28d\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c5be6a7137482da270bb2adc8d44a28d"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 4,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "14219",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Sat, 25 Sep 2021 05:02:49 GMT",
|
||||
"ETag": "\"61bec96775876749bb57139f86f6b0ca\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "61bec96775876749bb57139f86f6b0ca"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 5,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "21967",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Fri, 02 Jul 2021 10:15:04 GMT",
|
||||
"ETag": "\"841065529f1e89eabd0ef235a3d3291c\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "841065529f1e89eabd0ef235a3d3291c"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 6,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "21670",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Tue, 19 Oct 2021 14:00:02 GMT",
|
||||
"ETag": "\"21d4b2c21a3a2f26ba665670e8513940\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "21d4b2c21a3a2f26ba665670e8513940"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 8,
|
||||
"method": "GET",
|
||||
"uri": "/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Accept": "image/*",
|
||||
"Accept-Encoding": "deflate, gzip",
|
||||
"Connection": "Keep-Alive",
|
||||
"Host": "occ-0-778-360.1.nflxso.net",
|
||||
"Language": "en-ET,en",
|
||||
"Referer": "https://secure.netflix.com/us/tvui/ql/patch/20211109_18752/2/release/darwinBootstrap.js?getMainUrlFromCodex=true&taskDefaultTimeoutV2=120000&bootloader_trace=apiusernotnull__false&nq=true&nq_control_tag=tvui-main&startup_key=e38d3c70814421931b0189d91d872546326f05d8f470150d07340df9e9d72275&device_type=TCL-TVS88L&e=TCL-TVS88L0000000000000000342914&env=prod&fromNM=true&nm_prefetch=true&nrdapp_version=2015.1.1&plain=true&dh=720&dw=1280&dar=16_9®=undefined&authType=login&authclid=845becf0-992c-46f7-a938-1bc22b097c58&q=source_type%3D1%26additionalDataUrl%3Dhttp%253A%252F%252Flocalhost%253A56789%252Fapps%252FNetflix%252Fdial_data%26source_type_payload%3D",
|
||||
"User-Agent": "Gibbon/2015.1.1/2015.1.1: Netflix/2015.1.1 (DEVTYPE=TCL-TVS88L; CERTVER=1)",
|
||||
"__X_HTTP_URL": "occ-0-778-360.1.nflxso.net/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590",
|
||||
"X-Gibbon-Cache-Control": "max-age=2592000, priority=4, key=/dnm/api/v6/Da_vleYcahiCE7JMYt8LJRyoenc/AAAABSFXjTUaVrddq_nehO4yuLziSjuekxJuv3oEsyUpmt3oK3InJcXjtZUHrBBuu0EP05WRC8wFVe78VtxtW_ZuZQ65MIcApb0oZF4JoFlHHnv363RbgJn898Q4tQc.jpg?r=590"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 7,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 14:15:58 GMT",
|
||||
"Content-Type": "image/jpeg",
|
||||
"Content-Length": "14215",
|
||||
"Connection": "keep-alive",
|
||||
"Cache-Control": "max-age=2592000",
|
||||
"Last-Modified": "Thu, 11 Nov 2021 17:32:01 GMT",
|
||||
"ETag": "\"837a2051f7d0f2899baf54ff20b3d9ad\"",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "f18a76ecf35648cb46ea6f42e4391cb8"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "196.190.248.93.32727>94.130.141.49.80"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/iframes2/e38f4959d33f4fa390045b0d7123997d.html?subid=65843620",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "tsyndicate.com",
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1",
|
||||
"User-Agent": "Mozilla/5.0 (Linux; Android 11; SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
|
||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
||||
"Referer": "http://the-sexy-tube.com/",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
|
||||
"__X_HTTP_URL": "tsyndicate.com/iframes2/e38f4959d33f4fa390045b0d7123997d.html?subid=65843620"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Server": "nginx",
|
||||
"Date": "Sat, 13 Nov 2021 13:58:01 GMT",
|
||||
"Content-Type": "text/html; charset=utf-8",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"Connection": "keep-alive",
|
||||
"Vary": "Accept-Encoding",
|
||||
"Cache-Control": "no-cache, no-store, no-transform, must-revalidate",
|
||||
"Pragma": "no-cache",
|
||||
"Expires": "0",
|
||||
"Vary1": "*",
|
||||
"X-Api-Version": "2",
|
||||
"Link": "<http://lcdn.tsyndicate.com/sdk/v1/b.b.js>; rel=preload; as=script",
|
||||
"X-Request-Id": "2ceed9968bf8c648",
|
||||
"Set-Cookie": "ts_uid=6ec96511-9fa6-4e10-86b8-31fdb4531864; expires=Fri, 13 May 2022 13:58:01 GMT; domain=.tsyndicate.com; path=/; HttpOnly; secure; SameSite=None",
|
||||
"Set-Cookie2": "bfq=e0SIEaFjiwwZNWjkkDGjCwsRYwpuifFQRJmJMWzMsIEjBw4ZOCr2URAQ; expires=Sun, 14 Nov 2021 13:58:01 GMT; domain=.tsyndicate.com; path=/; secure; SameSite=None",
|
||||
"X-Robots-Tag": "none",
|
||||
"Cache-Control3": "no-transform",
|
||||
"X-Robots-Tag4": "noindex, nofollow",
|
||||
"Report-To": "{ \"url\": \"https://pxl.tsyndicate.com/api/v1/heavy-ad/report\", \"max_age\": 86401 }",
|
||||
"Content-Encoding": "gzip",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "075802aa31b42d465d56b213915fb0a2"
|
||||
}
|
||||
]
|
||||
36
test/http_decoder/test_result_json/http_hdr_value_empty.json
Normal file
36
test/http_decoder/test_result_json/http_hdr_value_empty.json
Normal file
@@ -0,0 +1,36 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.131.33.47164>192.168.204.67.4445"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "POST",
|
||||
"uri": "http://:4445/RPC2",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"User-Agent": "ulxmlrpcpp/1.7.5",
|
||||
"Connection": "Close",
|
||||
"Content-Type": "text/xml",
|
||||
"Date": "Sat Sep 7 10:04:57 2019",
|
||||
"Content-Length": "468",
|
||||
"__X_HTTP_URL": ":4445/RPC2",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "033e27f72bc41b4a7e222df464749420"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Connection": "Close",
|
||||
"Content-Type": "text/xml",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"X-Powered-By": "ulxmlrpcpp/1.7.4",
|
||||
"Date": "Sat Sep 7 01:09:08 2019",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "69db29507d10b0d57fcaa5afffd81934"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "10.0.0.1:61462-10.0.0.2:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/x/xx/xxxxxxxxxxxxxxxxxxx/x/xxxxxx/xxxxxxxxxxxxxxx?xxx=1&xxx=1&x=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&vmf=xxxxxxxxxx.xxx.xxx.xxx&ce=UTF-8&ns=xxxxxxxxxx&pageName=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&g=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.jsp&r=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&events=xxxxxxxxxxxxxxxxxxxxxxxxxxx&products=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v1=xxxxxxxxxxxxxxx&v2=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v17=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&c49=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&AQE=1",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "xxxxx.xxxxxxxx.xxxxxxxxxx.xxx",
|
||||
"Connection": "keep-alive",
|
||||
"Accept": "image/webp,*/*;q=0.8",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
|
||||
"Referer": "http://www.xxxxxxxxxx.xxx/xx/xxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxx.jsp",
|
||||
"Accept-Encoding": "gzip,deflate,sdch",
|
||||
"Accept-Language": "en-US,en;q=0.8,en-GB;q=0.6",
|
||||
"__X_HTTP_URL": "xxxxx.xxxxxxxx.xxxxxxxxxx.xxx/x/xx/xxxxxxxxxxxxxxxxxxx/x/xxxxxx/xxxxxxxxxxxxxxx?xxx=1&xxx=1&x=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&vmf=xxxxxxxxxx.xxx.xxx.xxx&ce=UTF-8&ns=xxxxxxxxxx&pageName=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&g=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.jsp&r=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&events=xxxxxxxxxxxxxxxxxxxxxxxxxxx&products=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v1=xxxxxxxxxxxxxxx&v2=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&v17=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&c49=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&AQE=1",
|
||||
"Cookie": "xxxxxxxxxxxxxxxxxxx=ie; xxxxxxxxxxxxxxxxxxxxxx=true; lp=xxxxxx; rememberUn=false; xxx.xxxxxxxxxx.xxxxxxxxxx=xx; xxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; autocomplete=1; xxxx=xxxx; xxxx=xxxxv1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Date": "Mon, 30 Jun 2014 13:35:21 GMT",
|
||||
"Server": "xxxxxxxxxxxxxxxxx",
|
||||
"Access-Control-Allow-Origin": "*",
|
||||
"Set-Cookie": "xxxx=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Expires=Wed, 29 Jun 2016 13:35:21 GMT; Domain=.xxxxxxxxxx.xxx; Path=/",
|
||||
"X-C": "ms-4.9",
|
||||
"Expires": "Sun, 29 Jun 2014 13:35:21 GMT",
|
||||
"Last-Modified": "Tue, 01 Jul 2014 13:35:21 GMT",
|
||||
"Cache-Control": "no-cache, no-store, max-age=0, no-transform, private",
|
||||
"Pragma": "no-cache",
|
||||
"ETag": "\"xxxxxxxxxxxxxxxxxxxxxx\"",
|
||||
"Vary": "*",
|
||||
"P3P": "policyref=\"/w3c/p3p.xml\", CP=\"NOI DSP COR NID PSA OUR IND COM NAV STA\"",
|
||||
"xserver": "xxxxxx",
|
||||
"Content-Length": "43",
|
||||
"Keep-Alive": "timeout=15",
|
||||
"Connection": "Keep-Alive",
|
||||
"Content-Type": "image/gif",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "ad480fd0732d0f6f1a8b06359e3a42bb",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "ad480fd0732d0f6f1a8b06359e3a42bb"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.40.139.59234>192.168.38.83.8080"
|
||||
},
|
||||
{
|
||||
"flow": "C2S",
|
||||
"payload_block": 1,
|
||||
"payload_size": 77
|
||||
},
|
||||
{
|
||||
"flow": "S2C",
|
||||
"payload_block": 3,
|
||||
"payload_size": 2781
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.10.58.51798>192.168.10.144.808"
|
||||
},
|
||||
{
|
||||
"flow": "C2S",
|
||||
"payload_block": 6,
|
||||
"payload_size": 68
|
||||
},
|
||||
{
|
||||
"flow": "S2C",
|
||||
"payload_block": 7,
|
||||
"payload_size": 1737
|
||||
}
|
||||
]
|
||||
20
test/http_decoder/test_result_json/http_msg_type_state.json
Normal file
20
test/http_decoder/test_result_json/http_msg_type_state.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_4": "HTTP_MESSAGE_REQ_BODY_START",
|
||||
"msg_5": "HTTP_MESSAGE_REQ_BODY",
|
||||
"msg_6": "HTTP_MESSAGE_REQ_BODY_END"
|
||||
},
|
||||
{
|
||||
"msg_7": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_8": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_9": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_10": "HTTP_MESSAGE_RES_BODY_START",
|
||||
"msg_11": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_12": "HTTP_MESSAGE_RES_BODY_END",
|
||||
"msg_13": "HTTP_TRANSACTION_END_transaction_0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_4": "HTTP_MESSAGE_REQ_BODY_START",
|
||||
"msg_5": "HTTP_MESSAGE_REQ_BODY",
|
||||
"msg_6": "HTTP_MESSAGE_REQ_BODY_END",
|
||||
"msg_7": "HTTP_TRANSACTION_END_transaction_0"
|
||||
},
|
||||
{}
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_4": "HTTP_MESSAGE_REQ_BODY_START",
|
||||
"msg_5": "HTTP_MESSAGE_REQ_BODY"
|
||||
},
|
||||
{
|
||||
"msg_6": "HTTP_TRANSACTION_END_transaction_0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END"
|
||||
},
|
||||
{
|
||||
"msg_4": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_5": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_6": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_7": "HTTP_MESSAGE_RES_BODY_START",
|
||||
"msg_8": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_9": "HTTP_TRANSACTION_END_transaction_0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_8": "HTTP_TRANSACTION_START_transaction_1",
|
||||
"msg_9": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_10": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_11": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_16": "HTTP_TRANSACTION_START_transaction_2",
|
||||
"msg_17": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_18": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_19": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_24": "HTTP_TRANSACTION_START_transaction_3",
|
||||
"msg_25": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_26": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_27": "HTTP_MESSAGE_REQ_HEADER_END"
|
||||
},
|
||||
{
|
||||
"msg_4": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_5": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_6": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_7": "HTTP_TRANSACTION_END_transaction_0",
|
||||
"msg_12": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_13": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_14": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_15": "HTTP_TRANSACTION_END_transaction_1",
|
||||
"msg_20": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_21": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_22": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_23": "HTTP_TRANSACTION_END_transaction_2",
|
||||
"msg_28": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_29": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_30": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_31": "HTTP_MESSAGE_RES_BODY_START",
|
||||
"msg_32": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_33": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_34": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_35": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_36": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_37": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_38": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_39": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_40": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_41": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_42": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_43": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_44": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_45": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_46": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_47": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_48": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_49": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_50": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_51": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_52": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_53": "HTTP_MESSAGE_RES_BODY_END",
|
||||
"msg_54": "HTTP_TRANSACTION_END_transaction_3"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{},
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_4": "HTTP_MESSAGE_RES_BODY_START",
|
||||
"msg_5": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_6": "HTTP_MESSAGE_RES_BODY_END",
|
||||
"msg_7": "HTTP_TRANSACTION_END_transaction_0"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,26 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_8": "HTTP_TRANSACTION_START_transaction_1",
|
||||
"msg_9": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_10": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_11": "HTTP_MESSAGE_REQ_HEADER_END"
|
||||
},
|
||||
{
|
||||
"msg_4": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_5": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_6": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_7": "HTTP_TRANSACTION_END_transaction_0",
|
||||
"msg_12": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_13": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_14": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_15": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_16": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_17": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_18": "HTTP_MESSAGE_RES_BODY_END",
|
||||
"msg_19": "HTTP_TRANSACTION_END_transaction_1"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_4": "HTTP_TRANSACTION_END_transaction_0",
|
||||
"msg_5": "HTTP_TRANSACTION_START_transaction_1",
|
||||
"msg_6": "HTTP_MESSAGE_REQ_LINE",
|
||||
"msg_7": "HTTP_MESSAGE_REQ_HEADER",
|
||||
"msg_8": "HTTP_MESSAGE_REQ_HEADER_END",
|
||||
"msg_9": "HTTP_TRANSACTION_END_transaction_1"
|
||||
},
|
||||
{}
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
[
|
||||
{},
|
||||
{
|
||||
"msg_0": "HTTP_TRANSACTION_START_transaction_0",
|
||||
"msg_1": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_2": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_3": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_4": "HTTP_TRANSACTION_END_transaction_0",
|
||||
"msg_5": "HTTP_TRANSACTION_START_transaction_1",
|
||||
"msg_6": "HTTP_MESSAGE_RES_LINE",
|
||||
"msg_7": "HTTP_MESSAGE_RES_HEADER",
|
||||
"msg_8": "HTTP_MESSAGE_RES_HEADER_END",
|
||||
"msg_9": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_10": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_11": "HTTP_MESSAGE_RES_BODY",
|
||||
"msg_12": "HTTP_MESSAGE_RES_BODY_END",
|
||||
"msg_13": "HTTP_TRANSACTION_END_transaction_1"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.131.33:47172-192.168.204.67:4445-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "POST",
|
||||
"uri": "http://:4445/RPC2",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"User-Agent": "ulxmlrpcpp/1.7.5",
|
||||
"Connection": "Close",
|
||||
"Content-Type": "text/xml",
|
||||
"Date": "Sat Sep 7 10:05:13 2019",
|
||||
"Content-Length": "468",
|
||||
"__X_HTTP_URL": ":4445/RPC2",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "6eccbcf261f04aabfa69884aa283f4f3",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "6eccbcf261f04aabfa69884aa283f4f3"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Connection": "Close",
|
||||
"Content-Type": "text/xml",
|
||||
"Transfer-Encoding": "chunked",
|
||||
"X-Powered-By": "ulxmlrpcpp/1.7.4",
|
||||
"Date": "Sat Sep 7 01:09:24 2019",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "5cf8a4aa9a54e7f2d05b55ed05bf9071",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "5cf8a4aa9a54e7f2d05b55ed05bf9071"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "10.0.0.1:50384-10.0.0.2:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/js/xxxxxx.js",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "xxxxxxx.xxxxxx.xx",
|
||||
"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3",
|
||||
"Accept": "*/*",
|
||||
"Accept-Language": "en-us,en;q=0.5",
|
||||
"Accept-Encoding": "gzip,deflate",
|
||||
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
|
||||
"Keep-Alive": "115",
|
||||
"Connection": "keep-alive",
|
||||
"Referer": "http://www.xxxxxxxx.com/xxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx.html",
|
||||
"Cookie": "trafic_ranking=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
"__X_HTTP_URL": "xxxxxxx.xxxxxx.xx/js/xxxxxx.js"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.0",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 0,
|
||||
"status_code": 200,
|
||||
"Date": "Mon, 10 May 2010 08:31:02 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-type": "application/x-javascript",
|
||||
"Expires": "Thu, 11 Jan 1973 16:00:00 GMT",
|
||||
"Last-Modified": "Mon, 10 May 2010 08:31:02 GMT",
|
||||
"Cache-Control": "no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
|
||||
"Pragma": "no-cache",
|
||||
"P3P": "policyref=\"/w3c/p3p.xml\", CP=\"ALL IND DSP COR ADM CONo CUR IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\"",
|
||||
"Set-Cookie": "trafic_ranking=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; expires=Sun, 11-Jan-2037 14:00:00 GMT; path=/; domain=.xxxxxx.xx",
|
||||
"connection": "close",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "9fb54a2726ca3cf54a82804d0e66d08a",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "9fb54a2726ca3cf54a82804d0e66d08a"
|
||||
}
|
||||
]
|
||||
44
test/http_decoder/test_result_json/http_out_of_order.json
Normal file
44
test/http_decoder/test_result_json/http_out_of_order.json
Normal file
@@ -0,0 +1,44 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "192.168.38.2:49243-202.96.17.37:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/cn/images/globesite/airchina.jpg",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"Host": "www.airchina.com",
|
||||
"Connection": "keep-alive",
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
|
||||
"DNT": "1",
|
||||
"Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
|
||||
"Referer": "http://www.airchina.com/website/ip2.jsp?v=20230128",
|
||||
"Accept-Encoding": "gzip, deflate",
|
||||
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
||||
"Cookie": "_ga=GA1.2.1223391296.1710844147; _ga_CGYVD7S4G4=GS1.1.1711101500.1.1.1711101524.0.0.0; _gcl_au=1.1.45985360.1720059434; arialoadData=true; ariawapChangeViewPort=false; JSESSIONID=ZoFJbBlIeHCsA5414j6JC-vO6jvcBw7_xphcV3qerj5Q8htV6XH8!-1677015109",
|
||||
"__X_HTTP_URL": "www.airchina.com/cn/images/globesite/airchina.jpg"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Date": "Tue, 13 Aug 2024 01:48:28 GMT",
|
||||
"Server": "Apache",
|
||||
"X-Frame-Options": "SAMEORIGIN",
|
||||
"Last-Modified": "Tue, 06 Aug 2019 02:10:09 GMT",
|
||||
"Accept-Ranges": "bytes",
|
||||
"Content-Length": "67424",
|
||||
"Keep-Alive": "timeout=120, max=1000",
|
||||
"Connection": "Keep-Alive",
|
||||
"Content-Type": "image/jpeg",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "c4c9d459415e922f877a2af6afd9d316",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "c4c9d459415e922f877a2af6afd9d316"
|
||||
}
|
||||
]
|
||||
36
test/http_decoder/test_result_json/http_over_pppoe.json
Normal file
36
test/http_decoder/test_result_json/http_over_pppoe.json
Normal file
@@ -0,0 +1,36 @@
|
||||
[
|
||||
{
|
||||
"__X_HTTP_TUPLE4": "2a00:5e80:101:212d:504:7b1:2572:db22:37034-2606:f200:0:7:bad:f00d:d00d:1:80-6-0"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "request",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"method": "GET",
|
||||
"uri": "/",
|
||||
"req_version": "1.1",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"User-Agent": "curl/7.34.0",
|
||||
"Host": "ipv6.icanhazip.com",
|
||||
"Accept": "*/*",
|
||||
"__X_HTTP_URL": "ipv6.icanhazip.com/"
|
||||
},
|
||||
{
|
||||
"__X_HTTP_TRANSACTION": "response",
|
||||
"__X_HTTP_TRANSACTION_SEQ": 0,
|
||||
"res_version": "1.1",
|
||||
"res_status": "OK",
|
||||
"major_version": 1,
|
||||
"minor_version": 1,
|
||||
"status_code": 200,
|
||||
"Date": "Thu, 02 Jan 2014 08:38:06 GMT",
|
||||
"Server": "Apache",
|
||||
"Content-Length": "38",
|
||||
"Content-Type": "text/plain; charset=UTF-8",
|
||||
"X-RTFM": "Learn about this site at http://bit.ly/14DAh2o and don't abuse the service",
|
||||
"X-YOU-SHOULD-APPLY-FOR-A-JOB": "If you're reading this, apply here: http://rackertalent.com/",
|
||||
"X-ICANHAZNODE": "icanhazip1.nugget",
|
||||
"__X_HTTP_RAW_PAYLOAD_MD5": "624520ac54235ac2284ed2dd2b17e1ad",
|
||||
"__X_HTTP_DECOMPRESS_PAYLOAD_MD5": "624520ac54235ac2284ed2dd2b17e1ad"
|
||||
}
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user