From 4c02c81bf4698ac3350ee8b77eff5e72a0780f06 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Tue, 21 Dec 2021 23:04:27 +0100 Subject: Improved bittorrent heuristic --- src/lib/ndpi_main.c | 6 ++++-- src/lib/protocols/bittorrent.c | 19 +++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 3ea20f436..ad70e59c6 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4928,8 +4928,10 @@ int ndpi_search_into_bittorrent_cache(struct ndpi_detection_module_struct *ndpi_ /* Check cached communications */ key1 = ndpi_bittorrent_hash_funct(saddr, sport), key2 = ndpi_bittorrent_hash_funct(daddr, dport); - found = ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key1, &cached_proto, 0 /* Don't remove it as it can be used for other connections */) - || ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key2, &cached_proto, 0 /* Don't remove it as it can be used for other connections */); + found = + ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, saddr+daddr, &cached_proto, 0 /* Don't remove it as it can be used for other connections */) + || ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key1, &cached_proto, 0 /* Don't remove it as it can be used for other connections */) + || ndpi_lru_find_cache(ndpi_struct->bittorrent_cache, key2, &cached_proto, 0 /* Don't remove it as it can be used for other connections */); #ifdef BITTORRENT_CACHE_DEBUG if(packet->udp) diff --git a/src/lib/protocols/bittorrent.c b/src/lib/protocols/bittorrent.c index 87eac25c5..3087f5216 100644 --- a/src/lib/protocols/bittorrent.c +++ b/src/lib/protocols/bittorrent.c @@ -141,6 +141,11 @@ static void ndpi_add_connection_as_bittorrent(struct ndpi_detection_module_struc ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key1, NDPI_PROTOCOL_BITTORRENT); ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, key2, NDPI_PROTOCOL_BITTORRENT); + /* Now add hosts as twins */ + ndpi_lru_add_to_cache(ndpi_struct->bittorrent_cache, + packet->iph->saddr + packet->iph->daddr, + NDPI_PROTOCOL_BITTORRENT); + /* Also add +2 ports of the sender in order to catch additional sockets open by the same client */ for(i=0; i<2; i++) { if(packet->udp) @@ -509,20 +514,6 @@ static void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_str if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_BITTORRENT) { /* check for tcp retransmission here */ - -#ifdef EXCLUDE_BITTORRENT_QUICKLY - u_int16_t sport, dport; - - if(packet->udp) - sport = packet->udp->source, dport = packet->udp->dest; - else - sport = packet->tcp->source, dport = packet->tcp->dest; - - if(ndpi_search_into_bittorrent_cache(ndpi_struct, flow, packet->iph->saddr, sport, packet->iph->daddr, dport)) { - ndpi_search_bittorrent_hash(ndpi_struct, flow, -1); - goto bittorrent_found; - } -#endif if(packet->tcp != NULL) { ndpi_int_search_bittorrent_tcp(ndpi_struct, flow); -- cgit v1.2.3