TSG-7753: 修改quic_protocol_identify函数,增加输出VERSION/UA字段

This commit is contained in:
liuxueli
2021-09-14 09:29:45 +08:00
parent 3aa13f90d7
commit f22424dcc5
2 changed files with 22 additions and 15 deletions

View File

@@ -90,7 +90,7 @@ struct _quic_info
//buff_len minimun 32bytes
int quic_version_int2string(unsigned int version, char *buff, int buff_len);
//ret: 0: not quic, >0: quic
int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int out_sni_len);
//ret: 0: not quic, >0: quic version
unsigned int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int *out_sni_len, char *out_ua, int *out_ua_len);
#endif /* SRC_GQUIC_H_ */

View File

@@ -20,6 +20,10 @@
#define PRINTADDR(a, b) ((b)<RLOG_LV_FATAL ? printaddr(&(a->addr), a->threadnum) : "")
#endif
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
const unsigned char PCAP_FILE_HEAD[24] = {0xD4, 0xC3, 0xB2, 0xA1, 0x02, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
@@ -1350,18 +1354,17 @@ int quic_process(struct streaminfo *pstream, struct _quic_context* _context, int
}
return APP_STATE_DROPME;;
}
}
unsigned int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *out_sni, int *out_sni_len, char *out_ua, int *out_ua_len)
{
{
int ret=APP_STATE_GIVEME;
int sni_len=0,len=-1;
int len=0;
void *pme=NULL;
struct _quic_context *_context=NULL;
unsigned int quic_version=QUIC_VERSION_UNKNOWN;
if(!is_quic_port(a_stream))
if(!is_quic_port(a_stream))
{
return quic_version;
}
@@ -1374,26 +1377,30 @@ int quic_protocol_identify(struct streaminfo *a_stream, void *a_packet, char *ou
{
if(_context->quic_info.client_hello!=NULL)
{
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;
if(_context->quic_info.client_hello->sni_idx!=0xFF)
{
len=MIN((int)_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].length, (*out_sni_len)-1);
memcpy(out_sni, _context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->sni_idx].value, len);
memcpy(out_sni, sni, len);
(*out_sni_len)=len;
}
else
if(_context->quic_info.client_hello->ua_idx!=0xFF)
{
len=MIN((int)_context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->ua_idx].length, (*out_ua_len)-1);
memcpy(out_ua, _context->quic_info.client_hello->ext_tags[_context->quic_info.client_hello->ua_idx].value, len);
(*out_ua_len)=len;
}
quic_version=_context->quic_info.quic_hdr.quic_version;
}
else
{
if(_context->is_quic==TRUE)
if(_context->is_quic==TRUE)
{
quic_version=_context->quic_info.quic_hdr.quic_version;
}
}
}
quic_release_stream(&pme, a_stream->threadnum);
quic_release_stream(&pme, a_stream->threadnum);