diff --git a/src/gquic_process.cpp b/src/gquic_process.cpp index 31159b9..630c467 100644 --- a/src/gquic_process.cpp +++ b/src/gquic_process.cpp @@ -691,6 +691,9 @@ int parse_extension_tag(struct streaminfo *pstream, struct _quic_stream **quic_s stream->ext_tags=(quic_tlv_t *)dictator_malloc(pstream->threadnum, tag_num*sizeof(quic_tlv_t)); memset(stream->ext_tags, 0, tag_num*sizeof(quic_tlv_t)); *quic_stream=stream; + stream->sni_idx=0xFF; + stream->ver_idx=0xFF; + stream->ua_idx=0xFF; } else { @@ -700,6 +703,9 @@ int parse_extension_tag(struct streaminfo *pstream, struct _quic_stream **quic_s *quic_stream=stream; stream->ext_tag_num=0; stream->count++; + stream->sni_idx=0xFF; + stream->ver_idx=0xFF; + stream->ua_idx=0xFF; } while(tag_num>tag_used_num) @@ -1166,6 +1172,9 @@ int parse_encrypt_client_hello(struct streaminfo *pstream, struct _quic_stream * quic_stream->ext_tags=(quic_tlv_t *)dictator_malloc(pstream->threadnum, sizeof(quic_tlv_t)*3); memset(quic_stream->ext_tags, 0, sizeof(quic_tlv_t)*3); + quic_stream->sni_idx=0xFF; + quic_stream->ua_idx=0xFF; + quic_stream->ver_idx=0xFF; while(extension_total_len>used_len) { @@ -1364,10 +1373,17 @@ int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *ou { if(_context->quic_info.client_hello!=NULL) { - sni=(char *)(_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].value); - sni_len=_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].length; - len= sni_len>(out_sni_len-1) ? (out_sni_len-1) : sni_len; - memcpy(out_sni, sni, len); + if(_context->quic_info.client_hello->sni_idx!=0xFF) + { + sni=(char *)(_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].value); + sni_len=_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].length; + len= sni_len>(out_sni_len-1) ? (out_sni_len-1) : sni_len; + memcpy(out_sni, sni, len); + } + else + { + len=0; + } } else { diff --git a/test/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap b/test/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap new file mode 100644 index 0000000..ae75b00 Binary files /dev/null and b/test/pcap/gquic/43/2-gquic-043-without-sni-192.168.50.26.55209-34.102.215.99.443.pcap differ diff --git a/test/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap b/test/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap new file mode 100644 index 0000000..3bad2e1 Binary files /dev/null and b/test/pcap/gquic/43/3-gquic-043-without-sni-192.168.50.26.60851-34.102.215.99.443.pcap differ diff --git a/test/pcap/gquic/43/quic_result.json b/test/pcap/gquic/43/quic_result.json index e50c842..278622f 100644 --- a/test/pcap/gquic/43/quic_result.json +++ b/test/pcap/gquic/43/quic_result.json @@ -1,6 +1,18 @@ [{ + "Tuple4": "192.168.50.26.55209>34.102.215.99.443", + "VERSION": "Google QUIC 43", + "name": "QUIC_RESULT_1" + }, { + "Tuple4": "192.168.50.26.60851>34.102.215.99.443", + "VERSION": "Google QUIC 43", + "name": "QUIC_RESULT_2" + }, { "Tuple4": "112.43.145.231.18699>112.46.25.216.443", "VERSION": "Google QUIC 43", "SNI": "client.weixin.qq.com", - "name": "QUIC_RESULT_1" + "name": "QUIC_RESULT_3" + }, { + "Tuple4": "192.168.50.26.63533>34.102.215.99.443", + "VERSION": "Google QUIC 43", + "name": "QUIC_RESULT_4" }]