diff options
Diffstat (limited to 'src/lib/protocols/bgp.c')
-rw-r--r-- | src/lib/protocols/bgp.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/lib/protocols/bgp.c b/src/lib/protocols/bgp.c index 8f293b611..e72fdee57 100644 --- a/src/lib/protocols/bgp.c +++ b/src/lib/protocols/bgp.c @@ -35,23 +35,23 @@ static void ndpi_int_bgp_add_connection(struct ndpi_detection_module_struct *ndp /* this detection also works asymmetrically */ void ndpi_search_bgp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - struct ndpi_packet_struct *packet = &flow->packet; - -// struct ndpi_id_struct *src=ndpi_struct->src; -// struct ndpi_id_struct *dst=ndpi_struct->dst; + struct ndpi_packet_struct *packet = &flow->packet; + u_int16_t bgp_port = htons(179); - if (packet->payload_packet_len > 18 && - get_u_int64_t(packet->payload, 0) == 0xffffffffffffffffULL && - get_u_int64_t(packet->payload, 8) == 0xffffffffffffffffULL && - ntohs(get_u_int16_t(packet->payload, 16)) <= packet->payload_packet_len && - (packet->tcp->dest == htons(179) || packet->tcp->source == htons(179)) - && packet->payload[18] < 5) { - NDPI_LOG(NDPI_PROTOCOL_BGP, ndpi_struct, NDPI_LOG_DEBUG, "BGP detected.\n"); - ndpi_int_bgp_add_connection(ndpi_struct, flow); - return; - } + if(packet->tcp + && (packet->payload_packet_len > 18) + && (packet->payload[18] < 5) + && ((packet->tcp->dest == bgp_port) || (packet->tcp->source == bgp_port)) + && (get_u_int64_t(packet->payload, 0) == 0xffffffffffffffffULL) + && (get_u_int64_t(packet->payload, 8) == 0xffffffffffffffffULL) + && (ntohs(get_u_int16_t(packet->payload, 16)) <= packet->payload_packet_len) + ) { + NDPI_LOG(NDPI_PROTOCOL_BGP, ndpi_struct, NDPI_LOG_DEBUG, "BGP detected.\n"); + ndpi_int_bgp_add_connection(ndpi_struct, flow); + return; + } - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_BGP); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_BGP); } |