支持识别QUANT、PICOQUIC、PQUIC_VERSION_PROX、QUIC_GO、QUICLY、MSQUIC、MOZQUIC、MVFST协议

This commit is contained in:
liuxueli
2020-12-30 00:44:26 +06:00
parent a5fc0784e4
commit 1870120ef1
4 changed files with 98 additions and 25 deletions

View File

@@ -14,7 +14,10 @@
#include "gquic_process.h"
#include "quic_analysis.h"
int is_quant()
{
}
int is_iquic(enum _QUIC_VERSION quic_version)
{
switch(quic_version)
@@ -471,26 +474,24 @@ enum _QUIC_VERSION is_quic_protocol(struct streaminfo *pstream, struct _quic_con
quic_version=parse_quic_header(pstream, _context, payload, payload_len, used_len);
return quic_version;
break;
case GQUIC_VERSION_Q044:
case GQUIC_VERSION_Q045:
case GQUIC_VERSION_Q048:
case GQUIC_VERSION_Q049:
case GQUIC_VERSION_Q050:
case GQUIC_VERSION_Q099:
MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "GQUIC", "version: Q%03u addr: %s",
(((quic_version>>8)&0x0000000F)*10) + ((quic_version)&0x0000000F),
printaddr(&pstream->addr, pstream->threadnum));
_context->is_quic=TRUE;
_context->quic_info.quic_hdr.quic_version=quic_version;
return quic_version;
break;
default:
if(is_iquic(quic_version))
if( (quic_version==GQUIC_VERSION_Q044) ||
(quic_version==GQUIC_VERSION_Q045) ||
(quic_version==GQUIC_VERSION_Q099) ||
(quic_version==PICOQUIC_VERSION_30) ||
(quic_version==PQUIC_VERSION_PROX) ||
(quic_version>=GQUIC_VERSION_Q048 && quic_version<=GQUIC_VERSION_Q050) ||
(quic_version>=QUANT_VERSION_00 && quic_version<=QUANT_VERSION_FF) ||
(quic_version>=QUIC_GO_VERSION_00 && quic_version<=QUIC_GO_VERSION_FF) ||
(quic_version>=QUICLY_VERSION_00 && quic_version<=QUICLY_VERSION_FF) ||
(quic_version>=MSQUIC_VERSION_00 && quic_version<=MSQUIC_VERSION_0F) ||
(quic_version>=MOZQUIC_VERSION_00 && quic_version<=MOZQUIC_VERSION_0F) ||
(quic_version>=MVFST_VERSION_00 && quic_version<=MVFST_VERSION_0F) ||
(quic_version>=IQUIC_VERSION_I001 && quic_version<=IQUIC_VERSION_I032)
)
{
MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "IQUIC", "version: I%03u addr: %s",
(((quic_version>>16)&0x000000FF)*10) + (((quic_version>>8)&0x000000FF)*10) + ((quic_version)&0x000000FF),
printaddr(&pstream->addr, pstream->threadnum));
MESA_handle_runtime_log(g_quic_param.logger, RLOG_LV_DEBUG, "QUIC", "version: 0x%x addr: %s",
quic_version, printaddr(&pstream->addr, pstream->threadnum));
_context->is_quic=TRUE;
_context->quic_info.quic_hdr.quic_version=quic_version;

View File

@@ -156,6 +156,13 @@
enum _QUIC_VERSION
{
QUIC_VERSION_UNKNOWN=0,
//NetApp
QUANT_VERSION_00=0x45474700,
QUANT_VERSION_FF=0x45474700,
//Private Octopus
PICOQUIC_VERSION_30=0x50435130,
//google
GQUIC_VERSION_Q001=0x51303031,
GQUIC_VERSION_Q002=0x51303032,
@@ -226,9 +233,26 @@ enum _QUIC_VERSION
//Google Proxied QUIC
PQUIC_VERSION_PROX=0x50524f58,
//GOQUIC_VERSION_GO=0x51474f[0-255],
//quic-go
QUIC_GO_VERSION_00=0x51474F00,
QUIC_GO_VERSION_FF=0x51474FFF,
//quicly
//QUICKLY_VERSION_QUICLY=0x91c170[0-255]
QUICLY_VERSION_00=0x91c17000,
QUICLY_VERSION_FF=0x91c170FF,
//Microsoft
MSQUIC_VERSION_00=0xabcd0000,
MSQUIC_VERSION_0F=0xabcd000F,
//Mozilla
MOZQUIC_VERSION_00=0xf123f0c0,
MOZQUIC_VERSION_0F=0xf123f0cF,
//Facebook
MVFST_VERSION_00=0xfaceb000,
MVFST_VERSION_0F=0xfaceb00F,
//IETF
IQUIC_VERSION_I001=0xFF000001,

View File

@@ -263,7 +263,7 @@ extern "C" char QUIC_ENTRY(struct streaminfo *pstream, void**pme, int thread_seq
break;
}
if(ret&APP_STATE_DROPME|| pstream->opstate==OP_STATE_CLOSE)
if(ret&APP_STATE_DROPME || ret&APP_STATE_DROPPKT || pstream->opstate==OP_STATE_CLOSE)
{
quic_release_stream(pme, thread_seq);
*pme=NULL;

View File

@@ -18,6 +18,54 @@ int quic_version_int2string(unsigned int version, char *buff, int buff_len)
return 1;
}
if(version>=QUANT_VERSION_00 && version<=QUANT_VERSION_FF)
{
snprintf(buff, buff_len, "NetApp QUANT %02d", (version&0x000000FF));
return 1;
}
if(version==PICOQUIC_VERSION_30)
{
snprintf(buff, buff_len, "Private Octopus");
return 1;
}
if(version==PQUIC_VERSION_PROX)
{
snprintf(buff, buff_len, "Proxied QUIC");
return 1;
}
if(version>=QUIC_GO_VERSION_00 && version<=QUIC_GO_VERSION_FF)
{
snprintf(buff, buff_len, "quic-go QGO %02d", (version&0x000000FF));
return 1;
}
if(version>=QUIC_GO_VERSION_00 && version<=QUIC_GO_VERSION_FF)
{
snprintf(buff, buff_len, "quicly qicly0 %02d", (version&0x000000FF));
return 1;
}
if(version>=MSQUIC_VERSION_00 && version<=MSQUIC_VERSION_0F)
{
snprintf(buff, buff_len, "Microsoft MsQuic %02d", (version&0x0000000F));
return 1;
}
if(version>=MOZQUIC_VERSION_00 && version<=MOZQUIC_VERSION_0F)
{
snprintf(buff, buff_len, "Mozilla MozQuic %02d", (version&0x0000000F));
return 1;
}
if(version>=MVFST_VERSION_00&& version<=MVFST_VERSION_0F)
{
snprintf(buff, buff_len, "Facebook mvfst %02d", (version&0x0000000F));
return 1;
}
return 0;
}