⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftencode.c

📁 netflow,抓包
💻 C
📖 第 1 页 / 共 4 页
字号:
  pdu_v6->records[i].dstaddr = rec_v6->dstaddr;  pdu_v6->records[i].nexthop = rec_v6->nexthop;  pdu_v6->records[i].input = rec_v6->input;  pdu_v6->records[i].output = rec_v6->output;  pdu_v6->records[i].dPkts = rec_v6->dPkts;  pdu_v6->records[i].dOctets = rec_v6->dOctets;  pdu_v6->records[i].First = rec_v6->First;  pdu_v6->records[i].Last = rec_v6->Last;  pdu_v6->records[i].srcport = rec_v6->srcport;  pdu_v6->records[i].dstport = rec_v6->dstport;  pdu_v6->records[i].prot = rec_v6->prot;  pdu_v6->records[i].tos = rec_v6->tos;  pdu_v6->records[i].tcp_flags = rec_v6->tcp_flags;  pdu_v6->records[i].src_as = rec_v6->src_as;  pdu_v6->records[i].dst_as = rec_v6->dst_as;  pdu_v6->records[i].src_mask = rec_v6->src_mask;  pdu_v6->records[i].dst_mask = rec_v6->dst_mask;  pdu_v6->records[i].in_encaps = rec_v6->in_encaps;  pdu_v6->records[i].out_encaps = rec_v6->out_encaps;  pdu_v6->records[i].peer_nexthop = rec_v6->peer_nexthop;  /* increment sequence # */  enc->seq_next[seq_index]++;  pdu_v6->count ++;  enc->buf_size += sizeof (struct ftrec_v6);  if (pdu_v6->count >= FT_PDU_V6_MAXFLOWS)    return 0;  else    return 1;}/* * function: fts3rec_pdu_v7_encode * * Encode a fts3rec into a version 7 PDU * * returns: -1 error encoding, PDU not encoded. *           0 PDU encoded.  Hint next call will fail. *           1 PDU encoded.  Room for more. * */int fts3rec_pdu_v7_encode(struct ftencode *enc, struct fts3rec_v7 *rec_v7){  struct ftpdu_v7 *pdu_v7;  u_int seq_index;  int i;  pdu_v7 = (struct ftpdu_v7*) enc->buf_enc;  /* index to sequence # */  seq_index = rec_v7->engine_id<<8 | rec_v7->engine_type;  i = pdu_v7->count;  /* space to encode more ? */  if (i >= FT_PDU_V7_MAXFLOWS)    return -1;  /* if this is the first record, fill in the header */  if (!i) {    pdu_v7->version = 7;    pdu_v7->sysUpTime = rec_v7->sysUpTime;    pdu_v7->unix_secs = rec_v7->unix_secs;    pdu_v7->unix_nsecs = rec_v7->unix_nsecs;    pdu_v7->engine_type = rec_v7->engine_type;    pdu_v7->engine_id = rec_v7->engine_id;    pdu_v7->flow_sequence = enc->seq_next[seq_index];    enc->buf_size = 24; /* pdu header size */  } else {    /*  sysUpTime, unix_secs, unix_nsecs, and engine_* must match for     *  each pdu.  If a stream is being re-encoded this will normally     *  work out fine, if the stream was sorted or changed in some way     *  the PDU may only be able to hold one record.    */    if ((pdu_v7->sysUpTime != rec_v7->sysUpTime) ||        (pdu_v7->unix_secs != rec_v7->unix_secs) ||        (pdu_v7->unix_nsecs != rec_v7->unix_nsecs) ||        (pdu_v7->engine_id != rec_v7->engine_id) ||        (pdu_v7->engine_type != rec_v7->engine_type))        return -1;  }  pdu_v7->records[i].srcaddr = rec_v7->srcaddr;  pdu_v7->records[i].dstaddr = rec_v7->dstaddr;  pdu_v7->records[i].nexthop = rec_v7->nexthop;  pdu_v7->records[i].input = rec_v7->input;  pdu_v7->records[i].output = rec_v7->output;  pdu_v7->records[i].dPkts = rec_v7->dPkts;  pdu_v7->records[i].dOctets = rec_v7->dOctets;  pdu_v7->records[i].First = rec_v7->First;  pdu_v7->records[i].Last = rec_v7->Last;  pdu_v7->records[i].srcport = rec_v7->srcport;  pdu_v7->records[i].dstport = rec_v7->dstport;  pdu_v7->records[i].prot = rec_v7->prot;  pdu_v7->records[i].tos = rec_v7->tos;  pdu_v7->records[i].tcp_flags = rec_v7->tcp_flags;  pdu_v7->records[i].src_as = rec_v7->src_as;  pdu_v7->records[i].dst_as = rec_v7->dst_as;  pdu_v7->records[i].src_mask = rec_v7->src_mask;  pdu_v7->records[i].dst_mask = rec_v7->dst_mask;  pdu_v7->records[i].router_sc = rec_v7->router_sc;  /* increment sequence # */  enc->seq_next[seq_index]++;  pdu_v7->count ++;  enc->buf_size += sizeof (struct ftrec_v7);  if (pdu_v7->count >= FT_PDU_V7_MAXFLOWS)    return 0;  else    return 1;}/* * function: fts3rec_pdu_v8_1_encode * * Encode a fts3rec into a version 8 Agg method 1 * * returns: -1 error encoding, PDU not encoded. *           0 PDU encoded.  Hint next call will fail. *           1 PDU encoded.  Room for more. * */int fts3rec_pdu_v8_1_encode(struct ftencode *enc,  struct fts3rec_v8_1 *rec_v8_1){  struct ftpdu_v8_1 *pdu_v8_1;  u_int seq_index;  int i;  pdu_v8_1 = (struct ftpdu_v8_1*) enc->buf_enc;  /* index to sequence # */  seq_index = rec_v8_1->engine_id<<8 | rec_v8_1->engine_type;  i = pdu_v8_1->count;  /* space to encode more ? */  if (i >= FT_PDU_V8_1_MAXFLOWS)    return -1;  /* if this is the first record, fill in the header */  if (!i) {    pdu_v8_1->version = 8;    pdu_v8_1->sysUpTime = rec_v8_1->sysUpTime;    pdu_v8_1->unix_secs = rec_v8_1->unix_secs;    pdu_v8_1->unix_nsecs = rec_v8_1->unix_nsecs;    pdu_v8_1->engine_type = rec_v8_1->engine_type;    pdu_v8_1->engine_id = rec_v8_1->engine_id;    pdu_v8_1->aggregation = 1;    pdu_v8_1->agg_version = 2;    pdu_v8_1->flow_sequence = enc->seq_next[seq_index];    enc->buf_size = 28; /* pdu header size */  } else {    /*  sysUpTime, unix_secs, unix_nsecs, and engine_* must match for     *  each pdu.  If a stream is being re-encoded this will normally     *  work out fine, if the stream was sorted or changed in some way     *  the PDU may only be able to hold one record.    */    if ((pdu_v8_1->sysUpTime != rec_v8_1->sysUpTime) ||        (pdu_v8_1->unix_secs != rec_v8_1->unix_secs) ||        (pdu_v8_1->unix_nsecs != rec_v8_1->unix_nsecs) ||        (pdu_v8_1->engine_id != rec_v8_1->engine_id) ||        (pdu_v8_1->engine_type != rec_v8_1->engine_type))        return -1;  }  pdu_v8_1->records[i].dFlows = rec_v8_1->dFlows;  pdu_v8_1->records[i].dPkts = rec_v8_1->dPkts;  pdu_v8_1->records[i].dOctets = rec_v8_1->dOctets;  pdu_v8_1->records[i].First = rec_v8_1->First;  pdu_v8_1->records[i].Last = rec_v8_1->Last;  pdu_v8_1->records[i].src_as = rec_v8_1->src_as;  pdu_v8_1->records[i].dst_as = rec_v8_1->dst_as;  pdu_v8_1->records[i].input = rec_v8_1->input;  pdu_v8_1->records[i].output = rec_v8_1->output;  /* increment sequence # */  enc->seq_next[seq_index]++;  pdu_v8_1->count ++;  enc->buf_size += sizeof (struct ftrec_v8_1);  if (pdu_v8_1->count >= FT_PDU_V8_1_MAXFLOWS)    return 0;  else    return 1;} /* fts3rec_pdu_v8_1_encode *//* * function: fts3rec_pdu_v8_2_encode * * Encode a fts3rec into a version 8 Agg method 2 * * returns: -1 error encoding, PDU not encoded. *           0 PDU encoded.  Hint next call will fail. *           1 PDU encoded.  Room for more. * */int fts3rec_pdu_v8_2_encode(struct ftencode *enc,  struct fts3rec_v8_2 *rec_v8_2){  struct ftpdu_v8_2 *pdu_v8_2;  u_int seq_index;  int i;  pdu_v8_2 = (struct ftpdu_v8_2*) enc->buf_enc;  /* index to sequence # */  seq_index = rec_v8_2->engine_id<<8 | rec_v8_2->engine_type;  i = pdu_v8_2->count;  /* space to encode more ? */  if (i >= FT_PDU_V8_2_MAXFLOWS)    return -1;  /* if this is the first record, fill in the header */  if (!i) {    pdu_v8_2->version = 8;    pdu_v8_2->sysUpTime = rec_v8_2->sysUpTime;    pdu_v8_2->unix_secs = rec_v8_2->unix_secs;    pdu_v8_2->unix_nsecs = rec_v8_2->unix_nsecs;    pdu_v8_2->engine_type = rec_v8_2->engine_type;    pdu_v8_2->engine_id = rec_v8_2->engine_id;    pdu_v8_2->aggregation = 2;    pdu_v8_2->agg_version = 2;    pdu_v8_2->flow_sequence = enc->seq_next[seq_index];    enc->buf_size = 28; /* pdu header size */  } else {    /*  sysUpTime, unix_secs, unix_nsecs, and engine_* must match for     *  each pdu.  If a stream is being re-encoded this will normally     *  work out fine, if the stream was sorted or changed in some way     *  the PDU may only be able to hold one record.    */    if ((pdu_v8_2->sysUpTime != rec_v8_2->sysUpTime) ||        (pdu_v8_2->unix_secs != rec_v8_2->unix_secs) ||        (pdu_v8_2->unix_nsecs != rec_v8_2->unix_nsecs) ||        (pdu_v8_2->engine_id != rec_v8_2->engine_id) ||        (pdu_v8_2->engine_type != rec_v8_2->engine_type))        return -1;  }  pdu_v8_2->records[i].dFlows = rec_v8_2->dFlows;  pdu_v8_2->records[i].dPkts = rec_v8_2->dPkts;  pdu_v8_2->records[i].dOctets = rec_v8_2->dOctets;  pdu_v8_2->records[i].First = rec_v8_2->First;  pdu_v8_2->records[i].Last = rec_v8_2->Last;  pdu_v8_2->records[i].prot = rec_v8_2->prot;  pdu_v8_2->records[i].srcport = rec_v8_2->srcport;  pdu_v8_2->records[i].dstport = rec_v8_2->dstport;  /* increment sequence # */  enc->seq_next[seq_index]++;  pdu_v8_2->count ++;  enc->buf_size += sizeof (struct ftrec_v8_2);  if (pdu_v8_2->count >= FT_PDU_V8_2_MAXFLOWS)    return 0;  else    return 1;} /* fts3rec_pdu_v8_2_encode *//* * function: fts3rec_pdu_v8_3_encode * * Encode a fts3rec into a version 8 Agg method 3 * * returns: -1 error encoding, PDU not encoded. *           0 PDU encoded.  Hint next call will fail. *           1 PDU encoded.  Room for more. * */int fts3rec_pdu_v8_3_encode(struct ftencode *enc,  struct fts3rec_v8_3 *rec_v8_3){  struct ftpdu_v8_3 *pdu_v8_3;  u_int seq_index;  int i;  pdu_v8_3 = (struct ftpdu_v8_3*) enc->buf_enc;  /* index to sequence # */  seq_index = rec_v8_3->engine_id<<8 | rec_v8_3->engine_type;  i = pdu_v8_3->count;  /* space to encode more ? */  if (i >= FT_PDU_V8_3_MAXFLOWS)    return -1;  /* if this is the first record, fill in the header */  if (!i) {    pdu_v8_3->version = 8;    pdu_v8_3->sysUpTime = rec_v8_3->sysUpTime;    pdu_v8_3->unix_secs = rec_v8_3->unix_secs;    pdu_v8_3->unix_nsecs = rec_v8_3->unix_nsecs;    pdu_v8_3->engine_type = rec_v8_3->engine_type;    pdu_v8_3->engine_id = rec_v8_3->engine_id;    pdu_v8_3->aggregation = 3;    pdu_v8_3->agg_version = 2;    pdu_v8_3->flow_sequence = enc->seq_next[seq_index];    enc->buf_size = 28; /* pdu header size */  } else {    /*  sysUpTime, unix_secs, unix_nsecs, and engine_* must match for     *  each pdu.  If a stream is being re-encoded this will normally     *  work out fine, if the stream was sorted or changed in some way     *  the PDU may only be able to hold one record.    */    if ((pdu_v8_3->sysUpTime != rec_v8_3->sysUpTime) ||        (pdu_v8_3->unix_secs != rec_v8_3->unix_secs) ||        (pdu_v8_3->unix_nsecs != rec_v8_3->unix_nsecs) ||        (pdu_v8_3->engine_id != rec_v8_3->engine_id) ||        (pdu_v8_3->engine_type != rec_v8_3->engine_type))        return -1;  }  pdu_v8_3->records[i].dFlows = rec_v8_3->dFlows;  pdu_v8_3->records[i].dPkts = rec_v8_3->dPkts;  pdu_v8_3->records[i].dOctets = rec_v8_3->dOctets;  pdu_v8_3->records[i].First = rec_v8_3->First;  pdu_v8_3->records[i].Last = rec_v8_3->Last;  pdu_v8_3->records[i].src_prefix = rec_v8_3->srcaddr;  pdu_v8_3->records[i].src_mask = rec_v8_3->src_mask;  pdu_v8_3->records[i].src_as = rec_v8_3->src_as;  pdu_v8_3->records[i].input = rec_v8_3->input;  /* increment sequence # */  enc->seq_next[seq_index]++;  pdu_v8_3->count ++;  enc->buf_size += sizeof (struct ftrec_v8_3);  if (pdu_v8_3->count >= FT_PDU_V8_3_MAXFLOWS)    return 0;  else    return 1;} /* fts3rec_pdu_v8_3_encode *//* * function: fts3rec_pdu_v8_4_encode * * Encode a fts3rec into a version 8 Agg method 4 * * returns: -1 error encoding, PDU not encoded. *           0 PDU encoded.  Hint next call will fail. *           1 PDU encoded.  Room for more. * */int fts3rec_pdu_v8_4_encode(struct ftencode *enc,  struct fts3rec_v8_4 *rec_v8_4){  struct ftpdu_v8_4 *pdu_v8_4;  u_int seq_index;  int i;  pdu_v8_4 = (struct ftpdu_v8_4*) enc->buf_enc;  /* index to sequence # */  seq_index = rec_v8_4->engine_id<<8 | rec_v8_4->engine_type;  i = pdu_v8_4->count;  /* space to encode more ? */  if (i >= FT_PDU_V8_4_MAXFLOWS)    return -1;  /* if this is the first record, fill in the header */  if (!i) {    pdu_v8_4->version = 8;    pdu_v8_4->sysUpTime = rec_v8_4->sysUpTime;    pdu_v8_4->unix_secs = rec_v8_4->unix_secs;    pdu_v8_4->unix_nsecs = rec_v8_4->unix_nsecs;    pdu_v8_4->engine_type = rec_v8_4->engine_type;    pdu_v8_4->engine_id = rec_v8_4->engine_id;    pdu_v8_4->aggregation = 4;    pdu_v8_4->agg_version = 2;    pdu_v8_4->flow_sequence = enc->seq_next[seq_index];    enc->buf_size = 28; /* pdu header size */  } else {    /*  sysUpTime, unix_secs, unix_nsecs, and engine_* must match for     *  each pdu.  If a stream is being re-encoded this will normally     *  work out fine, if the stream was sorted or changed in some way     *  the PDU may only be able to hold one record.    */    if ((pdu_v8_4->sysUpTime != rec_v8_4->sysUpTime) ||        (pdu_v8_4->unix_secs != rec_v8_4->unix_secs) ||        (pdu_v8_4->unix_nsecs != rec_v8_4->unix_nsecs) ||        (pdu_v8_4->engine_id != rec_v8_4->engine_id) ||        (pdu_v8_4->engine_type != rec_v8_4->engine_type))        return -1;  }  pdu_v8_4->records[i].dFlows = rec_v8_4->dFlows;  pdu_v8_4->records[i].dPkts = rec_v8_4->dPkts;  pdu_v8_4->records[i].dOctets = rec_v8_4->dOctets;  pdu_v8_4->records[i].First = rec_v8_4->First;  pdu_v8_4->records[i].Last = rec_v8_4->Last;  pdu_v8_4->records[i].dst_prefix = rec_v8_4->dstaddr;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -