diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/protocols/corba.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/lib/protocols/corba.c b/src/lib/protocols/corba.c index aaf3563e6..8aa98babe 100644 --- a/src/lib/protocols/corba.c +++ b/src/lib/protocols/corba.c @@ -26,27 +26,36 @@ #include "ndpi_private.h" static void ndpi_int_corba_add_connection(struct ndpi_detection_module_struct - *ndpi_struct, struct ndpi_flow_struct *flow) + *ndpi_struct, struct ndpi_flow_struct *flow) { + NDPI_LOG_INFO(ndpi_struct, "found Corba\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CORBA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } static void ndpi_search_corba(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search for CORBA\n"); - if(packet->tcp != NULL) { - NDPI_LOG_DBG2(ndpi_struct, "calculating CORBA over tcp\n"); - /* Corba General Inter-ORB Protocol -> GIOP */ - if(packet->payload_packet_len >= 24 && - memcmp(packet->payload, "GIOP", 4) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found corba\n"); + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search for Corba\n"); + + if (packet->tcp != NULL && packet->payload_packet_len >= 24) { + /* General Inter-ORB Protocol -> GIOP + * Zipped Inter-ORB Protocol -> ZIOP */ + if ((memcmp(packet->payload, "GIOP", 4) == 0) || + (memcmp(packet->payload, "ZIOP", 4) == 0)) + { + ndpi_int_corba_add_connection(ndpi_struct, flow); + return; + } + } + else if (packet->udp != NULL && packet->payload_packet_len > 32) { + /* Unreliable Multicast Inter-ORB Protocol -> MIOP */ + if (memcmp(packet->payload, "MIOP", 4) == 0) { ndpi_int_corba_add_connection(ndpi_struct, flow); return; } } - if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } @@ -55,7 +64,7 @@ void init_corba_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in ndpi_set_bitmask_protocol_detection("Corba", ndpi_struct, *id, NDPI_PROTOCOL_CORBA, ndpi_search_corba, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; |