From 56db00e24f23bf5ae0285883433978c366f2537c Mon Sep 17 00:00:00 2001 From: liuxueli Date: Sat, 18 Sep 2021 17:15:54 +0800 Subject: [PATCH] =?UTF-8?q?TSG-7832:=20=E6=94=AF=E6=8C=81=E9=9D=9E?= =?UTF-8?q?=E6=A0=87=E7=AB=AF=E5=8F=A38443=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E9=85=8D=E7=BD=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=AF=86=E5=88=AB=E7=9A=84=E7=AB=AF=E5=8F=A3QUIC=5FPO?= =?UTF-8?q?RT=5FLIST=3D443;8443;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gquic_process.cpp | 35 ++++++-- src/quic_analysis.cpp | 78 ++++++++++++++++-- src/quic_analysis.h | 3 + test/CMakeLists.txt | 1 + ...-192.168.50.49.58445-45.77.96.66.8443.pcap | Bin 0 -> 50179 bytes test/pcap/port-8443/quic_result.json | 6 ++ 6 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 test/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap create mode 100644 test/pcap/port-8443/quic_result.json diff --git a/src/gquic_process.cpp b/src/gquic_process.cpp index 9e9c3ee..f878fb7 100644 --- a/src/gquic_process.cpp +++ b/src/gquic_process.cpp @@ -127,30 +127,47 @@ int is_iquic(enum _QUIC_VERSION quic_version) return FALSE; } +int check_port(unsigned short port) +{ + int i=0; + for(i=0; i< g_quic_param.quic_port_num; i++) + { + if(g_quic_param.quic_port_list[i]==port) + { + return 1; + } + } + + return 0; +} + int is_quic_port(struct streaminfo *pstream) { + unsigned short source=0, dest=0; + switch(pstream->addr.addrtype) { case ADDR_TYPE_IPV4: case __ADDR_TYPE_IP_PAIR_V4: - if(ntohs(pstream->addr.ipv4->source)!=443 && ntohs(pstream->addr.ipv4->dest)!=443) - { - return 0; - } + source=(unsigned short)ntohs(pstream->addr.ipv4->source); + dest=(unsigned short)ntohs(pstream->addr.ipv4->dest); break; case ADDR_TYPE_IPV6: case __ADDR_TYPE_IP_PAIR_V6: - if(ntohs(pstream->addr.ipv6->source)!=443 && ntohs(pstream->addr.ipv6->dest)!=443) - { - return 0; - } + source=(unsigned short)ntohs(pstream->addr.ipv6->source); + dest=(unsigned short)ntohs(pstream->addr.ipv6->dest); break; default: return 0; break; } - return 1; + if(check_port(source) || check_port(dest)) + { + return 1; + } + + return 0; } static int get_value(unsigned char *payload, int *offset, int len) diff --git a/src/quic_analysis.cpp b/src/quic_analysis.cpp index 3aee5f1..639be64 100644 --- a/src/quic_analysis.cpp +++ b/src/quic_analysis.cpp @@ -41,6 +41,71 @@ static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL; const char QUIC_VERSION_20200603=0; +static int parse_quic_port(char *port_list, unsigned short *quic_port, int quic_port_num) +{ + int i=0,ret=0; + int port_num=0; + int range_len=0,used_len=0; + char buf[256]={0}; + unsigned short s_port=0,e_port=0; + char *begin=NULL,*end=NULL,*pchr=NULL; + + if(port_list==NULL) + { + return 0; + } + + begin=port_list; + end=NULL; + range_len=strlen(port_list); + + while(range_len>used_len) + { + end=index(begin, ';'); + if(end==NULL) + { + end=begin+range_len-used_len; + } + + if(end==begin) + { + break; + } + + memset(buf, 0, sizeof(buf)); + strncpy(buf, begin, end-begin); + used_len+=end-begin+1; + if(range_len>used_len) + { + begin=end+1; + } + + pchr=strchr(buf, '-'); + if(pchr == NULL) + { + s_port=(unsigned short)atoi(buf); + e_port=s_port; + + } + else + { + ret=sscanf(buf, "%hu-%hu", &s_port, &e_port); + if(ret!=2) + { + continue; + } + } + + for(i=s_port; i<=e_port && port_numret) { fclose(fp); - MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_FATAL, "QUIC_READCONF", "Read error, Please check %s, region_line: %s", g_quic_regionname_conffile, buf); + MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_FATAL, "QUIC_READCONF", "Read error, Please check %s, region_line: %s", g_quic_regionname_conffile, buff); return -1; } if(region_id>MAX_REGION_NUM) { fclose(fp); - MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_FATAL, "QUIC_READCONF", "Read error, Please check %s, bigger than MAX_REGION_NUM, region_line: %s", g_quic_regionname_conffile, buf); + MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_FATAL, "QUIC_READCONF", "Read error, Please check %s, bigger than MAX_REGION_NUM, region_line: %s", g_quic_regionname_conffile, buff); return -1; } diff --git a/src/quic_analysis.h b/src/quic_analysis.h index 29a4375..a3b3cd2 100644 --- a/src/quic_analysis.h +++ b/src/quic_analysis.h @@ -7,6 +7,7 @@ #define TRUE 0x01 #define MAYBE 0x02 +#define SUPPORT_QUIC_PORT_NUM 128 #define QUIC_HALF_CLOSE 0x01 #define QUIC_WHOLE_CLOSE 0x02 @@ -25,7 +26,9 @@ struct _quic_param_t unsigned long long quic_region_cnt; unsigned short quic_plugid; int level; + int quic_port_num; int dump_packet_switch; + unsigned short quic_port_list[SUPPORT_QUIC_PORT_NUM]; char quic_conf_regionname[MAX_REGION_NUM][REGION_NAME_LEN]; char log_path[128]; void *logger; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 21eb5af..726506f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -54,3 +54,4 @@ add_test(NAME GQUIC_50_TEST COMMAND proto_test_main ${CMAKE_CURRENT_SOURCE_DIR}/ add_test(NAME MVFST_01_TEST COMMAND proto_test_main ${CMAKE_CURRENT_SOURCE_DIR}/pcap/mvfst/01/${lib_name}_result.json -f "find ${CMAKE_CURRENT_SOURCE_DIR}/pcap/mvfst/01/ -name *.pcap|sort -V" WORKING_DIRECTORY ${PROTO_TEST_RUN_DIR}) add_test(NAME MVFST_02_TEST COMMAND proto_test_main ${CMAKE_CURRENT_SOURCE_DIR}/pcap/mvfst/02/${lib_name}_result.json -f "find ${CMAKE_CURRENT_SOURCE_DIR}/pcap/mvfst/02/ -name *.pcap|sort -V" WORKING_DIRECTORY ${PROTO_TEST_RUN_DIR}) add_test(NAME TQUIC_TEST COMMAND proto_test_main ${CMAKE_CURRENT_SOURCE_DIR}/pcap/tquic/${lib_name}_result.json -f "find ${CMAKE_CURRENT_SOURCE_DIR}/pcap/tquic/ -name *.pcap|sort -V" WORKING_DIRECTORY ${PROTO_TEST_RUN_DIR}) +add_test(NAME IQUIC_PORT_8443_TEST COMMAND proto_test_main ${CMAKE_CURRENT_SOURCE_DIR}/pcap/port-8443/${lib_name}_result.json -f "find ${CMAKE_CURRENT_SOURCE_DIR}/pcap/port-8443/ -name *.pcap|sort -V" WORKING_DIRECTORY ${PROTO_TEST_RUN_DIR}) diff --git a/test/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap b/test/pcap/port-8443/1-iquic-29-192.168.50.49.58445-45.77.96.66.8443.pcap new file mode 100644 index 0000000000000000000000000000000000000000..dd8e74a29213ae553e71b933c0767b21cf4a147e GIT binary patch literal 50179 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.77.96.66.8443", + "VERSION": "IETF QUIC 29", + "SNI": "quic.tech", + "name": "QUIC_RESULT_1" +}]