From dc9409ae123cee206d0664e04d82e34ba01402eb Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Tue, 5 Jun 2018 23:02:24 +0200 Subject: [PATCH 001/147] Added missing include --- src/lib/protocols/btlib.c | 2 ++ src/lib/third_party/include/hash.h | 2 ++ src/lib/third_party/src/hash.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/lib/protocols/btlib.c b/src/lib/protocols/btlib.c index ac456f36482..4a63ebc3134 100644 --- a/src/lib/protocols/btlib.c +++ b/src/lib/protocols/btlib.c @@ -22,6 +22,8 @@ * */ +#include "ndpi_api.h" + #ifndef NDPI_NO_STD_INC #include #include diff --git a/src/lib/third_party/include/hash.h b/src/lib/third_party/include/hash.h index 8862671b1bc..4f53e5a5e08 100644 --- a/src/lib/third_party/include/hash.h +++ b/src/lib/third_party/include/hash.h @@ -3,6 +3,8 @@ #ifndef _HASH_H_ #define _HASH_H_ +#include "ndpi_api.h" + struct entry_s { char *key; u_int16_t value; diff --git a/src/lib/third_party/src/hash.c b/src/lib/third_party/src/hash.c index 792d6086ee3..61ba9fbf618 100644 --- a/src/lib/third_party/src/hash.c +++ b/src/lib/third_party/src/hash.c @@ -1,5 +1,7 @@ /* Based on https://gist.github.com/tonious/1377667 */ +#include +#include #include #include #include From e00b06926e4acc01e56fefb47e0b45f1ea53436d Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 11 Jun 2018 16:22:02 +0200 Subject: [PATCH 002/147] Fix for handling IP address based custom categories --- example/ndpiReader.c | 29 +++++++++++++++++++---------- src/lib/ndpi_main.c | 13 +++++++++---- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 5a8f9113986..9dacf000a8d 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -380,7 +380,7 @@ void extcap_config() { struct ndpi_proto_sorter *protos; u_int ndpi_num_supported_protocols = ndpi_get_ndpi_num_supported_protocols(ndpi_info_mod); ndpi_proto_defaults_t *proto_defaults = ndpi_get_proto_defaults(ndpi_info_mod); - + /* -i */ printf("arg {number=%d}{call=-i}{display=Capture Interface}{type=string}" "{tooltip=The interface name}\n", argidx++); @@ -601,7 +601,7 @@ static void parseOptions(int argc, char **argv) { extcap_packet_filter = ndpi_get_proto_by_name(ndpi_info_mod, optarg); if (extcap_packet_filter == NDPI_PROTOCOL_UNKNOWN) extcap_packet_filter = atoi(optarg); break; - + case 257: _debug_protocols = strdup(optarg); break; @@ -761,10 +761,12 @@ static void printFlow(u_int16_t id, struct ndpi_flow_info *flow, u_int16_t threa fprintf(out, "[proto: %u/%s]", flow->detected_protocol.app_protocol, ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, flow->detected_protocol.app_protocol)); - + if(flow->detected_protocol.category != 0) - fprintf(out, "[cat: %s]", ndpi_category_get_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, - flow->detected_protocol.category)); + fprintf(out, "[cat: %s/%u]", + ndpi_category_get_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, + flow->detected_protocol.category), + (unsigned int)flow->detected_protocol.category); fprintf(out, "[%u pkts/%llu bytes ", flow->src2dst_packets, (long long unsigned int) flow->src2dst_bytes); fprintf(out, "%s %u pkts/%llu bytes]", @@ -1487,10 +1489,10 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) { while(fd) { char buffer[512], *line, *name, *category; int i; - + if(!(line = fgets(buffer, sizeof(buffer), fd))) break; - + if(((i = strlen(line)) <= 1) || (line[0] == '#')) continue; else @@ -1501,9 +1503,16 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) { category = strtok(NULL, "\t"); if(category) { + int fields[4]; + // printf("Loading %s\t%s\n", name, category); - ndpi_load_hostname_category(ndpi_thread_info[thread_id].workflow->ndpi_struct, - name, (ndpi_protocol_category_t)atoi(category)); + + if(sscanf(name, "%d.%d.%d.%d", &fields[0], &fields[1], &fields[2], &fields[3]) == 4) + ndpi_load_ip_category(ndpi_thread_info[thread_id].workflow->ndpi_struct, + name, (ndpi_protocol_category_t)atoi(category)); + else + ndpi_load_hostname_category(ndpi_thread_info[thread_id].workflow->ndpi_struct, + name, (ndpi_protocol_category_t)atoi(category)); } } } @@ -3199,7 +3208,7 @@ int orginal_main(int argc, char **argv) { printf("nDPI Library version mismatch: please make sure this code and the nDPI library are in sync\n"); return(-1); } - + automataUnitTest(); ndpi_info_mod = ndpi_init_detection_module(); diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 5f1f9800d13..38930af4502 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2457,9 +2457,8 @@ char * strsep(char **sp, char *sep) /* ******************************************************************** */ - -int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, char* rule, u_int8_t do_add) { - +int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, + char* rule, u_int8_t do_add) { char *at, *proto, *elem; ndpi_proto_defaults_t *def; int subprotocol_id, i; @@ -2575,7 +2574,6 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, char* rule, */ int ndpi_load_protocols_file(struct ndpi_detection_module_struct *ndpi_mod, char* path) { - FILE *fd = fopen(path, "r"); int i; @@ -4057,6 +4055,13 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) #endif } + if(ndpi_str->custom_categories.ipAddresses != NULL) + ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_str->custom_categories.ipAddresses, + free_ptree_data); + + ndpi_str->custom_categories.ipAddresses = ndpi_str->custom_categories.ipAddresses_shadow; + ndpi_str->custom_categories.ipAddresses_shadow = ndpi_New_Patricia(32 /* IPv4 */); + ndpi_str->custom_categories.categories_loaded = 1; return(0); From 22356fa69be7acc7232185ef14b3a26be3c3ec9d Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 11 Jun 2018 17:01:20 +0200 Subject: [PATCH 003/147] Added site unavailable category --- src/include/ndpi_typedefs.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 77440b5c75b..33b48526349 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -800,10 +800,11 @@ typedef enum { NDPI_CONTENT_CATEGORY_WEBM, /* Out custom categories */ - CUSTOM_CATEGORY_MINING = 99, - CUSTOM_CATEGORY_MALWARE = 100, - CUSTOM_CATEGORY_ADVERTISEMENT = 101, - CUSTOM_CATEGORY_BANNED_SITE = 102, + CUSTOM_CATEGORY_MINING = 99, + CUSTOM_CATEGORY_MALWARE = 100, + CUSTOM_CATEGORY_ADVERTISEMENT = 101, + CUSTOM_CATEGORY_BANNED_SITE = 102, + CUSTOM_CATEGORY_SITE_UNAVAILABLE = 103, NDPI_PROTOCOL_NUM_CATEGORIES /* NOTE: Keep this as last member From 3986a951d8e032b3a25dc3db8198898658502f15 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 21 Jun 2018 16:13:18 +0200 Subject: [PATCH 004/147] Suppressed invalid messages with -q -j now accepts - as stdout --- example/ndpiReader.c | 16 +++++++++++----- src/lib/ndpi_content_match.c.inc | 16 ++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 9dacf000a8d..9b10fe6c531 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -547,7 +547,7 @@ static void parseOptions(int argc, char **argv) { case 'j': #ifndef HAVE_JSON_C - printf("WARNING: this copy of ndpiReader has been compiled without JSON-C: json export disabled\n"); + printf("WARNING: this copy of ndpiReader has been compiled without json-c: JSON export disabled\n"); #else _jsonFilePath = optarg; json_flag = 1; @@ -1897,6 +1897,7 @@ static void printResults(u_int64_t tot_usec) { char buf[32]; #ifdef HAVE_JSON_C FILE *json_fp = NULL; + u_int8_t dont_close_json_fp = 0; json_object *jObj_main = NULL, *jObj_trafficStats, *jArray_detProto = NULL, *jObj; #endif long long unsigned int breed_stats[NUM_BREEDS] = { 0 }; @@ -2005,10 +2006,14 @@ static void printResults(u_int64_t tot_usec) { if(json_flag) { #ifdef HAVE_JSON_C - if((json_fp = fopen(_jsonFilePath,"w")) == NULL) { + if(!strcmp(_jsonFilePath, "-")) + json_fp = stderr, dont_close_json_fp = 1; + else if((json_fp = fopen(_jsonFilePath,"w")) == NULL) { printf("Error creating .json file %s\n", _jsonFilePath); json_flag = 0; - } else { + } + + if(json_flag) { jObj_main = json_object_new_object(); jObj_trafficStats = json_object_new_object(); jArray_detProto = json_object_new_array(); @@ -2159,7 +2164,7 @@ static void printResults(u_int64_t tot_usec) { json_object_object_add(jObj_main,"unknown.flows",jArray_unknown_flows); fprintf(json_fp,"%s\n",json_object_to_json_string(jObj_main)); - fclose(json_fp); + if(!dont_close_json_fp) fclose(json_fp); #endif } @@ -2473,7 +2478,8 @@ static void pcap_process_packet(u_char *args, memset(&ndpi_thread_info[thread_id].workflow->stats, 0, sizeof(struct ndpi_stats)); } - printf("\n-------------------------------------------\n\n"); + if(!quiet_mode) + printf("\n-------------------------------------------\n\n"); memcpy(&begin, &end, sizeof(begin)); memcpy(&pcap_start, &pcap_end, sizeof(pcap_start)); diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index d65565b3ccb..ab36cbf48f1 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8053,6 +8053,14 @@ ndpi_protocol_match host_match[] = { { ".ebaystratus.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".ebayimg.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + /* Detected "instagram.c10r.facebook.com". Omitted "*amazonaws.com" and "*facebook.com" CDNs e.g. "ig-telegraph-shv-04-frc3.facebook.com" */ + { ".cdninstagram.com", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "igcdn-photos-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagramimages-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagramstatic-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "facebook.com", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { "fbstatic-a.akamaihd.net", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".fbcdn.net", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, @@ -8221,14 +8229,6 @@ ndpi_protocol_match host_match[] = { { ".snapchat.", NULL, "\\.snapchat\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".snapads.", NULL, "\\.snapads\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - /* Detected "instagram.c10r.facebook.com". Omitted "*amazonaws.com" and "*facebook.com" CDNs e.g. "ig-telegraph-shv-04-frc3.facebook.com" */ - { ".cdninstagram.com", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "igcdn-photos-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagramimages-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagramstatic-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".waze.com", NULL, NULL, "Waze", NDPI_PROTOCOL_WAZE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, { ".deezer.com", NULL, NULL, "Deezer", NDPI_PROTOCOL_DEEZER, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, From 7fce8f02d2e4d08aa048512b0cbc24edc9f1e26b Mon Sep 17 00:00:00 2001 From: Marcus Hufvudsson Date: Mon, 2 Jul 2018 19:54:37 +0200 Subject: [PATCH 005/147] Added showmax.com detection --- src/include/ndpi_protocol_ids.h | 1 + src/lib/ndpi_content_match.c.inc | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index d04722b8d84..6d7b5ba8b1c 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -285,6 +285,7 @@ #define NDPI_PROTOCOL_WHATSAPP_FILES 242 /* Videos, pictures, voice messages... */ #define NDPI_PROTOCOL_VIDTO 243 /* VidTO streaming service */ #define NDPI_PROTOCOL_RAPIDVIDEO 244 /* RapidVideo streaming */ +#define NDPI_PROTOCOL_SHOWMAX 245 /* showmax.com video streaming */ /* UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE */ #define NDPI_LAST_IMPLEMENTED_PROTOCOL NDPI_PROTOCOL_RAPIDVIDEO diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index ab36cbf48f1..60671b3cd86 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8374,6 +8374,9 @@ ndpi_protocol_match host_match[] = { { ".rapidvideo.com", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_RAPIDVIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { ".playercdn.net", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_RAPIDVIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "showmax.com", NULL, NULL, "Showmax", NDPI_PROTOCOL_SHOWMAX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "showmax.akamaized.net", NULL, NULL, "Showmax", NDPI_PROTOCOL_SHOWMAX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { NULL, NULL, NULL, 0 } }; From 90ffa1fc2ca87b166e9447643deffb8220ae44ec Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 16 Jul 2018 09:21:34 +0200 Subject: [PATCH 006/147] Updated twitter invalid address range Using content substring match in category search --- example/ndpiReader.c | 2 +- src/lib/ndpi_content_match.c.inc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 9b10fe6c531..39748cd90f6 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -1465,7 +1465,7 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) { ndpi_set_detection_preferences(ndpi_thread_info[thread_id].workflow->ndpi_struct, ndpi_pref_dns_dissect_response, 0); ndpi_set_detection_preferences(ndpi_thread_info[thread_id].workflow->ndpi_struct, - ndpi_pref_enable_category_substring_match, 0); + ndpi_pref_enable_category_substring_match, 1); ndpi_workflow_set_flow_detected_callback(ndpi_thread_info[thread_id].workflow, on_protocol_discovered, (void *)(uintptr_t)thread_id); diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 60671b3cd86..42031fc2b74 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -71,7 +71,6 @@ static ndpi_network host_protocol_list[] = { { 0xB92D0600 /* 185.45.6.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, { 0xBC40E000 /* 188.64.224.0/21 */, 21, NDPI_PROTOCOL_TWITTER }, { 0xC02C4400 /* 192.44.68.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, - { 0xC030EC00 /* 192.48.236.0/23 */, 23, NDPI_PROTOCOL_TWITTER }, { 0xC0854C00 /* 192.133.76.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, { 0xC7109C00 /* 199.16.156.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, { 0xC73B9400 /* 199.59.148.0/22 */, 22, NDPI_PROTOCOL_TWITTER }, @@ -609,10 +608,10 @@ static ndpi_network host_protocol_list[] = { /* Teamviewer 159.122.189.32-63 */ { 0x9F7ABD30 /* 159.122.189.32 */, 21, NDPI_PROTOCOL_TEAMVIEWER }, +#if 0 /* IFLIX services -by www.vizuamatix.com R&D team */ - { 0x344D0000 /* 52.77.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, { 0x34DC0000 /* 52.220.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, { 0x344A0000 /* 52.74.0.0 */, 16, NDPI_PROTOCOL_IFLIX }, @@ -622,6 +621,7 @@ static ndpi_network host_protocol_list[] = { { 0x36C09600 /* 54.192.150.0 */, 24, NDPI_PROTOCOL_IFLIX }, { 0x344AC0F7 /* 52.74.192.247 */, 32, NDPI_PROTOCOL_IFLIX }, { 0x0215E718 /* 2.21.231.24 */, 32, NDPI_PROTOCOL_IFLIX }, +#endif /* Citrix GotoMeeting (AS16815, AS21866) @@ -8033,6 +8033,7 @@ ndpi_protocol_match host_match[] = { { "swscan.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, { "itunes-apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, { "itunes.apple.com", NULL, NULL, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "tlnk.io", NULL, NULL, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { "aaplimg.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, { ".apple.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".icloud.com", NULL, NULL, "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, From 1ebc510bcb7b597ac5bd685608f34a47df8c5522 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Tue, 17 Jul 2018 15:48:24 +0200 Subject: [PATCH 007/147] Fied substring matching --- src/lib/ndpi_main.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 38930af4502..0faffe70f29 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1886,16 +1886,36 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, void *param) { int *matching_protocol_id = (int*)param; int min_len = (txt->length < m->patterns->length) ? txt->length : m->patterns->length; + char *match, buf[64]; + int min_buf_len = (txt->length > 63 /* sizeof(buf)-1 */) ? 63 : txt->length; + /* Return 1 for stopping to the first match. We might consider searching for the more specific match, paying more cpu cycles. */ + if(m->match_num == 0) { +#ifdef MATCH_DEBUG + printf("Skipping match [to search: %s][pattern: %s] [len: %u]\n", buf, m->patterns->astring, min_len); +#endif + return(0); /* No match */ + } + *matching_protocol_id = m->patterns[0].rep.number; - if(strncmp(txt->astring, m->patterns->astring, min_len) == 0) + strncpy(buf, txt->astring, min_buf_len); + buf[min_buf_len] = '\0'; + +#ifdef MATCH_DEBUG + printf("Searching [to search: %s][pattern: %s] [len: %u]\n", buf, m->patterns->astring, min_len); +#endif + + if(strncmp(buf, m->patterns->astring, min_len) == 0) { +#ifdef MATCH_DEBUG + printf("Found match [%s][%s] [len: %u]\n", buf, m->patterns->astring, min_len); +#endif return(1); /* If the pattern found matches the string at the beginning we stop here */ - else + } else return 0; /* 0 to continue searching, !0 to stop */ } From 06789406ad322933284a6118040c41e2ed116f0b Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Tue, 17 Jul 2018 17:49:59 +0200 Subject: [PATCH 008/147] Pattern match improvements --- src/lib/ndpi_main.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 0faffe70f29..3306e25a6fb 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1889,27 +1889,23 @@ static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, void *param) { char *match, buf[64]; int min_buf_len = (txt->length > 63 /* sizeof(buf)-1 */) ? 63 : txt->length; + strncpy(buf, txt->astring, min_buf_len); + buf[min_buf_len] = '\0'; + +#ifdef MATCH_DEBUG + printf("Searching [to search: %s/%u][pattern: %s/%u] [len: %u][match_num: %u]\n", + buf, txt->length, m->patterns->astring, m->patterns->length, min_len, + m->match_num); +#endif + /* Return 1 for stopping to the first match. We might consider searching for the more specific match, paying more cpu cycles. */ - if(m->match_num == 0) { -#ifdef MATCH_DEBUG - printf("Skipping match [to search: %s][pattern: %s] [len: %u]\n", buf, m->patterns->astring, min_len); -#endif - return(0); /* No match */ - } *matching_protocol_id = m->patterns[0].rep.number; - strncpy(buf, txt->astring, min_buf_len); - buf[min_buf_len] = '\0'; - -#ifdef MATCH_DEBUG - printf("Searching [to search: %s][pattern: %s] [len: %u]\n", buf, m->patterns->astring, min_len); -#endif - if(strncmp(buf, m->patterns->astring, min_len) == 0) { #ifdef MATCH_DEBUG printf("Found match [%s][%s] [len: %u]\n", buf, m->patterns->astring, min_len); @@ -2245,6 +2241,8 @@ static int hyperscanCustomEventHandler(unsigned int id, static int ndpi_match_custom_category(struct ndpi_detection_module_struct *ndpi_struct, char *name, unsigned long *id) { + /* printf("[NDPI] %s(%s)\n", __FUNCTION__, name); */ + if(!ndpi_struct->enable_category_substring_match) { if(ndpi_struct->custom_categories.hostnames_hash == NULL) return(-1); @@ -3934,6 +3932,14 @@ void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_struct, /* ********************************************************************************* */ +/* + * + * IMPORTANT + * + * The *name pointer MUST be kept allocated until the automa is finalized and it + * cannot be recycled across multiple ndpi_load_hostname_category() calls + * + */ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct, char *name, ndpi_protocol_category_t category) { if(name == NULL) @@ -3969,7 +3975,7 @@ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct tmp[j] = '\0'; - h->expression = strdup(name), h->id = (unsigned int)category; + h->expression = ndpi_strdup(name), h->id = (unsigned int)category; if(h->expression == NULL) { free(h); return(-2); From 34dfe7d375e4fb3bf987f250f260b5b1a7cd15bb Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Tue, 17 Jul 2018 18:21:06 +0200 Subject: [PATCH 009/147] Improved tor detection to limit false positives --- src/lib/protocols/tor.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/protocols/tor.c b/src/lib/protocols/tor.c index 462833db069..134f191c373 100644 --- a/src/lib/protocols/tor.c +++ b/src/lib/protocols/tor.c @@ -22,7 +22,7 @@ static void ndpi_int_tor_add_connection(struct ndpi_detection_module_struct int ndpi_is_ssl_tor(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *certificate) { - int prev_num = 0, numbers_found = 0, num_found = 0, i, len; + int prev_num = 0, numbers_found = 0, num_found = 0, i, len, num_impossible = 0; char dummy[48], *dot, *name; if(certificate == NULL) @@ -73,12 +73,11 @@ int ndpi_is_ssl_tor(struct ndpi_detection_module_struct *ndpi_struct, if(ndpi_match_bigram(ndpi_struct, &ndpi_struct->bigrams_automa, &name[i])) { num_found++; } else if(ndpi_match_bigram(ndpi_struct, &ndpi_struct->impossible_bigrams_automa, &name[i])) { - ndpi_int_tor_add_connection(ndpi_struct, flow); - return(1); + num_impossible++; } } - if(num_found == 0) { + if((num_found == 0) || (num_impossible > 1)) { ndpi_int_tor_add_connection(ndpi_struct, flow); return(1); } else { From 475f54e9d1c9008004c407e1f098a21e42bed8a2 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 18 Jul 2018 17:33:28 +0200 Subject: [PATCH 010/147] Fixed name clash --- src/lib/protocols/diameter.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lib/protocols/diameter.c b/src/lib/protocols/diameter.c index 24317f49808..f2f342914b2 100644 --- a/src/lib/protocols/diameter.c +++ b/src/lib/protocols/diameter.c @@ -1,5 +1,5 @@ /* - * aimini.c + * diameter.c * * Copyright (C) 2018 - ntop.org * Written by Michele Campus - @@ -31,10 +31,10 @@ // Header Flags possibile values -#define REQUEST 0X80 -#define PROXYABLE 0X40 -#define ERROR 0X20 -#define RETRASM 0X10 +#define DIAMETER_REQUEST 0X80 +#define DIAMETER_PROXYABLE 0X40 +#define DIAMETER_ERROR 0X20 +#define DIAMETER_RETRASM 0X10 typedef enum { AC = 271, @@ -73,10 +73,10 @@ int is_diameter(struct ndpi_packet_struct *packet, int size_payload) // check if the packet is diameter if(diameter->version == 0x01 && - (diameter->flags == REQUEST || - diameter->flags == PROXYABLE || - diameter->flags == ERROR || - diameter->flags == RETRASM)) { + (diameter->flags == DIAMETER_REQUEST || + diameter->flags == DIAMETER_PROXYABLE || + diameter->flags == DIAMETER_ERROR || + diameter->flags == DIAMETER_RETRASM)) { u_int16_t com_code = diameter->com_code[2] + (diameter->com_code[1] << 8) + (diameter->com_code[0] << 8); From 30b72eae64cb9379015a183a7d49da24b564c85f Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 18 Jul 2018 21:29:26 +0200 Subject: [PATCH 011/147] Changed RTP from VoIP to Media category --- src/lib/ndpi_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 3306e25a6fb..dc090b69893 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1365,7 +1365,7 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTP, no_master, - no_master, "RTP", NDPI_PROTOCOL_CATEGORY_VOIP, + no_master, "RTP", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RDP, From d9c963061bbe561af4ea1e223fc4589fe333570d Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 20 Jul 2018 18:52:00 +0200 Subject: [PATCH 012/147] Fixes invalid NDPI_MAX_SUPPORTED_PROTOCOLS --- src/include/ndpi_protocol_ids.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 6d7b5ba8b1c..1a76711697a 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -286,9 +286,13 @@ #define NDPI_PROTOCOL_VIDTO 243 /* VidTO streaming service */ #define NDPI_PROTOCOL_RAPIDVIDEO 244 /* RapidVideo streaming */ #define NDPI_PROTOCOL_SHOWMAX 245 /* showmax.com video streaming */ - -/* UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE */ -#define NDPI_LAST_IMPLEMENTED_PROTOCOL NDPI_PROTOCOL_RAPIDVIDEO +/* IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT */ +/* */ +/* If you add new NDPI protocol defines after the last, DON'T forget */ +/* to update constant NDPI_LAST_IMPLEMENTED_PROTOCOL below !!! */ +/* */ +/* IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT */ +#define NDPI_LAST_IMPLEMENTED_PROTOCOL NDPI_PROTOCOL_SHOWMAX #define NDPI_MAX_SUPPORTED_PROTOCOLS (NDPI_LAST_IMPLEMENTED_PROTOCOL + 1) #define NDPI_MAX_NUM_CUSTOM_PROTOCOLS (NDPI_NUM_BITS-NDPI_LAST_IMPLEMENTED_PROTOCOL) From 8b0e735f675524cf8fc736f18fed9c61f9b36258 Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Fri, 20 Jul 2018 13:26:44 -0400 Subject: [PATCH 013/147] Decreased minimum packet payload length down to 19 from 100 for SSDP. The minimum packet payload length is: "NOTIFY * HTTP/1.1" + 0x0d + 0x0a (19 bytes). --- src/lib/protocols/ssdp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/protocols/ssdp.c b/src/lib/protocols/ssdp.c index ce681d9b635..203edabb985 100644 --- a/src/lib/protocols/ssdp.c +++ b/src/lib/protocols/ssdp.c @@ -45,7 +45,7 @@ void ndpi_search_ssdp(struct ndpi_detection_module_struct *ndpi_struct, struct n NDPI_LOG_DBG(ndpi_struct, "search ssdp\n"); if (packet->udp != NULL) { - if (packet->payload_packet_len > 100) { + if (packet->payload_packet_len >= 19) { if ((memcmp(packet->payload, "M-SEARCH * HTTP/1.1", 19) == 0) || memcmp(packet->payload, "NOTIFY * HTTP/1.1", 17) == 0) { From 212598b45eaf7c00863171974f7da784b03a7db6 Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Fri, 20 Jul 2018 13:28:38 -0400 Subject: [PATCH 014/147] Added example SSDP M-SEARCH capture file. --- tests/pcap/ssdp-m-search.pcap | Bin 0 -> 1525 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/pcap/ssdp-m-search.pcap diff --git a/tests/pcap/ssdp-m-search.pcap b/tests/pcap/ssdp-m-search.pcap new file mode 100644 index 0000000000000000000000000000000000000000..a71f3222766aa97430bd2627bffa81b664b0ee4d GIT binary patch literal 1525 zcma*l%PT~26u|LAcX6AHW)>4E89T|)-6&a@={A|%nZ}HpQ4ricv#{ym9P*RWh>-`ba>}=8+ zHMeUDxqg;28i>m^i@0gzdRZ==Brf9-aWlxZv)q`ExS^Pc%OMwHxojVC-HM2tM=r{8 zv*pCaO%b<<+#t&>+!LoSiMVCtOrCppxJePWfm{#EtsWECawOumkkeRh$09CZiMUrJN==$s$o%`g%{5O96BJOQe#Qg&6#v9ZC literal 0 HcmV?d00001 From fbf6bd2be8cc6a8b1a091606e378698f7b6cdeac Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Fri, 20 Jul 2018 13:51:17 -0400 Subject: [PATCH 015/147] Fix end-of-line bounds handling. The existing implementation misses ending lines and as a result, fails to match certain protocols (SMTP for example, which needs to see at least 3 commain/response matches). It appears from the commit history that an attempt was made (end-1) to prevent reads past payload length. This can be ensured by simply not reading any payload that is < 3 bytes. The updated logic for this loop is: - Payload length is >= 3 bytes, or return. - Loop over payload, compare for EOL (CR + NL) sequence. - If found, process string. - If index 'a' plus two is less than payload length, increment 'a' by one and continue. - Loop return always increments index 'a' by one. --- src/lib/ndpi_main.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index dc090b69893..f082ad6415a 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4456,7 +4456,6 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc { u_int32_t a; struct ndpi_packet_struct *packet = &flow->packet; - u_int16_t end = packet->payload_packet_len - 1; if(packet->packet_lines_parsed_complete != 0) return; @@ -4497,15 +4496,14 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc packet->http_response.len = 0; packet->http_num_headers=0; - if((packet->payload_packet_len == 0) - || (packet->payload == NULL) - || (end == 0)) + if((packet->payload_packet_len < 3) + || (packet->payload == NULL)) return; packet->line[packet->parsed_lines].ptr = packet->payload; packet->line[packet->parsed_lines].len = 0; - for(a = 0; a < end-1 /* This because get_u_int16_t(packet->payload, a) reads 2 bytes */; a++) { + for(a = 0; a < packet->payload_packet_len; a++) { if(get_u_int16_t(packet->payload, a) == ntohs(0x0d0a)) { /* If end of line char sequence CR+NL "\r\n", process line */ packet->line[packet->parsed_lines].len = (u_int16_t)(((unsigned long) &packet->payload[a]) - ((unsigned long) packet->line[packet->parsed_lines].ptr)); From a499f369a560107b214e935dfbef22b4534f76a4 Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 21 Jul 2018 15:20:11 +0200 Subject: [PATCH 016/147] Updated results based on the new output format --- tests/result/1kxun.pcap.out | 214 ++++---- tests/result/6in4tunnel.pcap.out | 16 +- tests/result/BGP_Cisco_hdlc_slarp.pcap.out | 2 +- tests/result/BGP_redist.pcap.out | 4 +- tests/result/EAQ.pcap.out | 4 +- tests/result/Instagram.pcap.out | 38 +- tests/result/KakaoTalk_chat.pcap.out | 58 +- tests/result/KakaoTalk_talk.pcap.out | 18 +- tests/result/NTPv2.pcap.out | 2 +- tests/result/NTPv3.pcap.out | 2 +- tests/result/NTPv4.pcap.out | 2 +- tests/result/Oscar.pcap.out | 2 +- tests/result/ajp.pcap.out | 4 +- tests/result/amqp.pcap.out | 6 +- tests/result/bittorrent.pcap.out | 48 +- tests/result/bittorrent_utp.pcap.out | 2 +- tests/result/bt_search.pcap.out | 2 +- tests/result/check_mk_new.pcap.out | 2 +- tests/result/coap_mqtt.pcap.out | 24 +- tests/result/dnscrypt.pcap.out | 8 +- tests/result/drda_db2.pcap.out | 2 +- tests/result/dropbox.pcap.out | 70 +-- tests/result/facebook.pcap.out | 4 +- tests/result/fix.pcap.out | 24 +- tests/result/git.pcap.out | 2 +- tests/result/google_ssl.pcap.out | 2 +- tests/result/hangout.pcap.out | 2 +- tests/result/http_ipv6.pcap.out | 16 +- tests/result/mpeg.pcap.out | 2 +- tests/result/mpegts.pcap.out | 2 +- tests/result/msnms.pcap.out | 12 +- tests/result/mssql_tds.pcap.out | 22 +- tests/result/netflix.pcap.out | 120 ++--- tests/result/nintendo.pcap.out | 28 +- tests/result/ocs.pcap.out | 26 +- tests/result/ookla.pcap.out | 4 +- tests/result/openvpn.pcap.out | 6 +- tests/result/pps.pcap.out | 140 ++--- tests/result/quic.pcap.out | 18 +- tests/result/quickplay.pcap.out | 42 +- tests/result/rx.pcap.out | 10 +- tests/result/sip.pcap.out | 8 +- tests/result/skype-conference-call.pcap.out | 2 +- tests/result/skype.pcap.out | 496 +++++++++--------- tests/result/skype_no_unknown.pcap.out | 450 ++++++++-------- tests/result/smpp_in_general.pcap.out | 2 +- tests/result/snapchat.pcap.out | 6 +- tests/result/starcraft_battle.pcap.out | 58 +- tests/result/tinc.pcap.out | 8 +- tests/result/tor.pcap.out | 20 +- tests/result/ubntac2.pcap.out | 16 +- tests/result/viber.pcap.out | 38 +- tests/result/vnc.pcap.out | 4 +- tests/result/waze.pcap.out | 46 +- tests/result/webex.pcap.out | 78 +-- tests/result/wechat.pcap.out | 144 ++--- tests/result/weibo.pcap.out | 48 +- tests/result/whatsapp_login_call.pcap.out | 38 +- tests/result/whatsapp_login_chat.pcap.out | 16 +- .../whatsapp_voice_and_message.pcap.out | 10 +- tests/result/whatsappfiles.pcap.out | 4 +- tests/result/youtube_quic.pcap.out | 6 +- tests/result/youtubeupload.pcap.out | 6 +- 63 files changed, 1258 insertions(+), 1258 deletions(-) diff --git a/tests/result/1kxun.pcap.out b/tests/result/1kxun.pcap.out index efbc2dba9fc..260e8c48534 100644 --- a/tests/result/1kxun.pcap.out +++ b/tests/result/1kxun.pcap.out @@ -16,121 +16,121 @@ Google 3 176 1 LLMNR 89 6799 47 1kxun 433 311919 14 - 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7.29/HTTP.SMTPS][cat: Email][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] - 2 TCP 192.168.115.8:49600 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][18 pkts/1722 bytes <-> 51 pkts/61707 bytes][Host: pic.1kxun.com] - 3 TCP 192.168.115.8:49601 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][18 pkts/2440 bytes <-> 43 pkts/49237 bytes][Host: pic.1kxun.com] - 4 TCP 192.168.115.8:49602 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][24 pkts/2786 bytes <-> 41 pkts/46203 bytes][Host: pic.1kxun.com] - 5 TCP 192.168.115.8:49604 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][20 pkts/2564 bytes <-> 38 pkts/43013 bytes][Host: pic.1kxun.com] - 6 TCP 192.168.115.8:49606 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][22 pkts/1926 bytes <-> 28 pkts/33821 bytes][Host: jp.kankan.1kxun.mobi] - 7 TCP 192.168.115.8:49599 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][16 pkts/1612 bytes <-> 27 pkts/29579 bytes][Host: pic.1kxun.com] - 8 TCP 192.168.115.8:49603 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][12 pkts/1396 bytes <-> 22 pkts/24184 bytes][Host: pic.1kxun.com] - 9 TCP 192.168.115.8:49609 <-> 42.120.51.152:8080 [proto: 7/HTTP][cat: Web][20 pkts/4716 bytes <-> 13 pkts/7005 bytes][Host: 42.120.51.152] - 10 TCP 192.168.5.16:53627 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web][6 pkts/676 bytes <-> 8 pkts/8822 bytes][Host: dl-obs.official.line.naver.jp] - 11 TCP 192.168.5.16:53628 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web][6 pkts/676 bytes <-> 8 pkts/8482 bytes][Host: dl-obs.official.line.naver.jp] - 12 UDP [fe80::9bd:81dd:2fdc:5750]:1900 -> [ff02::c]:1900 [proto: 12/SSDP][cat: System][16 pkts/8921 bytes -> 0 pkts/0 bytes] - 13 UDP 192.168.5.49:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][16 pkts/8473 bytes -> 0 pkts/0 bytes] + 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7.29/HTTP.SMTPS][cat: Email/3][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] + 2 TCP 192.168.115.8:49600 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][18 pkts/1722 bytes <-> 51 pkts/61707 bytes][Host: pic.1kxun.com] + 3 TCP 192.168.115.8:49601 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][18 pkts/2440 bytes <-> 43 pkts/49237 bytes][Host: pic.1kxun.com] + 4 TCP 192.168.115.8:49602 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][24 pkts/2786 bytes <-> 41 pkts/46203 bytes][Host: pic.1kxun.com] + 5 TCP 192.168.115.8:49604 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][20 pkts/2564 bytes <-> 38 pkts/43013 bytes][Host: pic.1kxun.com] + 6 TCP 192.168.115.8:49606 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][22 pkts/1926 bytes <-> 28 pkts/33821 bytes][Host: jp.kankan.1kxun.mobi] + 7 TCP 192.168.115.8:49599 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][16 pkts/1612 bytes <-> 27 pkts/29579 bytes][Host: pic.1kxun.com] + 8 TCP 192.168.115.8:49603 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][12 pkts/1396 bytes <-> 22 pkts/24184 bytes][Host: pic.1kxun.com] + 9 TCP 192.168.115.8:49609 <-> 42.120.51.152:8080 [proto: 7/HTTP][cat: Web/5][20 pkts/4716 bytes <-> 13 pkts/7005 bytes][Host: 42.120.51.152] + 10 TCP 192.168.5.16:53627 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web/5][6 pkts/676 bytes <-> 8 pkts/8822 bytes][Host: dl-obs.official.line.naver.jp] + 11 TCP 192.168.5.16:53628 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web/5][6 pkts/676 bytes <-> 8 pkts/8482 bytes][Host: dl-obs.official.line.naver.jp] + 12 UDP [fe80::9bd:81dd:2fdc:5750]:1900 -> [ff02::c]:1900 [proto: 12/SSDP][cat: System/18][16 pkts/8921 bytes -> 0 pkts/0 bytes] + 13 UDP 192.168.5.49:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][16 pkts/8473 bytes -> 0 pkts/0 bytes] 14 TCP 119.235.235.84:443 <-> 192.168.5.16:53406 [proto: 91/SSL][13 pkts/6269 bytes <-> 10 pkts/1165 bytes] - 15 TCP 192.168.115.8:49608 <-> 203.205.151.234:80 [proto: 7.48/HTTP.QQ][cat: Chat][18 pkts/3550 bytes <-> 7 pkts/1400 bytes][Host: vv.video.qq.com] - 16 UDP 192.168.119.1:67 -> 255.255.255.255:68 [proto: 18/DHCP][cat: Network][14 pkts/4788 bytes -> 0 pkts/0 bytes] + 15 TCP 192.168.115.8:49608 <-> 203.205.151.234:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][18 pkts/3550 bytes <-> 7 pkts/1400 bytes][Host: vv.video.qq.com] + 16 UDP 192.168.119.1:67 -> 255.255.255.255:68 [proto: 18/DHCP][cat: Network/14][14 pkts/4788 bytes -> 0 pkts/0 bytes] 17 TCP 192.168.5.16:53580 <-> 31.13.87.36:443 [proto: 91.119/SSL.Facebook][4 pkts/2050 bytes <-> 5 pkts/2297 bytes] - 18 TCP 192.168.5.16:53623 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web][11 pkts/1959 bytes <-> 8 pkts/1683 bytes][client: 1] - 19 TCP 192.168.5.16:53625 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web][11 pkts/1955 bytes <-> 8 pkts/1683 bytes][client: 1] - 20 TCP 192.168.5.16:53629 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web][10 pkts/1895 bytes <-> 7 pkts/1623 bytes][client: 1] - 21 TCP 192.168.115.8:49605 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][8 pkts/1128 bytes <-> 5 pkts/2282 bytes][Host: jp.kankan.1kxun.mobi] - 22 TCP 192.168.5.16:53626 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web][11 pkts/1943 bytes <-> 8 pkts/1267 bytes][client: 1] - 23 TCP 192.168.115.8:49597 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][10 pkts/1394 bytes <-> 4 pkts/1464 bytes][Host: jp.kankan.1kxun.mobi] + 18 TCP 192.168.5.16:53623 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1959 bytes <-> 8 pkts/1683 bytes][client: 1] + 19 TCP 192.168.5.16:53625 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1955 bytes <-> 8 pkts/1683 bytes][client: 1] + 20 TCP 192.168.5.16:53629 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][10 pkts/1895 bytes <-> 7 pkts/1623 bytes][client: 1] + 21 TCP 192.168.115.8:49605 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][8 pkts/1128 bytes <-> 5 pkts/2282 bytes][Host: jp.kankan.1kxun.mobi] + 22 TCP 192.168.5.16:53626 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1943 bytes <-> 8 pkts/1267 bytes][client: 1] + 23 TCP 192.168.115.8:49597 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][10 pkts/1394 bytes <-> 4 pkts/1464 bytes][Host: jp.kankan.1kxun.mobi] 24 TCP 31.13.87.1:443 <-> 192.168.5.16:53578 [proto: 91.119/SSL.Facebook][5 pkts/1006 bytes <-> 5 pkts/1487 bytes] - 25 UDP 192.168.5.57:55809 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][14 pkts/2450 bytes -> 0 pkts/0 bytes] - 26 TCP 192.168.115.8:49598 <-> 222.73.254.167:80 [proto: 7.205/HTTP.1kxun][cat: Streaming][10 pkts/1406 bytes <-> 4 pkts/980 bytes][Host: kankan.1kxun.com] - 27 TCP 192.168.115.8:49612 <-> 183.131.48.145:80 [proto: 7/HTTP][cat: Web][10 pkts/1428 bytes <-> 4 pkts/867 bytes][Host: 183.131.48.145] - 28 UDP 192.168.5.44:51389 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][13 pkts/2275 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.3.95:59468 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][12 pkts/2100 bytes -> 0 pkts/0 bytes] - 30 UDP 192.168.5.9:55484 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][12 pkts/2100 bytes -> 0 pkts/0 bytes] - 31 TCP 192.168.5.16:53624 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web][7 pkts/996 bytes <-> 5 pkts/986 bytes][Host: api.magicansoft.com] - 32 UDP 192.168.101.33:55485 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][10 pkts/1750 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.5.49:51704 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][9 pkts/1611 bytes -> 0 pkts/0 bytes] - 34 UDP 192.168.5.50:64674 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][9 pkts/1611 bytes -> 0 pkts/0 bytes] - 35 UDP 192.168.5.37:57325 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][9 pkts/1575 bytes -> 0 pkts/0 bytes] - 36 TCP 192.168.115.8:49607 <-> 218.244.135.170:9099 [proto: 7/HTTP][cat: Web][10 pkts/880 bytes <-> 3 pkts/572 bytes][Host: 218.244.135.170] - 37 UDP 192.168.5.47:60267 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][8 pkts/1432 bytes -> 0 pkts/0 bytes] - 38 UDP 192.168.5.41:55312 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][8 pkts/1400 bytes -> 0 pkts/0 bytes] - 39 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][4 pkts/1368 bytes -> 0 pkts/0 bytes][Host: shen] - 40 UDP 192.168.5.16:68 <-> 192.168.119.1:67 [proto: 18/DHCP][cat: Network][2 pkts/684 bytes <-> 2 pkts/684 bytes][Host: macbook-air] - 41 UDP 192.168.5.48:49701 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][7 pkts/1253 bytes -> 0 pkts/0 bytes] - 42 UDP 192.168.3.236:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][13 pkts/1196 bytes -> 0 pkts/0 bytes] - 43 UDP 192.168.5.45:138 -> 192.168.255.255:138 [proto: 10/NetBIOS][cat: System][3 pkts/648 bytes -> 0 pkts/0 bytes] - 44 UDP 192.168.115.8:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][6 pkts/552 bytes -> 0 pkts/0 bytes] - 45 UDP 192.168.5.67:138 -> 192.168.255.255:138 [proto: 10/NetBIOS][cat: System][2 pkts/549 bytes -> 0 pkts/0 bytes] - 46 UDP [fe80::406:55a8:6453:25dd]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network][5 pkts/490 bytes -> 0 pkts/0 bytes] - 47 UDP [fe80::beee:7bff:fe0c:b3de]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network][4 pkts/392 bytes -> 0 pkts/0 bytes] - 48 UDP 192.168.5.16:63372 <-> 168.95.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/89 bytes <-> 1 pkts/289 bytes][Host: dl-obs.official.line.naver.jp] + 25 UDP 192.168.5.57:55809 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/2450 bytes -> 0 pkts/0 bytes] + 26 TCP 192.168.115.8:49598 <-> 222.73.254.167:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][10 pkts/1406 bytes <-> 4 pkts/980 bytes][Host: kankan.1kxun.com] + 27 TCP 192.168.115.8:49612 <-> 183.131.48.145:80 [proto: 7/HTTP][cat: Web/5][10 pkts/1428 bytes <-> 4 pkts/867 bytes][Host: 183.131.48.145] + 28 UDP 192.168.5.44:51389 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][13 pkts/2275 bytes -> 0 pkts/0 bytes] + 29 UDP 192.168.3.95:59468 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][12 pkts/2100 bytes -> 0 pkts/0 bytes] + 30 UDP 192.168.5.9:55484 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][12 pkts/2100 bytes -> 0 pkts/0 bytes] + 31 TCP 192.168.5.16:53624 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][7 pkts/996 bytes <-> 5 pkts/986 bytes][Host: api.magicansoft.com] + 32 UDP 192.168.101.33:55485 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][10 pkts/1750 bytes -> 0 pkts/0 bytes] + 33 UDP 192.168.5.49:51704 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1611 bytes -> 0 pkts/0 bytes] + 34 UDP 192.168.5.50:64674 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1611 bytes -> 0 pkts/0 bytes] + 35 UDP 192.168.5.37:57325 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] + 36 TCP 192.168.115.8:49607 <-> 218.244.135.170:9099 [proto: 7/HTTP][cat: Web/5][10 pkts/880 bytes <-> 3 pkts/572 bytes][Host: 218.244.135.170] + 37 UDP 192.168.5.47:60267 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][8 pkts/1432 bytes -> 0 pkts/0 bytes] + 38 UDP 192.168.5.41:55312 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][8 pkts/1400 bytes -> 0 pkts/0 bytes] + 39 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][4 pkts/1368 bytes -> 0 pkts/0 bytes][Host: shen] + 40 UDP 192.168.5.16:68 <-> 192.168.119.1:67 [proto: 18/DHCP][cat: Network/14][2 pkts/684 bytes <-> 2 pkts/684 bytes][Host: macbook-air] + 41 UDP 192.168.5.48:49701 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][7 pkts/1253 bytes -> 0 pkts/0 bytes] + 42 UDP 192.168.3.236:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][13 pkts/1196 bytes -> 0 pkts/0 bytes] + 43 UDP 192.168.5.45:138 -> 192.168.255.255:138 [proto: 10/NetBIOS][cat: System/18][3 pkts/648 bytes -> 0 pkts/0 bytes] + 44 UDP 192.168.115.8:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/552 bytes -> 0 pkts/0 bytes] + 45 UDP 192.168.5.67:138 -> 192.168.255.255:138 [proto: 10/NetBIOS][cat: System/18][2 pkts/549 bytes -> 0 pkts/0 bytes] + 46 UDP [fe80::406:55a8:6453:25dd]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][5 pkts/490 bytes -> 0 pkts/0 bytes] + 47 UDP [fe80::beee:7bff:fe0c:b3de]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][4 pkts/392 bytes -> 0 pkts/0 bytes] + 48 UDP 192.168.5.16:63372 <-> 168.95.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/89 bytes <-> 1 pkts/289 bytes][Host: dl-obs.official.line.naver.jp] 49 TCP 192.168.115.8:49596 <-> 203.66.182.87:443 [proto: 91/SSL][4 pkts/220 bytes <-> 2 pkts/132 bytes] - 50 UDP 192.168.5.9:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 51 UDP 192.168.5.41:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 52 UDP 192.168.115.8:60724 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming][2 pkts/146 bytes <-> 1 pkts/137 bytes][Host: pic.1kxun.com] - 53 UDP 192.168.0.104:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][3 pkts/276 bytes -> 0 pkts/0 bytes] - 54 UDP 192.168.115.8:51024 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming][2 pkts/160 bytes <-> 1 pkts/112 bytes][Host: jp.kankan.1kxun.mobi] - 55 UDP 192.168.115.8:54420 <-> 8.8.8.8:53 [proto: 5.48/DNS.QQ][cat: Chat][2 pkts/150 bytes <-> 1 pkts/116 bytes][Host: vv.video.qq.com] - 56 UDP 192.168.115.8:52723 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] - 57 UDP 192.168.115.8:52723 <-> 168.95.1.1:53 [proto: 5.205/DNS.1kxun][cat: Streaming][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] - 58 UDP 192.168.115.8:51458 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][4 pkts/256 bytes -> 0 pkts/0 bytes][Host: wpad] + 50 UDP 192.168.5.9:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 51 UDP 192.168.5.41:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 52 UDP 192.168.115.8:60724 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/146 bytes <-> 1 pkts/137 bytes][Host: pic.1kxun.com] + 53 UDP 192.168.0.104:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][3 pkts/276 bytes -> 0 pkts/0 bytes] + 54 UDP 192.168.115.8:51024 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/160 bytes <-> 1 pkts/112 bytes][Host: jp.kankan.1kxun.mobi] + 55 UDP 192.168.115.8:54420 <-> 8.8.8.8:53 [proto: 5.48/DNS.QQ][cat: Chat/9][2 pkts/150 bytes <-> 1 pkts/116 bytes][Host: vv.video.qq.com] + 56 UDP 192.168.115.8:52723 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] + 57 UDP 192.168.115.8:52723 <-> 168.95.1.1:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] + 58 UDP 192.168.115.8:51458 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][4 pkts/256 bytes -> 0 pkts/0 bytes][Host: wpad] 59 TCP 192.168.5.16:53613 -> 68.233.253.133:80 [proto: 7/HTTP][3 pkts/198 bytes -> 0 pkts/0 bytes] - 60 UDP [fe80::9bd:81dd:2fdc:5750]:61548 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 61 UDP [fe80::9bd:81dd:2fdc:5750]:64568 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 62 UDP 192.168.5.45:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][2 pkts/184 bytes -> 0 pkts/0 bytes] - 63 UDP [fe80::e98f:bae2:19f7:6b0f]:51451 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 64 UDP [fe80::e98f:bae2:19f7:6b0f]:54888 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 65 UDP [fe80::e98f:bae2:19f7:6b0f]:58779 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 66 UDP [fe80::e034:7be:d8f9:6197]:49766 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/182 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 67 UDP [fe80::5d92:62a8:ebde:1319]:49735 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 68 UDP [fe80::5d92:62a8:ebde:1319]:58468 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 60 UDP [fe80::9bd:81dd:2fdc:5750]:61548 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 61 UDP [fe80::9bd:81dd:2fdc:5750]:64568 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 62 UDP 192.168.5.45:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][2 pkts/184 bytes -> 0 pkts/0 bytes] + 63 UDP [fe80::e98f:bae2:19f7:6b0f]:51451 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 64 UDP [fe80::e98f:bae2:19f7:6b0f]:54888 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 65 UDP [fe80::e98f:bae2:19f7:6b0f]:58779 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/184 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 66 UDP [fe80::e034:7be:d8f9:6197]:49766 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/182 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 67 UDP [fe80::5d92:62a8:ebde:1319]:49735 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 68 UDP [fe80::5d92:62a8:ebde:1319]:58468 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] 69 TCP 192.168.115.8:49581 <-> 64.233.189.128:80 [proto: 7.126/HTTP.Google][2 pkts/110 bytes <-> 1 pkts/66 bytes] - 70 UDP [fe80::4568:efbc:40b1:1346]:50194 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 71 UDP [fe80::4568:efbc:40b1:1346]:57148 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 72 UDP [fe80::5d92:62a8:ebde:1319]:61172 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/174 bytes -> 0 pkts/0 bytes][Host: sonusav] - 73 UDP [fe80::5d92:62a8:ebde:1319]:53938 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: isatap] - 74 UDP [fe80::5d92:62a8:ebde:1319]:63659 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: isatap] - 75 UDP [fe80::edf5:240a:c8c0:8312]:53962 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] - 76 UDP [fe80::edf5:240a:c8c0:8312]:61603 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] - 77 UDP 192.168.5.49:61548 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 78 UDP 192.168.5.49:64568 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 79 UDP 192.168.3.95:51451 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 80 UDP 192.168.3.95:54888 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 81 UDP 192.168.3.95:58779 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 82 UDP 192.168.5.50:57143 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 83 UDP 192.168.5.50:62756 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 84 UDP 192.168.5.48:59797 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: kasper-mac] - 85 UDP 192.168.3.236:62069 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 86 UDP 192.168.3.236:65496 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 87 UDP 192.168.5.9:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 88 UDP 192.168.5.9:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 89 UDP 192.168.101.33:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 90 UDP 192.168.101.33:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 91 UDP 192.168.5.37:54506 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] - 92 UDP 192.168.5.37:56366 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] - 93 UDP 192.168.5.41:54470 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 94 UDP 192.168.5.44:58702 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 95 UDP 192.168.5.44:59571 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 96 UDP 192.168.5.57:64428 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] - 97 UDP 192.168.5.57:65150 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] - 98 UDP 192.168.3.236:51714 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] - 99 UDP 192.168.3.236:56043 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] - 100 UDP 192.168.5.47:53962 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: ro_x1c] - 101 UDP 192.168.5.47:61603 -> 224.0.0.252:5355 [proto: 87/RTP][cat: VoIP][2 pkts/132 bytes -> 0 pkts/0 bytes] + 70 UDP [fe80::4568:efbc:40b1:1346]:50194 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 71 UDP [fe80::4568:efbc:40b1:1346]:57148 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 72 UDP [fe80::5d92:62a8:ebde:1319]:61172 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/174 bytes -> 0 pkts/0 bytes][Host: sonusav] + 73 UDP [fe80::5d92:62a8:ebde:1319]:53938 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: isatap] + 74 UDP [fe80::5d92:62a8:ebde:1319]:63659 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: isatap] + 75 UDP [fe80::edf5:240a:c8c0:8312]:53962 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] + 76 UDP [fe80::edf5:240a:c8c0:8312]:61603 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] + 77 UDP 192.168.5.49:61548 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 78 UDP 192.168.5.49:64568 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 79 UDP 192.168.3.95:51451 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 80 UDP 192.168.3.95:54888 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 81 UDP 192.168.3.95:58779 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 82 UDP 192.168.5.50:57143 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 83 UDP 192.168.5.50:62756 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 84 UDP 192.168.5.48:59797 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: kasper-mac] + 85 UDP 192.168.3.236:62069 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 86 UDP 192.168.3.236:65496 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 87 UDP 192.168.5.9:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 88 UDP 192.168.5.9:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 89 UDP 192.168.101.33:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 90 UDP 192.168.101.33:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 91 UDP 192.168.5.37:54506 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] + 92 UDP 192.168.5.37:56366 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] + 93 UDP 192.168.5.41:54470 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 94 UDP 192.168.5.44:58702 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 95 UDP 192.168.5.44:59571 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 96 UDP 192.168.5.57:64428 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] + 97 UDP 192.168.5.57:65150 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] + 98 UDP 192.168.3.236:51714 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] + 99 UDP 192.168.3.236:56043 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] + 100 UDP 192.168.5.47:53962 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: ro_x1c] + 101 UDP 192.168.5.47:61603 -> 224.0.0.252:5355 [proto: 87/RTP][cat: Media/1][2 pkts/132 bytes -> 0 pkts/0 bytes] 102 TCP 192.168.5.16:53605 -> 68.233.253.133:80 [proto: 7/HTTP][2 pkts/126 bytes -> 0 pkts/0 bytes] 103 TCP 192.168.5.16:53622 <-> 192.168.115.75:443 [proto: 91/SSL][1 pkts/60 bytes <-> 1 pkts/60 bytes] - 104 UDP [fe80::f65c:89ff:fe89:e607]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network][1 pkts/98 bytes -> 0 pkts/0 bytes] - 105 UDP 192.168.5.45:59461 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][1 pkts/92 bytes -> 0 pkts/0 bytes] - 106 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System][1 pkts/92 bytes -> 0 pkts/0 bytes] - 107 UDP [fe80::e034:7be:d8f9:6197]:57143 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 108 UDP [fe80::e034:7be:d8f9:6197]:62756 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 109 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9/NTP][cat: System][1 pkts/90 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.5.64:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][1 pkts/82 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.5.50:49766 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 112 UDP 192.168.5.50:50030 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 113 UDP 192.168.5.41:55593 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 114 UDP 192.168.5.44:59062 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 115 UDP 192.168.3.236:59730 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: sonusav] + 104 UDP [fe80::f65c:89ff:fe89:e607]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][1 pkts/98 bytes -> 0 pkts/0 bytes] + 105 UDP 192.168.5.45:59461 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 106 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 107 UDP [fe80::e034:7be:d8f9:6197]:57143 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 108 UDP [fe80::e034:7be:d8f9:6197]:62756 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 109 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] + 110 UDP 192.168.5.64:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/82 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.5.50:49766 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 112 UDP 192.168.5.50:50030 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 113 UDP 192.168.5.41:55593 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 114 UDP 192.168.5.44:59062 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 115 UDP 192.168.3.236:59730 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: sonusav] Undetected flows: diff --git a/tests/result/6in4tunnel.pcap.out b/tests/result/6in4tunnel.pcap.out index baabfcf459e..28b2f571613 100644 --- a/tests/result/6in4tunnel.pcap.out +++ b/tests/result/6in4tunnel.pcap.out @@ -4,13 +4,13 @@ SSL 28 15397 1 ICMPV6 48 7862 3 Facebook 37 14726 3 - 1 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:60205 <-> [2604:a880:1:20::224:b001]:443 [proto: 91/SSL][cat: Web][14 pkts/2312 bytes <-> 14 pkts/13085 bytes][client: mail.tomasu.net][server: mail.tomasu.net] - 2 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:53234 <-> [2a03:2880:1010:6f03:face:b00c::2]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][18 pkts/6894 bytes <-> 15 pkts/7032 bytes][client: www.facebook.com][server: *.facebook.com] - 3 ICMPV6 [2001:470:1f17:13f:3e97:eff:fe73:4dec]:0 <-> [2604:a880:1:20::224:b001]:0 [proto: 102/ICMPV6][cat: Network][23 pkts/3174 bytes <-> 23 pkts/3174 bytes] - 4 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:41538 <-> [2604:a880:1:20::224:b001]:80 [proto: 7/HTTP][cat: Web][6 pkts/786 bytes <-> 4 pkts/1006 bytes][Host: mail.tomasu.net] - 5 ICMPV6 [2a03:2880:1010:6f03:face:b00c::2]:0 -> [2001:470:1f17:13f:3e97:eff:fe73:4dec]:0 [proto: 102/ICMPV6][cat: Network][1 pkts/1314 bytes -> 0 pkts/0 bytes] - 6 UDP [2001:470:1f16:13f::2]:53959 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/133 bytes <-> 1 pkts/273 bytes][Host: star.c10r.facebook.com] - 7 UDP [2001:470:1f16:13f::2]:6404 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/133 bytes <-> 1 pkts/261 bytes][Host: star.c10r.facebook.com] + 1 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:60205 <-> [2604:a880:1:20::224:b001]:443 [proto: 91/SSL][cat: Web/5][14 pkts/2312 bytes <-> 14 pkts/13085 bytes][client: mail.tomasu.net][server: mail.tomasu.net] + 2 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:53234 <-> [2a03:2880:1010:6f03:face:b00c::2]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][18 pkts/6894 bytes <-> 15 pkts/7032 bytes][client: www.facebook.com][server: *.facebook.com] + 3 ICMPV6 [2001:470:1f17:13f:3e97:eff:fe73:4dec]:0 <-> [2604:a880:1:20::224:b001]:0 [proto: 102/ICMPV6][cat: Network/14][23 pkts/3174 bytes <-> 23 pkts/3174 bytes] + 4 TCP [2001:470:1f17:13f:3e97:eff:fe73:4dec]:41538 <-> [2604:a880:1:20::224:b001]:80 [proto: 7/HTTP][cat: Web/5][6 pkts/786 bytes <-> 4 pkts/1006 bytes][Host: mail.tomasu.net] + 5 ICMPV6 [2a03:2880:1010:6f03:face:b00c::2]:0 -> [2001:470:1f17:13f:3e97:eff:fe73:4dec]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/1314 bytes -> 0 pkts/0 bytes] + 6 UDP [2001:470:1f16:13f::2]:53959 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/133 bytes <-> 1 pkts/273 bytes][Host: star.c10r.facebook.com] + 7 UDP [2001:470:1f16:13f::2]:6404 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/133 bytes <-> 1 pkts/261 bytes][Host: star.c10r.facebook.com] 8 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:35610 [proto: 51/IMAPS][1 pkts/152 bytes <-> 1 pkts/106 bytes] 9 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:56381 [proto: 51/IMAPS][1 pkts/152 bytes <-> 1 pkts/106 bytes] - 10 ICMPV6 [2001:470:1f16:13f::2]:0 -> [2604:a880:1:20::224:b001]:0 [proto: 102/ICMPV6][cat: Network][1 pkts/200 bytes -> 0 pkts/0 bytes] + 10 ICMPV6 [2001:470:1f16:13f::2]:0 -> [2604:a880:1:20::224:b001]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/200 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/BGP_Cisco_hdlc_slarp.pcap.out b/tests/result/BGP_Cisco_hdlc_slarp.pcap.out index 6b5d0138574..66a5d416a96 100644 --- a/tests/result/BGP_Cisco_hdlc_slarp.pcap.out +++ b/tests/result/BGP_Cisco_hdlc_slarp.pcap.out @@ -1,3 +1,3 @@ BGP 14 969 1 - 1 TCP 100.16.1.2:18324 <-> 100.16.1.1:179 [proto: 13/BGP][cat: Network][7 pkts/388 bytes <-> 7 pkts/581 bytes] + 1 TCP 100.16.1.2:18324 <-> 100.16.1.1:179 [proto: 13/BGP][cat: Network/14][7 pkts/388 bytes <-> 7 pkts/581 bytes] diff --git a/tests/result/BGP_redist.pcap.out b/tests/result/BGP_redist.pcap.out index 9946be111e2..dddd859476c 100644 --- a/tests/result/BGP_redist.pcap.out +++ b/tests/result/BGP_redist.pcap.out @@ -1,4 +1,4 @@ BGP 2 322 2 - 1 TCP 2.2.2.2:179 -> 4.4.4.4:63535 [proto: 13/BGP][cat: Network][1 pkts/163 bytes -> 0 pkts/0 bytes] - 2 TCP 2.2.2.2:179 -> 5.5.5.5:49433 [proto: 13/BGP][cat: Network][1 pkts/159 bytes -> 0 pkts/0 bytes] + 1 TCP 2.2.2.2:179 -> 4.4.4.4:63535 [proto: 13/BGP][cat: Network/14][1 pkts/163 bytes -> 0 pkts/0 bytes] + 2 TCP 2.2.2.2:179 -> 5.5.5.5:49433 [proto: 13/BGP][cat: Network/14][1 pkts/159 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/EAQ.pcap.out b/tests/result/EAQ.pcap.out index f7c45acf79e..673f8309d43 100644 --- a/tests/result/EAQ.pcap.out +++ b/tests/result/EAQ.pcap.out @@ -1,8 +1,8 @@ Google 23 11743 2 EAQ 174 10092 29 - 1 TCP 10.8.0.1:40467 <-> 173.194.119.24:80 [proto: 7.126/HTTP.Google][cat: Web][8 pkts/591 bytes <-> 6 pkts/9998 bytes][Host: www.google.com.br] - 2 TCP 10.8.0.1:53497 <-> 173.194.119.48:80 [proto: 7.126/HTTP.Google][cat: Web][5 pkts/390 bytes <-> 4 pkts/764 bytes][Host: www.google.com] + 1 TCP 10.8.0.1:40467 <-> 173.194.119.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][8 pkts/591 bytes <-> 6 pkts/9998 bytes][Host: www.google.com.br] + 2 TCP 10.8.0.1:53497 <-> 173.194.119.48:80 [proto: 7.126/HTTP.Google][cat: Web/5][5 pkts/390 bytes <-> 4 pkts/764 bytes][Host: www.google.com] 3 UDP 10.8.0.1:39185 <-> 200.194.132.67:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] 4 UDP 10.8.0.1:42620 <-> 200.194.148.66:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] 5 UDP 10.8.0.1:43641 <-> 200.194.148.68:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] diff --git a/tests/result/Instagram.pcap.out b/tests/result/Instagram.pcap.out index f07db1c29a6..416c11dca90 100644 --- a/tests/result/Instagram.pcap.out +++ b/tests/result/Instagram.pcap.out @@ -7,36 +7,36 @@ Dropbox 5 725 2 Instagram 363 255094 16 1 TCP 31.13.86.52:80 <-> 192.168.0.103:58216 [proto: 7.119/HTTP.Facebook][103 pkts/150456 bytes <-> 47 pkts/3102 bytes] - 2 TCP 192.168.0.103:38816 <-> 46.33.70.160:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][13 pkts/1118 bytes <-> 39 pkts/57876 bytes][Host: photos-h.ak.instagram.com] - 3 TCP 192.168.0.103:58052 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][37 pkts/2702 bytes <-> 38 pkts/54537 bytes][Host: photos-g.ak.instagram.com] - 4 TCP 192.168.0.103:44379 <-> 82.85.26.186:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][41 pkts/3392 bytes <-> 40 pkts/50024 bytes][Host: photos-e.ak.instagram.com] - 5 TCP 192.168.0.103:57936 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][24 pkts/1837 bytes <-> 34 pkts/48383 bytes][Host: photos-g.ak.instagram.com] + 2 TCP 192.168.0.103:38816 <-> 46.33.70.160:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][13 pkts/1118 bytes <-> 39 pkts/57876 bytes][Host: photos-h.ak.instagram.com] + 3 TCP 192.168.0.103:58052 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][37 pkts/2702 bytes <-> 38 pkts/54537 bytes][Host: photos-g.ak.instagram.com] + 4 TCP 192.168.0.103:44379 <-> 82.85.26.186:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][41 pkts/3392 bytes <-> 40 pkts/50024 bytes][Host: photos-e.ak.instagram.com] + 5 TCP 192.168.0.103:57936 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][24 pkts/1837 bytes <-> 34 pkts/48383 bytes][Host: photos-g.ak.instagram.com] 6 TCP 192.168.0.103:33936 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][34 pkts/5555 bytes <-> 34 pkts/40133 bytes] 7 TCP 2.22.236.51:80 <-> 192.168.0.103:44151 [proto: 7/HTTP][25 pkts/37100 bytes <-> 24 pkts/1584 bytes] 8 TCP 192.168.0.103:33976 <-> 77.67.29.17:80 [proto: 7/HTTP][14 pkts/924 bytes <-> 20 pkts/28115 bytes] 9 TCP 92.122.48.138:80 <-> 192.168.0.103:41562 [proto: 7/HTTP][16 pkts/22931 bytes <-> 9 pkts/594 bytes] - 10 TCP 192.168.0.103:60908 <-> 46.33.70.136:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork][10 pkts/1369 bytes <-> 9 pkts/7971 bytes][client: igcdn-photos-g-a.akamaihd.net][server: a248.e.akamai.net] - 11 TCP 192.168.0.103:44558 <-> 46.33.70.174:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork][10 pkts/1545 bytes <-> 7 pkts/4824 bytes][client: igcdn-photos-h-a.akamaihd.net][server: a248.e.akamai.net] + 10 TCP 192.168.0.103:60908 <-> 46.33.70.136:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][10 pkts/1369 bytes <-> 9 pkts/7971 bytes][client: igcdn-photos-g-a.akamaihd.net][server: a248.e.akamai.net] + 11 TCP 192.168.0.103:44558 <-> 46.33.70.174:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][10 pkts/1545 bytes <-> 7 pkts/4824 bytes][client: igcdn-photos-h-a.akamaihd.net][server: a248.e.akamai.net] 12 TCP 31.13.93.52:443 <-> 192.168.0.103:33934 [proto: 91.119/SSL.Facebook][6 pkts/4699 bytes <-> 6 pkts/1345 bytes] - 13 TCP 192.168.0.103:41181 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] - 14 TCP 192.168.0.103:41182 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] + 13 TCP 192.168.0.103:41181 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] + 14 TCP 192.168.0.103:41182 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] 15 TCP 192.168.0.103:33763 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][5 pkts/1279 bytes <-> 6 pkts/4118 bytes] 16 TCP 192.168.0.103:33935 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][5 pkts/1279 bytes <-> 5 pkts/4020 bytes] - 17 TCP 192.168.0.103:57965 <-> 82.85.26.185:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][4 pkts/559 bytes <-> 3 pkts/3456 bytes][Host: photos-f.ak.instagram.com] - 18 TCP 192.168.0.103:56382 <-> 173.252.107.4:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork][9 pkts/1583 bytes <-> 8 pkts/1064 bytes][client: telegraph-ash.instagram.com] - 19 UDP 192.168.0.106:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][4 pkts/580 bytes -> 0 pkts/0 bytes] - 20 ICMP 192.168.0.103:0 -> 192.168.0.103:0 [proto: 81/ICMP][cat: Network][5 pkts/510 bytes -> 0 pkts/0 bytes] - 21 UDP 192.168.0.103:51219 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork][1 pkts/89 bytes <-> 1 pkts/305 bytes][Host: igcdn-photos-h-a.akamaihd.net] - 22 TCP 192.168.0.103:37350 -> 82.85.26.153:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][1 pkts/324 bytes -> 0 pkts/0 bytes][Host: photos-a.ak.instagram.com] - 23 TCP 192.168.0.103:58053 -> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork][1 pkts/321 bytes -> 0 pkts/0 bytes][Host: photos-g.ak.instagram.com] - 24 UDP 192.168.0.103:26540 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-g-a.akamaihd.net] - 25 UDP 192.168.0.103:33603 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-a-a.akamaihd.net] + 17 TCP 192.168.0.103:57965 <-> 82.85.26.185:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][4 pkts/559 bytes <-> 3 pkts/3456 bytes][Host: photos-f.ak.instagram.com] + 18 TCP 192.168.0.103:56382 <-> 173.252.107.4:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][9 pkts/1583 bytes <-> 8 pkts/1064 bytes][client: telegraph-ash.instagram.com] + 19 UDP 192.168.0.106:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/580 bytes -> 0 pkts/0 bytes] + 20 ICMP 192.168.0.103:0 -> 192.168.0.103:0 [proto: 81/ICMP][cat: Network/14][5 pkts/510 bytes -> 0 pkts/0 bytes] + 21 UDP 192.168.0.103:51219 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/89 bytes <-> 1 pkts/305 bytes][Host: igcdn-photos-h-a.akamaihd.net] + 22 TCP 192.168.0.103:37350 -> 82.85.26.153:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][1 pkts/324 bytes -> 0 pkts/0 bytes][Host: photos-a.ak.instagram.com] + 23 TCP 192.168.0.103:58053 -> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][1 pkts/321 bytes -> 0 pkts/0 bytes][Host: photos-g.ak.instagram.com] + 24 UDP 192.168.0.103:26540 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-g-a.akamaihd.net] + 25 UDP 192.168.0.103:33603 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-a-a.akamaihd.net] 26 TCP 192.168.0.103:38817 <-> 46.33.70.160:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] 27 TCP 192.168.0.103:57966 <-> 82.85.26.185:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] 28 TCP 192.168.0.103:58690 -> 46.33.70.159:443 [proto: 91/SSL][2 pkts/169 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.0.106:17500 -> 192.168.0.255:17500 [proto: 121/Dropbox][cat: Cloud][1 pkts/145 bytes -> 0 pkts/0 bytes] + 29 UDP 192.168.0.106:17500 -> 192.168.0.255:17500 [proto: 121/Dropbox][cat: Cloud/13][1 pkts/145 bytes -> 0 pkts/0 bytes] 30 TCP 46.33.70.150:80 <-> 192.168.0.103:40855 [proto: 7/HTTP][1 pkts/74 bytes <-> 1 pkts/66 bytes] - 31 UDP 192.168.0.103:27124 -> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork][1 pkts/85 bytes -> 0 pkts/0 bytes][Host: photos-b.ak.instagram.com] + 31 UDP 192.168.0.103:27124 -> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/85 bytes -> 0 pkts/0 bytes][Host: photos-b.ak.instagram.com] Undetected flows: diff --git a/tests/result/KakaoTalk_chat.pcap.out b/tests/result/KakaoTalk_chat.pcap.out index c4cc5a15477..4753451223d 100644 --- a/tests/result/KakaoTalk_chat.pcap.out +++ b/tests/result/KakaoTalk_chat.pcap.out @@ -8,41 +8,41 @@ HTTP_Proxy 26 3926 1 Amazon 2 181 1 KakaoTalk 55 9990 15 - 1 TCP 10.24.82.188:43581 <-> 31.13.68.70:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][17 pkts/3461 bytes <-> 17 pkts/6194 bytes][client: graph.facebook.com][server: *.facebook.com] - 2 TCP 10.24.82.188:45211 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][14 pkts/2575 bytes <-> 15 pkts/6502 bytes][client: developers.facebook.com][server: *.facebook.com] - 3 TCP 10.24.82.188:45209 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][10 pkts/2584 bytes <-> 9 pkts/5123 bytes][client: api.facebook.com][server: *.facebook.com] - 4 TCP 10.24.82.188:35503 <-> 173.252.97.2:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][20 pkts/2849 bytes <-> 18 pkts/4742 bytes][server: *.facebook.com] - 5 TCP 10.24.82.188:45213 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][15 pkts/2508 bytes <-> 13 pkts/5053 bytes][server: *.facebook.com] - 6 TCP 10.24.82.188:35511 <-> 173.252.97.2:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][18 pkts/2390 bytes <-> 18 pkts/4762 bytes][server: *.facebook.com] - 7 TCP 10.24.82.188:37821 <-> 210.103.240.15:443 [proto: 91.193/SSL.KakaoTalk][cat: VoIP][13 pkts/2036 bytes <-> 14 pkts/5090 bytes][server: *.kakao.com] + 1 TCP 10.24.82.188:43581 <-> 31.13.68.70:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][17 pkts/3461 bytes <-> 17 pkts/6194 bytes][client: graph.facebook.com][server: *.facebook.com] + 2 TCP 10.24.82.188:45211 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][14 pkts/2575 bytes <-> 15 pkts/6502 bytes][client: developers.facebook.com][server: *.facebook.com] + 3 TCP 10.24.82.188:45209 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][10 pkts/2584 bytes <-> 9 pkts/5123 bytes][client: api.facebook.com][server: *.facebook.com] + 4 TCP 10.24.82.188:35503 <-> 173.252.97.2:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][20 pkts/2849 bytes <-> 18 pkts/4742 bytes][server: *.facebook.com] + 5 TCP 10.24.82.188:45213 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][15 pkts/2508 bytes <-> 13 pkts/5053 bytes][server: *.facebook.com] + 6 TCP 10.24.82.188:35511 <-> 173.252.97.2:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][18 pkts/2390 bytes <-> 18 pkts/4762 bytes][server: *.facebook.com] + 7 TCP 10.24.82.188:37821 <-> 210.103.240.15:443 [proto: 91.193/SSL.KakaoTalk][cat: VoIP/10][13 pkts/2036 bytes <-> 14 pkts/5090 bytes][server: *.kakao.com] 8 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][17 pkts/2231 bytes <-> 9 pkts/1695 bytes] 9 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][9 pkts/1737 bytes <-> 9 pkts/672 bytes] - 10 TCP 10.24.82.188:58964 <-> 54.255.253.199:5223 [proto: 91/SSL][cat: Web][3 pkts/290 bytes <-> 3 pkts/1600 bytes][server: *.push.samsungosp.com] - 11 TCP 10.24.82.188:37557 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork][5 pkts/487 bytes <-> 6 pkts/627 bytes][Host: www.facebook.com] - 12 TCP 10.24.82.188:37553 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork][5 pkts/487 bytes <-> 5 pkts/571 bytes][Host: www.facebook.com] + 10 TCP 10.24.82.188:58964 <-> 54.255.253.199:5223 [proto: 91/SSL][cat: Web/5][3 pkts/290 bytes <-> 3 pkts/1600 bytes][server: *.push.samsungosp.com] + 11 TCP 10.24.82.188:37557 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 6 pkts/627 bytes][Host: www.facebook.com] + 12 TCP 10.24.82.188:37553 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 5 pkts/571 bytes][Host: www.facebook.com] 13 TCP 216.58.221.10:80 <-> 10.24.82.188:35922 [proto: 7.126/HTTP.Google][7 pkts/392 bytes <-> 7 pkts/392 bytes] 14 TCP 10.24.82.188:42332 <-> 210.103.240.15:443 [proto: 91/SSL][2 pkts/112 bytes <-> 3 pkts/168 bytes] 15 TCP 31.13.68.73:443 <-> 10.24.82.188:47007 [proto: 91.119/SSL.Facebook][2 pkts/139 bytes <-> 2 pkts/112 bytes] - 16 UDP 10.24.82.188:57816 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/78 bytes <-> 1 pkts/166 bytes][Host: katalk.kakao.com] - 17 UDP 10.24.82.188:4017 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/85 bytes <-> 1 pkts/144 bytes][Host: developers.facebook.com] - 18 UDP 10.24.82.188:19582 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/80 bytes <-> 1 pkts/138 bytes][Host: graph.facebook.com] - 19 UDP 10.24.82.188:14650 <-> 10.188.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/87 bytes <-> 1 pkts/130 bytes][Host: 2.97.252.173.in-addr.arpa] - 20 UDP 10.24.82.188:35603 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/79 bytes <-> 1 pkts/136 bytes][Host: ac-talk.kakao.com] - 21 UDP 10.24.82.188:41909 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/84 bytes <-> 1 pkts/130 bytes][Host: booking.loco.kakao.com] - 22 UDP 10.24.82.188:25117 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/126 bytes][Host: up-gp.talk.kakao.com] - 23 UDP 10.24.82.188:5929 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-p.talk.kakao.com] - 24 UDP 10.24.82.188:9094 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-v.talk.kakao.com] - 25 UDP 10.24.82.188:12908 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-m.talk.kakao.com] - 26 UDP 10.24.82.188:29029 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-a.talk.kakao.com] - 27 UDP 10.24.82.188:56820 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-c.talk.kakao.com] - 28 UDP 10.24.82.188:61011 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/119 bytes][Host: plus-talk.kakao.com] - 29 UDP 10.24.82.188:61011 <-> 10.188.191.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/119 bytes][Host: plus-talk.kakao.com] - 30 UDP 10.24.82.188:24596 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/78 bytes <-> 1 pkts/118 bytes][Host: api.facebook.com] - 31 UDP 10.24.82.188:38448 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: auth.kakao.com] - 32 UDP 10.24.82.188:58810 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: item.kakao.com] + 16 UDP 10.24.82.188:57816 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/78 bytes <-> 1 pkts/166 bytes][Host: katalk.kakao.com] + 17 UDP 10.24.82.188:4017 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/85 bytes <-> 1 pkts/144 bytes][Host: developers.facebook.com] + 18 UDP 10.24.82.188:19582 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/80 bytes <-> 1 pkts/138 bytes][Host: graph.facebook.com] + 19 UDP 10.24.82.188:14650 <-> 10.188.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/87 bytes <-> 1 pkts/130 bytes][Host: 2.97.252.173.in-addr.arpa] + 20 UDP 10.24.82.188:35603 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/79 bytes <-> 1 pkts/136 bytes][Host: ac-talk.kakao.com] + 21 UDP 10.24.82.188:41909 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/84 bytes <-> 1 pkts/130 bytes][Host: booking.loco.kakao.com] + 22 UDP 10.24.82.188:25117 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/126 bytes][Host: up-gp.talk.kakao.com] + 23 UDP 10.24.82.188:5929 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-p.talk.kakao.com] + 24 UDP 10.24.82.188:9094 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-v.talk.kakao.com] + 25 UDP 10.24.82.188:12908 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-m.talk.kakao.com] + 26 UDP 10.24.82.188:29029 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-a.talk.kakao.com] + 27 UDP 10.24.82.188:56820 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/124 bytes][Host: up-c.talk.kakao.com] + 28 UDP 10.24.82.188:61011 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/119 bytes][Host: plus-talk.kakao.com] + 29 UDP 10.24.82.188:61011 <-> 10.188.191.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/119 bytes][Host: plus-talk.kakao.com] + 30 UDP 10.24.82.188:24596 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/118 bytes][Host: api.facebook.com] + 31 UDP 10.24.82.188:38448 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: auth.kakao.com] + 32 UDP 10.24.82.188:58810 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: item.kakao.com] 33 TCP 10.24.82.188:58927 -> 54.255.253.199:5223 [proto: 178/Amazon][2 pkts/181 bytes -> 0 pkts/0 bytes] - 34 UDP 10.24.82.188:43077 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP][1 pkts/81 bytes <-> 1 pkts/97 bytes][Host: dn-l.talk.kakao.com] + 34 UDP 10.24.82.188:43077 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/97 bytes][Host: dn-l.talk.kakao.com] 35 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][1 pkts/164 bytes -> 0 pkts/0 bytes] - 36 ICMP 10.24.82.188:0 -> 10.188.191.1:0 [proto: 81/ICMP][cat: Network][1 pkts/147 bytes -> 0 pkts/0 bytes] + 36 ICMP 10.24.82.188:0 -> 10.188.191.1:0 [proto: 81/ICMP][cat: Network/14][1 pkts/147 bytes -> 0 pkts/0 bytes] 37 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][1 pkts/83 bytes -> 0 pkts/0 bytes] 38 TCP 120.28.26.242:80 -> 10.24.82.188:34503 [proto: 7/HTTP][1 pkts/56 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/KakaoTalk_talk.pcap.out b/tests/result/KakaoTalk_talk.pcap.out index e09fb3eb636..02be4742879 100644 --- a/tests/result/KakaoTalk_talk.pcap.out +++ b/tests/result/KakaoTalk_talk.pcap.out @@ -10,20 +10,20 @@ Tor 40 10538 1 Amazon 4 396 1 KakaoTalk_Voice 44 6196 2 - 1 UDP 10.24.82.188:11320 <-> 1.201.1.174:23044 [proto: 87/RTP][cat: VoIP][757 pkts/106335 bytes <-> 746 pkts/93906 bytes] - 2 UDP 10.24.82.188:10268 <-> 1.201.1.174:23046 [proto: 87/RTP][cat: VoIP][746 pkts/93906 bytes <-> 742 pkts/104604 bytes] - 3 TCP 10.24.82.188:58857 <-> 110.76.143.50:9001 [proto: 163/Tor][cat: VPN][22 pkts/5326 bytes <-> 18 pkts/5212 bytes] - 4 TCP 10.24.82.188:32968 <-> 110.76.143.50:8080 [proto: 64/SSL_No_Cert][cat: Web][23 pkts/4380 bytes <-> 22 pkts/5728 bytes] - 5 TCP 10.24.82.188:59954 <-> 173.252.88.128:443 [proto: 64/SSL_No_Cert][cat: Web][15 pkts/2932 bytes <-> 14 pkts/1092 bytes] - 6 UDP 10.24.82.188:10269 <-> 1.201.1.174:23047 [proto: 194/KakaoTalk_Voice][cat: VoIP][12 pkts/1692 bytes <-> 10 pkts/1420 bytes] - 7 UDP 10.24.82.188:11321 <-> 1.201.1.174:23045 [proto: 194/KakaoTalk_Voice][cat: VoIP][11 pkts/1542 bytes <-> 11 pkts/1542 bytes] - 8 TCP 10.24.82.188:48489 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat][8 pkts/1117 bytes <-> 7 pkts/610 bytes][Host: hkminorshort.weixin.qq.com] + 1 UDP 10.24.82.188:11320 <-> 1.201.1.174:23044 [proto: 87/RTP][cat: Media/1][757 pkts/106335 bytes <-> 746 pkts/93906 bytes] + 2 UDP 10.24.82.188:10268 <-> 1.201.1.174:23046 [proto: 87/RTP][cat: Media/1][746 pkts/93906 bytes <-> 742 pkts/104604 bytes] + 3 TCP 10.24.82.188:58857 <-> 110.76.143.50:9001 [proto: 163/Tor][cat: VPN/2][22 pkts/5326 bytes <-> 18 pkts/5212 bytes] + 4 TCP 10.24.82.188:32968 <-> 110.76.143.50:8080 [proto: 64/SSL_No_Cert][cat: Web/5][23 pkts/4380 bytes <-> 22 pkts/5728 bytes] + 5 TCP 10.24.82.188:59954 <-> 173.252.88.128:443 [proto: 64/SSL_No_Cert][cat: Web/5][15 pkts/2932 bytes <-> 14 pkts/1092 bytes] + 6 UDP 10.24.82.188:10269 <-> 1.201.1.174:23047 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][12 pkts/1692 bytes <-> 10 pkts/1420 bytes] + 7 UDP 10.24.82.188:11321 <-> 1.201.1.174:23045 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][11 pkts/1542 bytes <-> 11 pkts/1542 bytes] + 8 TCP 10.24.82.188:48489 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][8 pkts/1117 bytes <-> 7 pkts/610 bytes][Host: hkminorshort.weixin.qq.com] 9 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][6 pkts/543 bytes <-> 5 pkts/945 bytes] 10 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][3 pkts/1044 bytes <-> 2 pkts/154 bytes] 11 TCP 10.24.82.188:58916 <-> 54.255.185.236:5222 [proto: 178/Amazon][2 pkts/225 bytes <-> 2 pkts/171 bytes] 12 TCP 10.24.82.188:53974 -> 203.205.151.233:8080 [proto: 131/HTTP_Proxy][5 pkts/350 bytes -> 0 pkts/0 bytes] 13 TCP 120.28.26.242:80 <-> 10.24.82.188:34533 [proto: 7/HTTP][3 pkts/168 bytes <-> 2 pkts/112 bytes] - 14 UDP 10.24.82.188:25223 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/79 bytes <-> 1 pkts/118 bytes][Host: mqtt.facebook.com] + 14 UDP 10.24.82.188:25223 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/79 bytes <-> 1 pkts/118 bytes][Host: mqtt.facebook.com] 15 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][1 pkts/164 bytes -> 0 pkts/0 bytes] 16 TCP 173.252.88.128:443 -> 10.24.82.188:59912 [proto: 91.119/SSL.Facebook][2 pkts/124 bytes -> 0 pkts/0 bytes] 17 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][1 pkts/83 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/NTPv2.pcap.out b/tests/result/NTPv2.pcap.out index f66ce1f4357..a6038a7387b 100644 --- a/tests/result/NTPv2.pcap.out +++ b/tests/result/NTPv2.pcap.out @@ -1,3 +1,3 @@ NTP 1 410 1 - 1 UDP 208.104.95.10:123 -> 78.46.76.2:80 [proto: 9/NTP][cat: System][1 pkts/410 bytes -> 0 pkts/0 bytes] + 1 UDP 208.104.95.10:123 -> 78.46.76.2:80 [proto: 9/NTP][cat: System/18][1 pkts/410 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/NTPv3.pcap.out b/tests/result/NTPv3.pcap.out index bb8c1a32e15..c0ef682432e 100644 --- a/tests/result/NTPv3.pcap.out +++ b/tests/result/NTPv3.pcap.out @@ -1,3 +1,3 @@ NTP 1 90 1 - 1 UDP 175.144.140.29:123 -> 78.46.76.2:80 [proto: 9/NTP][cat: System][1 pkts/90 bytes -> 0 pkts/0 bytes] + 1 UDP 175.144.140.29:123 -> 78.46.76.2:80 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/NTPv4.pcap.out b/tests/result/NTPv4.pcap.out index 43609d77475..606c4787d87 100644 --- a/tests/result/NTPv4.pcap.out +++ b/tests/result/NTPv4.pcap.out @@ -1,3 +1,3 @@ NTP 1 90 1 - 1 UDP 85.22.62.120:123 -> 78.46.76.11:123 [proto: 9/NTP][cat: System][1 pkts/90 bytes -> 0 pkts/0 bytes] + 1 UDP 85.22.62.120:123 -> 78.46.76.11:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/Oscar.pcap.out b/tests/result/Oscar.pcap.out index e7166d465b3..18053c8872c 100644 --- a/tests/result/Oscar.pcap.out +++ b/tests/result/Oscar.pcap.out @@ -1,3 +1,3 @@ Oscar 71 9386 1 - 1 TCP 10.30.29.3:63357 <-> 178.237.24.249:443 [proto: 69/Oscar][cat: Chat][38 pkts/3580 bytes <-> 33 pkts/5806 bytes] + 1 TCP 10.30.29.3:63357 <-> 178.237.24.249:443 [proto: 69/Oscar][cat: Chat/9][38 pkts/3580 bytes <-> 33 pkts/5806 bytes] diff --git a/tests/result/ajp.pcap.out b/tests/result/ajp.pcap.out index ceac2573138..dcb4fa5009c 100644 --- a/tests/result/ajp.pcap.out +++ b/tests/result/ajp.pcap.out @@ -1,8 +1,8 @@ Unknown 6 2200 2 AJP 26 4446 2 - 1 TCP 172.29.9.146:38856 <-> 172.29.9.147:8009 [VLAN: 7][proto: 139/AJP][cat: Web][7 pkts/1554 bytes <-> 6 pkts/669 bytes] - 2 TCP 172.29.9.146:38856 <-> 172.29.9.147:8010 [VLAN: 7][proto: 139/AJP][cat: Web][7 pkts/1554 bytes <-> 6 pkts/669 bytes] + 1 TCP 172.29.9.146:38856 <-> 172.29.9.147:8009 [VLAN: 7][proto: 139/AJP][cat: Web/5][7 pkts/1554 bytes <-> 6 pkts/669 bytes] + 2 TCP 172.29.9.146:38856 <-> 172.29.9.147:8010 [VLAN: 7][proto: 139/AJP][cat: Web/5][7 pkts/1554 bytes <-> 6 pkts/669 bytes] Undetected flows: diff --git a/tests/result/amqp.pcap.out b/tests/result/amqp.pcap.out index 21aaa55e717..ac54b0e258b 100644 --- a/tests/result/amqp.pcap.out +++ b/tests/result/amqp.pcap.out @@ -1,5 +1,5 @@ AMQP 160 23514 3 - 1 TCP 127.0.0.1:44205 <-> 127.0.1.1:5672 [proto: 192/AMQP][cat: RPC][54 pkts/10859 bytes <-> 54 pkts/3564 bytes] - 2 TCP 127.0.1.1:5672 <-> 127.0.0.1:44204 [proto: 192/AMQP][cat: RPC][13 pkts/4327 bytes <-> 9 pkts/699 bytes] - 3 TCP 127.0.0.1:44206 <-> 127.0.1.1:5672 [proto: 192/AMQP][cat: RPC][15 pkts/3075 bytes <-> 15 pkts/990 bytes] + 1 TCP 127.0.0.1:44205 <-> 127.0.1.1:5672 [proto: 192/AMQP][cat: RPC/16][54 pkts/10859 bytes <-> 54 pkts/3564 bytes] + 2 TCP 127.0.1.1:5672 <-> 127.0.0.1:44204 [proto: 192/AMQP][cat: RPC/16][13 pkts/4327 bytes <-> 9 pkts/699 bytes] + 3 TCP 127.0.0.1:44206 <-> 127.0.1.1:5672 [proto: 192/AMQP][cat: RPC/16][15 pkts/3075 bytes <-> 15 pkts/990 bytes] diff --git a/tests/result/bittorrent.pcap.out b/tests/result/bittorrent.pcap.out index a4c055bc747..b549e5eabce 100644 --- a/tests/result/bittorrent.pcap.out +++ b/tests/result/bittorrent.pcap.out @@ -1,26 +1,26 @@ BitTorrent 299 305728 24 - 1 TCP 192.168.1.3:52915 <-> 198.100.146.9:60163 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][17 pkts/2745 bytes <-> 193 pkts/282394 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 2 TCP 192.168.1.3:52895 <-> 83.216.184.241:51413 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][4 pkts/583 bytes <-> 4 pkts/975 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 3 TCP 192.168.1.3:52914 <-> 190.103.195.56:46633 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][4 pkts/640 bytes <-> 3 pkts/910 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 4 TCP 192.168.1.3:52907 <-> 82.58.216.115:38305 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][2 pkts/583 bytes <-> 2 pkts/818 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 5 TCP 192.168.1.3:52927 <-> 83.216.184.241:51413 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/582 bytes <-> 2 pkts/796 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 6 TCP 192.168.1.3:52897 <-> 151.26.95.30:22673 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/510 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 7 TCP 192.168.1.3:52903 <-> 198.100.146.9:60163 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/410 bytes <-> 3 pkts/851 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 8 TCP 192.168.1.3:52917 <-> 151.15.48.189:47001 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/455 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 9 TCP 192.168.1.3:52911 <-> 151.26.95.30:22673 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/442 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 10 TCP 192.168.1.3:52921 <-> 95.234.159.16:41205 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/440 bytes <-> 2 pkts/772 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 11 TCP 192.168.1.3:52906 <-> 82.57.97.83:53137 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/434 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 12 TCP 192.168.1.3:52922 <-> 95.237.193.34:11321 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/434 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 13 TCP 192.168.1.3:52887 <-> 82.57.97.83:53137 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/430 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 14 TCP 192.168.1.3:52896 <-> 79.53.228.2:14627 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/409 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 15 TCP 192.168.1.3:52926 <-> 93.65.249.100:31336 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes <-> 2 pkts/796 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 16 TCP 192.168.1.3:52888 <-> 82.58.216.115:38305 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes <-> 1 pkts/624 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 17 TCP 192.168.1.3:52902 <-> 190.103.195.56:46633 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][2 pkts/349 bytes <-> 2 pkts/265 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 18 TCP 192.168.1.3:52912 <-> 151.72.255.163:59928 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][3 pkts/455 bytes <-> 1 pkts/157 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 19 TCP 192.168.1.3:52893 -> 79.55.129.22:12097 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 20 TCP 192.168.1.3:52894 -> 120.62.33.241:39332 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 21 TCP 192.168.1.3:52908 -> 79.55.129.22:12097 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 22 TCP 192.168.1.3:52909 -> 79.53.228.2:14627 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 23 TCP 192.168.1.3:52910 -> 120.62.33.241:39332 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] - 24 TCP 192.168.1.3:52925 -> 93.65.227.100:19116 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 1 TCP 192.168.1.3:52915 <-> 198.100.146.9:60163 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][17 pkts/2745 bytes <-> 193 pkts/282394 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 2 TCP 192.168.1.3:52895 <-> 83.216.184.241:51413 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][4 pkts/583 bytes <-> 4 pkts/975 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 3 TCP 192.168.1.3:52914 <-> 190.103.195.56:46633 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][4 pkts/640 bytes <-> 3 pkts/910 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 4 TCP 192.168.1.3:52907 <-> 82.58.216.115:38305 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][2 pkts/583 bytes <-> 2 pkts/818 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 5 TCP 192.168.1.3:52927 <-> 83.216.184.241:51413 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/582 bytes <-> 2 pkts/796 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 6 TCP 192.168.1.3:52897 <-> 151.26.95.30:22673 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/510 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 7 TCP 192.168.1.3:52903 <-> 198.100.146.9:60163 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/410 bytes <-> 3 pkts/851 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 8 TCP 192.168.1.3:52917 <-> 151.15.48.189:47001 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/455 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 9 TCP 192.168.1.3:52911 <-> 151.26.95.30:22673 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/442 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 10 TCP 192.168.1.3:52921 <-> 95.234.159.16:41205 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/440 bytes <-> 2 pkts/772 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 11 TCP 192.168.1.3:52906 <-> 82.57.97.83:53137 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/434 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 12 TCP 192.168.1.3:52922 <-> 95.237.193.34:11321 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/434 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 13 TCP 192.168.1.3:52887 <-> 82.57.97.83:53137 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/430 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 14 TCP 192.168.1.3:52896 <-> 79.53.228.2:14627 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/409 bytes <-> 2 pkts/771 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 15 TCP 192.168.1.3:52926 <-> 93.65.249.100:31336 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes <-> 2 pkts/796 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 16 TCP 192.168.1.3:52888 <-> 82.58.216.115:38305 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes <-> 1 pkts/624 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 17 TCP 192.168.1.3:52902 <-> 190.103.195.56:46633 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][2 pkts/349 bytes <-> 2 pkts/265 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 18 TCP 192.168.1.3:52912 <-> 151.72.255.163:59928 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][3 pkts/455 bytes <-> 1 pkts/157 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 19 TCP 192.168.1.3:52893 -> 79.55.129.22:12097 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 20 TCP 192.168.1.3:52894 -> 120.62.33.241:39332 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 21 TCP 192.168.1.3:52908 -> 79.55.129.22:12097 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 22 TCP 192.168.1.3:52909 -> 79.53.228.2:14627 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 23 TCP 192.168.1.3:52910 -> 120.62.33.241:39332 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] + 24 TCP 192.168.1.3:52925 -> 93.65.227.100:19116 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][1 pkts/134 bytes -> 0 pkts/0 bytes][BT Hash: dcfcdccfb9e670ccc3dd40c78c161f2bea243126] diff --git a/tests/result/bittorrent_utp.pcap.out b/tests/result/bittorrent_utp.pcap.out index 7ac4aab03da..ece7be47fd5 100644 --- a/tests/result/bittorrent_utp.pcap.out +++ b/tests/result/bittorrent_utp.pcap.out @@ -1,3 +1,3 @@ BitTorrent 86 41489 1 - 1 UDP 82.243.113.43:64969 <-> 192.168.1.5:40959 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][47 pkts/36653 bytes <-> 39 pkts/4836 bytes] + 1 UDP 82.243.113.43:64969 <-> 192.168.1.5:40959 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][47 pkts/36653 bytes <-> 39 pkts/4836 bytes] diff --git a/tests/result/bt_search.pcap.out b/tests/result/bt_search.pcap.out index b9223217a40..36c5b049e88 100644 --- a/tests/result/bt_search.pcap.out +++ b/tests/result/bt_search.pcap.out @@ -1,3 +1,3 @@ BitTorrent 2 322 1 - 1 UDP 192.168.0.102:6771 -> 239.192.152.143:6771 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing][2 pkts/322 bytes -> 0 pkts/0 bytes] + 1 UDP 192.168.0.102:6771 -> 239.192.152.143:6771 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][2 pkts/322 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/check_mk_new.pcap.out b/tests/result/check_mk_new.pcap.out index 8c0e21557f9..631a236c27f 100644 --- a/tests/result/check_mk_new.pcap.out +++ b/tests/result/check_mk_new.pcap.out @@ -1,3 +1,3 @@ CHECKMK 98 20242 1 - 1 TCP 192.168.100.22:58998 <-> 192.168.100.50:6556 [proto: 138/CHECKMK][cat: DataTransfer][49 pkts/3242 bytes <-> 49 pkts/17000 bytes] + 1 TCP 192.168.100.22:58998 <-> 192.168.100.50:6556 [proto: 138/CHECKMK][cat: DataTransfer/4][49 pkts/3242 bytes <-> 49 pkts/17000 bytes] diff --git a/tests/result/coap_mqtt.pcap.out b/tests/result/coap_mqtt.pcap.out index d57d6e77acd..20d6762916b 100644 --- a/tests/result/coap_mqtt.pcap.out +++ b/tests/result/coap_mqtt.pcap.out @@ -2,19 +2,19 @@ COAP 19 1614 8 Dropbox 800 80676 4 MQTT 7695 668291 4 - 1 TCP 192.168.56.1:53528 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC][924 pkts/77180 bytes <-> 1004 pkts/90329 bytes] - 2 TCP 192.168.56.1:53523 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC][918 pkts/76692 bytes <-> 1008 pkts/90434 bytes] - 3 TCP 192.168.56.1:53522 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC][921 pkts/76872 bytes <-> 1001 pkts/90056 bytes] - 4 TCP 192.168.56.101:17501 <-> 192.168.56.1:53524 [proto: 222/MQTT][cat: RPC][1005 pkts/90274 bytes <-> 914 pkts/76454 bytes] + 1 TCP 192.168.56.1:53528 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC/16][924 pkts/77180 bytes <-> 1004 pkts/90329 bytes] + 2 TCP 192.168.56.1:53523 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC/16][918 pkts/76692 bytes <-> 1008 pkts/90434 bytes] + 3 TCP 192.168.56.1:53522 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC/16][921 pkts/76872 bytes <-> 1001 pkts/90056 bytes] + 4 TCP 192.168.56.101:17501 <-> 192.168.56.1:53524 [proto: 222/MQTT][cat: RPC/16][1005 pkts/90274 bytes <-> 914 pkts/76454 bytes] 5 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] 6 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] 7 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] 8 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] - 9 UDP [bbbb::1]:46819 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC][3 pkts/262 bytes <-> 3 pkts/205 bytes] - 10 UDP [bbbb::1]:33499 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC][2 pkts/147 bytes <-> 2 pkts/257 bytes] - 11 UDP [bbbb::1]:50250 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC][2 pkts/158 bytes <-> 2 pkts/151 bytes] - 12 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61047 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC][1 pkts/90 bytes -> 0 pkts/0 bytes] - 13 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61043 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC][1 pkts/86 bytes -> 0 pkts/0 bytes] - 14 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61044 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC][1 pkts/86 bytes -> 0 pkts/0 bytes] - 15 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61045 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC][1 pkts/86 bytes -> 0 pkts/0 bytes] - 16 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61046 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC][1 pkts/86 bytes -> 0 pkts/0 bytes] + 9 UDP [bbbb::1]:46819 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][3 pkts/262 bytes <-> 3 pkts/205 bytes] + 10 UDP [bbbb::1]:33499 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][2 pkts/147 bytes <-> 2 pkts/257 bytes] + 11 UDP [bbbb::1]:50250 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][2 pkts/158 bytes <-> 2 pkts/151 bytes] + 12 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61047 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC/16][1 pkts/90 bytes -> 0 pkts/0 bytes] + 13 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61043 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC/16][1 pkts/86 bytes -> 0 pkts/0 bytes] + 14 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61044 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC/16][1 pkts/86 bytes -> 0 pkts/0 bytes] + 15 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61045 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC/16][1 pkts/86 bytes -> 0 pkts/0 bytes] + 16 UDP [2001:da8:215:1171:a10b:cb48:8f83:57f6]:61046 -> [2001:620:8:35d9::10]:5683 [proto: 27/COAP][cat: RPC/16][1 pkts/86 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/dnscrypt.pcap.out b/tests/result/dnscrypt.pcap.out index b70c1f23e22..9ab60cc4ec2 100644 --- a/tests/result/dnscrypt.pcap.out +++ b/tests/result/dnscrypt.pcap.out @@ -1,6 +1,6 @@ DNScrypt 111 44676 4 - 1 TCP 192.168.43.167:50233 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network][18 pkts/1788 bytes <-> 21 pkts/14580 bytes][client: simplednscrypt.org] - 2 TCP 192.168.43.167:50259 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network][18 pkts/1988 bytes <-> 18 pkts/9290 bytes][client: simplednscrypt.org] - 3 TCP 192.168.43.167:50253 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network][8 pkts/780 bytes <-> 10 pkts/7735 bytes][client: simplednscrypt.org] - 4 TCP 192.168.43.167:50258 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network][8 pkts/780 bytes <-> 10 pkts/7735 bytes][client: simplednscrypt.org] + 1 TCP 192.168.43.167:50233 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network/14][18 pkts/1788 bytes <-> 21 pkts/14580 bytes][client: simplednscrypt.org] + 2 TCP 192.168.43.167:50259 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network/14][18 pkts/1988 bytes <-> 18 pkts/9290 bytes][client: simplednscrypt.org] + 3 TCP 192.168.43.167:50253 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network/14][8 pkts/780 bytes <-> 10 pkts/7735 bytes][client: simplednscrypt.org] + 4 TCP 192.168.43.167:50258 <-> 134.119.26.24:443 [proto: 91.208/SSL.DNScrypt][cat: Network/14][8 pkts/780 bytes <-> 10 pkts/7735 bytes][client: simplednscrypt.org] diff --git a/tests/result/drda_db2.pcap.out b/tests/result/drda_db2.pcap.out index e8525a2435e..37d94f77e72 100644 --- a/tests/result/drda_db2.pcap.out +++ b/tests/result/drda_db2.pcap.out @@ -1,3 +1,3 @@ DRDA 38 6691 1 - 1 TCP 192.168.106.1:4847 <-> 192.168.106.128:50000 [proto: 227/DRDA][cat: Database][20 pkts/3169 bytes <-> 18 pkts/3522 bytes] + 1 TCP 192.168.106.1:4847 <-> 192.168.106.128:50000 [proto: 227/DRDA][cat: Database/11][20 pkts/3169 bytes <-> 18 pkts/3522 bytes] diff --git a/tests/result/dropbox.pcap.out b/tests/result/dropbox.pcap.out index ae71381ed1f..4ba0e0e0233 100644 --- a/tests/result/dropbox.pcap.out +++ b/tests/result/dropbox.pcap.out @@ -2,42 +2,42 @@ MDNS 16 1648 1 SSDP 140 61108 22 Dropbox 1104 246122 16 - 1 TCP 192.168.1.105:44949 <-> 54.240.174.31:443 [proto: 91.121/SSL.Dropbox][cat: Cloud][64 pkts/12228 bytes <-> 74 pkts/85074 bytes][client: client-cf.dropbox.com][server: client-cf.dropbox.com] - 2 TCP 192.168.1.105:47747 <-> 108.160.172.225:443 [proto: 91.121/SSL.Dropbox][cat: Cloud][28 pkts/12486 bytes <-> 26 pkts/14946 bytes][client: d.dropbox.com] + 1 TCP 192.168.1.105:44949 <-> 54.240.174.31:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][64 pkts/12228 bytes <-> 74 pkts/85074 bytes][client: client-cf.dropbox.com][server: client-cf.dropbox.com] + 2 TCP 192.168.1.105:47747 <-> 108.160.172.225:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][28 pkts/12486 bytes <-> 26 pkts/14946 bytes][client: d.dropbox.com] 3 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] 4 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] 5 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] 6 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] - 7 UDP 192.168.1.254:50828 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][44 pkts/19936 bytes -> 0 pkts/0 bytes] - 8 TCP 192.168.1.105:59975 <-> 108.160.172.204:443 [proto: 91.121/SSL.Dropbox][cat: Cloud][18 pkts/3562 bytes <-> 16 pkts/14464 bytes][client: client.dropbox.com][server: *.dropbox.com] - 9 TCP 192.168.1.105:46394 <-> 162.125.17.131:443 [proto: 91.121/SSL.Dropbox][cat: Cloud][12 pkts/2338 bytes <-> 10 pkts/9054 bytes][client: notify.dropbox.com][server: *.dropbox.com] - 10 TCP 192.168.1.105:36226 <-> 108.160.172.195:80 [proto: 7.121/HTTP.Dropbox][cat: Cloud][10 pkts/2170 bytes <-> 10 pkts/1758 bytes][Host: log.getdropbox.com] - 11 UDP 192.168.1.101:1650 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.1.101:2141 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 13 UDP 192.168.1.101:2873 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.1.101:3412 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 15 UDP 192.168.1.101:3547 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.1.101:3959 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 17 UDP 192.168.1.101:4169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.1.101:4171 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.1.101:4625 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 20 UDP 192.168.1.101:4974 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 21 UDP 192.168.1.106:57268 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][16 pkts/2632 bytes -> 0 pkts/0 bytes] - 22 UDP 192.168.1.106:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][16 pkts/1648 bytes -> 0 pkts/0 bytes] - 23 UDP 192.168.1.105:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][6 pkts/1422 bytes -> 0 pkts/0 bytes] - 24 UDP 192.168.1.105:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][6 pkts/1422 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.1.105:36173 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud][4 pkts/312 bytes <-> 4 pkts/1078 bytes][Host: log.getdropbox.com] - 26 UDP 192.168.1.101:1280 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 27 UDP 192.168.1.101:1346 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 28 UDP 192.168.1.101:1908 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.1.101:2159 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 30 UDP 192.168.1.101:2169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 31 UDP 192.168.1.101:2544 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 32 UDP 192.168.1.101:2604 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.1.101:2991 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 34 UDP 192.168.1.101:3731 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 35 UDP 192.168.1.101:3777 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 36 UDP 192.168.1.105:55407 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud][2 pkts/156 bytes <-> 2 pkts/666 bytes][Host: client.dropbox.com] - 37 UDP 192.168.1.105:50789 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud][2 pkts/146 bytes <-> 2 pkts/646 bytes][Host: d.dropbox.com] - 38 UDP 192.168.1.105:49112 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud][2 pkts/162 bytes <-> 2 pkts/612 bytes][Host: client-cf.dropbox.com] - 39 UDP 192.168.1.105:33189 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud][2 pkts/156 bytes <-> 2 pkts/588 bytes][Host: notify.dropbox.com] + 7 UDP 192.168.1.254:50828 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][44 pkts/19936 bytes -> 0 pkts/0 bytes] + 8 TCP 192.168.1.105:59975 <-> 108.160.172.204:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][18 pkts/3562 bytes <-> 16 pkts/14464 bytes][client: client.dropbox.com][server: *.dropbox.com] + 9 TCP 192.168.1.105:46394 <-> 162.125.17.131:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][12 pkts/2338 bytes <-> 10 pkts/9054 bytes][client: notify.dropbox.com][server: *.dropbox.com] + 10 TCP 192.168.1.105:36226 <-> 108.160.172.195:80 [proto: 7.121/HTTP.Dropbox][cat: Cloud/13][10 pkts/2170 bytes <-> 10 pkts/1758 bytes][Host: log.getdropbox.com] + 11 UDP 192.168.1.101:1650 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 12 UDP 192.168.1.101:2141 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 13 UDP 192.168.1.101:2873 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 14 UDP 192.168.1.101:3412 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.1.101:3547 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.1.101:3959 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.1.101:4169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.1.101:4171 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 19 UDP 192.168.1.101:4625 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 20 UDP 192.168.1.101:4974 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] + 21 UDP 192.168.1.106:57268 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][16 pkts/2632 bytes -> 0 pkts/0 bytes] + 22 UDP 192.168.1.106:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][16 pkts/1648 bytes -> 0 pkts/0 bytes] + 23 UDP 192.168.1.105:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] + 24 UDP 192.168.1.105:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] + 25 UDP 192.168.1.105:36173 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][4 pkts/312 bytes <-> 4 pkts/1078 bytes][Host: log.getdropbox.com] + 26 UDP 192.168.1.101:1280 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 27 UDP 192.168.1.101:1346 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 28 UDP 192.168.1.101:1908 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 29 UDP 192.168.1.101:2159 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 30 UDP 192.168.1.101:2169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 31 UDP 192.168.1.101:2544 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 32 UDP 192.168.1.101:2604 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 33 UDP 192.168.1.101:2991 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 34 UDP 192.168.1.101:3731 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 35 UDP 192.168.1.101:3777 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] + 36 UDP 192.168.1.105:55407 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/666 bytes][Host: client.dropbox.com] + 37 UDP 192.168.1.105:50789 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/146 bytes <-> 2 pkts/646 bytes][Host: d.dropbox.com] + 38 UDP 192.168.1.105:49112 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/162 bytes <-> 2 pkts/612 bytes][Host: client-cf.dropbox.com] + 39 UDP 192.168.1.105:33189 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/588 bytes][Host: notify.dropbox.com] diff --git a/tests/result/facebook.pcap.out b/tests/result/facebook.pcap.out index 8e22a431bed..b34851e5504 100644 --- a/tests/result/facebook.pcap.out +++ b/tests/result/facebook.pcap.out @@ -1,4 +1,4 @@ Facebook 60 30511 2 - 1 TCP 192.168.43.18:44614 <-> 31.13.86.36:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][19 pkts/2664 bytes <-> 22 pkts/22102 bytes][client: www.facebook.com] - 2 TCP 192.168.43.18:52066 <-> 66.220.156.68:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][9 pkts/1345 bytes <-> 10 pkts/4400 bytes][client: facebook.com][server: *.facebook.com] + 1 TCP 192.168.43.18:44614 <-> 31.13.86.36:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][19 pkts/2664 bytes <-> 22 pkts/22102 bytes][client: www.facebook.com] + 2 TCP 192.168.43.18:52066 <-> 66.220.156.68:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][9 pkts/1345 bytes <-> 10 pkts/4400 bytes][client: facebook.com][server: *.facebook.com] diff --git a/tests/result/fix.pcap.out b/tests/result/fix.pcap.out index e8eae565a0c..1e2e57896d4 100644 --- a/tests/result/fix.pcap.out +++ b/tests/result/fix.pcap.out @@ -1,14 +1,14 @@ FIX 1261 115514 12 - 1 TCP 208.245.107.3:4000 <-> 192.168.0.20:45578 [proto: 230/FIX][cat: RPC][228 pkts/26333 bytes <-> 228 pkts/13920 bytes] - 2 TCP 8.17.22.31:4000 <-> 192.168.0.20:47968 [proto: 230/FIX][cat: RPC][201 pkts/21246 bytes <-> 200 pkts/13460 bytes] - 3 TCP 8.17.22.31:4000 <-> 192.168.0.20:43594 [proto: 230/FIX][cat: RPC][111 pkts/16881 bytes <-> 111 pkts/7680 bytes] - 4 TCP 208.245.107.3:4000 <-> 192.168.0.20:45584 [proto: 230/FIX][cat: RPC][35 pkts/3022 bytes <-> 35 pkts/2342 bytes] - 5 TCP 8.17.22.31:4000 <-> 192.168.0.20:40918 [proto: 230/FIX][cat: RPC][18 pkts/1938 bytes <-> 18 pkts/1358 bytes] - 6 TCP 208.245.107.3:4000 <-> 192.168.0.20:38652 [proto: 230/FIX][cat: RPC][9 pkts/961 bytes <-> 9 pkts/700 bytes] - 7 TCP 8.17.22.31:4000 <-> 192.168.0.20:47952 [proto: 230/FIX][cat: RPC][5 pkts/577 bytes <-> 5 pkts/484 bytes] - 8 TCP 8.17.22.31:4000 <-> 192.168.0.20:47962 [proto: 230/FIX][cat: RPC][6 pkts/513 bytes <-> 4 pkts/522 bytes] - 9 TCP 208.245.107.3:4000 <-> 192.168.0.20:39094 [proto: 230/FIX][cat: RPC][6 pkts/456 bytes <-> 5 pkts/551 bytes] - 10 TCP 217.192.86.32:4000 <-> 192.168.0.20:53330 [proto: 230/FIX][cat: RPC][6 pkts/456 bytes <-> 5 pkts/551 bytes] - 11 TCP 208.245.107.3:4000 <-> 192.168.0.20:38646 [proto: 230/FIX][cat: RPC][6 pkts/441 bytes <-> 4 pkts/477 bytes] - 12 TCP 8.17.22.31:4000 <-> 192.168.0.20:40928 [proto: 230/FIX][cat: RPC][4 pkts/342 bytes <-> 2 pkts/303 bytes] + 1 TCP 208.245.107.3:4000 <-> 192.168.0.20:45578 [proto: 230/FIX][cat: RPC/16][228 pkts/26333 bytes <-> 228 pkts/13920 bytes] + 2 TCP 8.17.22.31:4000 <-> 192.168.0.20:47968 [proto: 230/FIX][cat: RPC/16][201 pkts/21246 bytes <-> 200 pkts/13460 bytes] + 3 TCP 8.17.22.31:4000 <-> 192.168.0.20:43594 [proto: 230/FIX][cat: RPC/16][111 pkts/16881 bytes <-> 111 pkts/7680 bytes] + 4 TCP 208.245.107.3:4000 <-> 192.168.0.20:45584 [proto: 230/FIX][cat: RPC/16][35 pkts/3022 bytes <-> 35 pkts/2342 bytes] + 5 TCP 8.17.22.31:4000 <-> 192.168.0.20:40918 [proto: 230/FIX][cat: RPC/16][18 pkts/1938 bytes <-> 18 pkts/1358 bytes] + 6 TCP 208.245.107.3:4000 <-> 192.168.0.20:38652 [proto: 230/FIX][cat: RPC/16][9 pkts/961 bytes <-> 9 pkts/700 bytes] + 7 TCP 8.17.22.31:4000 <-> 192.168.0.20:47952 [proto: 230/FIX][cat: RPC/16][5 pkts/577 bytes <-> 5 pkts/484 bytes] + 8 TCP 8.17.22.31:4000 <-> 192.168.0.20:47962 [proto: 230/FIX][cat: RPC/16][6 pkts/513 bytes <-> 4 pkts/522 bytes] + 9 TCP 208.245.107.3:4000 <-> 192.168.0.20:39094 [proto: 230/FIX][cat: RPC/16][6 pkts/456 bytes <-> 5 pkts/551 bytes] + 10 TCP 217.192.86.32:4000 <-> 192.168.0.20:53330 [proto: 230/FIX][cat: RPC/16][6 pkts/456 bytes <-> 5 pkts/551 bytes] + 11 TCP 208.245.107.3:4000 <-> 192.168.0.20:38646 [proto: 230/FIX][cat: RPC/16][6 pkts/441 bytes <-> 4 pkts/477 bytes] + 12 TCP 8.17.22.31:4000 <-> 192.168.0.20:40928 [proto: 230/FIX][cat: RPC/16][4 pkts/342 bytes <-> 2 pkts/303 bytes] diff --git a/tests/result/git.pcap.out b/tests/result/git.pcap.out index 392823a4771..e1415d97aa6 100644 --- a/tests/result/git.pcap.out +++ b/tests/result/git.pcap.out @@ -1,3 +1,3 @@ Git 90 74005 1 - 1 TCP 192.168.0.77:47991 <-> 5.153.231.21:9418 [proto: 226/Git][cat: Collaborative][41 pkts/3319 bytes <-> 49 pkts/70686 bytes] + 1 TCP 192.168.0.77:47991 <-> 5.153.231.21:9418 [proto: 226/Git][cat: Collaborative/15][41 pkts/3319 bytes <-> 49 pkts/70686 bytes] diff --git a/tests/result/google_ssl.pcap.out b/tests/result/google_ssl.pcap.out index d0049d63234..0a4e91ba8ed 100644 --- a/tests/result/google_ssl.pcap.out +++ b/tests/result/google_ssl.pcap.out @@ -1,3 +1,3 @@ Google 28 9108 1 - 1 TCP 172.31.3.224:42835 <-> 216.58.212.100:443 [proto: 91.126/SSL.Google][cat: Web][16 pkts/1512 bytes <-> 12 pkts/7596 bytes][server: www.google.com] + 1 TCP 172.31.3.224:42835 <-> 216.58.212.100:443 [proto: 91.126/SSL.Google][cat: Web/5][16 pkts/1512 bytes <-> 12 pkts/7596 bytes][server: www.google.com] diff --git a/tests/result/hangout.pcap.out b/tests/result/hangout.pcap.out index ce689988f90..323e41d3660 100644 --- a/tests/result/hangout.pcap.out +++ b/tests/result/hangout.pcap.out @@ -1,3 +1,3 @@ GoogleHangout 19 2774 1 - 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201/GoogleHangout][cat: Chat][19 pkts/2774 bytes -> 0 pkts/0 bytes] + 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201/GoogleHangout][cat: Chat/9][19 pkts/2774 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/http_ipv6.pcap.out b/tests/result/http_ipv6.pcap.out index b53de1bde58..f0b5577d670 100644 --- a/tests/result/http_ipv6.pcap.out +++ b/tests/result/http_ipv6.pcap.out @@ -4,15 +4,15 @@ Facebook 22 10202 2 Google 62 15977 1 QUIC 3 502 1 - 1 UDP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:45931 <-> [2a00:1450:4001:803::1017]:443 [proto: 188.126/QUIC.Google][cat: Web][33 pkts/7741 bytes <-> 29 pkts/8236 bytes][Host: www.google.it] - 2 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37506 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network][14 pkts/3969 bytes <-> 12 pkts/11648 bytes][client: www.ntop.org] - 3 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37486 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network][11 pkts/1292 bytes <-> 8 pkts/5722 bytes][client: www.ntop.org] - 4 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37494 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network][10 pkts/1206 bytes <-> 8 pkts/5722 bytes][client: www.ntop.org] - 5 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37488 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network][10 pkts/1206 bytes <-> 7 pkts/5636 bytes][client: www.ntop.org] - 6 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53132 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][7 pkts/960 bytes <-> 5 pkts/4227 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] - 7 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53134 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork][6 pkts/874 bytes <-> 4 pkts/4141 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] + 1 UDP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:45931 <-> [2a00:1450:4001:803::1017]:443 [proto: 188.126/QUIC.Google][cat: Web/5][33 pkts/7741 bytes <-> 29 pkts/8236 bytes][Host: www.google.it] + 2 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37506 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network/14][14 pkts/3969 bytes <-> 12 pkts/11648 bytes][client: www.ntop.org] + 3 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37486 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network/14][11 pkts/1292 bytes <-> 8 pkts/5722 bytes][client: www.ntop.org] + 4 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37494 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network/14][10 pkts/1206 bytes <-> 8 pkts/5722 bytes][client: www.ntop.org] + 5 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37488 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network/14][10 pkts/1206 bytes <-> 7 pkts/5636 bytes][client: www.ntop.org] + 6 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53132 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][7 pkts/960 bytes <-> 5 pkts/4227 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] + 7 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53134 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][6 pkts/874 bytes <-> 4 pkts/4141 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] 8 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:41776 <-> [2a00:1450:4001:803::1017]:443 [proto: 91/SSL][7 pkts/860 bytes <-> 7 pkts/1353 bytes] - 9 UDP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:55145 <-> [2a00:1450:400b:c02::5f]:443 [proto: 188/QUIC][cat: Web][2 pkts/359 bytes <-> 1 pkts/143 bytes] + 9 UDP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:55145 <-> [2a00:1450:400b:c02::5f]:443 [proto: 188/QUIC][cat: Web/5][2 pkts/359 bytes <-> 1 pkts/143 bytes] 10 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:33062 <-> [2a00:1450:400b:c02::9a]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] 11 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40308 <-> [2a03:2880:1010:3f20:face:b00c::25de]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] 12 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40526 <-> [2a00:1450:4006:804::200e]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] diff --git a/tests/result/mpeg.pcap.out b/tests/result/mpeg.pcap.out index 3740ee42d0c..1d888d25461 100644 --- a/tests/result/mpeg.pcap.out +++ b/tests/result/mpeg.pcap.out @@ -1,3 +1,3 @@ ntop 19 10643 1 - 1 TCP 192.168.80.160:55804 <-> 46.101.157.119:80 [proto: 7.26/HTTP.ntop][cat: Network][9 pkts/754 bytes <-> 10 pkts/9889 bytes][Host: luca.ntop.org] + 1 TCP 192.168.80.160:55804 <-> 46.101.157.119:80 [proto: 7.26/HTTP.ntop][cat: Network/14][9 pkts/754 bytes <-> 10 pkts/9889 bytes][Host: luca.ntop.org] diff --git a/tests/result/mpegts.pcap.out b/tests/result/mpegts.pcap.out index b85c1f63e17..cda24f64338 100644 --- a/tests/result/mpegts.pcap.out +++ b/tests/result/mpegts.pcap.out @@ -1,3 +1,3 @@ MPEG_TS 1 1362 1 - 1 UDP 10.1.16.48:40737 -> 230.200.201.23:1234 [VLAN: 3359][proto: 198/MPEG_TS][cat: Media][1 pkts/1362 bytes -> 0 pkts/0 bytes] + 1 UDP 10.1.16.48:40737 -> 230.200.201.23:1234 [VLAN: 3359][proto: 198/MPEG_TS][cat: Media/1][1 pkts/1362 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/msnms.pcap.out b/tests/result/msnms.pcap.out index 397b397d827..bb3fc91e15d 100644 --- a/tests/result/msnms.pcap.out +++ b/tests/result/msnms.pcap.out @@ -1,8 +1,8 @@ MSN 364 56503 6 - 1 TCP 192.168.1.14:1208 <-> 207.46.108.83:1863 [proto: 68/MSN][cat: Web][43 pkts/7166 bytes <-> 48 pkts/9557 bytes] - 2 TCP 192.168.1.14:1221 <-> 207.46.108.59:1863 [proto: 68/MSN][cat: Web][43 pkts/7062 bytes <-> 40 pkts/7349 bytes] - 3 TCP 192.168.1.14:1217 <-> 207.46.108.41:1863 [proto: 68/MSN][cat: Web][46 pkts/7655 bytes <-> 19 pkts/3761 bytes] - 4 TCP 192.168.1.14:1037 <-> 207.46.107.149:1863 [proto: 68/MSN][cat: Web][41 pkts/2425 bytes <-> 55 pkts/6426 bytes] - 5 TCP 192.168.1.14:1220 <-> 207.46.108.150:1863 [proto: 68/MSN][cat: Web][2 pkts/163 bytes <-> 14 pkts/2737 bytes] - 6 TCP 192.168.1.14:1176 -> 207.46.108.39:1863 [proto: 68/MSN][cat: Web][13 pkts/2202 bytes -> 0 pkts/0 bytes] + 1 TCP 192.168.1.14:1208 <-> 207.46.108.83:1863 [proto: 68/MSN][cat: Web/5][43 pkts/7166 bytes <-> 48 pkts/9557 bytes] + 2 TCP 192.168.1.14:1221 <-> 207.46.108.59:1863 [proto: 68/MSN][cat: Web/5][43 pkts/7062 bytes <-> 40 pkts/7349 bytes] + 3 TCP 192.168.1.14:1217 <-> 207.46.108.41:1863 [proto: 68/MSN][cat: Web/5][46 pkts/7655 bytes <-> 19 pkts/3761 bytes] + 4 TCP 192.168.1.14:1037 <-> 207.46.107.149:1863 [proto: 68/MSN][cat: Web/5][41 pkts/2425 bytes <-> 55 pkts/6426 bytes] + 5 TCP 192.168.1.14:1220 <-> 207.46.108.150:1863 [proto: 68/MSN][cat: Web/5][2 pkts/163 bytes <-> 14 pkts/2737 bytes] + 6 TCP 192.168.1.14:1176 -> 207.46.108.39:1863 [proto: 68/MSN][cat: Web/5][13 pkts/2202 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/mssql_tds.pcap.out b/tests/result/mssql_tds.pcap.out index 908ddcef50b..47403889ea1 100644 --- a/tests/result/mssql_tds.pcap.out +++ b/tests/result/mssql_tds.pcap.out @@ -1,14 +1,14 @@ MsSQL-TDS 38 16260 12 1 TCP 10.111.111.111:6666 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][7 pkts/8717 bytes -> 0 pkts/0 bytes] - 2 TCP 10.111.111.111:5555 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][10 pkts/1552 bytes <-> 7 pkts/1521 bytes] - 3 TCP 10.111.111.111:1111 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][2 pkts/614 bytes <-> 2 pkts/524 bytes] - 4 TCP 10.111.111.111:4444 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/1136 bytes -> 0 pkts/0 bytes] - 5 TCP 10.111.111.111:7777 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/425 bytes -> 0 pkts/0 bytes] - 6 TCP 10.111.111.111:33333 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/374 bytes -> 0 pkts/0 bytes] - 7 TCP 10.111.111.111:22222 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/322 bytes -> 0 pkts/0 bytes] - 8 TCP 10.111.111.111:9999 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/272 bytes -> 0 pkts/0 bytes] - 9 TCP 10.111.111.111:11111 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/253 bytes -> 0 pkts/0 bytes] - 10 TCP 10.111.111.111:3333 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/239 bytes -> 0 pkts/0 bytes] - 11 TCP 10.111.111.111:2222 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/98 bytes <-> 1 pkts/71 bytes] - 12 TCP 10.111.111.111:8888 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database][1 pkts/142 bytes -> 0 pkts/0 bytes] + 2 TCP 10.111.111.111:5555 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][10 pkts/1552 bytes <-> 7 pkts/1521 bytes] + 3 TCP 10.111.111.111:1111 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][2 pkts/614 bytes <-> 2 pkts/524 bytes] + 4 TCP 10.111.111.111:4444 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/1136 bytes -> 0 pkts/0 bytes] + 5 TCP 10.111.111.111:7777 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/425 bytes -> 0 pkts/0 bytes] + 6 TCP 10.111.111.111:33333 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/374 bytes -> 0 pkts/0 bytes] + 7 TCP 10.111.111.111:22222 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/322 bytes -> 0 pkts/0 bytes] + 8 TCP 10.111.111.111:9999 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/272 bytes -> 0 pkts/0 bytes] + 9 TCP 10.111.111.111:11111 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/253 bytes -> 0 pkts/0 bytes] + 10 TCP 10.111.111.111:3333 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/239 bytes -> 0 pkts/0 bytes] + 11 TCP 10.111.111.111:2222 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/98 bytes <-> 1 pkts/71 bytes] + 12 TCP 10.111.111.111:8888 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/142 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/netflix.pcap.out b/tests/result/netflix.pcap.out index 05739b694a1..9a3029b4cab 100644 --- a/tests/result/netflix.pcap.out +++ b/tests/result/netflix.pcap.out @@ -4,64 +4,64 @@ IGMP 1 60 1 NetFlix 6976 6151821 56 Amazon 2 126 1 - 1 TCP 192.168.1.7:53217 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][667 pkts/50462 bytes <-> 1205 pkts/1807875 bytes][Host: 23.246.11.141] - 2 TCP 192.168.1.7:53183 <-> 23.246.3.140:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][502 pkts/40335 bytes <-> 805 pkts/1202445 bytes][Host: 23.246.3.140] - 3 TCP 192.168.1.7:53210 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][293 pkts/23170 bytes <-> 495 pkts/736113 bytes][Host: 23.246.11.133] - 4 TCP 192.168.1.7:53153 <-> 184.25.204.24:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][147 pkts/11558 bytes <-> 490 pkts/734346 bytes][Host: tp.akam.nflximg.com] - 5 TCP 192.168.1.7:53141 <-> 104.86.97.179:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][83 pkts/7225 bytes <-> 147 pkts/202723 bytes][client: art-s.nflximg.net][server: secure.cdn.nflximg.net] - 6 TCP 192.168.1.7:53184 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][75 pkts/6610 bytes <-> 103 pkts/150772 bytes][Host: 23.246.11.141] - 7 TCP 192.168.1.7:53149 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][40 pkts/3413 bytes <-> 86 pkts/125190 bytes][Host: art-2.nflximg.net] - 8 TCP 192.168.1.7:53116 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][75 pkts/31024 bytes <-> 73 pkts/42930 bytes][client: api-global.netflix.com][server: api.netflix.com] - 9 TCP 192.168.1.7:53193 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][46 pkts/50218 bytes <-> 25 pkts/7943 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 10 TCP 192.168.1.7:53164 <-> 23.246.10.139:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][24 pkts/2040 bytes <-> 34 pkts/45136 bytes] - 11 TCP 192.168.1.7:53171 <-> 23.246.3.140:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][21 pkts/1868 bytes <-> 34 pkts/45139 bytes] - 12 TCP 192.168.1.7:53148 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][31 pkts/2893 bytes <-> 32 pkts/44112 bytes][Host: art-2.nflximg.net] - 13 TCP 192.168.1.7:53163 <-> 23.246.11.145:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][21 pkts/1826 bytes <-> 32 pkts/43179 bytes] - 14 TCP 192.168.1.7:53133 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][30 pkts/6328 bytes <-> 39 pkts/37610 bytes][client: api-global.netflix.com][server: api.netflix.com] - 15 TCP 192.168.1.7:53252 <-> 184.25.204.10:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][12 pkts/1221 bytes <-> 29 pkts/41018 bytes][Host: art-1.nflximg.net] - 16 TCP 192.168.1.7:53179 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][31 pkts/2596 bytes <-> 29 pkts/37544 bytes] - 17 TCP 192.168.1.7:53251 <-> 184.25.204.10:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][16 pkts/1558 bytes <-> 25 pkts/33413 bytes][Host: art-1.nflximg.net] - 18 TCP 192.168.1.7:53151 <-> 54.201.191.132:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][15 pkts/3626 bytes <-> 26 pkts/29544 bytes][Host: appboot.netflix.com] - 19 TCP 192.168.1.7:53182 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][33 pkts/2732 bytes <-> 25 pkts/30064 bytes] - 20 TCP 192.168.1.7:53173 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][24 pkts/2041 bytes <-> 25 pkts/30064 bytes] - 21 TCP 192.168.1.7:53175 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][31 pkts/2571 bytes <-> 22 pkts/28042 bytes] - 22 TCP 192.168.1.7:53239 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][22 pkts/6384 bytes <-> 26 pkts/23277 bytes][client: api-global.netflix.com][server: api.netflix.com] - 23 TCP 192.168.1.7:53177 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][32 pkts/2572 bytes <-> 23 pkts/26661 bytes] - 24 TCP 192.168.1.7:53176 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][36 pkts/3030 bytes <-> 21 pkts/25455 bytes] - 25 TCP 192.168.1.7:53180 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][34 pkts/2864 bytes <-> 21 pkts/25456 bytes] - 26 TCP 192.168.1.7:53178 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][30 pkts/2553 bytes <-> 22 pkts/25510 bytes] - 27 TCP 192.168.1.7:53203 <-> 52.37.36.252:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][28 pkts/22704 bytes <-> 17 pkts/5248 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] - 28 TCP 192.168.1.7:53249 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][25 pkts/5934 bytes <-> 27 pkts/19952 bytes][client: api-global.netflix.com] - 29 TCP 192.168.1.7:53174 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][35 pkts/2920 bytes <-> 19 pkts/22428 bytes] - 30 TCP 192.168.1.7:53181 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][34 pkts/2879 bytes <-> 20 pkts/22373 bytes] - 31 TCP 192.168.1.7:53172 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][30 pkts/2610 bytes <-> 20 pkts/22422 bytes] - 32 TCP 192.168.1.7:53202 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][22 pkts/10686 bytes <-> 16 pkts/7850 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 33 TCP 192.168.1.7:53152 <-> 52.89.39.139:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][14 pkts/10001 bytes <-> 13 pkts/6504 bytes][Host: api-global.netflix.com] - 34 TCP 192.168.1.7:53162 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][18 pkts/5661 bytes <-> 13 pkts/9059 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 35 TCP 192.168.1.7:53132 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][22 pkts/6028 bytes <-> 18 pkts/7459 bytes][client: api-global.netflix.com][server: api.netflix.com] - 36 TCP 192.168.1.7:53150 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming][10 pkts/941 bytes <-> 11 pkts/12318 bytes][Host: art-2.nflximg.net] - 37 TCP 192.168.1.7:53119 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][20 pkts/7639 bytes <-> 16 pkts/5235 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] - 38 TCP 192.168.1.7:53118 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][19 pkts/7588 bytes <-> 15 pkts/5140 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] - 39 TCP 192.168.1.7:53238 <-> 52.32.22.214:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][17 pkts/5528 bytes <-> 14 pkts/5406 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 40 TCP 192.168.1.7:53248 <-> 52.32.22.214:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][12 pkts/5165 bytes <-> 10 pkts/5074 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 41 TCP 192.168.1.7:53105 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][21 pkts/3051 bytes <-> 16 pkts/6234 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] - 42 TCP 192.168.1.7:53114 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][14 pkts/3109 bytes <-> 11 pkts/5119 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] - 43 TCP 192.168.1.7:53134 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][14 pkts/3548 bytes <-> 11 pkts/4653 bytes][client: api-global.netflix.com] - 44 TCP 192.168.1.7:53115 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][16 pkts/1657 bytes <-> 12 pkts/5005 bytes][client: api-global.netflix.com][server: api.netflix.com] - 45 TCP 192.168.1.7:53250 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][10 pkts/2830 bytes <-> 7 pkts/2484 bytes][client: api-global.netflix.com] - 46 TCP 192.168.1.7:53117 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming][12 pkts/1294 bytes <-> 8 pkts/1723 bytes][client: api-global.netflix.com] - 47 UDP 192.168.1.7:53776 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][16 pkts/2648 bytes -> 0 pkts/0 bytes] - 48 UDP 192.168.1.7:51543 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][2 pkts/160 bytes <-> 2 pkts/646 bytes][Host: ios.nccp.netflix.com] - 49 UDP 192.168.1.7:51622 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][2 pkts/160 bytes <-> 2 pkts/646 bytes][Host: ios.nccp.netflix.com] - 50 UDP 192.168.1.7:52347 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/80 bytes <-> 1 pkts/371 bytes][Host: ios.nccp.netflix.com] - 51 UDP 192.168.1.7:60962 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/83 bytes <-> 1 pkts/248 bytes][Host: ichnaea.geo.netflix.com] - 52 UDP 192.168.1.7:51949 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/97 bytes <-> 1 pkts/225 bytes][Host: api-global.latency.prodaa.netflix.com] - 53 UDP 192.168.1.7:52095 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/97 bytes <-> 1 pkts/225 bytes][Host: api-global.latency.prodaa.netflix.com] - 54 UDP 192.168.1.7:52116 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/96 bytes <-> 1 pkts/224 bytes][Host: ichnaea.us-west-2.prodaa.netflix.com] - 55 UDP 192.168.1.7:58102 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/79 bytes <-> 1 pkts/192 bytes][Host: appboot.netflix.com] - 56 UDP 192.168.1.7:59180 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/84 bytes <-> 1 pkts/148 bytes][Host: artwork.akam.nflximg.net] - 57 UDP 192.168.1.7:57719 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming][1 pkts/85 bytes <-> 1 pkts/137 bytes][Host: sha2.san.akam.nflximg.net] - 58 UDP 192.168.1.7:57093 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/81 bytes <-> 1 pkts/113 bytes][Host: a1907.dscg.akamai.net] - 59 UDP 192.168.1.7:51728 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/80 bytes <-> 1 pkts/112 bytes][Host: a803.dscg.akamai.net] + 1 TCP 192.168.1.7:53217 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][667 pkts/50462 bytes <-> 1205 pkts/1807875 bytes][Host: 23.246.11.141] + 2 TCP 192.168.1.7:53183 <-> 23.246.3.140:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][502 pkts/40335 bytes <-> 805 pkts/1202445 bytes][Host: 23.246.3.140] + 3 TCP 192.168.1.7:53210 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][293 pkts/23170 bytes <-> 495 pkts/736113 bytes][Host: 23.246.11.133] + 4 TCP 192.168.1.7:53153 <-> 184.25.204.24:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][147 pkts/11558 bytes <-> 490 pkts/734346 bytes][Host: tp.akam.nflximg.com] + 5 TCP 192.168.1.7:53141 <-> 104.86.97.179:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][83 pkts/7225 bytes <-> 147 pkts/202723 bytes][client: art-s.nflximg.net][server: secure.cdn.nflximg.net] + 6 TCP 192.168.1.7:53184 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][75 pkts/6610 bytes <-> 103 pkts/150772 bytes][Host: 23.246.11.141] + 7 TCP 192.168.1.7:53149 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][40 pkts/3413 bytes <-> 86 pkts/125190 bytes][Host: art-2.nflximg.net] + 8 TCP 192.168.1.7:53116 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][75 pkts/31024 bytes <-> 73 pkts/42930 bytes][client: api-global.netflix.com][server: api.netflix.com] + 9 TCP 192.168.1.7:53193 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][46 pkts/50218 bytes <-> 25 pkts/7943 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 10 TCP 192.168.1.7:53164 <-> 23.246.10.139:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][24 pkts/2040 bytes <-> 34 pkts/45136 bytes] + 11 TCP 192.168.1.7:53171 <-> 23.246.3.140:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][21 pkts/1868 bytes <-> 34 pkts/45139 bytes] + 12 TCP 192.168.1.7:53148 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][31 pkts/2893 bytes <-> 32 pkts/44112 bytes][Host: art-2.nflximg.net] + 13 TCP 192.168.1.7:53163 <-> 23.246.11.145:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][21 pkts/1826 bytes <-> 32 pkts/43179 bytes] + 14 TCP 192.168.1.7:53133 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][30 pkts/6328 bytes <-> 39 pkts/37610 bytes][client: api-global.netflix.com][server: api.netflix.com] + 15 TCP 192.168.1.7:53252 <-> 184.25.204.10:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][12 pkts/1221 bytes <-> 29 pkts/41018 bytes][Host: art-1.nflximg.net] + 16 TCP 192.168.1.7:53179 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][31 pkts/2596 bytes <-> 29 pkts/37544 bytes] + 17 TCP 192.168.1.7:53251 <-> 184.25.204.10:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][16 pkts/1558 bytes <-> 25 pkts/33413 bytes][Host: art-1.nflximg.net] + 18 TCP 192.168.1.7:53151 <-> 54.201.191.132:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][15 pkts/3626 bytes <-> 26 pkts/29544 bytes][Host: appboot.netflix.com] + 19 TCP 192.168.1.7:53182 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][33 pkts/2732 bytes <-> 25 pkts/30064 bytes] + 20 TCP 192.168.1.7:53173 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][24 pkts/2041 bytes <-> 25 pkts/30064 bytes] + 21 TCP 192.168.1.7:53175 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][31 pkts/2571 bytes <-> 22 pkts/28042 bytes] + 22 TCP 192.168.1.7:53239 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][22 pkts/6384 bytes <-> 26 pkts/23277 bytes][client: api-global.netflix.com][server: api.netflix.com] + 23 TCP 192.168.1.7:53177 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][32 pkts/2572 bytes <-> 23 pkts/26661 bytes] + 24 TCP 192.168.1.7:53176 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][36 pkts/3030 bytes <-> 21 pkts/25455 bytes] + 25 TCP 192.168.1.7:53180 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][34 pkts/2864 bytes <-> 21 pkts/25456 bytes] + 26 TCP 192.168.1.7:53178 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][30 pkts/2553 bytes <-> 22 pkts/25510 bytes] + 27 TCP 192.168.1.7:53203 <-> 52.37.36.252:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][28 pkts/22704 bytes <-> 17 pkts/5248 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] + 28 TCP 192.168.1.7:53249 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][25 pkts/5934 bytes <-> 27 pkts/19952 bytes][client: api-global.netflix.com] + 29 TCP 192.168.1.7:53174 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][35 pkts/2920 bytes <-> 19 pkts/22428 bytes] + 30 TCP 192.168.1.7:53181 <-> 23.246.11.141:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][34 pkts/2879 bytes <-> 20 pkts/22373 bytes] + 31 TCP 192.168.1.7:53172 <-> 23.246.11.133:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][30 pkts/2610 bytes <-> 20 pkts/22422 bytes] + 32 TCP 192.168.1.7:53202 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][22 pkts/10686 bytes <-> 16 pkts/7850 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 33 TCP 192.168.1.7:53152 <-> 52.89.39.139:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][14 pkts/10001 bytes <-> 13 pkts/6504 bytes][Host: api-global.netflix.com] + 34 TCP 192.168.1.7:53162 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][18 pkts/5661 bytes <-> 13 pkts/9059 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 35 TCP 192.168.1.7:53132 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][22 pkts/6028 bytes <-> 18 pkts/7459 bytes][client: api-global.netflix.com][server: api.netflix.com] + 36 TCP 192.168.1.7:53150 <-> 184.25.204.25:80 [proto: 7.133/HTTP.NetFlix][cat: Streaming/17][10 pkts/941 bytes <-> 11 pkts/12318 bytes][Host: art-2.nflximg.net] + 37 TCP 192.168.1.7:53119 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][20 pkts/7639 bytes <-> 16 pkts/5235 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] + 38 TCP 192.168.1.7:53118 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][19 pkts/7588 bytes <-> 15 pkts/5140 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] + 39 TCP 192.168.1.7:53238 <-> 52.32.22.214:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][17 pkts/5528 bytes <-> 14 pkts/5406 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 40 TCP 192.168.1.7:53248 <-> 52.32.22.214:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][12 pkts/5165 bytes <-> 10 pkts/5074 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 41 TCP 192.168.1.7:53105 <-> 54.69.204.241:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][21 pkts/3051 bytes <-> 16 pkts/6234 bytes][client: ichnaea.netflix.com][server: customerevents.netflix.com] + 42 TCP 192.168.1.7:53114 <-> 54.191.17.51:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][14 pkts/3109 bytes <-> 11 pkts/5119 bytes][client: ios.nccp.netflix.com][server: *.nccp.netflix.com] + 43 TCP 192.168.1.7:53134 <-> 52.89.39.139:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][14 pkts/3548 bytes <-> 11 pkts/4653 bytes][client: api-global.netflix.com] + 44 TCP 192.168.1.7:53115 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][16 pkts/1657 bytes <-> 12 pkts/5005 bytes][client: api-global.netflix.com][server: api.netflix.com] + 45 TCP 192.168.1.7:53250 <-> 52.41.30.5:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][10 pkts/2830 bytes <-> 7 pkts/2484 bytes][client: api-global.netflix.com] + 46 TCP 192.168.1.7:53117 <-> 52.32.196.36:443 [proto: 91.133/SSL.NetFlix][cat: Streaming/17][12 pkts/1294 bytes <-> 8 pkts/1723 bytes][client: api-global.netflix.com] + 47 UDP 192.168.1.7:53776 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][16 pkts/2648 bytes -> 0 pkts/0 bytes] + 48 UDP 192.168.1.7:51543 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][2 pkts/160 bytes <-> 2 pkts/646 bytes][Host: ios.nccp.netflix.com] + 49 UDP 192.168.1.7:51622 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][2 pkts/160 bytes <-> 2 pkts/646 bytes][Host: ios.nccp.netflix.com] + 50 UDP 192.168.1.7:52347 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/80 bytes <-> 1 pkts/371 bytes][Host: ios.nccp.netflix.com] + 51 UDP 192.168.1.7:60962 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/83 bytes <-> 1 pkts/248 bytes][Host: ichnaea.geo.netflix.com] + 52 UDP 192.168.1.7:51949 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/97 bytes <-> 1 pkts/225 bytes][Host: api-global.latency.prodaa.netflix.com] + 53 UDP 192.168.1.7:52095 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/97 bytes <-> 1 pkts/225 bytes][Host: api-global.latency.prodaa.netflix.com] + 54 UDP 192.168.1.7:52116 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/96 bytes <-> 1 pkts/224 bytes][Host: ichnaea.us-west-2.prodaa.netflix.com] + 55 UDP 192.168.1.7:58102 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/79 bytes <-> 1 pkts/192 bytes][Host: appboot.netflix.com] + 56 UDP 192.168.1.7:59180 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/84 bytes <-> 1 pkts/148 bytes][Host: artwork.akam.nflximg.net] + 57 UDP 192.168.1.7:57719 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/85 bytes <-> 1 pkts/137 bytes][Host: sha2.san.akam.nflximg.net] + 58 UDP 192.168.1.7:57093 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/81 bytes <-> 1 pkts/113 bytes][Host: a1907.dscg.akamai.net] + 59 UDP 192.168.1.7:51728 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/80 bytes <-> 1 pkts/112 bytes][Host: a803.dscg.akamai.net] 60 TCP 192.168.1.7:52929 -> 52.24.87.6:443 [proto: 91.178/SSL.Amazon][2 pkts/126 bytes -> 0 pkts/0 bytes] - 61 IGMP 192.168.1.7:0 -> 239.255.255.250:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] + 61 IGMP 192.168.1.7:0 -> 239.255.255.250:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index 4db2cd6cb51..2dd6179139d 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -2,23 +2,23 @@ ICMP 30 2100 2 Nintendo 890 320242 12 Amazon 76 10811 7 - 1 UDP 192.168.12.114:55915 <-> 185.118.169.65:27520 [proto: 173/Nintendo][cat: Game][169 pkts/61414 bytes <-> 278 pkts/126260 bytes] - 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] - 3 UDP 192.168.12.114:55915 <-> 81.61.158.138:51769 [proto: 173/Nintendo][cat: Game][122 pkts/46476 bytes <-> 38 pkts/5268 bytes] + 1 UDP 192.168.12.114:55915 <-> 185.118.169.65:27520 [proto: 173/Nintendo][cat: Game/8][169 pkts/61414 bytes <-> 278 pkts/126260 bytes] + 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] + 3 UDP 192.168.12.114:55915 <-> 81.61.158.138:51769 [proto: 173/Nintendo][cat: Game/8][122 pkts/46476 bytes <-> 38 pkts/5268 bytes] 4 TCP 54.187.10.185:443 <-> 192.168.12.114:48328 [proto: 91.178/SSL.Amazon][34 pkts/4466 bytes <-> 20 pkts/4021 bytes] - 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: 5][server: *.baas.nintendo.com] - 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: 5][server: *.baas.nintendo.com] - 7 UDP 192.168.12.114:52119 <-> 91.8.243.35:49432 [proto: 173/Nintendo][cat: Game][23 pkts/2682 bytes <-> 16 pkts/3408 bytes] - 8 UDP 192.168.12.114:52119 <-> 109.21.255.11:50251 [proto: 173/Nintendo][cat: Game][8 pkts/1024 bytes <-> 8 pkts/1024 bytes] - 9 UDP 192.168.12.114:52119 <-> 134.3.248.25:56955 [proto: 173/Nintendo][cat: Game][8 pkts/1040 bytes <-> 7 pkts/922 bytes] - 10 ICMP 151.6.184.100:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network][21 pkts/1470 bytes -> 0 pkts/0 bytes] - 11 UDP 192.168.12.114:10184 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game][4 pkts/368 bytes <-> 4 pkts/400 bytes][Host: g2df33d01-lp1.p.srv.nintendo.net] + 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: 5][server: *.baas.nintendo.com] + 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: 5][server: *.baas.nintendo.com] + 7 UDP 192.168.12.114:52119 <-> 91.8.243.35:49432 [proto: 173/Nintendo][cat: Game/8][23 pkts/2682 bytes <-> 16 pkts/3408 bytes] + 8 UDP 192.168.12.114:52119 <-> 109.21.255.11:50251 [proto: 173/Nintendo][cat: Game/8][8 pkts/1024 bytes <-> 8 pkts/1024 bytes] + 9 UDP 192.168.12.114:52119 <-> 134.3.248.25:56955 [proto: 173/Nintendo][cat: Game/8][8 pkts/1040 bytes <-> 7 pkts/922 bytes] + 10 ICMP 151.6.184.100:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network/14][21 pkts/1470 bytes -> 0 pkts/0 bytes] + 11 UDP 192.168.12.114:10184 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][4 pkts/368 bytes <-> 4 pkts/400 bytes][Host: g2df33d01-lp1.p.srv.nintendo.net] 12 UDP 192.168.12.114:52119 -> 52.10.205.177:34343 [proto: 178/Amazon][1 pkts/730 bytes -> 0 pkts/0 bytes] - 13 ICMP 151.6.184.98:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network][9 pkts/630 bytes -> 0 pkts/0 bytes] + 13 ICMP 151.6.184.98:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network/14][9 pkts/630 bytes -> 0 pkts/0 bytes] 14 UDP 192.168.12.114:55915 <-> 35.158.74.61:10025 [proto: 178/Amazon][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 15 UDP 192.168.12.114:18874 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] - 16 UDP 192.168.12.114:51035 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] - 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173/Nintendo][cat: Game][3 pkts/354 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.12.114:18874 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] + 16 UDP 192.168.12.114:51035 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] + 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173/Nintendo][cat: Game/8][3 pkts/354 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.12.114:55915 -> 35.158.74.61:33335 [proto: 178/Amazon][3 pkts/318 bytes -> 0 pkts/0 bytes] 19 UDP 192.168.12.114:55915 -> 52.10.205.177:34343 [proto: 178/Amazon][1 pkts/298 bytes -> 0 pkts/0 bytes] 20 UDP 192.168.12.114:55915 -> 35.158.74.61:33334 [proto: 178/Amazon][5 pkts/290 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/ocs.pcap.out b/tests/result/ocs.pcap.out index c9e692b9065..ed1e8218c9b 100644 --- a/tests/result/ocs.pcap.out +++ b/tests/result/ocs.pcap.out @@ -7,25 +7,25 @@ OCS 863 57552 7 PlayStore 1 72 1 GoogleServices 13 2277 2 - 1 TCP 192.168.180.2:49881 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media][751 pkts/44783 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] - 2 TCP 192.168.180.2:36680 -> 178.248.208.54:443 [proto: 91.218/SSL.OCS][cat: Media][20 pkts/6089 bytes -> 0 pkts/0 bytes][client: ocs.labgency.ws] - 3 TCP 192.168.180.2:42590 -> 178.248.208.210:80 [proto: 7.218/HTTP.OCS][cat: Media][83 pkts/5408 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] + 1 TCP 192.168.180.2:49881 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media/1][751 pkts/44783 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] + 2 TCP 192.168.180.2:36680 -> 178.248.208.54:443 [proto: 91.218/SSL.OCS][cat: Media/1][20 pkts/6089 bytes -> 0 pkts/0 bytes][client: ocs.labgency.ws] + 3 TCP 192.168.180.2:42590 -> 178.248.208.210:80 [proto: 7.218/HTTP.OCS][cat: Media/1][83 pkts/5408 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] 4 TCP 192.168.180.2:39263 -> 23.21.230.199:443 [proto: 91/SSL][20 pkts/2715 bytes -> 0 pkts/0 bytes][client: settings.crashlytics.com] - 5 TCP 192.168.180.2:32946 -> 64.233.184.188:443 [proto: 91.239/SSL.GoogleServices][cat: Web][12 pkts/2212 bytes -> 0 pkts/0 bytes][client: mtalk.google.com] + 5 TCP 192.168.180.2:32946 -> 64.233.184.188:443 [proto: 91.239/SSL.GoogleServices][cat: Web/5][12 pkts/2212 bytes -> 0 pkts/0 bytes][client: mtalk.google.com] 6 TCP 192.168.180.2:47803 -> 64.233.166.95:443 [proto: 91.126/SSL.Google][12 pkts/1608 bytes -> 0 pkts/0 bytes] 7 TCP 192.168.180.2:41223 -> 216.58.208.46:443 [proto: 91.126/SSL.Google][13 pkts/1448 bytes -> 0 pkts/0 bytes] - 8 TCP 192.168.180.2:48250 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media][6 pkts/1092 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] + 8 TCP 192.168.180.2:48250 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media/1][6 pkts/1092 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] 9 TCP 192.168.180.2:44959 -> 137.135.129.206:80 [proto: 7/HTTP][7 pkts/540 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] 10 TCP 192.168.180.2:53356 -> 137.135.129.206:80 [proto: 7/HTTP][6 pkts/479 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] 11 TCP 192.168.180.2:47699 -> 64.233.184.188:5228 [proto: 126/Google][2 pkts/120 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.180.2:3621 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: xmpp.device06.eu01.capptain.com] - 13 UDP 192.168.180.2:48770 -> 8.8.8.8:53 [proto: 5.228/DNS.PlayStore][cat: SoftwareUpdate][1 pkts/72 bytes -> 0 pkts/0 bytes][Host: android.clients.google.com] - 14 UDP 192.168.180.2:40097 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: settings.crashlytics.com] - 15 UDP 192.168.180.2:1291 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] - 16 UDP 192.168.180.2:11793 -> 8.8.8.8:53 [proto: 5.239/DNS.GoogleServices][cat: Web][1 pkts/65 bytes -> 0 pkts/0 bytes][Host: play.googleapis.com] - 17 UDP 192.168.180.2:38472 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media][1 pkts/63 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] - 18 UDP 192.168.180.2:2589 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media][1 pkts/61 bytes -> 0 pkts/0 bytes][Host: ocs.labgency.ws] - 19 UDP 192.168.180.2:24245 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media][1 pkts/56 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] + 12 UDP 192.168.180.2:3621 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: xmpp.device06.eu01.capptain.com] + 13 UDP 192.168.180.2:48770 -> 8.8.8.8:53 [proto: 5.228/DNS.PlayStore][cat: SoftwareUpdate/19][1 pkts/72 bytes -> 0 pkts/0 bytes][Host: android.clients.google.com] + 14 UDP 192.168.180.2:40097 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: settings.crashlytics.com] + 15 UDP 192.168.180.2:1291 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] + 16 UDP 192.168.180.2:11793 -> 8.8.8.8:53 [proto: 5.239/DNS.GoogleServices][cat: Web/5][1 pkts/65 bytes -> 0 pkts/0 bytes][Host: play.googleapis.com] + 17 UDP 192.168.180.2:38472 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media/1][1 pkts/63 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] + 18 UDP 192.168.180.2:2589 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media/1][1 pkts/61 bytes -> 0 pkts/0 bytes][Host: ocs.labgency.ws] + 19 UDP 192.168.180.2:24245 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media/1][1 pkts/56 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] Undetected flows: diff --git a/tests/result/ookla.pcap.out b/tests/result/ookla.pcap.out index d89b6c4f2d0..8cd7bf73d04 100644 --- a/tests/result/ookla.pcap.out +++ b/tests/result/ookla.pcap.out @@ -1,5 +1,5 @@ HTTP 5066 4685425 1 Ookla 20 4320 1 - 1 TCP 192.168.1.7:51215 <-> 46.44.253.187:8080 [proto: 7/HTTP][cat: Web][2202 pkts/1032520 bytes <-> 2864 pkts/3652905 bytes] - 2 TCP 192.168.1.7:51207 <-> 46.44.253.187:80 [proto: 7.191/HTTP.Ookla][cat: Network][12 pkts/2238 bytes <-> 8 pkts/2082 bytes] + 1 TCP 192.168.1.7:51215 <-> 46.44.253.187:8080 [proto: 7/HTTP][cat: Web/5][2202 pkts/1032520 bytes <-> 2864 pkts/3652905 bytes] + 2 TCP 192.168.1.7:51207 <-> 46.44.253.187:80 [proto: 7.191/HTTP.Ookla][cat: Network/14][12 pkts/2238 bytes <-> 8 pkts/2082 bytes] diff --git a/tests/result/openvpn.pcap.out b/tests/result/openvpn.pcap.out index dedd720828c..4acffeaba14 100644 --- a/tests/result/openvpn.pcap.out +++ b/tests/result/openvpn.pcap.out @@ -1,5 +1,5 @@ OpenVPN 298 57111 3 - 1 UDP 192.168.43.18:13680 <-> 139.59.151.137:13680 [proto: 159/OpenVPN][cat: VPN][62 pkts/11508 bytes <-> 58 pkts/16664 bytes] - 2 TCP 192.168.1.77:60140 <-> 46.101.231.218:443 [proto: 159/OpenVPN][cat: VPN][44 pkts/7514 bytes <-> 51 pkts/7866 bytes] - 3 UDP 192.168.43.12:41507 <-> 139.59.151.137:13680 [proto: 159/OpenVPN][cat: VPN][49 pkts/7860 bytes <-> 34 pkts/5699 bytes] + 1 UDP 192.168.43.18:13680 <-> 139.59.151.137:13680 [proto: 159/OpenVPN][cat: VPN/2][62 pkts/11508 bytes <-> 58 pkts/16664 bytes] + 2 TCP 192.168.1.77:60140 <-> 46.101.231.218:443 [proto: 159/OpenVPN][cat: VPN/2][44 pkts/7514 bytes <-> 51 pkts/7866 bytes] + 3 UDP 192.168.43.12:41507 <-> 139.59.151.137:13680 [proto: 159/OpenVPN][cat: VPN/2][49 pkts/7860 bytes <-> 34 pkts/5699 bytes] diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index 284677a9200..225e6b88684 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -6,76 +6,76 @@ Google 2 1093 1 UPnP 1 130 1 iQIYI 1459 1815935 51 - 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] - 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] - 3 TCP 192.168.115.8:50505 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/400 bytes <-> 244 pkts/319633 bytes][Host: static.qiyi.com] - 4 TCP 192.168.115.8:50491 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/426 bytes <-> 26 pkts/33872 bytes][Host: 223.26.106.66] - 5 TCP 192.168.115.8:50486 <-> 77.234.40.96:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing][11 pkts/11023 bytes <-> 12 pkts/14869 bytes][Host: bcu.ff.avast.com] - 6 UDP 192.168.5.38:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][18 pkts/9327 bytes -> 0 pkts/0 bytes] - 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] - 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] - 9 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web][4 pkts/2953 bytes <-> 1 pkts/356 bytes] - 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] - 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] - 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] - 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][9 pkts/1575 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] - 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] - 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] - 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] - 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] - 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 33 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] - 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 35 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] - 36 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/1074 bytes -> 0 pkts/0 bytes] - 37 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 38 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] - 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 43 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][5 pkts/875 bytes -> 0 pkts/0 bytes] - 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] - 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 50 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] - 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] - 52 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] - 54 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] - 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] - 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] - 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 65 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web][2 pkts/398 bytes -> 0 pkts/0 bytes] - 66 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/358 bytes -> 0 pkts/0 bytes] - 67 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web][1 pkts/347 bytes -> 0 pkts/0 bytes] - 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] - 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web][1 pkts/199 bytes -> 0 pkts/0 bytes] - 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][1 pkts/165 bytes -> 0 pkts/0 bytes] + 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] + 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] + 3 TCP 192.168.115.8:50505 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/400 bytes <-> 244 pkts/319633 bytes][Host: static.qiyi.com] + 4 TCP 192.168.115.8:50491 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/426 bytes <-> 26 pkts/33872 bytes][Host: 223.26.106.66] + 5 TCP 192.168.115.8:50486 <-> 77.234.40.96:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][11 pkts/11023 bytes <-> 12 pkts/14869 bytes][Host: bcu.ff.avast.com] + 6 UDP 192.168.5.38:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][18 pkts/9327 bytes -> 0 pkts/0 bytes] + 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] + 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] + 9 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] + 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] + 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] + 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] + 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] + 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] + 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] + 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] + 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] + 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 33 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] + 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 35 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] + 36 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] + 37 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 38 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] + 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 43 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] + 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] + 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 50 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] + 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] + 52 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] + 54 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] + 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] + 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] + 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 65 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] + 66 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] + 67 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] + 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] + 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] + 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 153/UPnP][1 pkts/130 bytes -> 0 pkts/0 bytes] 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][2 pkts/108 bytes -> 0 pkts/0 bytes] 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][1 pkts/66 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/quic.pcap.out b/tests/result/quic.pcap.out index 16b9d39e4e6..dbfc7f84dc1 100644 --- a/tests/result/quic.pcap.out +++ b/tests/result/quic.pcap.out @@ -4,15 +4,15 @@ YouTube 85 76193 5 Google 11 10063 2 QUIC 3 364 1 - 1 UDP 192.168.1.109:57833 <-> 216.58.212.101:443 [proto: 188.122/QUIC.GMail][cat: Email][161 pkts/23930 bytes <-> 252 pkts/230944 bytes][Host: mail.google.com] - 2 UDP 192.168.1.109:35236 <-> 216.58.210.206:443 [proto: 188.124/QUIC.YouTube][cat: Media][25 pkts/5276 bytes <-> 44 pkts/53157 bytes][Host: www.youtube.com] - 3 UDP 192.168.1.105:34438 <-> 216.58.210.238:443 [proto: 188.124/QUIC.YouTube][cat: Media][4 pkts/3682 bytes <-> 3 pkts/2863 bytes][Host: www.youtube.com] - 4 UDP 192.168.1.105:40030 <-> 216.58.201.227:443 [proto: 188.126/QUIC.Google][cat: Web][3 pkts/2866 bytes <-> 3 pkts/2863 bytes][Host: fonts.gstatic.com] - 5 UDP 192.168.1.105:55934 <-> 216.58.201.238:443 [proto: 188.124/QUIC.YouTube][cat: Media][2 pkts/2784 bytes <-> 2 pkts/2784 bytes][Host: s.ytimg.com] - 6 UDP 192.168.1.105:45669 <-> 172.217.16.4:443 [proto: 188.126/QUIC.Google][cat: Web][3 pkts/1550 bytes <-> 2 pkts/2784 bytes][Host: www.google.com] - 7 UDP 192.168.1.105:48445 <-> 216.58.214.110:443 [proto: 188.124/QUIC.YouTube][cat: Media][2 pkts/1471 bytes <-> 1 pkts/1392 bytes][Host: i.ytimg.com] - 8 UDP 192.168.1.105:53817 <-> 216.58.210.225:443 [proto: 188.124/QUIC.YouTube][cat: Media][1 pkts/1392 bytes <-> 1 pkts/1392 bytes][Host: yt3.ggpht.com] - 9 UDP 192.168.1.105:40461 <-> 172.217.16.3:443 [proto: 188/QUIC][cat: Web][2 pkts/241 bytes <-> 1 pkts/123 bytes] + 1 UDP 192.168.1.109:57833 <-> 216.58.212.101:443 [proto: 188.122/QUIC.GMail][cat: Email/3][161 pkts/23930 bytes <-> 252 pkts/230944 bytes][Host: mail.google.com] + 2 UDP 192.168.1.109:35236 <-> 216.58.210.206:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][25 pkts/5276 bytes <-> 44 pkts/53157 bytes][Host: www.youtube.com] + 3 UDP 192.168.1.105:34438 <-> 216.58.210.238:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][4 pkts/3682 bytes <-> 3 pkts/2863 bytes][Host: www.youtube.com] + 4 UDP 192.168.1.105:40030 <-> 216.58.201.227:443 [proto: 188.126/QUIC.Google][cat: Web/5][3 pkts/2866 bytes <-> 3 pkts/2863 bytes][Host: fonts.gstatic.com] + 5 UDP 192.168.1.105:55934 <-> 216.58.201.238:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][2 pkts/2784 bytes <-> 2 pkts/2784 bytes][Host: s.ytimg.com] + 6 UDP 192.168.1.105:45669 <-> 172.217.16.4:443 [proto: 188.126/QUIC.Google][cat: Web/5][3 pkts/1550 bytes <-> 2 pkts/2784 bytes][Host: www.google.com] + 7 UDP 192.168.1.105:48445 <-> 216.58.214.110:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][2 pkts/1471 bytes <-> 1 pkts/1392 bytes][Host: i.ytimg.com] + 8 UDP 192.168.1.105:53817 <-> 216.58.210.225:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][1 pkts/1392 bytes <-> 1 pkts/1392 bytes][Host: yt3.ggpht.com] + 9 UDP 192.168.1.105:40461 <-> 172.217.16.3:443 [proto: 188/QUIC][cat: Web/5][2 pkts/241 bytes <-> 1 pkts/123 bytes] Undetected flows: diff --git a/tests/result/quickplay.pcap.out b/tests/result/quickplay.pcap.out index de6981ec680..6dba3077ea4 100644 --- a/tests/result/quickplay.pcap.out +++ b/tests/result/quickplay.pcap.out @@ -4,24 +4,24 @@ Google 2 378 1 Amazon 2 1469 1 QuickPlay 133 96179 11 - 1 TCP 10.54.169.250:52009 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][35 pkts/17902 bytes <-> 30 pkts/28000 bytes][Host: vod-singtelhawk.quickplay.com] - 2 TCP 10.54.169.250:52019 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][14 pkts/7028 bytes <-> 11 pkts/12578 bytes][Host: vod-singtelhawk.quickplay.com] - 3 TCP 10.54.169.250:52017 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][5 pkts/2510 bytes <-> 3 pkts/3522 bytes][Host: vod-singtelhawk.quickplay.com] - 4 TCP 10.54.169.250:52018 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][4 pkts/2008 bytes <-> 3 pkts/3040 bytes][Host: vod-singtelhawk.quickplay.com] - 5 TCP 10.54.169.250:52022 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][4 pkts/2008 bytes <-> 3 pkts/2276 bytes][Host: vod-singtelhawk.quickplay.com] - 6 TCP 10.54.169.250:50669 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][2 pkts/844 bytes <-> 2 pkts/2836 bytes][Host: api-singtelhawk.quickplay.com] - 7 TCP 10.54.169.250:50668 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][2 pkts/733 bytes <-> 2 pkts/2627 bytes][Host: api-singtelhawk.quickplay.com] - 8 TCP 10.54.169.250:52021 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][3 pkts/1506 bytes <-> 1 pkts/1248 bytes][Host: vod-singtelhawk.quickplay.com] - 9 TCP 10.54.169.250:52007 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][3 pkts/1583 bytes <-> 1 pkts/1152 bytes][Host: vod-singtelhawk.quickplay.com] - 10 TCP 10.54.169.250:44256 <-> 120.28.5.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][2 pkts/1086 bytes <-> 1 pkts/1225 bytes][Host: play-singtelhawk.quickplay.com] - 11 TCP 10.54.169.250:56381 <-> 54.179.140.65:80 [proto: 7.178/HTTP.Amazon][cat: Web][1 pkts/638 bytes <-> 1 pkts/831 bytes][Host: api.account.xiaomi.com] - 12 TCP 10.54.169.250:54883 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat][2 pkts/1192 bytes <-> 1 pkts/145 bytes][Host: hkextshort.weixin.qq.com] - 13 TCP 10.54.169.250:54885 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat][1 pkts/461 bytes <-> 2 pkts/522 bytes][Host: hkextshort.weixin.qq.com] - 14 TCP 10.54.169.250:35670 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat][1 pkts/681 bytes <-> 1 pkts/262 bytes][Host: hkminorshort.weixin.qq.com] - 15 TCP 10.54.169.250:42762 <-> 203.205.129.101:80 [proto: 7.48/HTTP.QQ][cat: Chat][1 pkts/616 bytes <-> 1 pkts/261 bytes][Host: hkextshort.weixin.qq.com] - 16 TCP 10.54.169.250:42761 <-> 203.205.129.101:80 [proto: 7.48/HTTP.QQ][cat: Chat][1 pkts/380 bytes <-> 1 pkts/261 bytes][Host: hkextshort.weixin.qq.com] - 17 TCP 10.54.169.250:52285 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] - 18 TCP 10.54.169.250:52288 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] - 19 TCP 10.54.169.250:44793 <-> 31.13.68.49:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork][1 pkts/237 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] - 20 TCP 10.54.169.250:33064 <-> 120.28.5.18:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming][1 pkts/358 bytes <-> 1 pkts/109 bytes][Host: api-singtelhawk.quickplay.com] - 21 TCP 10.54.169.250:33277 <-> 120.28.26.231:80 [proto: 7.126/HTTP.Google][cat: Web][1 pkts/241 bytes <-> 1 pkts/137 bytes][Host: clients3.google.com] + 1 TCP 10.54.169.250:52009 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][35 pkts/17902 bytes <-> 30 pkts/28000 bytes][Host: vod-singtelhawk.quickplay.com] + 2 TCP 10.54.169.250:52019 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][14 pkts/7028 bytes <-> 11 pkts/12578 bytes][Host: vod-singtelhawk.quickplay.com] + 3 TCP 10.54.169.250:52017 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][5 pkts/2510 bytes <-> 3 pkts/3522 bytes][Host: vod-singtelhawk.quickplay.com] + 4 TCP 10.54.169.250:52018 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/3040 bytes][Host: vod-singtelhawk.quickplay.com] + 5 TCP 10.54.169.250:52022 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/2276 bytes][Host: vod-singtelhawk.quickplay.com] + 6 TCP 10.54.169.250:50669 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/844 bytes <-> 2 pkts/2836 bytes][Host: api-singtelhawk.quickplay.com] + 7 TCP 10.54.169.250:50668 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/733 bytes <-> 2 pkts/2627 bytes][Host: api-singtelhawk.quickplay.com] + 8 TCP 10.54.169.250:52021 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][3 pkts/1506 bytes <-> 1 pkts/1248 bytes][Host: vod-singtelhawk.quickplay.com] + 9 TCP 10.54.169.250:52007 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][3 pkts/1583 bytes <-> 1 pkts/1152 bytes][Host: vod-singtelhawk.quickplay.com] + 10 TCP 10.54.169.250:44256 <-> 120.28.5.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/1086 bytes <-> 1 pkts/1225 bytes][Host: play-singtelhawk.quickplay.com] + 11 TCP 10.54.169.250:56381 <-> 54.179.140.65:80 [proto: 7.178/HTTP.Amazon][cat: Web/5][1 pkts/638 bytes <-> 1 pkts/831 bytes][Host: api.account.xiaomi.com] + 12 TCP 10.54.169.250:54883 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][2 pkts/1192 bytes <-> 1 pkts/145 bytes][Host: hkextshort.weixin.qq.com] + 13 TCP 10.54.169.250:54885 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][1 pkts/461 bytes <-> 2 pkts/522 bytes][Host: hkextshort.weixin.qq.com] + 14 TCP 10.54.169.250:35670 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][1 pkts/681 bytes <-> 1 pkts/262 bytes][Host: hkminorshort.weixin.qq.com] + 15 TCP 10.54.169.250:42762 <-> 203.205.129.101:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][1 pkts/616 bytes <-> 1 pkts/261 bytes][Host: hkextshort.weixin.qq.com] + 16 TCP 10.54.169.250:42761 <-> 203.205.129.101:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][1 pkts/380 bytes <-> 1 pkts/261 bytes][Host: hkextshort.weixin.qq.com] + 17 TCP 10.54.169.250:52285 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] + 18 TCP 10.54.169.250:52288 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] + 19 TCP 10.54.169.250:44793 <-> 31.13.68.49:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/237 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] + 20 TCP 10.54.169.250:33064 <-> 120.28.5.18:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][1 pkts/358 bytes <-> 1 pkts/109 bytes][Host: api-singtelhawk.quickplay.com] + 21 TCP 10.54.169.250:33277 <-> 120.28.26.231:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/241 bytes <-> 1 pkts/137 bytes][Host: clients3.google.com] diff --git a/tests/result/rx.pcap.out b/tests/result/rx.pcap.out index f450ff1b0d9..c95dfd3e5de 100644 --- a/tests/result/rx.pcap.out +++ b/tests/result/rx.pcap.out @@ -1,7 +1,7 @@ RX 132 26475 5 - 1 UDP 131.114.219.168:7001 <-> 192.167.206.241:7000 [proto: 223/RX][cat: RPC][48 pkts/6808 bytes <-> 31 pkts/5568 bytes] - 2 UDP 131.114.219.168:7001 <-> 192.167.206.124:7003 [proto: 223/RX][cat: RPC][18 pkts/1833 bytes <-> 9 pkts/8086 bytes] - 3 UDP 131.114.219.168:7001 <-> 192.167.206.124:7000 [proto: 223/RX][cat: RPC][10 pkts/2085 bytes <-> 10 pkts/1057 bytes] - 4 UDP 131.114.219.168:38331 <-> 192.167.206.124:7002 [proto: 223/RX][cat: RPC][2 pkts/441 bytes <-> 1 pkts/78 bytes] - 5 UDP 131.114.219.168:41559 <-> 192.167.206.124:7002 [proto: 223/RX][cat: RPC][2 pkts/441 bytes <-> 1 pkts/78 bytes] + 1 UDP 131.114.219.168:7001 <-> 192.167.206.241:7000 [proto: 223/RX][cat: RPC/16][48 pkts/6808 bytes <-> 31 pkts/5568 bytes] + 2 UDP 131.114.219.168:7001 <-> 192.167.206.124:7003 [proto: 223/RX][cat: RPC/16][18 pkts/1833 bytes <-> 9 pkts/8086 bytes] + 3 UDP 131.114.219.168:7001 <-> 192.167.206.124:7000 [proto: 223/RX][cat: RPC/16][10 pkts/2085 bytes <-> 10 pkts/1057 bytes] + 4 UDP 131.114.219.168:38331 <-> 192.167.206.124:7002 [proto: 223/RX][cat: RPC/16][2 pkts/441 bytes <-> 1 pkts/78 bytes] + 5 UDP 131.114.219.168:41559 <-> 192.167.206.124:7002 [proto: 223/RX][cat: RPC/16][2 pkts/441 bytes <-> 1 pkts/78 bytes] diff --git a/tests/result/sip.pcap.out b/tests/result/sip.pcap.out index f921667ff3c..16cb570ac39 100644 --- a/tests/result/sip.pcap.out +++ b/tests/result/sip.pcap.out @@ -2,7 +2,7 @@ RTP 9 1926 1 SIP 102 47087 2 RTCP 1 146 1 - 1 UDP 192.168.1.2:5060 <-> 212.242.33.35:5060 [proto: 100/SIP][cat: VoIP][53 pkts/21940 bytes <-> 31 pkts/15635 bytes] - 2 UDP 192.168.1.2:5060 <-> 200.68.120.81:5060 [proto: 100/SIP][cat: VoIP][15 pkts/7568 bytes <-> 3 pkts/1944 bytes] - 3 UDP 192.168.1.2:30000 -> 212.242.33.36:40392 [proto: 87/RTP][cat: VoIP][9 pkts/1926 bytes -> 0 pkts/0 bytes] - 4 UDP 192.168.1.2:30001 -> 212.242.33.36:40393 [proto: 165/RTCP][cat: VoIP][1 pkts/146 bytes -> 0 pkts/0 bytes] + 1 UDP 192.168.1.2:5060 <-> 212.242.33.35:5060 [proto: 100/SIP][cat: VoIP/10][53 pkts/21940 bytes <-> 31 pkts/15635 bytes] + 2 UDP 192.168.1.2:5060 <-> 200.68.120.81:5060 [proto: 100/SIP][cat: VoIP/10][15 pkts/7568 bytes <-> 3 pkts/1944 bytes] + 3 UDP 192.168.1.2:30000 -> 212.242.33.36:40392 [proto: 87/RTP][cat: Media/1][9 pkts/1926 bytes -> 0 pkts/0 bytes] + 4 UDP 192.168.1.2:30001 -> 212.242.33.36:40393 [proto: 165/RTCP][cat: VoIP/10][1 pkts/146 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype-conference-call.pcap.out b/tests/result/skype-conference-call.pcap.out index 49349613a40..3a7c34e1788 100644 --- a/tests/result/skype-conference-call.pcap.out +++ b/tests/result/skype-conference-call.pcap.out @@ -1,3 +1,3 @@ SkypeCallOut 200 39687 1 - 1 UDP 192.168.2.20:49282 <-> 104.46.40.49:60642 [proto: 125.38/Skype.SkypeCallOut][cat: VoIP][133 pkts/24845 bytes <-> 67 pkts/14842 bytes] + 1 UDP 192.168.2.20:49282 <-> 104.46.40.49:60642 [proto: 125.38/Skype.SkypeCallOut][cat: VoIP/10][133 pkts/24845 bytes <-> 67 pkts/14842 bytes] diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index 2c984ef1c3b..9f50790f399 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -14,288 +14,288 @@ Spotify 5 430 1 MS_OneDrive 387 198090 1 ApplePush 12 1877 1 - 1 TCP 192.168.1.34:50028 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud][187 pkts/42539 bytes <-> 200 pkts/155551 bytes][server: *.gateway.messenger.live.com] - 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] - 3 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][79 pkts/29479 bytes -> 0 pkts/0 bytes] - 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] - 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] - 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][14 pkts/7281 bytes -> 0 pkts/0 bytes] + 1 TCP 192.168.1.34:50028 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][187 pkts/42539 bytes <-> 200 pkts/155551 bytes][server: *.gateway.messenger.live.com] + 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] + 3 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][79 pkts/29479 bytes -> 0 pkts/0 bytes] + 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web/5][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] + 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] + 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/7281 bytes -> 0 pkts/0 bytes] 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] - 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] - 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP][16 pkts/4788 bytes <-> 4 pkts/372 bytes] - 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] - 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] - 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] - 13 TCP 192.168.1.34:50027 <-> 23.223.73.34:443 [proto: 91.125/SSL.Skype][cat: VoIP][17 pkts/3605 bytes <-> 1 pkts/74 bytes][client: apps.skypeassets.com] - 14 TCP 192.168.1.34:50029 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] - 15 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][6 pkts/3264 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][6 pkts/3264 bytes -> 0 pkts/0 bytes] - 17 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][5 pkts/2720 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][5 pkts/2720 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] - 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125/Skype][cat: VoIP][11 pkts/1578 bytes <-> 4 pkts/342 bytes] - 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud][6 pkts/1211 bytes <-> 6 pkts/666 bytes] + 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] + 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] + 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] + 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] + 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] + 13 TCP 192.168.1.34:50027 <-> 23.223.73.34:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][17 pkts/3605 bytes <-> 1 pkts/74 bytes][client: apps.skypeassets.com] + 14 TCP 192.168.1.34:50029 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] + 15 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/3264 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/3264 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] + 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] + 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125/Skype][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] + 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/1211 bytes <-> 6 pkts/666 bytes] 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][13 pkts/1554 bytes <-> 3 pkts/200 bytes] - 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125/Skype][cat: VoIP][14 pkts/1090 bytes <-> 6 pkts/534 bytes] + 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125/Skype][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][13 pkts/1392 bytes <-> 3 pkts/200 bytes] 25 TCP 192.168.1.34:50101 <-> 157.55.235.176:443 [proto: 91.125/SSL.Skype][12 pkts/1305 bytes <-> 3 pkts/285 bytes] 26 TCP 192.168.1.34:50037 <-> 157.55.56.170:443 [proto: 91.125/SSL.Skype][11 pkts/1218 bytes <-> 4 pkts/351 bytes] 27 TCP 192.168.1.34:50080 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][12 pkts/1249 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:50111 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][11 pkts/955 bytes <-> 9 pkts/561 bytes] 29 TCP 192.168.1.34:50081 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][12 pkts/1270 bytes <-> 3 pkts/243 bytes] - 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP][15 pkts/1138 bytes <-> 4 pkts/372 bytes] - 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP][14 pkts/1075 bytes <-> 4 pkts/431 bytes] - 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125/Skype][cat: VoIP][14 pkts/1100 bytes <-> 5 pkts/395 bytes] + 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] + 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] + 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125/Skype][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][12 pkts/1207 bytes <-> 3 pkts/277 bytes] 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][12 pkts/1221 bytes <-> 3 pkts/231 bytes] - 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][14 pkts/1062 bytes <-> 4 pkts/383 bytes] - 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP][14 pkts/1083 bytes <-> 4 pkts/359 bytes] - 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP][13 pkts/1020 bytes <-> 4 pkts/421 bytes] - 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP][13 pkts/1010 bytes <-> 5 pkts/402 bytes] + 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] + 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] + 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] + 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][12 pkts/1151 bytes <-> 3 pkts/260 bytes] - 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][14 pkts/1040 bytes <-> 4 pkts/362 bytes] - 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125/Skype][cat: VoIP][13 pkts/1004 bytes <-> 4 pkts/397 bytes] + 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] + 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][11 pkts/1050 bytes <-> 4 pkts/351 bytes] - 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP][13 pkts/1010 bytes <-> 4 pkts/390 bytes] - 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP][14 pkts/1085 bytes <-> 4 pkts/315 bytes] + 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] + 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][11 pkts/1140 bytes <-> 3 pkts/250 bytes] - 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP][13 pkts/975 bytes <-> 4 pkts/412 bytes] - 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP][13 pkts/995 bytes <-> 4 pkts/391 bytes] - 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP][13 pkts/995 bytes <-> 4 pkts/386 bytes] - 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP][13 pkts/1000 bytes <-> 4 pkts/380 bytes] + 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] + 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] + 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] + 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][13 pkts/1176 bytes <-> 3 pkts/200 bytes] - 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP][13 pkts/1000 bytes <-> 4 pkts/371 bytes] - 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP][13 pkts/971 bytes <-> 4 pkts/399 bytes] - 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP][13 pkts/977 bytes <-> 4 pkts/384 bytes] - 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP][12 pkts/940 bytes <-> 5 pkts/415 bytes] - 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP][12 pkts/948 bytes <-> 4 pkts/407 bytes] - 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP][13 pkts/993 bytes <-> 4 pkts/360 bytes] + 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] + 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] + 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] + 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] + 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] + 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][12 pkts/1074 bytes <-> 3 pkts/277 bytes] 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][12 pkts/1102 bytes <-> 3 pkts/247 bytes] 59 TCP 192.168.1.34:50048 <-> 157.55.130.150:443 [proto: 91.125/SSL.Skype][12 pkts/1109 bytes <-> 3 pkts/236 bytes] - 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP][13 pkts/1004 bytes <-> 4 pkts/334 bytes] + 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] 61 TCP 192.168.1.34:50036 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][11 pkts/1074 bytes <-> 3 pkts/254 bytes] - 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP][13 pkts/1010 bytes <-> 4 pkts/317 bytes] + 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] 63 TCP 192.168.1.34:50078 <-> 157.55.130.173:443 [proto: 91.125/SSL.Skype][12 pkts/1088 bytes <-> 3 pkts/236 bytes] - 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP][13 pkts/989 bytes <-> 4 pkts/323 bytes] + 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] 65 TCP 192.168.1.34:50030 <-> 65.55.223.33:443 [proto: 91/SSL][11 pkts/960 bytes <-> 4 pkts/351 bytes] - 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP][12 pkts/969 bytes <-> 4 pkts/337 bytes] + 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][12 pkts/1039 bytes <-> 3 pkts/267 bytes] - 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP][12 pkts/899 bytes <-> 5 pkts/406 bytes] - 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125/Skype][cat: VoIP][13 pkts/982 bytes <-> 4 pkts/322 bytes] + 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] + 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][10 pkts/1002 bytes <-> 3 pkts/285 bytes] - 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP][11 pkts/836 bytes <-> 5 pkts/442 bytes] - 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP][11 pkts/841 bytes <-> 5 pkts/429 bytes] + 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] + 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][11 pkts/999 bytes <-> 4 pkts/266 bytes] 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][12 pkts/1032 bytes <-> 3 pkts/230 bytes] - 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP][11 pkts/866 bytes <-> 5 pkts/396 bytes] - 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP][11 pkts/843 bytes <-> 4 pkts/411 bytes] - 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP][13 pkts/994 bytes <-> 2 pkts/243 bytes] - 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP][11 pkts/820 bytes <-> 5 pkts/416 bytes] - 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP][11 pkts/843 bytes <-> 4 pkts/386 bytes] - 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP][11 pkts/822 bytes <-> 4 pkts/390 bytes] + 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] + 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] + 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] + 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] + 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] + 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][10 pkts/857 bytes <-> 4 pkts/351 bytes] - 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][11 pkts/827 bytes <-> 3 pkts/325 bytes] + 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][9 pkts/862 bytes <-> 3 pkts/285 bytes] - 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125/Skype][cat: VoIP][12 pkts/935 bytes <-> 2 pkts/197 bytes] + 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125/Skype][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] 85 TCP 192.168.1.34:50100 <-> 111.221.74.46:443 [proto: 91.125/SSL.Skype][10 pkts/872 bytes <-> 3 pkts/237 bytes] - 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP][11 pkts/838 bytes <-> 3 pkts/270 bytes] + 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] 87 TCP 192.168.1.34:50087 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][9 pkts/822 bytes <-> 3 pkts/285 bytes] - 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][11 pkts/814 bytes <-> 3 pkts/287 bytes] - 89 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][4 pkts/908 bytes -> 0 pkts/0 bytes] - 90 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][4 pkts/828 bytes -> 0 pkts/0 bytes] + 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] + 89 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/908 bytes -> 0 pkts/0 bytes] + 90 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/828 bytes -> 0 pkts/0 bytes] 91 TCP 192.168.1.34:50125 <-> 91.190.218.125:12350 [proto: 125/Skype][6 pkts/417 bytes <-> 4 pkts/352 bytes] - 92 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network][8 pkts/656 bytes -> 0 pkts/0 bytes] - 93 UDP 192.168.1.34:55159 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] - 94 UDP 192.168.1.34:63108 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] - 95 UDP 192.168.1.34:49903 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][9 pkts/648 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] - 96 UDP 192.168.1.34:52850 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] - 97 UDP 192.168.1.34:55711 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] - 98 UDP 192.168.1.34:49360 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 99 UDP 192.168.1.34:54343 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst13.r.skype.net] - 100 UDP 192.168.1.34:57726 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 101 UDP 192.168.1.34:58368 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst13.r.skype.net] - 102 UDP 192.168.1.34:58458 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 103 UDP 192.168.1.34:60288 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 104 UDP 192.168.1.34:63421 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 105 UDP 192.168.1.34:65037 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 106 UDP 192.168.1.34:49990 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst6.r.skype.net] - 107 UDP 192.168.1.34:52742 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] - 108 UDP 192.168.1.34:56387 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] - 109 UDP 192.168.1.34:57288 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst6.r.skype.net] + 92 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][8 pkts/656 bytes -> 0 pkts/0 bytes] + 93 UDP 192.168.1.34:55159 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] + 94 UDP 192.168.1.34:63108 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] + 95 UDP 192.168.1.34:49903 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][9 pkts/648 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] + 96 UDP 192.168.1.34:52850 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] + 97 UDP 192.168.1.34:55711 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] + 98 UDP 192.168.1.34:49360 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 99 UDP 192.168.1.34:54343 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst13.r.skype.net] + 100 UDP 192.168.1.34:57726 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 101 UDP 192.168.1.34:58368 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst13.r.skype.net] + 102 UDP 192.168.1.34:58458 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 103 UDP 192.168.1.34:60288 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 104 UDP 192.168.1.34:63421 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 105 UDP 192.168.1.34:65037 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 106 UDP 192.168.1.34:49990 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst6.r.skype.net] + 107 UDP 192.168.1.34:52742 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] + 108 UDP 192.168.1.34:56387 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] + 109 UDP 192.168.1.34:57288 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst6.r.skype.net] 110 TCP 192.168.1.34:50146 -> 157.56.53.51:443 [proto: 91/SSL][8 pkts/608 bytes -> 0 pkts/0 bytes] 111 TCP 192.168.1.34:50129 <-> 91.190.218.125:12350 [proto: 125/Skype][6 pkts/353 bytes <-> 4 pkts/246 bytes] - 112 UDP 192.168.1.34:49163 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 113 UDP 192.168.1.34:51802 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 114 UDP 192.168.1.34:52714 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 115 UDP 192.168.1.34:57406 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 116 UDP 192.168.1.34:49793 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/532 bytes -> 0 pkts/0 bytes][Host: dsn4.d.skype.net] - 117 UDP 192.168.1.34:65045 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/532 bytes -> 0 pkts/0 bytes][Host: dsn4.d.skype.net] - 118 UDP 192.168.1.34:54396 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] - 119 UDP 192.168.1.34:65426 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] + 112 UDP 192.168.1.34:49163 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 113 UDP 192.168.1.34:51802 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 114 UDP 192.168.1.34:52714 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 115 UDP 192.168.1.34:57406 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 116 UDP 192.168.1.34:49793 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/532 bytes -> 0 pkts/0 bytes][Host: dsn4.d.skype.net] + 117 UDP 192.168.1.34:65045 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/532 bytes -> 0 pkts/0 bytes][Host: dsn4.d.skype.net] + 118 UDP 192.168.1.34:54396 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] + 119 UDP 192.168.1.34:65426 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] 120 TCP 192.168.1.34:50109 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/297 bytes <-> 3 pkts/186 bytes] - 121 UDP 192.168.1.92:57621 -> 192.168.1.255:57621 [proto: 156/Spotify][cat: Streaming][5 pkts/430 bytes -> 0 pkts/0 bytes] + 121 UDP 192.168.1.92:57621 -> 192.168.1.255:57621 [proto: 156/Spotify][cat: Streaming/17][5 pkts/430 bytes -> 0 pkts/0 bytes] 122 TCP 192.168.1.34:50110 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] - 123 UDP 192.168.1.34:55893 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][5 pkts/360 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] - 124 UDP 192.168.1.34:49485 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 125 UDP 192.168.1.34:51066 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 126 UDP 192.168.1.34:56886 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 127 UDP 192.168.1.34:64560 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125/Skype][cat: VoIP][5 pkts/300 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125/Skype][cat: VoIP][5 pkts/300 bytes -> 0 pkts/0 bytes] - 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] - 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] - 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System][1 pkts/90 bytes <-> 1 pkts/90 bytes] - 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] + 123 UDP 192.168.1.34:55893 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][5 pkts/360 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] + 124 UDP 192.168.1.34:49485 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 125 UDP 192.168.1.34:51066 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 126 UDP 192.168.1.34:56886 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 127 UDP 192.168.1.34:64560 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] + 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web/5][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] + 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] + 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/60 bytes] - 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network][2 pkts/92 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] - 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] - 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network][1 pkts/46 bytes -> 0 pkts/0 bytes] + 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] Undetected flows: diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index 4927132a825..a4e58cd544a 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -12,16 +12,16 @@ Apple 76 19581 1 MS_OneDrive 348 181687 1 ApplePush 8 1118 1 - 1 TCP 192.168.1.34:51230 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud][166 pkts/39042 bytes <-> 182 pkts/142645 bytes][server: *.gateway.messenger.live.com] + 1 TCP 192.168.1.34:51230 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][166 pkts/39042 bytes <-> 182 pkts/142645 bytes][server: *.gateway.messenger.live.com] 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] 3 TCP 192.168.1.34:51227 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][38 pkts/9082 bytes <-> 38 pkts/10499 bytes] - 4 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][36 pkts/13402 bytes -> 0 pkts/0 bytes] - 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] - 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] - 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] - 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP][12 pkts/3242 bytes <-> 3 pkts/290 bytes] + 4 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][36 pkts/13402 bytes -> 0 pkts/0 bytes] + 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] + 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] + 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] + 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][4 pkts/818 bytes <-> 4 pkts/2172 bytes] - 10 TCP 192.168.1.34:51295 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP][11 pkts/2074 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] + 10 TCP 192.168.1.34:51295 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/2074 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 11 TCP 192.168.1.34:51238 <-> 157.55.235.147:443 [proto: 91.125/SSL.Skype][13 pkts/1446 bytes <-> 4 pkts/266 bytes] 12 TCP 192.168.1.34:51262 <-> 213.199.179.176:443 [proto: 91/SSL][13 pkts/1437 bytes <-> 3 pkts/200 bytes] 13 TCP 192.168.1.34:51241 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][12 pkts/1333 bytes <-> 3 pkts/251 bytes] @@ -29,244 +29,244 @@ ApplePush 8 1118 1 15 TCP 192.168.1.34:51239 <-> 65.55.223.45:443 [proto: 91/SSL][12 pkts/1291 bytes <-> 3 pkts/242 bytes] 16 TCP 192.168.1.34:51274 <-> 157.55.235.152:443 [proto: 91.125/SSL.Skype][12 pkts/1235 bytes <-> 3 pkts/285 bytes] 17 TCP 192.168.1.34:51260 <-> 157.55.130.142:443 [proto: 91.125/SSL.Skype][12 pkts/1249 bytes <-> 3 pkts/265 bytes] - 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125/Skype][cat: VoIP][14 pkts/1104 bytes <-> 5 pkts/392 bytes] - 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125/Skype][cat: VoIP][14 pkts/1106 bytes <-> 5 pkts/385 bytes] - 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP][14 pkts/1070 bytes <-> 4 pkts/420 bytes] - 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP][14 pkts/1117 bytes <-> 4 pkts/337 bytes] + 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125/Skype][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] + 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125/Skype][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] + 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] + 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][11 pkts/1164 bytes <-> 3 pkts/268 bytes] 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][10 pkts/1077 bytes <-> 4 pkts/351 bytes] - 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP][14 pkts/1059 bytes <-> 4 pkts/367 bytes] - 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP][13 pkts/1011 bytes <-> 4 pkts/415 bytes] - 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP][14 pkts/1093 bytes <-> 4 pkts/333 bytes] + 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] + 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] + 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][12 pkts/1095 bytes <-> 3 pkts/285 bytes] 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][10 pkts/1022 bytes <-> 4 pkts/351 bytes] - 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP][13 pkts/991 bytes <-> 4 pkts/378 bytes] - 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP][13 pkts/1006 bytes <-> 4 pkts/361 bytes] + 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] + 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][10 pkts/1012 bytes <-> 4 pkts/351 bytes] - 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125/Skype][cat: VoIP][13 pkts/976 bytes <-> 4 pkts/365 bytes] - 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP][13 pkts/986 bytes <-> 4 pkts/344 bytes] - 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP][13 pkts/981 bytes <-> 4 pkts/348 bytes] - 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125/Skype][cat: VoIP][13 pkts/1004 bytes <-> 4 pkts/318 bytes] - 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125/Skype][cat: VoIP][12 pkts/948 bytes <-> 4 pkts/349 bytes] - 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP][12 pkts/951 bytes <-> 4 pkts/341 bytes] - 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125/Skype][cat: VoIP][11 pkts/858 bytes <-> 5 pkts/426 bytes] - 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP][11 pkts/856 bytes <-> 5 pkts/409 bytes] - 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP][11 pkts/861 bytes <-> 4 pkts/397 bytes] - 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP][11 pkts/844 bytes <-> 5 pkts/413 bytes] + 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125/Skype][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] + 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] + 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] + 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] + 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125/Skype][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] + 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] + 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] + 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] + 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] + 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][10 pkts/972 bytes <-> 3 pkts/285 bytes] 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][10 pkts/902 bytes <-> 4 pkts/351 bytes] - 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP][11 pkts/815 bytes <-> 5 pkts/423 bytes] - 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP][12 pkts/942 bytes <-> 3 pkts/284 bytes] - 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP][11 pkts/832 bytes <-> 4 pkts/387 bytes] + 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] + 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] + 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][10 pkts/852 bytes <-> 4 pkts/351 bytes] - 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP][12 pkts/916 bytes <-> 3 pkts/281 bytes] - 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP][11 pkts/862 bytes <-> 3 pkts/314 bytes] - 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP][10 pkts/785 bytes <-> 4 pkts/378 bytes] + 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] + 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] + 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][10 pkts/872 bytes <-> 3 pkts/285 bytes] - 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125/Skype][cat: VoIP][12 pkts/931 bytes <-> 2 pkts/219 bytes] - 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP][11 pkts/855 bytes <-> 3 pkts/287 bytes] - 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System][6 pkts/958 bytes <-> 2 pkts/184 bytes] - 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125/Skype][cat: VoIP][11 pkts/848 bytes <-> 3 pkts/286 bytes] - 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238/ApplePush][cat: Cloud][4 pkts/674 bytes <-> 4 pkts/444 bytes] - 59 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 60 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 61 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 62 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP][7 pkts/571 bytes <-> 3 pkts/286 bytes] - 64 UDP 192.168.1.34:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System][7 pkts/680 bytes -> 0 pkts/0 bytes] + 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125/Skype][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] + 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] + 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/958 bytes <-> 2 pkts/184 bytes] + 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125/Skype][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] + 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238/ApplePush][cat: Cloud/13][4 pkts/674 bytes <-> 4 pkts/444 bytes] + 59 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] + 60 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] + 61 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] + 62 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] + 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] + 64 UDP 192.168.1.34:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][7 pkts/680 bytes -> 0 pkts/0 bytes] 65 TCP 192.168.1.34:51299 <-> 91.190.216.125:12350 [proto: 125/Skype][6 pkts/353 bytes <-> 5 pkts/306 bytes] - 66 UDP 192.168.1.34:58631 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] - 67 UDP 192.168.1.34:60688 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] - 68 UDP 192.168.1.34:50055 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 69 UDP 192.168.1.34:51753 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 70 UDP 192.168.1.34:53372 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst11.r.skype.net] - 71 UDP 192.168.1.34:55866 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 72 UDP 192.168.1.34:57592 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst11.r.skype.net] - 73 UDP 192.168.1.34:61095 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] - 74 UDP 192.168.1.34:60413 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] - 75 UDP 192.168.1.34:64364 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] + 66 UDP 192.168.1.34:58631 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] + 67 UDP 192.168.1.34:60688 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] + 68 UDP 192.168.1.34:50055 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 69 UDP 192.168.1.34:51753 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 70 UDP 192.168.1.34:53372 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst11.r.skype.net] + 71 UDP 192.168.1.34:55866 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 72 UDP 192.168.1.34:57592 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst11.r.skype.net] + 73 UDP 192.168.1.34:61095 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] + 74 UDP 192.168.1.34:60413 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] + 75 UDP 192.168.1.34:64364 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] 76 TCP 192.168.1.34:51302 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][6 pkts/353 bytes <-> 4 pkts/246 bytes] - 77 UDP 192.168.1.34:63514 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][8 pkts/576 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] - 78 UDP 192.168.1.34:55028 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: a.config.skype.com] - 79 UDP 192.168.1.34:63342 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 80 UDP 192.168.1.34:64258 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] - 81 UDP 192.168.1.34:64971 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: a.config.skype.com] - 82 UDP 192.168.1.34:59113 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/539 bytes -> 0 pkts/0 bytes][Host: dsn13.d.skype.net] - 83 UDP 192.168.1.34:62875 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/539 bytes -> 0 pkts/0 bytes][Host: dsn13.d.skype.net] - 84 UDP 192.168.1.34:49864 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] - 85 UDP 192.168.1.34:64240 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] + 77 UDP 192.168.1.34:63514 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/576 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] + 78 UDP 192.168.1.34:55028 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: a.config.skype.com] + 79 UDP 192.168.1.34:63342 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 80 UDP 192.168.1.34:64258 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] + 81 UDP 192.168.1.34:64971 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: a.config.skype.com] + 82 UDP 192.168.1.34:59113 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/539 bytes -> 0 pkts/0 bytes][Host: dsn13.d.skype.net] + 83 UDP 192.168.1.34:62875 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/539 bytes -> 0 pkts/0 bytes][Host: dsn13.d.skype.net] + 84 UDP 192.168.1.34:49864 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] + 85 UDP 192.168.1.34:64240 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] 86 TCP 192.168.1.34:51296 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/293 bytes <-> 3 pkts/186 bytes] 87 TCP 192.168.1.34:51308 -> 80.121.84.93:443 [proto: 91/SSL][6 pkts/468 bytes -> 0 pkts/0 bytes] 88 UDP 192.168.1.1:138 -> 192.168.1.34:138 [proto: 10/NetBIOS][2 pkts/452 bytes -> 0 pkts/0 bytes] - 89 UDP 192.168.1.34:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System][2 pkts/432 bytes -> 0 pkts/0 bytes] + 89 UDP 192.168.1.34:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][2 pkts/432 bytes -> 0 pkts/0 bytes] 90 TCP 192.168.1.34:51284 <-> 91.190.218.125:12350 [proto: 125/Skype][3 pkts/237 bytes <-> 3 pkts/186 bytes] 91 TCP 192.168.1.34:51285 <-> 91.190.218.125:12350 [proto: 125/Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] 92 TCP 192.168.1.34:51286 <-> 91.190.218.125:443 [proto: 91.125/SSL.Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] - 93 UDP 192.168.1.34:58061 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 94 UDP 192.168.1.34:59237 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][2 pkts/349 bytes -> 0 pkts/0 bytes] - 95 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network][4 pkts/328 bytes -> 0 pkts/0 bytes] - 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125/Skype][cat: VoIP][5 pkts/300 bytes -> 0 pkts/0 bytes] - 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125/Skype][cat: VoIP][5 pkts/300 bytes -> 0 pkts/0 bytes] - 98 UDP 192.168.1.34:57694 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] - 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][2 pkts/258 bytes -> 0 pkts/0 bytes] - 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System][1 pkts/216 bytes -> 0 pkts/0 bytes] + 93 UDP 192.168.1.34:58061 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 94 UDP 192.168.1.34:59237 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] + 95 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][4 pkts/328 bytes -> 0 pkts/0 bytes] + 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 98 UDP 192.168.1.34:57694 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] + 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] + 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/216 bytes -> 0 pkts/0 bytes] 101 TCP 192.168.1.34:51283 <-> 111.221.74.48:443 [proto: 91.125/SSL.Skype][2 pkts/132 bytes <-> 1 pkts/74 bytes] - 102 UDP 192.168.1.34:59788 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 103 UDP 192.168.1.34:63661 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 104 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][1 pkts/142 bytes -> 0 pkts/0 bytes][Lucas-iMac.local] - 105 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System][1 pkts/92 bytes -> 0 pkts/0 bytes] - 106 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System][1 pkts/92 bytes -> 0 pkts/0 bytes] - 107 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] - 108 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 109 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 112 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 113 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 114 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 115 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 116 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 117 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 118 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 119 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125/Skype][cat: VoIP][1 pkts/79 bytes -> 0 pkts/0 bytes] - 120 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 121 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 122 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 123 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 124 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 125 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 126 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 127 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125/Skype][cat: VoIP][1 pkts/78 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 130 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 131 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 132 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 133 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 134 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 135 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 136 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 137 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125/Skype][cat: VoIP][1 pkts/77 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125/Skype][cat: VoIP][1 pkts/76 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/75 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125/Skype][cat: VoIP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125/Skype][cat: VoIP][1 pkts/73 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125/Skype][cat: VoIP][1 pkts/72 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125/Skype][cat: VoIP][1 pkts/71 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125/Skype][cat: VoIP][1 pkts/70 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125/Skype][cat: VoIP][1 pkts/69 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP][1 pkts/68 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125/Skype][cat: VoIP][1 pkts/67 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125/Skype][cat: VoIP][1 pkts/64 bytes -> 0 pkts/0 bytes] - 247 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] - 248 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] - 249 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network][1 pkts/60 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125/Skype][cat: VoIP][1 pkts/60 bytes -> 0 pkts/0 bytes] - 255 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network][1 pkts/46 bytes -> 0 pkts/0 bytes] + 102 UDP 192.168.1.34:59788 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 103 UDP 192.168.1.34:63661 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 104 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/142 bytes -> 0 pkts/0 bytes][Lucas-iMac.local] + 105 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 106 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 107 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] + 108 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 109 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 110 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 112 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 113 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 114 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 115 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 116 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 117 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 118 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 119 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 120 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 121 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 122 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 123 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 124 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 125 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 126 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 127 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 130 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 131 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 133 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 134 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 135 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 136 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 137 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 247 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 248 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 249 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 255 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] Undetected flows: diff --git a/tests/result/smpp_in_general.pcap.out b/tests/result/smpp_in_general.pcap.out index 23a6f8f5d23..816f080f7e2 100644 --- a/tests/result/smpp_in_general.pcap.out +++ b/tests/result/smpp_in_general.pcap.out @@ -1,3 +1,3 @@ SMPP 17 1144 1 - 1 TCP 10.226.202.118:1770 <-> 10.226.202.53:9000 [proto: 207/SMPP][cat: Download-FileTransfer-FileSharing][10 pkts/670 bytes <-> 7 pkts/474 bytes] + 1 TCP 10.226.202.118:1770 <-> 10.226.202.53:9000 [proto: 207/SMPP][cat: Download-FileTransfer-FileSharing/7][10 pkts/670 bytes <-> 7 pkts/474 bytes] diff --git a/tests/result/snapchat.pcap.out b/tests/result/snapchat.pcap.out index dd40de1b0cf..35183e642b1 100644 --- a/tests/result/snapchat.pcap.out +++ b/tests/result/snapchat.pcap.out @@ -1,6 +1,6 @@ SSL_No_Cert 22 2879 1 Snapchat 34 7320 2 - 1 TCP 10.8.0.1:56193 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat][9 pkts/2290 bytes <-> 8 pkts/1653 bytes][client: feelinsonice-hrd.appspot.com] - 2 TCP 10.8.0.1:44536 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat][9 pkts/2345 bytes <-> 8 pkts/1032 bytes][client: feelinsonice-hrd.appspot.com] - 3 TCP 10.8.0.1:33233 <-> 74.125.136.141:443 [proto: 64/SSL_No_Cert][cat: Web][11 pkts/1910 bytes <-> 11 pkts/969 bytes] + 1 TCP 10.8.0.1:56193 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat/9][9 pkts/2290 bytes <-> 8 pkts/1653 bytes][client: feelinsonice-hrd.appspot.com] + 2 TCP 10.8.0.1:44536 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat/9][9 pkts/2345 bytes <-> 8 pkts/1032 bytes][client: feelinsonice-hrd.appspot.com] + 3 TCP 10.8.0.1:33233 <-> 74.125.136.141:443 [proto: 64/SSL_No_Cert][cat: Web/5][11 pkts/1910 bytes <-> 11 pkts/969 bytes] diff --git a/tests/result/starcraft_battle.pcap.out b/tests/result/starcraft_battle.pcap.out index 67ee3177e56..ee66db4dd16 100644 --- a/tests/result/starcraft_battle.pcap.out +++ b/tests/result/starcraft_battle.pcap.out @@ -10,36 +10,36 @@ QUIC 6 475 1 Github 3 234 1 Starcraft 236 51494 6 - 1 TCP 192.168.1.100:3508 <-> 87.248.221.254:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing][90 pkts/5059 bytes <-> 89 pkts/129145 bytes][Host: llnw.blizzard.com] - 2 TCP 192.168.1.100:3517 <-> 213.248.127.130:1119 [proto: 213/Starcraft][cat: Game][126 pkts/9157 bytes <-> 89 pkts/41021 bytes] - 3 TCP 192.168.1.100:3527 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web][15 pkts/971 bytes <-> 26 pkts/36462 bytes][Host: bnetcmsus-a.akamaihd.net] - 4 TCP 192.168.1.100:3528 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web][11 pkts/755 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] - 5 TCP 192.168.1.100:3529 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] - 6 TCP 192.168.1.100:3530 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] - 7 TCP 192.168.1.100:3531 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] - 8 UDP 192.168.1.254:38605 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System][11 pkts/4984 bytes -> 0 pkts/0 bytes] - 9 TCP 192.168.1.100:3525 <-> 80.239.186.40:80 [proto: 7/HTTP][cat: Web][6 pkts/545 bytes <-> 6 pkts/3388 bytes][Host: eu.battle.net] - 10 TCP 192.168.1.100:3526 <-> 80.239.186.40:80 [proto: 7/HTTP][cat: Web][6 pkts/547 bytes <-> 5 pkts/3139 bytes][Host: eu.battle.net] - 11 TCP 192.168.1.100:3516 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web][6 pkts/549 bytes <-> 6 pkts/3131 bytes][Host: eu.launcher.battle.net] - 12 TCP 192.168.1.100:3522 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web][6 pkts/549 bytes <-> 5 pkts/3071 bytes][Host: eu.launcher.battle.net] - 13 TCP 192.168.1.100:3506 <-> 173.194.113.224:80 [proto: 7.126/HTTP.Google][cat: Web][5 pkts/632 bytes <-> 4 pkts/667 bytes][Host: www.google-analytics.com] - 14 TCP 192.168.1.100:3518 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web][6 pkts/473 bytes <-> 4 pkts/753 bytes][Host: nydus.battle.net] - 15 TCP 192.168.1.100:3515 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web][6 pkts/475 bytes <-> 4 pkts/749 bytes][Host: nydus.battle.net] - 16 TCP 192.168.1.100:3521 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web][6 pkts/475 bytes <-> 4 pkts/749 bytes][Host: nydus.battle.net] - 17 TCP 192.168.1.100:3524 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web][6 pkts/481 bytes <-> 4 pkts/733 bytes][Host: nydus.battle.net] - 18 TCP 192.168.1.100:3523 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web][6 pkts/483 bytes <-> 4 pkts/725 bytes][Host: nydus.battle.net] - 19 TCP 192.168.1.100:3519 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web][5 pkts/482 bytes <-> 4 pkts/497 bytes][Host: eu.launcher.battle.net] + 1 TCP 192.168.1.100:3508 <-> 87.248.221.254:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][90 pkts/5059 bytes <-> 89 pkts/129145 bytes][Host: llnw.blizzard.com] + 2 TCP 192.168.1.100:3517 <-> 213.248.127.130:1119 [proto: 213/Starcraft][cat: Game/8][126 pkts/9157 bytes <-> 89 pkts/41021 bytes] + 3 TCP 192.168.1.100:3527 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][15 pkts/971 bytes <-> 26 pkts/36462 bytes][Host: bnetcmsus-a.akamaihd.net] + 4 TCP 192.168.1.100:3528 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][11 pkts/755 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] + 5 TCP 192.168.1.100:3529 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] + 6 TCP 192.168.1.100:3530 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] + 7 TCP 192.168.1.100:3531 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][11 pkts/752 bytes <-> 18 pkts/24350 bytes][Host: bnetcmsus-a.akamaihd.net] + 8 UDP 192.168.1.254:38605 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][11 pkts/4984 bytes -> 0 pkts/0 bytes] + 9 TCP 192.168.1.100:3525 <-> 80.239.186.40:80 [proto: 7/HTTP][cat: Web/5][6 pkts/545 bytes <-> 6 pkts/3388 bytes][Host: eu.battle.net] + 10 TCP 192.168.1.100:3526 <-> 80.239.186.40:80 [proto: 7/HTTP][cat: Web/5][6 pkts/547 bytes <-> 5 pkts/3139 bytes][Host: eu.battle.net] + 11 TCP 192.168.1.100:3516 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web/5][6 pkts/549 bytes <-> 6 pkts/3131 bytes][Host: eu.launcher.battle.net] + 12 TCP 192.168.1.100:3522 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web/5][6 pkts/549 bytes <-> 5 pkts/3071 bytes][Host: eu.launcher.battle.net] + 13 TCP 192.168.1.100:3506 <-> 173.194.113.224:80 [proto: 7.126/HTTP.Google][cat: Web/5][5 pkts/632 bytes <-> 4 pkts/667 bytes][Host: www.google-analytics.com] + 14 TCP 192.168.1.100:3518 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/473 bytes <-> 4 pkts/753 bytes][Host: nydus.battle.net] + 15 TCP 192.168.1.100:3515 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/475 bytes <-> 4 pkts/749 bytes][Host: nydus.battle.net] + 16 TCP 192.168.1.100:3521 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/475 bytes <-> 4 pkts/749 bytes][Host: nydus.battle.net] + 17 TCP 192.168.1.100:3524 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/481 bytes <-> 4 pkts/733 bytes][Host: nydus.battle.net] + 18 TCP 192.168.1.100:3523 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/483 bytes <-> 4 pkts/725 bytes][Host: nydus.battle.net] + 19 TCP 192.168.1.100:3519 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web/5][5 pkts/482 bytes <-> 4 pkts/497 bytes][Host: eu.launcher.battle.net] 20 TCP 192.168.1.100:3427 <-> 80.239.208.193:1119 [proto: 213/Starcraft][6 pkts/376 bytes <-> 7 pkts/526 bytes] - 21 TCP 192.168.1.100:3512 <-> 12.129.222.54:80 [proto: 7.76/HTTP.WorldOfWarcraft][cat: Game][5 pkts/367 bytes <-> 4 pkts/513 bytes][Host: us.scan.worldofwarcraft.com] - 22 UDP 192.168.1.100:55468 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/168 bytes <-> 2 pkts/388 bytes][Host: bnetcmsus-a.akamaihd.net] - 23 UDP 173.194.40.22:443 <-> 192.168.1.100:53568 [proto: 188/QUIC][cat: Web][3 pkts/243 bytes <-> 3 pkts/232 bytes] - 24 UDP 192.168.1.100:58851 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/173 bytes <-> 2 pkts/282 bytes][Host: 22.40.194.173.in-addr.arpa] - 25 UDP 192.168.1.100:60026 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/154 bytes <-> 2 pkts/288 bytes][Host: llnw.blizzard.com] - 26 UDP 192.168.1.100:58818 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/172 bytes <-> 2 pkts/260 bytes][Host: 91.252.30.192.in-addr.arpa] - 27 UDP 192.168.1.100:58831 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/172 bytes <-> 2 pkts/245 bytes][Host: 254.1.168.192.in-addr.arpa] + 21 TCP 192.168.1.100:3512 <-> 12.129.222.54:80 [proto: 7.76/HTTP.WorldOfWarcraft][cat: Game/8][5 pkts/367 bytes <-> 4 pkts/513 bytes][Host: us.scan.worldofwarcraft.com] + 22 UDP 192.168.1.100:55468 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/168 bytes <-> 2 pkts/388 bytes][Host: bnetcmsus-a.akamaihd.net] + 23 UDP 173.194.40.22:443 <-> 192.168.1.100:53568 [proto: 188/QUIC][cat: Web/5][3 pkts/243 bytes <-> 3 pkts/232 bytes] + 24 UDP 192.168.1.100:58851 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/173 bytes <-> 2 pkts/282 bytes][Host: 22.40.194.173.in-addr.arpa] + 25 UDP 192.168.1.100:60026 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/154 bytes <-> 2 pkts/288 bytes][Host: llnw.blizzard.com] + 26 UDP 192.168.1.100:58818 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/172 bytes <-> 2 pkts/260 bytes][Host: 91.252.30.192.in-addr.arpa] + 27 UDP 192.168.1.100:58831 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/172 bytes <-> 2 pkts/245 bytes][Host: 254.1.168.192.in-addr.arpa] 28 TCP 192.168.1.100:3532 <-> 2.228.46.112:80 [proto: 7/HTTP][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] 29 TCP 192.168.1.100:3533 <-> 2.228.46.112:80 [proto: 7/HTTP][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] - 30 UDP 192.168.1.100:53145 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/152 bytes <-> 2 pkts/184 bytes][Host: nydus.battle.net] + 30 UDP 192.168.1.100:53145 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/152 bytes <-> 2 pkts/184 bytes][Host: nydus.battle.net] 31 TCP 192.168.1.100:3479 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] 32 TCP 192.168.1.100:3480 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] 33 TCP 192.168.1.100:3481 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] @@ -50,11 +50,11 @@ Starcraft 236 51494 6 38 TCP 192.168.1.100:3492 <-> 2.228.46.104:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] 39 TCP 192.30.252.91:443 <-> 192.168.1.100:3213 [proto: 91.203/SSL.Github][2 pkts/145 bytes <-> 1 pkts/89 bytes] 40 TCP 192.168.1.100:3486 <-> 199.38.164.156:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/120 bytes] - 41 UDP 192.168.1.100:58844 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network][1 pkts/86 bytes <-> 1 pkts/124 bytes][Host: 40.186.239.80.in-addr.arpa] + 41 UDP 192.168.1.100:58844 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][1 pkts/86 bytes <-> 1 pkts/124 bytes][Host: 40.186.239.80.in-addr.arpa] 42 TCP 192.168.1.100:3484 <-> 173.194.113.224:443 [proto: 91.126/SSL.Google][2 pkts/108 bytes <-> 1 pkts/60 bytes] 43 TCP 192.168.1.100:2759 <-> 64.233.184.188:5228 [proto: 126/Google][1 pkts/55 bytes <-> 1 pkts/66 bytes] 44 TCP 192.168.1.100:3052 <-> 216.58.212.110:443 [proto: 91.126/SSL.Google][1 pkts/55 bytes <-> 1 pkts/66 bytes] - 45 IGMP 192.168.1.107:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network][2 pkts/120 bytes -> 0 pkts/0 bytes] + 45 IGMP 192.168.1.107:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][2 pkts/120 bytes -> 0 pkts/0 bytes] 46 UDP 192.168.1.100:53146 <-> 5.42.180.154:1119 [proto: 213/Starcraft][1 pkts/44 bytes <-> 1 pkts/60 bytes] 47 UDP 192.168.1.100:53146 <-> 62.115.246.51:1119 [proto: 213/Starcraft][1 pkts/44 bytes <-> 1 pkts/60 bytes] 48 UDP 192.168.1.100:6113 <-> 213.248.127.166:1119 [proto: 213/Starcraft][1 pkts/43 bytes <-> 1 pkts/60 bytes] diff --git a/tests/result/tinc.pcap.out b/tests/result/tinc.pcap.out index 41ccda23ad7..297bb051e25 100644 --- a/tests/result/tinc.pcap.out +++ b/tests/result/tinc.pcap.out @@ -1,6 +1,6 @@ TINC 317 352291 4 - 1 UDP 185.83.218.112:55656 <-> 131.114.168.27:55656 [proto: 209/TINC][cat: VPN][29 pkts/30038 bytes <-> 105 pkts/139726 bytes] - 2 UDP 131.114.168.27:55655 <-> 185.83.218.112:55655 [proto: 209/TINC][cat: VPN][101 pkts/136966 bytes <-> 29 pkts/32550 bytes] - 3 TCP 131.114.168.27:49290 <-> 185.83.218.112:55656 [proto: 209/TINC][cat: VPN][14 pkts/3812 bytes <-> 13 pkts/3098 bytes] - 4 TCP 131.114.168.27:59244 <-> 185.83.218.112:55655 [proto: 209/TINC][cat: VPN][15 pkts/3169 bytes <-> 11 pkts/2932 bytes] + 1 UDP 185.83.218.112:55656 <-> 131.114.168.27:55656 [proto: 209/TINC][cat: VPN/2][29 pkts/30038 bytes <-> 105 pkts/139726 bytes] + 2 UDP 131.114.168.27:55655 <-> 185.83.218.112:55655 [proto: 209/TINC][cat: VPN/2][101 pkts/136966 bytes <-> 29 pkts/32550 bytes] + 3 TCP 131.114.168.27:49290 <-> 185.83.218.112:55656 [proto: 209/TINC][cat: VPN/2][14 pkts/3812 bytes <-> 13 pkts/3098 bytes] + 4 TCP 131.114.168.27:59244 <-> 185.83.218.112:55655 [proto: 209/TINC][cat: VPN/2][15 pkts/3169 bytes <-> 11 pkts/2932 bytes] diff --git a/tests/result/tor.pcap.out b/tests/result/tor.pcap.out index 0ce97d41753..2cd7fd1da65 100644 --- a/tests/result/tor.pcap.out +++ b/tests/result/tor.pcap.out @@ -4,14 +4,14 @@ DHCPV6 6 906 1 Dropbox 10 1860 1 Tor 3676 3014362 7 - 1 TCP 192.168.1.252:51176 <-> 38.229.70.53:443 [proto: 163/Tor][cat: VPN][693 pkts/181364 bytes <-> 1133 pkts/1331914 bytes] - 2 TCP 192.168.1.252:51112 <-> 38.229.70.53:443 [proto: 163/Tor][cat: VPN][580 pkts/145960 bytes <-> 996 pkts/1242832 bytes] - 3 TCP 192.168.1.252:51110 <-> 91.143.93.242:443 [proto: 163/Tor][cat: VPN][62 pkts/22715 bytes <-> 79 pkts/45823 bytes] - 4 TCP 192.168.1.252:51175 <-> 91.143.93.242:443 [proto: 163/Tor][cat: VPN][17 pkts/5489 bytes <-> 21 pkts/7031 bytes] - 5 TCP 192.168.1.252:51111 <-> 46.59.52.31:443 [proto: 163/Tor][cat: VPN][16 pkts/4858 bytes <-> 18 pkts/6284 bytes] - 6 TCP 192.168.1.252:51174 <-> 212.83.155.250:443 [proto: 163/Tor][cat: VPN][16 pkts/3691 bytes <-> 16 pkts/6740 bytes] - 7 TCP 192.168.1.252:51185 <-> 62.210.137.230:443 [proto: 163/Tor][cat: VPN][15 pkts/3634 bytes <-> 14 pkts/6027 bytes] - 8 UDP 192.168.1.1:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud][10 pkts/1860 bytes -> 0 pkts/0 bytes] - 9 UDP [fe80::c583:1972:5728:7323]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network][6 pkts/906 bytes -> 0 pkts/0 bytes] - 10 UDP 192.168.1.252:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System][1 pkts/252 bytes -> 0 pkts/0 bytes] + 1 TCP 192.168.1.252:51176 <-> 38.229.70.53:443 [proto: 163/Tor][cat: VPN/2][693 pkts/181364 bytes <-> 1133 pkts/1331914 bytes] + 2 TCP 192.168.1.252:51112 <-> 38.229.70.53:443 [proto: 163/Tor][cat: VPN/2][580 pkts/145960 bytes <-> 996 pkts/1242832 bytes] + 3 TCP 192.168.1.252:51110 <-> 91.143.93.242:443 [proto: 163/Tor][cat: VPN/2][62 pkts/22715 bytes <-> 79 pkts/45823 bytes] + 4 TCP 192.168.1.252:51175 <-> 91.143.93.242:443 [proto: 163/Tor][cat: VPN/2][17 pkts/5489 bytes <-> 21 pkts/7031 bytes] + 5 TCP 192.168.1.252:51111 <-> 46.59.52.31:443 [proto: 163/Tor][cat: VPN/2][16 pkts/4858 bytes <-> 18 pkts/6284 bytes] + 6 TCP 192.168.1.252:51174 <-> 212.83.155.250:443 [proto: 163/Tor][cat: VPN/2][16 pkts/3691 bytes <-> 16 pkts/6740 bytes] + 7 TCP 192.168.1.252:51185 <-> 62.210.137.230:443 [proto: 163/Tor][cat: VPN/2][15 pkts/3634 bytes <-> 14 pkts/6027 bytes] + 8 UDP 192.168.1.1:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][10 pkts/1860 bytes -> 0 pkts/0 bytes] + 9 UDP [fe80::c583:1972:5728:7323]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][6 pkts/906 bytes -> 0 pkts/0 bytes] + 10 UDP 192.168.1.252:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/252 bytes -> 0 pkts/0 bytes] 11 TCP 192.168.1.252:51104 -> 157.56.30.46:443 [proto: 91/SSL][1 pkts/60 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/ubntac2.pcap.out b/tests/result/ubntac2.pcap.out index bc1f8ab46cf..bd20ba3e9f5 100644 --- a/tests/result/ubntac2.pcap.out +++ b/tests/result/ubntac2.pcap.out @@ -1,10 +1,10 @@ UBNTAC2 8 1736 8 - 1 UDP 192.168.1.1:34085 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 2 UDP 192.168.1.1:42838 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 3 UDP 192.168.1.1:44641 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 4 UDP 192.168.1.1:47746 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 5 UDP 192.168.1.1:47871 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 6 UDP 192.168.1.1:52220 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 7 UDP 192.168.1.1:55321 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] - 8 UDP 192.168.1.1:59772 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 1 UDP 192.168.1.1:34085 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 2 UDP 192.168.1.1:42838 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 3 UDP 192.168.1.1:44641 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 4 UDP 192.168.1.1:47746 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 5 UDP 192.168.1.1:47871 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 6 UDP 192.168.1.1:52220 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 7 UDP 192.168.1.1:55321 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] + 8 UDP 192.168.1.1:59772 -> 255.255.255.255:10001 [proto: 31/UBNTAC2][cat: Network/14][1 pkts/217 bytes -> 0 pkts/0 bytes][UniFiSecurityGateway.ER-e120.v4.3.33.4936086.161203.2031] diff --git a/tests/result/viber.pcap.out b/tests/result/viber.pcap.out index 99b02a02903..5d2f07f1077 100644 --- a/tests/result/viber.pcap.out +++ b/tests/result/viber.pcap.out @@ -8,29 +8,29 @@ Google 2 164 1 Viber 268 99524 9 QUIC 3 194 1 - 1 TCP 192.168.0.17:53934 <-> 54.230.93.53:443 [proto: 91.144/SSL.Viber][cat: Chat][43 pkts/4571 bytes <-> 46 pkts/60087 bytes][client: dl-media.viber.com][server: *.viber.com] - 2 TCP 192.168.0.17:57520 <-> 54.230.93.96:443 [proto: 91.144/SSL.Viber][cat: Chat][12 pkts/1848 bytes <-> 12 pkts/9317 bytes][client: media.cdn.viber.com][server: *.cdn.viber.com] - 3 TCP 192.168.0.17:49048 <-> 54.187.91.182:443 [proto: 91/SSL][cat: Web][13 pkts/2823 bytes <-> 14 pkts/6552 bytes][client: brahe.apptimize.com][server: *.apptimize.com] + 1 TCP 192.168.0.17:53934 <-> 54.230.93.53:443 [proto: 91.144/SSL.Viber][cat: Chat/9][43 pkts/4571 bytes <-> 46 pkts/60087 bytes][client: dl-media.viber.com][server: *.viber.com] + 2 TCP 192.168.0.17:57520 <-> 54.230.93.96:443 [proto: 91.144/SSL.Viber][cat: Chat/9][12 pkts/1848 bytes <-> 12 pkts/9317 bytes][client: media.cdn.viber.com][server: *.cdn.viber.com] + 3 TCP 192.168.0.17:49048 <-> 54.187.91.182:443 [proto: 91/SSL][cat: Web/5][13 pkts/2823 bytes <-> 14 pkts/6552 bytes][client: brahe.apptimize.com][server: *.apptimize.com] 4 TCP 192.168.0.17:33208 <-> 52.0.253.101:4244 [proto: 144/Viber][32 pkts/6563 bytes <-> 26 pkts/2782 bytes] - 5 TCP 192.168.0.17:43702 <-> 172.217.23.78:443 [proto: 91/SSL][cat: Web][15 pkts/5339 bytes <-> 12 pkts/3436 bytes][client: app-measurement.com] - 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] - 7 TCP 192.168.0.17:55746 <-> 151.101.1.130:443 [proto: 91/SSL][cat: Web][10 pkts/1534 bytes <-> 9 pkts/6239 bytes][client: venetia.iad.appboy.com][server: y.ssl.fastly.net] - 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] + 5 TCP 192.168.0.17:43702 <-> 172.217.23.78:443 [proto: 91/SSL][cat: Web/5][15 pkts/5339 bytes <-> 12 pkts/3436 bytes][client: app-measurement.com] + 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] + 7 TCP 192.168.0.17:55746 <-> 151.101.1.130:443 [proto: 91/SSL][cat: Web/5][10 pkts/1534 bytes <-> 9 pkts/6239 bytes][client: venetia.iad.appboy.com][server: y.ssl.fastly.net] + 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] 9 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 144/Viber][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] 10 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 144/Viber][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] - 11 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] - 12 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] + 11 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] + 12 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] 13 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][4 pkts/272 bytes <-> 2 pkts/140 bytes] 14 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 15 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][4 pkts/412 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] - 17 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] - 18 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] - 19 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] - 20 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] - 21 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188/QUIC][cat: Web][2 pkts/130 bytes <-> 1 pkts/64 bytes] - 22 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] - 23 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] - 24 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network][2 pkts/140 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] + 17 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] + 18 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] + 19 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] + 20 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] + 21 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188/QUIC][cat: Web/5][2 pkts/130 bytes <-> 1 pkts/64 bytes] + 22 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] + 23 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] + 24 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] 25 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 144/Viber][1 pkts/76 bytes <-> 1 pkts/62 bytes] 26 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 144/Viber][1 pkts/76 bytes <-> 1 pkts/62 bytes] diff --git a/tests/result/vnc.pcap.out b/tests/result/vnc.pcap.out index 8f1e321a512..26b58b97144 100644 --- a/tests/result/vnc.pcap.out +++ b/tests/result/vnc.pcap.out @@ -1,4 +1,4 @@ VNC 4551 329158 2 - 1 TCP 95.237.48.208:59791 <-> 192.168.2.110:6900 [proto: 89/VNC][cat: RemoteAccess][2485 pkts/199101 bytes <-> 1058 pkts/57444 bytes] - 2 TCP 95.237.48.208:51559 <-> 192.168.2.110:6900 [proto: 89/VNC][cat: RemoteAccess][684 pkts/54893 bytes <-> 324 pkts/17720 bytes] + 1 TCP 95.237.48.208:59791 <-> 192.168.2.110:6900 [proto: 89/VNC][cat: RemoteAccess/12][2485 pkts/199101 bytes <-> 1058 pkts/57444 bytes] + 2 TCP 95.237.48.208:51559 <-> 192.168.2.110:6900 [proto: 89/VNC][cat: RemoteAccess/12][684 pkts/54893 bytes <-> 324 pkts/17720 bytes] diff --git a/tests/result/waze.pcap.out b/tests/result/waze.pcap.out index 6c87a3ce965..8bf4d88fc71 100644 --- a/tests/result/waze.pcap.out +++ b/tests/result/waze.pcap.out @@ -7,28 +7,28 @@ SSL 8 432 2 Waze 484 289335 19 WhatsApp 15 1341 1 - 1 TCP 10.8.0.1:36100 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web][52 pkts/10860 bytes <-> 55 pkts/74852 bytes][server: *.world.waze.com] - 2 TCP 10.8.0.1:54915 <-> 65.39.128.135:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing][19 pkts/1309 bytes <-> 18 pkts/61896 bytes][Host: xtra1.gpsonextra.net] - 3 TCP 10.8.0.1:39021 <-> 52.17.114.219:443 [proto: 91.135/SSL.Waze][cat: Web][17 pkts/1962 bytes <-> 16 pkts/56934 bytes][server: *.world.waze.com] - 4 TCP 10.8.0.1:36312 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web][17 pkts/2176 bytes <-> 15 pkts/42443 bytes][server: *.world.waze.com] - 5 TCP 10.8.0.1:36316 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web][15 pkts/1540 bytes <-> 13 pkts/26346 bytes][server: *.world.waze.com] - 6 TCP 10.8.0.1:36102 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web][19 pkts/2646 bytes <-> 18 pkts/9338 bytes][server: *.world.waze.com] - 7 TCP 10.8.0.1:39010 <-> 52.17.114.219:443 [proto: 91.135/SSL.Waze][cat: Web][8 pkts/1034 bytes <-> 8 pkts/8151 bytes][server: *.world.waze.com] - 8 TCP 10.8.0.1:51049 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web][12 pkts/1282 bytes <-> 11 pkts/6541 bytes][server: *.waze.com] - 9 TCP 10.8.0.1:51051 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web][11 pkts/1228 bytes <-> 10 pkts/6487 bytes][server: *.waze.com] - 10 TCP 10.8.0.1:36134 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web][12 pkts/1650 bytes <-> 12 pkts/4935 bytes][server: *.world.waze.com] - 11 TCP 10.8.0.1:36137 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web][12 pkts/1522 bytes <-> 11 pkts/4220 bytes][server: *.world.waze.com] - 12 TCP 10.8.0.1:36314 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web][11 pkts/1260 bytes <-> 9 pkts/4413 bytes][server: *.world.waze.com] - 13 TCP 10.8.0.1:51050 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web][9 pkts/1184 bytes <-> 9 pkts/4369 bytes][server: *.waze.com] - 14 TCP 10.8.0.1:45529 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][9 pkts/591 bytes <-> 8 pkts/3424 bytes][Host: roadshields.waze.com] - 15 TCP 10.8.0.1:36585 <-> 173.194.118.48:443 [proto: 64/SSL_No_Cert][cat: Web][7 pkts/1137 bytes <-> 6 pkts/1005 bytes] - 16 TCP 10.8.0.1:45536 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][8 pkts/594 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] - 17 TCP 10.8.0.1:50828 <-> 108.168.176.228:443 [proto: 142/WhatsApp][cat: Chat][8 pkts/673 bytes <-> 7 pkts/668 bytes] - 18 TCP 10.8.0.1:45546 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][7 pkts/557 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] - 19 TCP 10.8.0.1:45538 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][7 pkts/555 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] - 20 TCP 10.8.0.1:45552 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][7 pkts/552 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] - 21 TCP 10.8.0.1:45554 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][7 pkts/550 bytes <-> 7 pkts/769 bytes][Host: cres.waze.com] - 22 TCP 10.8.0.1:45540 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web][7 pkts/553 bytes <-> 7 pkts/733 bytes][Host: roadshields.waze.com] + 1 TCP 10.8.0.1:36100 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web/5][52 pkts/10860 bytes <-> 55 pkts/74852 bytes][server: *.world.waze.com] + 2 TCP 10.8.0.1:54915 <-> 65.39.128.135:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][19 pkts/1309 bytes <-> 18 pkts/61896 bytes][Host: xtra1.gpsonextra.net] + 3 TCP 10.8.0.1:39021 <-> 52.17.114.219:443 [proto: 91.135/SSL.Waze][cat: Web/5][17 pkts/1962 bytes <-> 16 pkts/56934 bytes][server: *.world.waze.com] + 4 TCP 10.8.0.1:36312 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web/5][17 pkts/2176 bytes <-> 15 pkts/42443 bytes][server: *.world.waze.com] + 5 TCP 10.8.0.1:36316 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web/5][15 pkts/1540 bytes <-> 13 pkts/26346 bytes][server: *.world.waze.com] + 6 TCP 10.8.0.1:36102 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web/5][19 pkts/2646 bytes <-> 18 pkts/9338 bytes][server: *.world.waze.com] + 7 TCP 10.8.0.1:39010 <-> 52.17.114.219:443 [proto: 91.135/SSL.Waze][cat: Web/5][8 pkts/1034 bytes <-> 8 pkts/8151 bytes][server: *.world.waze.com] + 8 TCP 10.8.0.1:51049 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web/5][12 pkts/1282 bytes <-> 11 pkts/6541 bytes][server: *.waze.com] + 9 TCP 10.8.0.1:51051 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web/5][11 pkts/1228 bytes <-> 10 pkts/6487 bytes][server: *.waze.com] + 10 TCP 10.8.0.1:36134 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web/5][12 pkts/1650 bytes <-> 12 pkts/4935 bytes][server: *.world.waze.com] + 11 TCP 10.8.0.1:36137 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web/5][12 pkts/1522 bytes <-> 11 pkts/4220 bytes][server: *.world.waze.com] + 12 TCP 10.8.0.1:36314 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web/5][11 pkts/1260 bytes <-> 9 pkts/4413 bytes][server: *.world.waze.com] + 13 TCP 10.8.0.1:51050 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web/5][9 pkts/1184 bytes <-> 9 pkts/4369 bytes][server: *.waze.com] + 14 TCP 10.8.0.1:45529 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][9 pkts/591 bytes <-> 8 pkts/3424 bytes][Host: roadshields.waze.com] + 15 TCP 10.8.0.1:36585 <-> 173.194.118.48:443 [proto: 64/SSL_No_Cert][cat: Web/5][7 pkts/1137 bytes <-> 6 pkts/1005 bytes] + 16 TCP 10.8.0.1:45536 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][8 pkts/594 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] + 17 TCP 10.8.0.1:50828 <-> 108.168.176.228:443 [proto: 142/WhatsApp][cat: Chat/9][8 pkts/673 bytes <-> 7 pkts/668 bytes] + 18 TCP 10.8.0.1:45546 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/557 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] + 19 TCP 10.8.0.1:45538 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/555 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] + 20 TCP 10.8.0.1:45552 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/552 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] + 21 TCP 10.8.0.1:45554 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/550 bytes <-> 7 pkts/769 bytes][Host: cres.waze.com] + 22 TCP 10.8.0.1:45540 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/553 bytes <-> 7 pkts/733 bytes][Host: roadshields.waze.com] 23 TCP 10.16.37.157:41823 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] 24 TCP 10.16.37.157:43991 <-> 200.160.4.31:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] 25 TCP 10.16.37.157:46473 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] @@ -38,7 +38,7 @@ WhatsApp 15 1341 1 29 TCP 10.8.0.1:45169 <-> 200.160.4.198:80 [proto: 7/HTTP][2 pkts/108 bytes <-> 2 pkts/108 bytes] 30 TCP 10.8.0.1:60479 <-> 200.160.4.49:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/108 bytes] 31 TCP 10.8.0.1:60574 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 32 UDP 10.8.0.1:46214 <-> 200.89.75.198:123 [proto: 9/NTP][cat: System][1 pkts/90 bytes <-> 1 pkts/90 bytes] + 32 UDP 10.8.0.1:46214 <-> 200.89.75.198:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] Undetected flows: diff --git a/tests/result/webex.pcap.out b/tests/result/webex.pcap.out index 4360e223b60..fbf34191805 100644 --- a/tests/result/webex.pcap.out +++ b/tests/result/webex.pcap.out @@ -6,46 +6,46 @@ Google 17 6375 1 Webex 1380 818407 43 Amazon 3 174 1 - 1 TCP 10.8.0.1:51155 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative][256 pkts/14707 bytes <-> 257 pkts/329379 bytes][server: *.webex.com] - 2 TCP 10.8.0.1:41348 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][28 pkts/4815 bytes <-> 28 pkts/104881 bytes][client: radcom.webex.com] - 3 TCP 10.8.0.1:41346 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][48 pkts/11540 bytes <-> 47 pkts/80696 bytes][client: radcom.webex.com][server: *.webex.com] - 4 TCP 10.8.0.1:41358 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][19 pkts/2005 bytes <-> 19 pkts/40477 bytes][server: *.webex.com] - 5 TCP 10.8.0.1:51194 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative][12 pkts/1531 bytes <-> 12 pkts/34357 bytes][server: *.webex.com] - 6 TCP 10.8.0.1:41354 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][13 pkts/2145 bytes <-> 13 pkts/24239 bytes][server: *.webex.com] - 7 TCP 10.8.0.1:51154 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative][55 pkts/12583 bytes <-> 50 pkts/6703 bytes][server: *.webex.com] - 8 UDP 10.8.0.1:64538 -> 172.16.1.75:5060 [proto: 100/SIP][cat: VoIP][22 pkts/15356 bytes -> 0 pkts/0 bytes] - 9 TCP 10.8.0.1:51857 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: Collaborative][29 pkts/4559 bytes <-> 21 pkts/5801 bytes][server: *.webex.com] - 10 TCP 10.8.0.1:46211 <-> 54.241.32.14:443 [proto: 91/SSL][cat: Web][16 pkts/1984 bytes <-> 14 pkts/7584 bytes][client: api.crittercism.com][server: *.crittercism.com] - 11 TCP 10.8.0.1:41386 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][9 pkts/1417 bytes <-> 8 pkts/6984 bytes][server: *.webex.com] - 12 TCP 10.8.0.1:41419 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][7 pkts/1309 bytes <-> 7 pkts/6930 bytes][server: *.webex.com] - 13 TCP 10.8.0.1:52730 <-> 173.243.4.76:443 [proto: 91.141/SSL.Webex][cat: Collaborative][9 pkts/1369 bytes <-> 8 pkts/6621 bytes][server: *.webex.com] - 14 TCP 10.8.0.1:44492 <-> 64.68.104.140:443 [proto: 91.141/SSL.Webex][cat: Collaborative][9 pkts/1369 bytes <-> 8 pkts/6600 bytes][server: *.webex.com] - 15 TCP 10.8.0.1:45814 <-> 62.109.231.3:443 [proto: 91.141/SSL.Webex][cat: Collaborative][8 pkts/1315 bytes <-> 8 pkts/6653 bytes][server: *.webex.com] - 16 TCP 10.8.0.1:47498 <-> 209.197.222.159:443 [proto: 91.141/SSL.Webex][cat: Collaborative][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] - 17 TCP 10.8.0.1:57647 <-> 64.68.121.153:443 [proto: 91.141/SSL.Webex][cat: Collaborative][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] - 18 TCP 10.8.0.1:37129 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][cat: Collaborative][9 pkts/1369 bytes <-> 9 pkts/5838 bytes][server: *.webex.com] - 19 TCP 10.8.0.1:51370 <-> 64.68.105.97:443 [proto: 91.141/SSL.Webex][cat: Collaborative][8 pkts/1315 bytes <-> 8 pkts/5784 bytes][server: *.webex.com] - 20 TCP 10.8.0.1:55669 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative][11 pkts/1830 bytes <-> 12 pkts/4811 bytes][server: *.webex.com] - 21 TCP 10.8.0.1:55665 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] - 22 TCP 10.8.0.1:55671 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] - 23 TCP 10.8.0.1:55687 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] - 24 TCP 10.8.0.1:43433 <-> 216.58.208.40:443 [proto: 91.126/SSL.Google][cat: Web][9 pkts/1540 bytes <-> 8 pkts/4835 bytes][client: ssl.google-analytics.com][server: *.google-analytics.com] - 25 TCP 10.8.0.1:51646 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][cat: Collaborative][9 pkts/895 bytes <-> 8 pkts/4398 bytes][server: *.webex.com] - 26 TCP 10.8.0.1:52219 <-> 64.68.121.100:443 [proto: 91.141/SSL.Webex][cat: Collaborative][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] - 27 TCP 10.8.0.1:55969 <-> 64.68.121.99:443 [proto: 91.141/SSL.Webex][cat: Collaborative][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] - 28 TCP 10.8.0.1:49048 <-> 23.44.253.243:443 [proto: 91.141/SSL.Webex][cat: Collaborative][7 pkts/1181 bytes <-> 7 pkts/4021 bytes][server: www.webex.com] - 29 TCP 10.8.0.1:47116 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][cat: Collaborative][7 pkts/461 bytes <-> 6 pkts/4231 bytes][server: *.webex.com] - 30 TCP 10.8.0.1:47841 <-> 114.29.200.11:443 [proto: 91.141/SSL.Webex][cat: Collaborative][6 pkts/407 bytes <-> 5 pkts/4177 bytes][server: *.webex.com] - 31 TCP 10.8.0.1:33551 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web][10 pkts/1465 bytes <-> 11 pkts/1065 bytes] - 32 TCP 10.8.0.1:33553 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web][10 pkts/1388 bytes <-> 10 pkts/1087 bytes] - 33 TCP 10.8.0.1:33512 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web][9 pkts/1357 bytes <-> 9 pkts/615 bytes] - 34 TCP 10.8.0.1:33554 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web][9 pkts/1357 bytes <-> 9 pkts/615 bytes] - 35 TCP 10.8.0.1:59756 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web][6 pkts/970 bytes <-> 6 pkts/821 bytes][Host: cp.pushwoosh.com] - 36 TCP 10.8.0.1:33559 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web][7 pkts/1280 bytes <-> 6 pkts/453 bytes] - 37 TCP 10.8.0.1:59757 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web][5 pkts/624 bytes <-> 5 pkts/767 bytes][Host: cp.pushwoosh.com] + 1 TCP 10.8.0.1:51155 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][256 pkts/14707 bytes <-> 257 pkts/329379 bytes][server: *.webex.com] + 2 TCP 10.8.0.1:41348 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][28 pkts/4815 bytes <-> 28 pkts/104881 bytes][client: radcom.webex.com] + 3 TCP 10.8.0.1:41346 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][48 pkts/11540 bytes <-> 47 pkts/80696 bytes][client: radcom.webex.com][server: *.webex.com] + 4 TCP 10.8.0.1:41358 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][19 pkts/2005 bytes <-> 19 pkts/40477 bytes][server: *.webex.com] + 5 TCP 10.8.0.1:51194 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][12 pkts/1531 bytes <-> 12 pkts/34357 bytes][server: *.webex.com] + 6 TCP 10.8.0.1:41354 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][13 pkts/2145 bytes <-> 13 pkts/24239 bytes][server: *.webex.com] + 7 TCP 10.8.0.1:51154 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][55 pkts/12583 bytes <-> 50 pkts/6703 bytes][server: *.webex.com] + 8 UDP 10.8.0.1:64538 -> 172.16.1.75:5060 [proto: 100/SIP][cat: VoIP/10][22 pkts/15356 bytes -> 0 pkts/0 bytes] + 9 TCP 10.8.0.1:51857 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][29 pkts/4559 bytes <-> 21 pkts/5801 bytes][server: *.webex.com] + 10 TCP 10.8.0.1:46211 <-> 54.241.32.14:443 [proto: 91/SSL][cat: Web/5][16 pkts/1984 bytes <-> 14 pkts/7584 bytes][client: api.crittercism.com][server: *.crittercism.com] + 11 TCP 10.8.0.1:41386 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1417 bytes <-> 8 pkts/6984 bytes][server: *.webex.com] + 12 TCP 10.8.0.1:41419 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1309 bytes <-> 7 pkts/6930 bytes][server: *.webex.com] + 13 TCP 10.8.0.1:52730 <-> 173.243.4.76:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 8 pkts/6621 bytes][server: *.webex.com] + 14 TCP 10.8.0.1:44492 <-> 64.68.104.140:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 8 pkts/6600 bytes][server: *.webex.com] + 15 TCP 10.8.0.1:45814 <-> 62.109.231.3:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/1315 bytes <-> 8 pkts/6653 bytes][server: *.webex.com] + 16 TCP 10.8.0.1:47498 <-> 209.197.222.159:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] + 17 TCP 10.8.0.1:57647 <-> 64.68.121.153:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] + 18 TCP 10.8.0.1:37129 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 9 pkts/5838 bytes][server: *.webex.com] + 19 TCP 10.8.0.1:51370 <-> 64.68.105.97:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/1315 bytes <-> 8 pkts/5784 bytes][server: *.webex.com] + 20 TCP 10.8.0.1:55669 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1830 bytes <-> 12 pkts/4811 bytes][server: *.webex.com] + 21 TCP 10.8.0.1:55665 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 22 TCP 10.8.0.1:55671 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 23 TCP 10.8.0.1:55687 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 24 TCP 10.8.0.1:43433 <-> 216.58.208.40:443 [proto: 91.126/SSL.Google][cat: Web/5][9 pkts/1540 bytes <-> 8 pkts/4835 bytes][client: ssl.google-analytics.com][server: *.google-analytics.com] + 25 TCP 10.8.0.1:51646 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/895 bytes <-> 8 pkts/4398 bytes][server: *.webex.com] + 26 TCP 10.8.0.1:52219 <-> 64.68.121.100:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] + 27 TCP 10.8.0.1:55969 <-> 64.68.121.99:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] + 28 TCP 10.8.0.1:49048 <-> 23.44.253.243:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1181 bytes <-> 7 pkts/4021 bytes][server: www.webex.com] + 29 TCP 10.8.0.1:47116 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/461 bytes <-> 6 pkts/4231 bytes][server: *.webex.com] + 30 TCP 10.8.0.1:47841 <-> 114.29.200.11:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][6 pkts/407 bytes <-> 5 pkts/4177 bytes][server: *.webex.com] + 31 TCP 10.8.0.1:33551 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][10 pkts/1465 bytes <-> 11 pkts/1065 bytes] + 32 TCP 10.8.0.1:33553 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][10 pkts/1388 bytes <-> 10 pkts/1087 bytes] + 33 TCP 10.8.0.1:33512 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][9 pkts/1357 bytes <-> 9 pkts/615 bytes] + 34 TCP 10.8.0.1:33554 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][9 pkts/1357 bytes <-> 9 pkts/615 bytes] + 35 TCP 10.8.0.1:59756 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web/5][6 pkts/970 bytes <-> 6 pkts/821 bytes][Host: cp.pushwoosh.com] + 36 TCP 10.8.0.1:33559 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][7 pkts/1280 bytes <-> 6 pkts/453 bytes] + 37 TCP 10.8.0.1:59757 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web/5][5 pkts/624 bytes <-> 5 pkts/767 bytes][Host: cp.pushwoosh.com] 38 UDP 10.8.0.1:51772 <-> 62.109.229.158:9000 [proto: 141/Webex][14 pkts/1071 bytes <-> 2 pkts/100 bytes] - 39 TCP 10.8.0.1:41350 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][6 pkts/614 bytes <-> 5 pkts/399 bytes][client: radcom.webex.com] - 40 TCP 10.8.0.1:41351 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative][5 pkts/560 bytes <-> 4 pkts/345 bytes][client: radcom.webex.com] + 39 TCP 10.8.0.1:41350 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][6 pkts/614 bytes <-> 5 pkts/399 bytes][client: radcom.webex.com] + 40 TCP 10.8.0.1:41351 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][5 pkts/560 bytes <-> 4 pkts/345 bytes][client: radcom.webex.com] 41 TCP 10.8.0.1:51190 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][7 pkts/501 bytes <-> 4 pkts/216 bytes] 42 TCP 10.8.0.1:37139 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] 43 TCP 10.8.0.1:41394 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] diff --git a/tests/result/wechat.pcap.out b/tests/result/wechat.pcap.out index ad06329adb1..b9c7c3de062 100644 --- a/tests/result/wechat.pcap.out +++ b/tests/result/wechat.pcap.out @@ -14,52 +14,52 @@ WeChat 1251 606425 49 GoogleDocs 15 5114 2 1 TCP 203.205.151.162:443 <-> 192.168.1.103:54058 [proto: 91.197/SSL.WeChat][88 pkts/15114 bytes <-> 91 pkts/61842 bytes] - 2 TCP 192.168.1.103:54101 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][46 pkts/12575 bytes <-> 40 pkts/53424 bytes][client: web.wechat.com][server: web.wechat.com] - 3 TCP 192.168.1.103:54103 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][50 pkts/23958 bytes <-> 46 pkts/39684 bytes][client: web.wechat.com][server: web.wechat.com] - 4 TCP 192.168.1.103:54113 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][38 pkts/8933 bytes <-> 35 pkts/35112 bytes][client: web.wechat.com][server: web.wechat.com] - 5 TCP 192.168.1.103:54099 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][25 pkts/9013 bytes <-> 29 pkts/27440 bytes][client: web.wechat.com][server: web.wechat.com] - 6 TCP 192.168.1.103:54119 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][26 pkts/8129 bytes <-> 24 pkts/22836 bytes][client: web.wechat.com][server: web.wechat.com] - 7 TCP 192.168.1.103:58038 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat][34 pkts/17556 bytes <-> 25 pkts/12172 bytes][client: web.wechat.com][server: web.wechat.com] - 8 TCP 192.168.1.103:54089 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][21 pkts/7826 bytes <-> 20 pkts/18761 bytes][client: web.wechat.com][server: web.wechat.com] - 9 TCP 192.168.1.103:54095 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][21 pkts/7825 bytes <-> 18 pkts/17898 bytes][client: web.wechat.com][server: web.wechat.com] - 10 TCP 192.168.1.103:58040 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat][29 pkts/17545 bytes <-> 20 pkts/6923 bytes][client: web.wechat.com][server: web.wechat.com] - 11 TCP 192.168.1.103:54097 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][25 pkts/12063 bytes <-> 19 pkts/7932 bytes][client: web.wechat.com][server: web.wechat.com] - 12 TCP 192.168.1.103:54094 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][22 pkts/10193 bytes <-> 18 pkts/8262 bytes][client: web.wechat.com][server: web.wechat.com] - 13 TCP 192.168.1.103:54102 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][13 pkts/2317 bytes <-> 15 pkts/15724 bytes][client: web.wechat.com][server: web.wechat.com] - 14 TCP 192.168.1.103:54098 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][22 pkts/8507 bytes <-> 16 pkts/6575 bytes][client: web.wechat.com][server: web.wechat.com] - 15 TCP 192.168.1.103:54117 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][20 pkts/8397 bytes <-> 16 pkts/6566 bytes][client: web.wechat.com][server: web.wechat.com] - 16 TCP 192.168.1.103:58036 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat][15 pkts/6450 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] - 17 TCP 192.168.1.103:54092 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][15 pkts/6438 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] - 18 TCP 192.168.1.103:54100 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][15 pkts/4627 bytes <-> 12 pkts/5905 bytes][client: web.wechat.com][server: web.wechat.com] - 19 TCP 192.168.1.103:54111 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][14 pkts/4626 bytes <-> 12 pkts/5135 bytes][client: web.wechat.com][server: web.wechat.com] - 20 TCP 192.168.1.103:58042 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat][12 pkts/4516 bytes <-> 10 pkts/5004 bytes][client: web.wechat.com][server: web.wechat.com] - 21 TCP 192.168.1.103:43850 <-> 203.205.158.34:443 [proto: 91.48/SSL.QQ][cat: Chat][12 pkts/2005 bytes <-> 12 pkts/6787 bytes][client: res.wx.qq.com][server: wx.qq.com] - 22 TCP 192.168.1.103:38657 <-> 172.217.22.14:443 [proto: 91.126/SSL.Google][cat: Web][17 pkts/2413 bytes <-> 17 pkts/6268 bytes][client: safebrowsing.googleusercontent.com][server: *.googleusercontent.com] - 23 UDP 192.168.1.103:51507 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web][7 pkts/3507 bytes <-> 6 pkts/3329 bytes][Host: ssl.gstatic.com] - 24 UDP 192.168.1.103:57591 <-> 216.58.198.46:443 [proto: 188.241/QUIC.GoogleDocs][cat: Media][6 pkts/2687 bytes <-> 7 pkts/2125 bytes][Host: docs.google.com] - 25 TCP 192.168.1.103:54120 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] - 26 TCP 192.168.1.103:58041 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] - 27 TCP 192.168.1.103:54118 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 8 pkts/3703 bytes][client: web.wechat.com][server: web.wechat.com] - 28 TCP 192.168.1.103:54090 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 29 TCP 192.168.1.103:54096 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 30 TCP 192.168.1.103:54104 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 31 TCP 192.168.1.103:54091 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat][9 pkts/966 bytes <-> 6 pkts/3571 bytes][client: web.wechat.com][server: web.wechat.com] - 32 UDP [fe80::7a92:9cff:fe0f:a88e]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][44 pkts/4488 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.1.103:35601 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web][5 pkts/2035 bytes <-> 5 pkts/1937 bytes][Host: ssl.gstatic.com] - 34 UDP 192.168.1.103:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][44 pkts/3608 bytes -> 0 pkts/0 bytes] + 2 TCP 192.168.1.103:54101 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][46 pkts/12575 bytes <-> 40 pkts/53424 bytes][client: web.wechat.com][server: web.wechat.com] + 3 TCP 192.168.1.103:54103 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][50 pkts/23958 bytes <-> 46 pkts/39684 bytes][client: web.wechat.com][server: web.wechat.com] + 4 TCP 192.168.1.103:54113 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][38 pkts/8933 bytes <-> 35 pkts/35112 bytes][client: web.wechat.com][server: web.wechat.com] + 5 TCP 192.168.1.103:54099 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][25 pkts/9013 bytes <-> 29 pkts/27440 bytes][client: web.wechat.com][server: web.wechat.com] + 6 TCP 192.168.1.103:54119 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][26 pkts/8129 bytes <-> 24 pkts/22836 bytes][client: web.wechat.com][server: web.wechat.com] + 7 TCP 192.168.1.103:58038 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][34 pkts/17556 bytes <-> 25 pkts/12172 bytes][client: web.wechat.com][server: web.wechat.com] + 8 TCP 192.168.1.103:54089 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][21 pkts/7826 bytes <-> 20 pkts/18761 bytes][client: web.wechat.com][server: web.wechat.com] + 9 TCP 192.168.1.103:54095 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][21 pkts/7825 bytes <-> 18 pkts/17898 bytes][client: web.wechat.com][server: web.wechat.com] + 10 TCP 192.168.1.103:58040 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][29 pkts/17545 bytes <-> 20 pkts/6923 bytes][client: web.wechat.com][server: web.wechat.com] + 11 TCP 192.168.1.103:54097 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][25 pkts/12063 bytes <-> 19 pkts/7932 bytes][client: web.wechat.com][server: web.wechat.com] + 12 TCP 192.168.1.103:54094 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][22 pkts/10193 bytes <-> 18 pkts/8262 bytes][client: web.wechat.com][server: web.wechat.com] + 13 TCP 192.168.1.103:54102 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][13 pkts/2317 bytes <-> 15 pkts/15724 bytes][client: web.wechat.com][server: web.wechat.com] + 14 TCP 192.168.1.103:54098 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][22 pkts/8507 bytes <-> 16 pkts/6575 bytes][client: web.wechat.com][server: web.wechat.com] + 15 TCP 192.168.1.103:54117 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][20 pkts/8397 bytes <-> 16 pkts/6566 bytes][client: web.wechat.com][server: web.wechat.com] + 16 TCP 192.168.1.103:58036 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/6450 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] + 17 TCP 192.168.1.103:54092 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/6438 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] + 18 TCP 192.168.1.103:54100 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/4627 bytes <-> 12 pkts/5905 bytes][client: web.wechat.com][server: web.wechat.com] + 19 TCP 192.168.1.103:54111 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][14 pkts/4626 bytes <-> 12 pkts/5135 bytes][client: web.wechat.com][server: web.wechat.com] + 20 TCP 192.168.1.103:58042 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][12 pkts/4516 bytes <-> 10 pkts/5004 bytes][client: web.wechat.com][server: web.wechat.com] + 21 TCP 192.168.1.103:43850 <-> 203.205.158.34:443 [proto: 91.48/SSL.QQ][cat: Chat/9][12 pkts/2005 bytes <-> 12 pkts/6787 bytes][client: res.wx.qq.com][server: wx.qq.com] + 22 TCP 192.168.1.103:38657 <-> 172.217.22.14:443 [proto: 91.126/SSL.Google][cat: Web/5][17 pkts/2413 bytes <-> 17 pkts/6268 bytes][client: safebrowsing.googleusercontent.com][server: *.googleusercontent.com] + 23 UDP 192.168.1.103:51507 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web/5][7 pkts/3507 bytes <-> 6 pkts/3329 bytes][Host: ssl.gstatic.com] + 24 UDP 192.168.1.103:57591 <-> 216.58.198.46:443 [proto: 188.241/QUIC.GoogleDocs][cat: Media/1][6 pkts/2687 bytes <-> 7 pkts/2125 bytes][Host: docs.google.com] + 25 TCP 192.168.1.103:54120 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] + 26 TCP 192.168.1.103:58041 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] + 27 TCP 192.168.1.103:54118 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3703 bytes][client: web.wechat.com][server: web.wechat.com] + 28 TCP 192.168.1.103:54090 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 29 TCP 192.168.1.103:54096 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 30 TCP 192.168.1.103:54104 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 31 TCP 192.168.1.103:54091 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][9 pkts/966 bytes <-> 6 pkts/3571 bytes][client: web.wechat.com][server: web.wechat.com] + 32 UDP [fe80::7a92:9cff:fe0f:a88e]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/4488 bytes -> 0 pkts/0 bytes] + 33 UDP 192.168.1.103:35601 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web/5][5 pkts/2035 bytes <-> 5 pkts/1937 bytes][Host: ssl.gstatic.com] + 34 UDP 192.168.1.103:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/3608 bytes -> 0 pkts/0 bytes] 35 TCP 192.168.1.103:54183 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/2508 bytes -> 0 pkts/0 bytes] - 36 UDP [fe80::91f9:3df3:7436:6cd6]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][14 pkts/1428 bytes -> 0 pkts/0 bytes] + 36 UDP [fe80::91f9:3df3:7436:6cd6]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1428 bytes -> 0 pkts/0 bytes] 37 TCP 192.168.1.103:36017 <-> 64.233.167.188:5228 [proto: 126/Google][10 pkts/660 bytes <-> 10 pkts/660 bytes] - 38 UDP 192.168.1.100:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][14 pkts/1148 bytes -> 0 pkts/0 bytes] + 38 UDP 192.168.1.100:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1148 bytes -> 0 pkts/0 bytes] 39 TCP 192.168.1.103:58039 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][13 pkts/866 bytes <-> 4 pkts/280 bytes] 40 TCP 192.168.1.103:58143 -> 216.58.205.131:443 [proto: 91.126/SSL.Google][3 pkts/1078 bytes -> 0 pkts/0 bytes] 41 TCP 203.205.151.162:443 <-> 192.168.1.103:54084 [proto: 91.197/SSL.WeChat][3 pkts/802 bytes <-> 3 pkts/198 bytes] - 42 UDP 192.168.1.100:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System][9 pkts/828 bytes -> 0 pkts/0 bytes] - 43 IGMP 192.168.1.100:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network][15 pkts/810 bytes -> 0 pkts/0 bytes] - 44 UDP 192.168.1.100:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System][3 pkts/751 bytes -> 0 pkts/0 bytes] + 42 UDP 192.168.1.100:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][9 pkts/828 bytes -> 0 pkts/0 bytes] + 43 IGMP 192.168.1.100:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][15 pkts/810 bytes -> 0 pkts/0 bytes] + 44 UDP 192.168.1.100:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][3 pkts/751 bytes -> 0 pkts/0 bytes] 45 TCP 192.168.1.103:54112 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 4 pkts/280 bytes] 46 TCP 192.168.1.103:54114 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 4 pkts/280 bytes] - 47 UDP 192.168.1.103:19041 <-> 192.168.1.254:53 [proto: 5.48/DNS.QQ][cat: Chat][1 pkts/73 bytes <-> 1 pkts/537 bytes][Host: res.wx.qq.com] + 47 UDP 192.168.1.103:19041 <-> 192.168.1.254:53 [proto: 5.48/DNS.QQ][cat: Chat/9][1 pkts/73 bytes <-> 1 pkts/537 bytes][Host: res.wx.qq.com] 48 TCP 192.168.1.103:34981 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] 49 TCP 192.168.1.103:34996 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] 50 TCP 192.168.1.103:34999 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] @@ -74,45 +74,45 @@ GoogleDocs 15 5114 2 59 TCP 192.168.1.103:43851 <-> 203.205.158.34:443 [proto: 91/SSL][5 pkts/290 bytes <-> 4 pkts/234 bytes] 60 TCP 192.168.1.103:47627 <-> 216.58.205.78:443 [proto: 91.126/SSL.Google][3 pkts/198 bytes <-> 4 pkts/319 bytes] 61 TCP 192.168.1.103:40740 <-> 203.205.151.211:443 [proto: 91/SSL][4 pkts/216 bytes <-> 4 pkts/253 bytes] - 62 UDP 192.168.1.103:60356 <-> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/74 bytes <-> 1 pkts/391 bytes][Host: web.wechat.com] + 62 UDP 192.168.1.103:60356 <-> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/74 bytes <-> 1 pkts/391 bytes][Host: web.wechat.com] 63 TCP 192.168.1.103:49787 <-> 216.58.205.142:443 [proto: 91.126/SSL.Google][3 pkts/198 bytes <-> 3 pkts/198 bytes] 64 TCP 192.168.1.103:58226 -> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][6 pkts/396 bytes -> 0 pkts/0 bytes] - 65 UDP 192.168.1.103:53734 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/94 bytes <-> 1 pkts/272 bytes][Host: safebrowsing.googleusercontent.com] + 65 UDP 192.168.1.103:53734 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/94 bytes <-> 1 pkts/272 bytes][Host: safebrowsing.googleusercontent.com] 66 TCP 192.168.1.103:58043 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][3 pkts/206 bytes <-> 2 pkts/148 bytes] - 67 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: iphonedimonica] - 68 UDP 192.168.1.103:46078 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] - 69 UDP 192.168.1.103:60562 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] - 70 UDP 192.168.1.103:55862 <-> 192.168.1.254:53 [proto: 5.241/DNS.GoogleDocs][cat: Media][1 pkts/75 bytes <-> 1 pkts/227 bytes][Host: docs.google.com] - 71 IGMP 192.168.1.103:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network][4 pkts/216 bytes -> 0 pkts/0 bytes] + 67 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: iphonedimonica] + 68 UDP 192.168.1.103:46078 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] + 69 UDP 192.168.1.103:60562 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] + 70 UDP 192.168.1.103:55862 <-> 192.168.1.254:53 [proto: 5.241/DNS.GoogleDocs][cat: Media/1][1 pkts/75 bytes <-> 1 pkts/227 bytes][Host: docs.google.com] + 71 IGMP 192.168.1.103:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][4 pkts/216 bytes -> 0 pkts/0 bytes] 72 TCP 192.168.1.103:40741 <-> 203.205.151.211:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 73 IGMP 192.168.1.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network][4 pkts/200 bytes -> 0 pkts/0 bytes] + 73 IGMP 192.168.1.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][4 pkts/200 bytes -> 0 pkts/0 bytes] 74 TCP 192.168.1.103:54085 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 75 UDP [fe80::91f9:3df3:7436:6cd6]:50440 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/180 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] - 76 UDP [fe80::91f9:3df3:7436:6cd6]:49195 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: cansaqcq] - 77 UDP [fe80::91f9:3df3:7436:6cd6]:50577 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] - 78 UDP 192.168.1.103:43705 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] - 79 UDP 192.168.1.103:42856 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/170 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org.lan] - 80 UDP 192.168.1.103:45366 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 81 UDP 192.168.1.103:56367 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 82 UDP 192.168.1.103:41759 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 2.debian.pool.ntp.org] - 83 UDP 192.168.1.103:44063 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org] - 84 UDP 192.168.1.103:42074 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][2 pkts/158 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] - 85 UDP 192.168.1.100:54124 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] - 86 UDP 192.168.1.100:49832 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: cansaqcq] - 87 UDP 192.168.1.100:57401 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] + 75 UDP [fe80::91f9:3df3:7436:6cd6]:50440 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/180 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] + 76 UDP [fe80::91f9:3df3:7436:6cd6]:49195 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: cansaqcq] + 77 UDP [fe80::91f9:3df3:7436:6cd6]:50577 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] + 78 UDP 192.168.1.103:43705 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 79 UDP 192.168.1.103:42856 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/170 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org.lan] + 80 UDP 192.168.1.103:45366 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 81 UDP 192.168.1.103:56367 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 82 UDP 192.168.1.103:41759 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 2.debian.pool.ntp.org] + 83 UDP 192.168.1.103:44063 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org] + 84 UDP 192.168.1.103:42074 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][2 pkts/158 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] + 85 UDP 192.168.1.100:54124 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] + 86 UDP 192.168.1.100:49832 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: cansaqcq] + 87 UDP 192.168.1.100:57401 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] 88 TCP 192.168.1.103:54106 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/132 bytes -> 0 pkts/0 bytes] 89 TCP 192.168.1.103:54109 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][1 pkts/66 bytes <-> 1 pkts/66 bytes] 90 TCP 192.168.1.103:54110 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][1 pkts/66 bytes <-> 1 pkts/66 bytes] 91 TCP 192.168.1.103:54205 -> 64.233.167.188:443 [proto: 91.126/SSL.Google][2 pkts/132 bytes -> 0 pkts/0 bytes] - 92 ICMPV6 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network][2 pkts/132 bytes -> 0 pkts/0 bytes] - 93 0 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::16]:0 [proto: 102/ICMPV6][cat: Network][1 pkts/110 bytes -> 0 pkts/0 bytes] - 94 UDP 192.168.1.103:37578 -> 193.204.114.233:123 [proto: 9/NTP][cat: System][1 pkts/90 bytes -> 0 pkts/0 bytes] - 95 UDP 192.168.1.103:44346 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] - 96 UDP 192.168.1.103:53515 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] - 97 ICMPV6 [::]:0 -> [ff02::1:ff86:6c5b]:0 [proto: 102/ICMPV6][cat: Network][1 pkts/86 bytes -> 0 pkts/0 bytes] - 98 UDP 192.168.1.103:33915 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 99 UDP 192.168.1.103:43317 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 100 UDP 192.168.1.103:58165 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 101 UDP 192.168.1.103:59567 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/79 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] - 102 UDP 192.168.1.103:42589 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web][1 pkts/75 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com] - 103 IGMP 192.168.1.108:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network][1 pkts/54 bytes -> 0 pkts/0 bytes] + 92 ICMPV6 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes] + 93 0 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::16]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/110 bytes -> 0 pkts/0 bytes] + 94 UDP 192.168.1.103:37578 -> 193.204.114.233:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] + 95 UDP 192.168.1.103:44346 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 96 UDP 192.168.1.103:53515 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 97 ICMPV6 [::]:0 -> [ff02::1:ff86:6c5b]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/86 bytes -> 0 pkts/0 bytes] + 98 UDP 192.168.1.103:33915 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 99 UDP 192.168.1.103:43317 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 100 UDP 192.168.1.103:58165 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 101 UDP 192.168.1.103:59567 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/79 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] + 102 UDP 192.168.1.103:42589 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com] + 103 IGMP 192.168.1.108:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/54 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/weibo.pcap.out b/tests/result/weibo.pcap.out index 16a72e025c7..8ae9cdea15a 100644 --- a/tests/result/weibo.pcap.out +++ b/tests/result/weibo.pcap.out @@ -6,39 +6,39 @@ Amazon 2 132 1 QUIC 23 4118 2 Sina(Weibo) 418 258007 15 - 1 TCP 192.168.1.105:35803 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][52 pkts/5367 bytes <-> 54 pkts/71536 bytes][Host: img.t.sinajs.cn] - 2 TCP 192.168.1.105:35804 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][32 pkts/3624 bytes <-> 40 pkts/50657 bytes][Host: img.t.sinajs.cn] - 3 TCP 192.168.1.105:51698 <-> 93.188.134.137:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][40 pkts/3462 bytes <-> 39 pkts/34030 bytes][Host: www.weibo.com] - 4 TCP 192.168.1.105:35807 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][27 pkts/2298 bytes <-> 26 pkts/34170 bytes][Host: img.t.sinajs.cn] - 5 TCP 192.168.1.105:35805 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][21 pkts/2323 bytes <-> 20 pkts/20922 bytes][Host: img.t.sinajs.cn] - 6 TCP 192.168.1.105:35809 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][18 pkts/1681 bytes <-> 17 pkts/20680 bytes][Host: img.t.sinajs.cn] - 7 TCP 192.168.1.105:35806 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][7 pkts/946 bytes <-> 6 pkts/3755 bytes][Host: img.t.sinajs.cn] - 8 UDP 192.168.1.105:53656 <-> 216.58.210.227:443 [proto: 188/QUIC][cat: Web][8 pkts/1301 bytes <-> 6 pkts/873 bytes] - 9 UDP 216.58.210.14:443 <-> 192.168.1.105:49361 [proto: 188/QUIC][cat: Web][5 pkts/963 bytes <-> 4 pkts/981 bytes] - 10 TCP 192.168.1.105:59119 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web][5 pkts/736 bytes <-> 4 pkts/863 bytes][Host: weibo.com] - 11 TCP 192.168.1.105:35811 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][3 pkts/604 bytes <-> 2 pkts/140 bytes][Host: js.t.sinajs.cn] - 12 TCP 192.168.1.105:42275 <-> 222.73.28.96:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork][3 pkts/610 bytes <-> 1 pkts/66 bytes][Host: u1.img.mobile.sina.cn] + 1 TCP 192.168.1.105:35803 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][52 pkts/5367 bytes <-> 54 pkts/71536 bytes][Host: img.t.sinajs.cn] + 2 TCP 192.168.1.105:35804 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][32 pkts/3624 bytes <-> 40 pkts/50657 bytes][Host: img.t.sinajs.cn] + 3 TCP 192.168.1.105:51698 <-> 93.188.134.137:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][40 pkts/3462 bytes <-> 39 pkts/34030 bytes][Host: www.weibo.com] + 4 TCP 192.168.1.105:35807 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][27 pkts/2298 bytes <-> 26 pkts/34170 bytes][Host: img.t.sinajs.cn] + 5 TCP 192.168.1.105:35805 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][21 pkts/2323 bytes <-> 20 pkts/20922 bytes][Host: img.t.sinajs.cn] + 6 TCP 192.168.1.105:35809 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][18 pkts/1681 bytes <-> 17 pkts/20680 bytes][Host: img.t.sinajs.cn] + 7 TCP 192.168.1.105:35806 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][7 pkts/946 bytes <-> 6 pkts/3755 bytes][Host: img.t.sinajs.cn] + 8 UDP 192.168.1.105:53656 <-> 216.58.210.227:443 [proto: 188/QUIC][cat: Web/5][8 pkts/1301 bytes <-> 6 pkts/873 bytes] + 9 UDP 216.58.210.14:443 <-> 192.168.1.105:49361 [proto: 188/QUIC][cat: Web/5][5 pkts/963 bytes <-> 4 pkts/981 bytes] + 10 TCP 192.168.1.105:59119 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web/5][5 pkts/736 bytes <-> 4 pkts/863 bytes][Host: weibo.com] + 11 TCP 192.168.1.105:35811 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/604 bytes <-> 2 pkts/140 bytes][Host: js.t.sinajs.cn] + 12 TCP 192.168.1.105:42275 <-> 222.73.28.96:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/610 bytes <-> 1 pkts/66 bytes][Host: u1.img.mobile.sina.cn] 13 TCP 192.168.1.105:50827 <-> 47.89.65.229:443 [proto: 91/SSL][3 pkts/382 bytes <-> 1 pkts/66 bytes][client: g.alicdn.com] - 14 UDP 192.168.1.105:53543 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/75 bytes <-> 1 pkts/191 bytes][Host: img.t.sinajs.cn] - 15 UDP 192.168.1.105:41352 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/74 bytes <-> 1 pkts/190 bytes][Host: js.t.sinajs.cn] - 16 UDP 192.168.1.105:51440 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/72 bytes <-> 1 pkts/171 bytes][Host: g.alicdn.com] - 17 UDP 192.168.1.105:33822 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/76 bytes <-> 1 pkts/166 bytes][Host: login.taobao.com] - 18 UDP 192.168.1.105:18035 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/81 bytes <-> 1 pkts/159 bytes][Host: u1.img.mobile.sina.cn] - 19 UDP 192.168.1.105:50640 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/77 bytes <-> 1 pkts/157 bytes][Host: acjstb.aliyun.com] - 20 UDP 192.168.1.105:7148 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/73 bytes <-> 1 pkts/142 bytes][Host: www.weibo.com] + 14 UDP 192.168.1.105:53543 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/75 bytes <-> 1 pkts/191 bytes][Host: img.t.sinajs.cn] + 15 UDP 192.168.1.105:41352 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/74 bytes <-> 1 pkts/190 bytes][Host: js.t.sinajs.cn] + 16 UDP 192.168.1.105:51440 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/72 bytes <-> 1 pkts/171 bytes][Host: g.alicdn.com] + 17 UDP 192.168.1.105:33822 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/76 bytes <-> 1 pkts/166 bytes][Host: login.taobao.com] + 18 UDP 192.168.1.105:18035 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/81 bytes <-> 1 pkts/159 bytes][Host: u1.img.mobile.sina.cn] + 19 UDP 192.168.1.105:50640 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/77 bytes <-> 1 pkts/157 bytes][Host: acjstb.aliyun.com] + 20 UDP 192.168.1.105:7148 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/73 bytes <-> 1 pkts/142 bytes][Host: www.weibo.com] 21 TCP 192.168.1.105:35808 <-> 93.188.134.246:80 [proto: 7/HTTP][2 pkts/140 bytes <-> 1 pkts/74 bytes] 22 TCP 192.168.1.105:50831 <-> 47.89.65.229:443 [proto: 91/SSL][2 pkts/128 bytes <-> 1 pkts/66 bytes] 23 TCP 192.168.1.105:59120 <-> 114.134.80.162:80 [proto: 7/HTTP][2 pkts/128 bytes <-> 1 pkts/66 bytes] 24 TCP 192.168.1.105:59121 <-> 114.134.80.162:80 [proto: 7/HTTP][2 pkts/128 bytes <-> 1 pkts/66 bytes] - 25 UDP 192.168.1.105:53466 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/74 bytes <-> 1 pkts/112 bytes][Host: log.mmstat.com] - 26 UDP 192.168.1.105:54988 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/69 bytes <-> 1 pkts/85 bytes][Host: weibo.com] + 25 UDP 192.168.1.105:53466 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/112 bytes][Host: log.mmstat.com] + 26 UDP 192.168.1.105:54988 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/69 bytes <-> 1 pkts/85 bytes][Host: weibo.com] 27 TCP 192.168.1.105:34699 <-> 216.58.212.65:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] 28 TCP 192.168.1.105:35154 <-> 216.58.210.206:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] 29 TCP 192.168.1.105:37802 <-> 216.58.212.69:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] 30 TCP 192.168.1.105:40440 <-> 54.225.163.210:443 [proto: 91.178/SSL.Amazon][1 pkts/66 bytes <-> 1 pkts/66 bytes] 31 TCP 192.168.1.105:58480 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] 32 TCP 192.168.1.105:58481 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 33 UDP 192.168.1.105:11798 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: account.weibo.com] + 33 UDP 192.168.1.105:11798 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: account.weibo.com] 34 TCP 192.168.1.105:42280 -> 222.73.28.96:80 [proto: 7/HTTP][1 pkts/74 bytes -> 0 pkts/0 bytes] 35 TCP 192.168.1.105:47721 -> 140.205.170.63:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] 36 TCP 192.168.1.105:47723 -> 140.205.170.63:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] @@ -48,5 +48,5 @@ Sina(Weibo) 418 258007 15 40 TCP 192.168.1.105:52271 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] 41 TCP 192.168.1.105:52272 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] 42 TCP 192.168.1.105:52274 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 43 UDP 192.168.1.105:50533 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork][1 pkts/74 bytes -> 0 pkts/0 bytes][Host: data.weibo.com] - 44 UDP 192.168.1.105:16804 -> 192.168.1.1:53 [proto: 5/DNS][cat: Network][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: c.weibo.cn] + 43 UDP 192.168.1.105:50533 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/74 bytes -> 0 pkts/0 bytes][Host: data.weibo.com] + 44 UDP 192.168.1.105:16804 -> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: c.weibo.cn] diff --git a/tests/result/whatsapp_login_call.pcap.out b/tests/result/whatsapp_login_call.pcap.out index cb4d946502c..f6250fa6747 100644 --- a/tests/result/whatsapp_login_call.pcap.out +++ b/tests/result/whatsapp_login_call.pcap.out @@ -13,19 +13,19 @@ WhatsAppVoice 706 91156 4 AppleStore 85 28087 2 ApplePush 22 5926 1 - 1 UDP 192.168.2.4:51518 <-> 91.253.176.65:9344 [proto: 189/WhatsAppVoice][cat: VoIP][186 pkts/27025 bytes <-> 278 pkts/25895 bytes] - 2 UDP 192.168.2.4:52794 <-> 91.253.176.65:9665 [proto: 189/WhatsAppVoice][cat: VoIP][141 pkts/17530 bytes <-> 57 pkts/12888 bytes] - 3 TCP 192.168.2.4:49202 <-> 184.173.179.37:5222 [proto: 142/WhatsApp][cat: Chat][100 pkts/14711 bytes <-> 80 pkts/10163 bytes] - 4 TCP 192.168.2.4:49204 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate][29 pkts/11770 bytes <-> 24 pkts/6612 bytes][client: p53-buy.itunes.apple.com] - 5 TCP 192.168.2.4:49201 <-> 17.178.104.12:443 [proto: 91.140/SSL.Apple][cat: Web][21 pkts/7644 bytes <-> 17 pkts/9576 bytes][client: query.ess.apple.com][server: *.ess.apple.com] - 6 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate][17 pkts/6166 bytes <-> 15 pkts/3539 bytes][client: p53-buy.itunes.apple.com] - 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238/ApplePush][cat: Cloud][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] - 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] - 9 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][10 pkts/3420 bytes -> 0 pkts/0 bytes][Host: lucas-imac] - 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] - 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud][4 pkts/2176 bytes -> 0 pkts/0 bytes] + 1 UDP 192.168.2.4:51518 <-> 91.253.176.65:9344 [proto: 189/WhatsAppVoice][cat: VoIP/10][186 pkts/27025 bytes <-> 278 pkts/25895 bytes] + 2 UDP 192.168.2.4:52794 <-> 91.253.176.65:9665 [proto: 189/WhatsAppVoice][cat: VoIP/10][141 pkts/17530 bytes <-> 57 pkts/12888 bytes] + 3 TCP 192.168.2.4:49202 <-> 184.173.179.37:5222 [proto: 142/WhatsApp][cat: Chat/9][100 pkts/14711 bytes <-> 80 pkts/10163 bytes] + 4 TCP 192.168.2.4:49204 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][29 pkts/11770 bytes <-> 24 pkts/6612 bytes][client: p53-buy.itunes.apple.com] + 5 TCP 192.168.2.4:49201 <-> 17.178.104.12:443 [proto: 91.140/SSL.Apple][cat: Web/5][21 pkts/7644 bytes <-> 17 pkts/9576 bytes][client: query.ess.apple.com][server: *.ess.apple.com] + 6 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][17 pkts/6166 bytes <-> 15 pkts/3539 bytes][client: p53-buy.itunes.apple.com] + 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238/ApplePush][cat: Cloud/13][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] + 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] + 9 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][10 pkts/3420 bytes -> 0 pkts/0 bytes][Host: lucas-imac] + 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] + 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/2176 bytes -> 0 pkts/0 bytes] 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][9 pkts/1130 bytes <-> 8 pkts/868 bytes] - 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network][10 pkts/700 bytes -> 0 pkts/0 bytes] + 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network/14][10 pkts/700 bytes -> 0 pkts/0 bytes] 14 UDP 192.168.2.4:51518 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] 15 UDP 192.168.2.4:51518 <-> 31.13.70.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] 16 UDP 192.168.2.4:51518 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] @@ -42,13 +42,13 @@ ApplePush 22 5926 1 27 UDP 192.168.2.4:52794 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] 28 TCP 192.168.2.4:49172 <-> 23.50.148.228:443 [proto: 91/SSL][3 pkts/174 bytes <-> 2 pkts/217 bytes] 29 TCP 192.168.2.4:49192 <-> 93.186.135.8:80 [proto: 7/HTTP][3 pkts/198 bytes <-> 2 pkts/132 bytes] - 30 UDP 192.168.2.4:51897 <-> 192.168.2.1:53 [proto: 5.140/DNS.Apple][cat: Web][1 pkts/79 bytes <-> 1 pkts/251 bytes][Host: query.ess.apple.com] - 31 UDP 192.168.2.4:52190 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e13.whatsapp.net] - 32 UDP 192.168.2.1:57621 -> 192.168.2.255:57621 [proto: 156/Spotify][cat: Streaming][3 pkts/258 bytes -> 0 pkts/0 bytes] - 33 UDP [fe80::c42c:3ff:fe60:6a64]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][2 pkts/258 bytes -> 0 pkts/0 bytes] - 34 UDP [fe80::da30:62ff:fe56:1c]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][2 pkts/258 bytes -> 0 pkts/0 bytes] - 35 UDP 169.254.166.207:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][2 pkts/218 bytes -> 0 pkts/0 bytes] - 36 UDP 192.168.2.1:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][2 pkts/218 bytes -> 0 pkts/0 bytes] + 30 UDP 192.168.2.4:51897 <-> 192.168.2.1:53 [proto: 5.140/DNS.Apple][cat: Web/5][1 pkts/79 bytes <-> 1 pkts/251 bytes][Host: query.ess.apple.com] + 31 UDP 192.168.2.4:52190 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e13.whatsapp.net] + 32 UDP 192.168.2.1:57621 -> 192.168.2.255:57621 [proto: 156/Spotify][cat: Streaming/17][3 pkts/258 bytes -> 0 pkts/0 bytes] + 33 UDP [fe80::c42c:3ff:fe60:6a64]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] + 34 UDP [fe80::da30:62ff:fe56:1c]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] + 35 UDP 169.254.166.207:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/218 bytes -> 0 pkts/0 bytes] + 36 UDP 192.168.2.1:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/218 bytes -> 0 pkts/0 bytes] 37 TCP 192.168.2.4:49173 <-> 93.186.135.82:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] 38 TCP 192.168.2.4:49174 <-> 5.178.42.26:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] 39 TCP 192.168.2.4:49194 <-> 93.62.150.157:443 [proto: 91/SSL][2 pkts/132 bytes <-> 1 pkts/66 bytes] diff --git a/tests/result/whatsapp_login_chat.pcap.out b/tests/result/whatsapp_login_chat.pcap.out index 0972ccc1541..c3aab5c2dfd 100644 --- a/tests/result/whatsapp_login_chat.pcap.out +++ b/tests/result/whatsapp_login_chat.pcap.out @@ -7,11 +7,11 @@ Spotify 1 86 1 ApplePush 6 2095 1 1 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][24 pkts/15117 bytes <-> 20 pkts/6254 bytes] - 2 TCP 192.168.2.4:49206 <-> 158.85.58.15:5222 [proto: 142/WhatsApp][cat: Chat][17 pkts/1794 bytes <-> 13 pkts/1169 bytes] - 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238/ApplePush][cat: Cloud][6 pkts/2095 bytes -> 0 pkts/0 bytes] - 4 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network][6 pkts/2052 bytes -> 0 pkts/0 bytes][Host: lucas-imac] - 5 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 6 UDP 192.168.2.4:61697 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e12.whatsapp.net] - 7 UDP [fe80::189c:c31b:1298:224]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network][1 pkts/111 bytes -> 0 pkts/0 bytes] - 8 UDP 192.168.2.4:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network][1 pkts/91 bytes -> 0 pkts/0 bytes] - 9 UDP 192.168.2.1:57621 -> 192.168.2.255:57621 [proto: 156/Spotify][cat: Streaming][1 pkts/86 bytes -> 0 pkts/0 bytes] + 2 TCP 192.168.2.4:49206 <-> 158.85.58.15:5222 [proto: 142/WhatsApp][cat: Chat/9][17 pkts/1794 bytes <-> 13 pkts/1169 bytes] + 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/2095 bytes -> 0 pkts/0 bytes] + 4 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][6 pkts/2052 bytes -> 0 pkts/0 bytes][Host: lucas-imac] + 5 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] + 6 UDP 192.168.2.4:61697 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e12.whatsapp.net] + 7 UDP [fe80::189c:c31b:1298:224]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/111 bytes -> 0 pkts/0 bytes] + 8 UDP 192.168.2.4:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes] + 9 UDP 192.168.2.1:57621 -> 192.168.2.255:57621 [proto: 156/Spotify][cat: Streaming/17][1 pkts/86 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/whatsapp_voice_and_message.pcap.out b/tests/result/whatsapp_voice_and_message.pcap.out index e35e49fd33b..df4f997e198 100644 --- a/tests/result/whatsapp_voice_and_message.pcap.out +++ b/tests/result/whatsapp_voice_and_message.pcap.out @@ -2,11 +2,11 @@ SkypeCallIn 9 1184 1 STUN 35 4732 7 WhatsApp 217 22139 5 - 1 TCP 10.8.0.1:42241 <-> 173.192.222.189:5222 [proto: 142/WhatsApp][cat: Chat][30 pkts/2539 bytes <-> 32 pkts/3070 bytes] - 2 TCP 10.8.0.1:35480 <-> 184.173.179.46:443 [proto: 142/WhatsApp][cat: Chat][24 pkts/3029 bytes <-> 22 pkts/1961 bytes] - 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] - 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] - 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] + 1 TCP 10.8.0.1:42241 <-> 173.192.222.189:5222 [proto: 142/WhatsApp][cat: Chat/9][30 pkts/2539 bytes <-> 32 pkts/3070 bytes] + 2 TCP 10.8.0.1:35480 <-> 184.173.179.46:443 [proto: 142/WhatsApp][cat: Chat/9][24 pkts/3029 bytes <-> 22 pkts/1961 bytes] + 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat/9][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] + 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat/9][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] + 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat/9][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][5 pkts/840 bytes <-> 4 pkts/344 bytes] 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] diff --git a/tests/result/whatsappfiles.pcap.out b/tests/result/whatsappfiles.pcap.out index 241e2d3e448..6feb992170f 100644 --- a/tests/result/whatsappfiles.pcap.out +++ b/tests/result/whatsappfiles.pcap.out @@ -1,4 +1,4 @@ WhatsAppFiles 620 452233 2 - 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing][132 pkts/9906 bytes <-> 178 pkts/237405 bytes] - 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing][161 pkts/189194 bytes <-> 149 pkts/15728 bytes] + 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][132 pkts/9906 bytes <-> 178 pkts/237405 bytes][client: mmg-fna.whatsapp.net] + 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][161 pkts/189194 bytes <-> 149 pkts/15728 bytes][client: mmg-fna.whatsapp.net][server: *.whatsapp.net] diff --git a/tests/result/youtube_quic.pcap.out b/tests/result/youtube_quic.pcap.out index 04388e419d3..79012ce7835 100644 --- a/tests/result/youtube_quic.pcap.out +++ b/tests/result/youtube_quic.pcap.out @@ -1,6 +1,6 @@ YouTube 258 178495 1 Google 31 13144 2 - 1 UDP 192.168.1.7:56074 <-> 216.58.198.33:443 [proto: 188.124/QUIC.YouTube][cat: Media][113 pkts/16111 bytes <-> 145 pkts/162384 bytes][Host: yt3.ggpht.com] - 2 UDP 192.168.1.7:53859 <-> 216.58.205.66:443 [proto: 188.126/QUIC.Google][cat: Web][9 pkts/3929 bytes <-> 9 pkts/4736 bytes][Host: googleads.g.doubleclick.net] - 3 UDP 192.168.1.7:54997 <-> 216.58.205.66:443 [proto: 188.126/QUIC.Google][cat: Web][7 pkts/2312 bytes <-> 6 pkts/2167 bytes][Host: pagead2.googlesyndication.com] + 1 UDP 192.168.1.7:56074 <-> 216.58.198.33:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][113 pkts/16111 bytes <-> 145 pkts/162384 bytes][Host: yt3.ggpht.com] + 2 UDP 192.168.1.7:53859 <-> 216.58.205.66:443 [proto: 188.126/QUIC.Google][cat: Web/5][9 pkts/3929 bytes <-> 9 pkts/4736 bytes][Host: googleads.g.doubleclick.net] + 3 UDP 192.168.1.7:54997 <-> 216.58.205.66:443 [proto: 188.126/QUIC.Google][cat: Web/5][7 pkts/2312 bytes <-> 6 pkts/2167 bytes][Host: pagead2.googlesyndication.com] diff --git a/tests/result/youtubeupload.pcap.out b/tests/result/youtubeupload.pcap.out index b01ca251c4c..6e65c9abd5a 100644 --- a/tests/result/youtubeupload.pcap.out +++ b/tests/result/youtubeupload.pcap.out @@ -1,5 +1,5 @@ YouTubeUpload 137 127038 3 - 1 UDP 192.168.2.27:51925 <-> 172.217.23.111:443 [proto: 188.136/QUIC.YouTubeUpload][cat: Media][80 pkts/100473 bytes <-> 20 pkts/6003 bytes][Host: upload.youtube.com] - 2 UDP 192.168.2.27:62232 <-> 172.217.23.111:443 [proto: 188.136/QUIC.YouTubeUpload][cat: Media][13 pkts/8651 bytes <-> 11 pkts/6463 bytes][Host: upload.youtube.com] - 3 TCP 192.168.2.27:57452 <-> 172.217.23.111:443 [proto: 91.136/SSL.YouTubeUpload][cat: Media][6 pkts/649 bytes <-> 7 pkts/4799 bytes][client: upload.youtube.com][server: upload.video.google.com] + 1 UDP 192.168.2.27:51925 <-> 172.217.23.111:443 [proto: 188.136/QUIC.YouTubeUpload][cat: Media/1][80 pkts/100473 bytes <-> 20 pkts/6003 bytes][Host: upload.youtube.com] + 2 UDP 192.168.2.27:62232 <-> 172.217.23.111:443 [proto: 188.136/QUIC.YouTubeUpload][cat: Media/1][13 pkts/8651 bytes <-> 11 pkts/6463 bytes][Host: upload.youtube.com] + 3 TCP 192.168.2.27:57452 <-> 172.217.23.111:443 [proto: 91.136/SSL.YouTubeUpload][cat: Media/1][6 pkts/649 bytes <-> 7 pkts/4799 bytes][client: upload.youtube.com][server: upload.video.google.com] From 667e77c609d842a9a41930b590de206fb2b917fe Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 21 Jul 2018 16:02:54 +0200 Subject: [PATCH 017/147] Major code cleanup Converted some not popular protocols to NDPI_PROTOCOL_GENERIC with category detection --- autogen.sh | 2 +- configure.seed | 2 +- example/ndpi_util.h | 4 +- src/include/ndpi_api.h | 6 +- src/include/ndpi_main.h | 5 +- src/include/ndpi_protocol_ids.h | 520 ++++++++++++------------- src/include/ndpi_typedefs.h | 433 ++++++++++---------- src/lib/{Makefile.simple => Makefile} | 6 +- src/lib/Makefile.am | 181 --------- src/lib/ndpi_content_match.c.inc | 61 +-- src/lib/ndpi_main.c | 27 +- src/lib/protocols/afp.c | 8 +- src/lib/protocols/aimini.c | 6 +- src/lib/protocols/ajp.c | 4 - src/lib/protocols/amqp.c | 5 +- src/lib/protocols/apple_push.c | 5 - src/lib/protocols/applejuice.c | 6 +- src/lib/protocols/armagetron.c | 7 +- src/lib/protocols/attic/flash.c | 2 +- src/lib/protocols/attic/ftp.c | 2 +- src/lib/protocols/attic/manolito.c | 2 +- src/lib/protocols/attic/popo.c | 2 +- src/lib/protocols/attic/secondlife.c | 2 +- src/lib/protocols/ayiya.c | 6 +- src/lib/protocols/battlefield.c | 6 +- src/lib/protocols/bgp.c | 6 +- src/lib/protocols/bittorrent.c | 4 - src/lib/protocols/bjnp.c | 12 +- src/lib/protocols/btlib.c | 2 +- src/lib/protocols/checkmk.c | 7 +- src/lib/protocols/ciscovpn.c | 4 - src/lib/protocols/citrix.c | 6 +- src/lib/protocols/coap.c | 4 - src/lib/protocols/collectd.c | 6 +- src/lib/protocols/corba.c | 3 - src/lib/protocols/crossfire.c | 6 +- src/lib/protocols/csgo.c | 4 - src/lib/protocols/dcerpc.c | 5 +- src/lib/protocols/dhcp.c | 6 +- src/lib/protocols/dhcpv6.c | 6 +- src/lib/protocols/diameter.c | 9 +- src/lib/protocols/directconnect.c | 6 +- src/lib/protocols/directdownloadlink.c | 6 +- src/lib/protocols/dns.c | 6 +- src/lib/protocols/dofus.c | 6 +- src/lib/protocols/drda.c | 6 +- src/lib/protocols/dropbox.c | 8 +- src/lib/protocols/eaq.c | 6 +- src/lib/protocols/edonkey.c | 3 - src/lib/protocols/fasttrack.c | 6 +- src/lib/protocols/fbzero.c | 3 - src/lib/protocols/fiesta.c | 5 +- src/lib/protocols/fix.c | 7 +- src/lib/protocols/florensia.c | 6 +- src/lib/protocols/ftp_control.c | 6 +- src/lib/protocols/ftp_data.c | 6 +- src/lib/protocols/git.c | 7 +- src/lib/protocols/gnutella.c | 6 +- src/lib/protocols/gtp.c | 6 +- src/lib/protocols/guildwars.c | 6 +- src/lib/protocols/h323.c | 7 +- src/lib/protocols/halflife2_and_mods.c | 6 +- src/lib/protocols/hangout.c | 5 +- src/lib/protocols/hep.c | 25 +- src/lib/protocols/http.c | 45 +-- src/lib/protocols/http_activesync.c | 40 +- src/lib/protocols/iax.c | 6 +- src/lib/protocols/icecast.c | 28 +- src/lib/protocols/ipp.c | 6 +- src/lib/protocols/irc.c | 9 +- src/lib/protocols/jabber.c | 13 +- src/lib/protocols/kakaotalk_voice.c | 8 +- src/lib/protocols/kerberos.c | 5 +- src/lib/protocols/kontiki.c | 8 +- src/lib/protocols/ldap.c | 5 +- src/lib/protocols/lisp.c | 3 - src/lib/protocols/lotus_notes.c | 6 +- src/lib/protocols/mail_imap.c | 8 +- src/lib/protocols/mail_pop.c | 6 +- src/lib/protocols/mail_smtp.c | 5 +- src/lib/protocols/maplestory.c | 6 +- src/lib/protocols/mdns.c | 5 +- src/lib/protocols/megaco.c | 8 +- src/lib/protocols/mgcp.c | 7 +- src/lib/protocols/mpegts.c | 5 +- src/lib/protocols/mqtt.c | 3 - src/lib/protocols/msn.c | 61 ++- src/lib/protocols/mssql_tds.c | 6 +- src/lib/protocols/mysql.c | 6 +- src/lib/protocols/netbios.c | 6 +- src/lib/protocols/netflow.c | 5 +- src/lib/protocols/nfs.c | 5 +- src/lib/protocols/nintendo.c | 5 +- src/lib/protocols/noe.c | 6 +- src/lib/protocols/non_tcp_udp.c | 62 +-- src/lib/protocols/ntp.c | 5 +- src/lib/protocols/openft.c | 6 +- src/lib/protocols/openvpn.c | 6 +- src/lib/protocols/oracle.c | 4 - src/lib/protocols/oscar.c | 6 +- src/lib/protocols/pando.c | 4 - src/lib/protocols/pcanywhere.c | 5 +- src/lib/protocols/postgres.c | 5 +- src/lib/protocols/pplive.c | 3 - src/lib/protocols/ppstream.c | 5 +- src/lib/protocols/pptp.c | 6 +- src/lib/protocols/qq.c | 12 +- src/lib/protocols/quic.c | 12 +- src/lib/protocols/radius.c | 6 +- src/lib/protocols/rdp.c | 6 +- src/lib/protocols/redis_net.c | 6 +- src/lib/protocols/rsync.c | 6 +- src/lib/protocols/rtcp.c | 10 +- src/lib/protocols/rtmp.c | 3 - src/lib/protocols/rtp.c | 19 +- src/lib/protocols/rtsp.c | 16 +- src/lib/protocols/rx.c | 5 +- src/lib/protocols/sflow.c | 5 +- src/lib/protocols/shoutcast.c | 8 +- src/lib/protocols/sip.c | 21 +- src/lib/protocols/skinny.c | 4 - src/lib/protocols/skype.c | 6 +- src/lib/protocols/smb.c | 5 +- src/lib/protocols/smpp.c | 6 +- src/lib/protocols/snmp.c | 5 +- src/lib/protocols/socks45.c | 5 +- src/lib/protocols/someip.c | 3 - src/lib/protocols/sopcast.c | 5 +- src/lib/protocols/soulseek.c | 6 +- src/lib/protocols/spotify.c | 3 - src/lib/protocols/ssdp.c | 5 +- src/lib/protocols/ssh.c | 5 +- src/lib/protocols/ssl.c | 29 +- src/lib/protocols/starcraft.c | 5 +- src/lib/protocols/stealthnet.c | 5 +- src/lib/protocols/steam.c | 4 - src/lib/protocols/stun.c | 6 +- src/lib/protocols/syslog.c | 6 +- src/lib/protocols/tcp_udp.c | 2 +- src/lib/protocols/teamspeak.c | 3 - src/lib/protocols/teamviewer.c | 5 +- src/lib/protocols/telegram.c | 5 +- src/lib/protocols/telnet.c | 6 +- src/lib/protocols/teredo.c | 5 +- src/lib/protocols/tftp.c | 5 +- src/lib/protocols/thunder.c | 6 +- src/lib/protocols/tinc.c | 5 +- src/lib/protocols/tor.c | 5 +- src/lib/protocols/tvants.c | 6 +- src/lib/protocols/tvuplayer.c | 6 +- src/lib/protocols/ubntac2.c | 5 - src/lib/protocols/usenet.c | 6 +- src/lib/protocols/vhua.c | 5 +- src/lib/protocols/viber.c | 6 +- src/lib/protocols/vmware.c | 6 +- src/lib/protocols/vnc.c | 6 +- src/lib/protocols/warcraft3.c | 5 +- src/lib/protocols/whatsapp.c | 4 - src/lib/protocols/whoisdas.c | 6 +- src/lib/protocols/world_of_kung_fu.c | 5 +- src/lib/protocols/world_of_warcraft.c | 5 +- src/lib/protocols/xbox.c | 6 +- src/lib/protocols/xdmcp.c | 6 +- src/lib/protocols/yahoo.c | 13 +- src/lib/protocols/zattoo.c | 6 +- src/lib/protocols/zeromq.c | 5 +- 166 files changed, 793 insertions(+), 1615 deletions(-) rename src/lib/{Makefile.simple => Makefile} (91%) delete mode 100644 src/lib/Makefile.am diff --git a/autogen.sh b/autogen.sh index fecb6b1f8e4..6ce84c3b40a 100755 --- a/autogen.sh +++ b/autogen.sh @@ -2,7 +2,7 @@ NDPI_MAJOR="2" NDPI_MINOR="3" -NDPI_PATCH="0" +NDPI_PATCH="1" NDPI_VERSION_SHORT="$NDPI_MAJOR.$NDPI_MINOR.$NDPI_PATCH" rm -f configure config.h config.h.in src/lib/Makefile.in diff --git a/configure.seed b/configure.seed index 9813f54c047..993ee03fa1b 100644 --- a/configure.seed +++ b/configure.seed @@ -119,7 +119,7 @@ AC_ARG_ENABLE([debug-messages], AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np])) -AC_CONFIG_FILES([Makefile src/lib/Makefile example/Makefile tests/Makefile libndpi.pc src/include/ndpi_define.h]) +AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile libndpi.pc src/include/ndpi_define.h]) AC_CONFIG_HEADERS(src/include/ndpi_config.h) AC_SUBST(GIT_RELEASE) AC_SUBST(NDPI_MAJOR) diff --git a/example/ndpi_util.h b/example/ndpi_util.h index a6adb88c11d..0ea174aa514 100644 --- a/example/ndpi_util.h +++ b/example/ndpi_util.h @@ -1,7 +1,7 @@ /* * ndpi_util.h * - * Copyright (C) 2011-16 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -24,7 +24,7 @@ * If you concern about performance or have to integrate nDPI in your * application, you could need to reimplement them yourself. * - * WARNING: this API is unstable! Use it at your own risk! + * WARNING: this API is just a demo od nDPI usage: Use it at your own risk! */ #ifndef __NDPI_UTIL_H__ #define __NDPI_UTIL_H__ diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 16ac45de06a..358c0491cd9 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -606,7 +606,7 @@ extern "C" { void ndpi_set_automa(struct ndpi_detection_module_struct *ndpi_struct, void* automa); -#ifdef NDPI_PROTOCOL_HTTP +/* NDPI_PROTOCOL_HTTP */ /** * Retrieve information for HTTP flows * @@ -639,9 +639,8 @@ extern "C" { */ char* ndpi_get_http_content_type(struct ndpi_detection_module_struct *ndpi_mod, struct ndpi_flow_struct *flow); -#endif -#ifdef NDPI_PROTOCOL_TOR +/* NDPI_PROTOCOL_TOR */ /** * Check if the flow could be detected as TOR protocol * @@ -654,7 +653,6 @@ extern "C" { */ int ndpi_is_ssl_tor(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *certificate); -#endif /* Wrappers functions */ /** diff --git a/src/include/ndpi_main.h b/src/include/ndpi_main.h index b76335e02b6..b18efa21aad 100644 --- a/src/include/ndpi_main.h +++ b/src/include/ndpi_main.h @@ -1,7 +1,7 @@ /* * ndpi_main.h * - * Copyright (C) 2011-16 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -105,9 +105,8 @@ extern "C" { extern int ndpi_get_protocol_id_master_proto(struct ndpi_detection_module_struct *ndpi_struct, u_int16_t protocol_id, u_int16_t** tcp_master_proto, u_int16_t** udp_master_proto); -#ifdef NDPI_PROTOCOL_NETBIOS + #/* NDPI_PROTOCOL_NETBIOS */ int ndpi_netbios_name_interpret(char *in, char *out, u_int out_len); -#endif #ifdef NDPI_ENABLE_DEBUG_MESSAGES void ndpi_debug_get_last_log_function_line(struct ndpi_detection_module_struct *ndpi_struct, diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 1a76711697a..59de3ee0e9d 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -33,267 +33,265 @@ #define NDPI_DETECTION_SUPPORT_IPV6 #define NDPI_PROTOCOL_SIZE 2 -#define NDPI_PROTOCOL_UNKNOWN 0 +typedef enum { + NDPI_PROTOCOL_UNKNOWN = 0, + NDPI_PROTOCOL_FTP_CONTROL = 1, /* Tomasz Bujlow */ + NDPI_PROTOCOL_MAIL_POP = 2, + NDPI_PROTOCOL_MAIL_SMTP = 3, + NDPI_PROTOCOL_MAIL_IMAP = 4, + NDPI_PROTOCOL_DNS = 5, + NDPI_PROTOCOL_IPP = 6, + NDPI_PROTOCOL_HTTP = 7, + NDPI_PROTOCOL_MDNS = 8, + NDPI_PROTOCOL_NTP = 9, + NDPI_PROTOCOL_NETBIOS = 10, + NDPI_PROTOCOL_NFS = 11, + NDPI_PROTOCOL_SSDP = 12, + NDPI_PROTOCOL_BGP = 13, + NDPI_PROTOCOL_SNMP = 14, + NDPI_PROTOCOL_XDMCP = 15, + NDPI_PROTOCOL_SMB = 16, + NDPI_PROTOCOL_SYSLOG = 17, + NDPI_PROTOCOL_DHCP = 18, + NDPI_PROTOCOL_POSTGRES = 19, + NDPI_PROTOCOL_MYSQL = 20, + NDPI_PROTOCOL_HOTMAIL = 21, + NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK = 22, + NDPI_PROTOCOL_MAIL_POPS = 23, + NDPI_PROTOCOL_APPLEJUICE = 24, + NDPI_PROTOCOL_DIRECTCONNECT = 25, + NDPI_PROTOCOL_NTOP = 26, + NDPI_PROTOCOL_COAP = 27, + NDPI_PROTOCOL_VMWARE = 28, + NDPI_PROTOCOL_MAIL_SMTPS = 29, + NDPI_PROTOCOL_FBZERO = 30, + NDPI_PROTOCOL_UBNTAC2 = 31, /* Ubiquity UBNT AirControl = 2 - Thomas Fjellstrom */ + NDPI_PROTOCOL_KONTIKI = 32, + NDPI_PROTOCOL_OPENFT = 33, + NDPI_PROTOCOL_FASTTRACK = 34, + NDPI_PROTOCOL_GNUTELLA = 35, + NDPI_PROTOCOL_EDONKEY = 36, /* Tomasz Bujlow */ + NDPI_PROTOCOL_BITTORRENT = 37, + NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, + NDPI_PROTOCOL_MUSICALLY = 39, -#define NDPI_PROTOCOL_NO_MASTER_PROTO NDPI_PROTOCOL_UNKNOWN + NDPI_PROTOCOL_FREE_40 = 40, /* Free */ + NDPI_PROTOCOL_FREE_41 = 41, /* Free */ + NDPI_PROTOCOL_FREE_42 = 42, /* Free */ + NDPI_PROTOCOL_FREE_43 = 43, /* Free */ + NDPI_PROTOCOL_FREE_44 = 44, /* Free */ + NDPI_PROTOCOL_FREE_45 = 45, /* Free */ + NDPI_PROTOCOL_FREE_46 = 46, /* Free */ + + NDPI_PROTOCOL_XBOX = 47, + NDPI_PROTOCOL_QQ = 48, + NDPI_PROTOCOL_SKYPE_CALL_IN = 49, + NDPI_PROTOCOL_RTSP = 50, + NDPI_PROTOCOL_MAIL_IMAPS = 51, + NDPI_PROTOCOL_ICECAST = 52, + NDPI_PROTOCOL_PPLIVE = 53, /* Tomasz Bujlow */ + NDPI_PROTOCOL_PPSTREAM = 54, + NDPI_PROTOCOL_ZATTOO = 55, + NDPI_PROTOCOL_SHOUTCAST = 56, + NDPI_PROTOCOL_SOPCAST = 57, + NDPI_PROTOCOL_TVANTS = 58, + NDPI_PROTOCOL_TVUPLAYER = 59, + NDPI_PROTOCOL_HTTP_DOWNLOAD = 60, + NDPI_PROTOCOL_QQLIVE = 61, + NDPI_PROTOCOL_THUNDER = 62, + NDPI_PROTOCOL_SOULSEEK = 63, + NDPI_PROTOCOL_SSL_NO_CERT = 64, + NDPI_PROTOCOL_IRC = 65, + NDPI_PROTOCOL_AYIYA = 66, + NDPI_PROTOCOL_UNENCRYPTED_JABBER = 67, + NDPI_PROTOCOL_MSN = 68, + NDPI_PROTOCOL_OSCAR = 69, + NDPI_PROTOCOL_YAHOO = 70, + NDPI_PROTOCOL_BATTLEFIELD = 71, + NDPI_PROTOCOL_GOOGLE_PLUS = 72, + NDPI_PROTOCOL_IP_VRRP = 73, + NDPI_PROTOCOL_STEAM = 74, /* Tomasz Bujlow */ + NDPI_PROTOCOL_HALFLIFE2 = 75, + NDPI_PROTOCOL_WORLDOFWARCRAFT = 76, + NDPI_PROTOCOL_TELNET = 77, + NDPI_PROTOCOL_STUN = 78, + NDPI_PROTOCOL_IP_IPSEC = 79, + NDPI_PROTOCOL_IP_GRE = 80, + NDPI_PROTOCOL_IP_ICMP = 81, + NDPI_PROTOCOL_IP_IGMP = 82, + NDPI_PROTOCOL_IP_EGP = 83, + NDPI_PROTOCOL_IP_SCTP = 84, + NDPI_PROTOCOL_IP_OSPF = 85, + NDPI_PROTOCOL_IP_IP_IN_IP = 86, + NDPI_PROTOCOL_RTP = 87, + NDPI_PROTOCOL_RDP = 88, + NDPI_PROTOCOL_VNC = 89, + NDPI_PROTOCOL_PCANYWHERE = 90, + NDPI_PROTOCOL_SSL = 91, + NDPI_PROTOCOL_SSH = 92, + NDPI_PROTOCOL_USENET = 93, + NDPI_PROTOCOL_MGCP = 94, + NDPI_PROTOCOL_IAX = 95, + NDPI_PROTOCOL_TFTP = 96, + NDPI_PROTOCOL_AFP = 97, + NDPI_PROTOCOL_STEALTHNET = 98, + NDPI_PROTOCOL_AIMINI = 99, + NDPI_PROTOCOL_SIP = 100, + NDPI_PROTOCOL_TRUPHONE = 101, + NDPI_PROTOCOL_IP_ICMPV6 = 102, + NDPI_PROTOCOL_DHCPV6 = 103, + NDPI_PROTOCOL_ARMAGETRON = 104, + NDPI_PROTOCOL_CROSSFIRE = 105, + NDPI_PROTOCOL_DOFUS = 106, + NDPI_PROTOCOL_FIESTA = 107, + NDPI_PROTOCOL_FLORENSIA = 108, + NDPI_PROTOCOL_GUILDWARS = 109, + NDPI_PROTOCOL_HTTP_ACTIVESYNC = 110, + NDPI_PROTOCOL_KERBEROS = 111, + NDPI_PROTOCOL_LDAP = 112, + NDPI_PROTOCOL_MAPLESTORY = 113, + NDPI_PROTOCOL_MSSQL_TDS = 114, + NDPI_PROTOCOL_PPTP = 115, + NDPI_PROTOCOL_WARCRAFT3 = 116, + NDPI_PROTOCOL_WORLD_OF_KUNG_FU = 117, + NDPI_PROTOCOL_SLACK = 118, + NDPI_PROTOCOL_FACEBOOK = 119, + NDPI_PROTOCOL_TWITTER = 120, + NDPI_PROTOCOL_DROPBOX = 121, + NDPI_PROTOCOL_GMAIL = 122, + NDPI_PROTOCOL_GOOGLE_MAPS = 123, + NDPI_PROTOCOL_YOUTUBE = 124, + NDPI_PROTOCOL_SKYPE = 125, + NDPI_PROTOCOL_GOOGLE = 126, + NDPI_PROTOCOL_DCERPC = 127, + NDPI_PROTOCOL_NETFLOW = 128, + NDPI_PROTOCOL_SFLOW = 129, + NDPI_PROTOCOL_HTTP_CONNECT = 130, + NDPI_PROTOCOL_HTTP_PROXY = 131, + NDPI_PROTOCOL_CITRIX = 132, /* It also includes the old NDPI_PROTOCOL_CITRIX_ONLINE */ + NDPI_PROTOCOL_NETFLIX = 133, + NDPI_PROTOCOL_LASTFM = 134, + NDPI_PROTOCOL_WAZE = 135, + NDPI_PROTOCOL_YOUTUBE_UPLOAD = 136, /* Upload files to youtube */ + NDPI_PROTOCOL_GENERIC = 137, /* Generic protocol used for category matching */ + NDPI_PROTOCOL_CHECKMK = 138, + NDPI_PROTOCOL_AJP = 139, /* Leonn Paiva */ + NDPI_PROTOCOL_APPLE = 140, + NDPI_PROTOCOL_WEBEX = 141, + NDPI_PROTOCOL_WHATSAPP = 142, + NDPI_PROTOCOL_APPLE_ICLOUD = 143, + NDPI_PROTOCOL_VIBER = 144, + NDPI_PROTOCOL_APPLE_ITUNES = 145, + NDPI_PROTOCOL_RADIUS = 146, + NDPI_PROTOCOL_WINDOWS_UPDATE = 147, + NDPI_PROTOCOL_TEAMVIEWER = 148, /* xplico.org */ + NDPI_PROTOCOL_TUENTI = 149, + NDPI_PROTOCOL_LOTUS_NOTES = 150, + NDPI_PROTOCOL_SAP = 151, + NDPI_PROTOCOL_GTP = 152, + NDPI_PROTOCOL_UPNP = 153, + NDPI_PROTOCOL_LLMNR = 154, + NDPI_PROTOCOL_REMOTE_SCAN = 155, + NDPI_PROTOCOL_SPOTIFY = 156, + NDPI_PROTOCOL_MESSENGER = 157, + NDPI_PROTOCOL_H323 = 158, /* Remy Mudingay */ + NDPI_PROTOCOL_OPENVPN = 159, /* Remy Mudingay */ + NDPI_PROTOCOL_NOE = 160, /* Remy Mudingay */ + NDPI_PROTOCOL_CISCOVPN = 161, /* Remy Mudingay */ + NDPI_PROTOCOL_TEAMSPEAK = 162, /* Remy Mudingay */ + NDPI_PROTOCOL_TOR = 163, /* Remy Mudingay */ + NDPI_PROTOCOL_SKINNY = 164, /* Remy Mudingay */ + NDPI_PROTOCOL_RTCP = 165, /* Remy Mudingay */ + NDPI_PROTOCOL_RSYNC = 166, /* Remy Mudingay */ + NDPI_PROTOCOL_ORACLE = 167, /* Remy Mudingay */ + NDPI_PROTOCOL_CORBA = 168, /* Remy Mudingay */ + NDPI_PROTOCOL_UBUNTUONE = 169, /* Remy Mudingay */ + NDPI_PROTOCOL_WHOIS_DAS = 170, + NDPI_PROTOCOL_COLLECTD = 171, + NDPI_PROTOCOL_SOCKS = 172, /* Tomasz Bujlow */ + NDPI_PROTOCOL_NINTENDO = 173, + NDPI_PROTOCOL_RTMP = 174, /* Tomasz Bujlow */ + NDPI_PROTOCOL_FTP_DATA = 175, /* Tomasz Bujlow */ + NDPI_PROTOCOL_WIKIPEDIA = 176, /* Tomasz Bujlow */ + NDPI_PROTOCOL_ZMQ = 177, + NDPI_PROTOCOL_AMAZON = 178, /* Tomasz Bujlow */ + NDPI_PROTOCOL_EBAY = 179, /* Tomasz Bujlow */ + NDPI_PROTOCOL_CNN = 180, /* Tomasz Bujlow */ + NDPI_PROTOCOL_MEGACO = 181, /* Gianluca Costa */ + NDPI_PROTOCOL_REDIS = 182, + NDPI_PROTOCOL_PANDO = 183, /* Tomasz Bujlow */ + NDPI_PROTOCOL_VHUA = 184, + NDPI_PROTOCOL_TELEGRAM = 185, /* Gianluca Costa */ + NDPI_PROTOCOL_VEVO = 186, + NDPI_PROTOCOL_PANDORA = 187, + NDPI_PROTOCOL_QUIC = 188, /* Andrea Buscarinu - Michele Campus */ + NDPI_PROTOCOL_WHATSAPP_VOICE = 189, + NDPI_PROTOCOL_EAQ = 190, + NDPI_PROTOCOL_OOKLA = 191, + NDPI_PROTOCOL_AMQP = 192, + NDPI_PROTOCOL_KAKAOTALK = 193, /* KakaoTalk Chat (no voice call) */ + NDPI_PROTOCOL_KAKAOTALK_VOICE = 194, /* KakaoTalk Voice */ + NDPI_PROTOCOL_TWITCH = 195, /* Edoardo Dominici */ + NDPI_PROTOCOL_FREE_196 = 196, /* Free */ + NDPI_PROTOCOL_WECHAT = 197, + NDPI_PROTOCOL_MPEGTS = 198, + NDPI_PROTOCOL_SNAPCHAT = 199, + NDPI_PROTOCOL_SINA = 200, + NDPI_PROTOCOL_HANGOUT = 201, + NDPI_PROTOCOL_IFLIX = 202, /* www.vizuamatix.com R&D team & M.Mallawaarachchie */ + NDPI_PROTOCOL_GITHUB = 203, + NDPI_PROTOCOL_BJNP = 204, + NDPI_PROTOCOL_FREE_205 = 205, /* Free */ + NDPI_PROTOCOL_VIDTO = 206, + NDPI_PROTOCOL_SMPP = 207, /* Damir Franusic */ + NDPI_PROTOCOL_DNSCRYPT = 208, + NDPI_PROTOCOL_TINC = 209, /* William Guglielmo */ + NDPI_PROTOCOL_DEEZER = 210, + NDPI_PROTOCOL_INSTAGRAM = 211, /* Andrea Buscarinu */ + NDPI_PROTOCOL_MICROSOFT = 212, + NDPI_PROTOCOL_STARCRAFT = 213, /* Matteo Bracci */ + NDPI_PROTOCOL_TEREDO = 214, + NDPI_PROTOCOL_HOTSPOT_SHIELD = 215, + NDPI_PROTOCOL_HEP = 216, /* sipcapture.org QXIP BV */ + NDPI_PROTOCOL_GOOGLE_DRIVE = 217, + NDPI_PROTOCOL_OCS = 218, + NDPI_PROTOCOL_OFFICE_365 = 219, + NDPI_PROTOCOL_CLOUDFLARE = 220, + NDPI_PROTOCOL_MS_ONE_DRIVE = 221, + NDPI_PROTOCOL_MQTT = 222, + NDPI_PROTOCOL_RX = 223, + NDPI_PROTOCOL_APPLESTORE = 224, + NDPI_PROTOCOL_OPENDNS = 225, + NDPI_PROTOCOL_GIT = 226, + NDPI_PROTOCOL_DRDA = 227, + NDPI_PROTOCOL_PLAYSTORE = 228, + NDPI_PROTOCOL_SOMEIP = 229, + NDPI_PROTOCOL_FIX = 230, + NDPI_PROTOCOL_PLAYSTATION = 231, + NDPI_PROTOCOL_PASTEBIN = 232, /* Paulo Angelo */ + NDPI_PROTOCOL_LINKEDIN = 233, /* Paulo Angelo */ + NDPI_PROTOCOL_SOUNDCLOUD = 234, + NDPI_PROTOCOL_CSGO = 235, /* Counter-Strike Global Offensive, Dota = 2 */ + NDPI_PROTOCOL_LISP = 236, + NDPI_PROTOCOL_DIAMETER = 237, + NDPI_PROTOCOL_APPLE_PUSH = 238, + NDPI_PROTOCOL_GOOGLE_SERVICES = 239, + NDPI_PROTOCOL_AMAZON_VIDEO = 240, + NDPI_PROTOCOL_GOOGLE_DOCS = 241, + NDPI_PROTOCOL_WHATSAPP_FILES = 242, /* Videos, pictures, voice messages... */ + /* + IMPORTANT + before allocating a new identifier please fill up + one of those named NDPI_PROTOCOL_FREE_XXX and not used + (placeholders to avoid protocol renumbering) + */ + + + /* IMPORTANT:NDPI_LAST_IMPLEMENTED_PROTOCOL MUST BE THE LAST ELEMENT */ + NDPI_LAST_IMPLEMENTED_PROTOCOL +} ndpi_protocol_ids; -#define NDPI_PROTOCOL_UNKNOWN 0 -#define NDPI_PROTOCOL_FTP_CONTROL 1 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_MAIL_POP 2 -#define NDPI_PROTOCOL_MAIL_SMTP 3 -#define NDPI_PROTOCOL_MAIL_IMAP 4 -#define NDPI_PROTOCOL_DNS 5 -#define NDPI_PROTOCOL_IPP 6 -#define NDPI_PROTOCOL_HTTP 7 -#define NDPI_PROTOCOL_MDNS 8 -#define NDPI_PROTOCOL_NTP 9 -#define NDPI_PROTOCOL_NETBIOS 10 -#define NDPI_PROTOCOL_NFS 11 -#define NDPI_PROTOCOL_SSDP 12 -#define NDPI_PROTOCOL_BGP 13 -#define NDPI_PROTOCOL_SNMP 14 -#define NDPI_PROTOCOL_XDMCP 15 -#define NDPI_PROTOCOL_SMB 16 -#define NDPI_PROTOCOL_SYSLOG 17 -#define NDPI_PROTOCOL_DHCP 18 -#define NDPI_PROTOCOL_POSTGRES 19 -#define NDPI_PROTOCOL_MYSQL 20 -#define NDPI_PROTOCOL_HOTMAIL 21 -#define NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK 22 -#define NDPI_PROTOCOL_MAIL_POPS 23 -#define NDPI_PROTOCOL_APPLEJUICE 24 -#define NDPI_PROTOCOL_DIRECTCONNECT 25 -#define NDPI_PROTOCOL_NTOP 26 -#define NDPI_PROTOCOL_COAP 27 -#define NDPI_PROTOCOL_VMWARE 28 -#define NDPI_PROTOCOL_MAIL_SMTPS 29 -#define NDPI_PROTOCOL_FBZERO 30 -#define NDPI_PROTOCOL_UBNTAC2 31 /* Ubiquity UBNT AirControl 2 - Thomas Fjellstrom */ -#define NDPI_PROTOCOL_KONTIKI 32 -#define NDPI_PROTOCOL_OPENFT 33 -#define NDPI_PROTOCOL_FASTTRACK 34 -#define NDPI_PROTOCOL_GNUTELLA 35 -#define NDPI_PROTOCOL_EDONKEY 36 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_BITTORRENT 37 -#define NDPI_PROTOCOL_SKYPE_CALL_OUT 38 -#define NDPI_PROTOCOL_MUSICALLY 39 - -/* 40..46 are free */ -#define NDPI_PROTOCOL_FREE_40 40 -#define NDPI_PROTOCOL_FREE_41 41 -#define NDPI_PROTOCOL_FREE_42 42 -#define NDPI_PROTOCOL_FREE_43 43 -#define NDPI_PROTOCOL_FREE_44 44 -#define NDPI_PROTOCOL_FREE_45 45 -#define NDPI_PROTOCOL_FREE_46 46 - -#define NDPI_PROTOCOL_XBOX 47 -#define NDPI_PROTOCOL_QQ 48 -#define NDPI_PROTOCOL_SKYPE_CALL_IN 49 -#define NDPI_PROTOCOL_RTSP 50 -#define NDPI_PROTOCOL_MAIL_IMAPS 51 -#define NDPI_PROTOCOL_ICECAST 52 -#define NDPI_PROTOCOL_PPLIVE 53 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_PPSTREAM 54 -#define NDPI_PROTOCOL_ZATTOO 55 -#define NDPI_PROTOCOL_SHOUTCAST 56 -#define NDPI_PROTOCOL_SOPCAST 57 -#define NDPI_PROTOCOL_TVANTS 58 -#define NDPI_PROTOCOL_TVUPLAYER 59 -#define NDPI_PROTOCOL_HTTP_DOWNLOAD 60 -#define NDPI_PROTOCOL_QQLIVE 61 -#define NDPI_PROTOCOL_THUNDER 62 -#define NDPI_PROTOCOL_SOULSEEK 63 -#define NDPI_PROTOCOL_SSL_NO_CERT 64 -#define NDPI_PROTOCOL_IRC 65 -#define NDPI_PROTOCOL_AYIYA 66 -#define NDPI_PROTOCOL_UNENCRYPTED_JABBER 67 -#define NDPI_PROTOCOL_MSN 68 -#define NDPI_PROTOCOL_OSCAR 69 -#define NDPI_PROTOCOL_YAHOO 70 -#define NDPI_PROTOCOL_BATTLEFIELD 71 -#define NDPI_PROTOCOL_GOOGLE_PLUS 72 -#define NDPI_PROTOCOL_IP_VRRP 73 -#define NDPI_PROTOCOL_STEAM 74 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_HALFLIFE2 75 -#define NDPI_PROTOCOL_WORLDOFWARCRAFT 76 -#define NDPI_PROTOCOL_TELNET 77 -#define NDPI_PROTOCOL_STUN 78 -#define NDPI_PROTOCOL_IP_IPSEC 79 -#define NDPI_PROTOCOL_IP_GRE 80 -#define NDPI_PROTOCOL_IP_ICMP 81 -#define NDPI_PROTOCOL_IP_IGMP 82 -#define NDPI_PROTOCOL_IP_EGP 83 -#define NDPI_PROTOCOL_IP_SCTP 84 -#define NDPI_PROTOCOL_IP_OSPF 85 -#define NDPI_PROTOCOL_IP_IP_IN_IP 86 -#define NDPI_PROTOCOL_RTP 87 -#define NDPI_PROTOCOL_RDP 88 -#define NDPI_PROTOCOL_VNC 89 -#define NDPI_PROTOCOL_PCANYWHERE 90 -#define NDPI_PROTOCOL_SSL 91 -#define NDPI_PROTOCOL_SSH 92 -#define NDPI_PROTOCOL_USENET 93 -#define NDPI_PROTOCOL_MGCP 94 -#define NDPI_PROTOCOL_IAX 95 -#define NDPI_PROTOCOL_TFTP 96 -#define NDPI_PROTOCOL_AFP 97 -#define NDPI_PROTOCOL_STEALTHNET 98 -#define NDPI_PROTOCOL_AIMINI 99 -#define NDPI_PROTOCOL_SIP 100 -#define NDPI_PROTOCOL_TRUPHONE 101 -#define NDPI_PROTOCOL_IP_ICMPV6 102 -#define NDPI_PROTOCOL_DHCPV6 103 -#define NDPI_PROTOCOL_ARMAGETRON 104 -#define NDPI_PROTOCOL_CROSSFIRE 105 -#define NDPI_PROTOCOL_DOFUS 106 -#define NDPI_PROTOCOL_FIESTA 107 -#define NDPI_PROTOCOL_FLORENSIA 108 -#define NDPI_PROTOCOL_GUILDWARS 109 -#define NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC 110 /*avoid large declarations in the future*/ -#define NDPI_PROTOCOL_KERBEROS 111 -#define NDPI_PROTOCOL_LDAP 112 -#define NDPI_PROTOCOL_MAPLESTORY 113 -#define NDPI_PROTOCOL_MSSQL_TDS 114 -#define NDPI_PROTOCOL_PPTP 115 -#define NDPI_PROTOCOL_WARCRAFT3 116 -#define NDPI_PROTOCOL_WORLD_OF_KUNG_FU 117 -#define NDPI_PROTOCOL_SLACK 118 -#define NDPI_PROTOCOL_FACEBOOK 119 -#define NDPI_PROTOCOL_TWITTER 120 -#define NDPI_PROTOCOL_DROPBOX 121 -#define NDPI_PROTOCOL_GMAIL 122 -#define NDPI_PROTOCOL_GOOGLE_MAPS 123 -#define NDPI_PROTOCOL_YOUTUBE 124 -#define NDPI_PROTOCOL_SKYPE 125 -#define NDPI_PROTOCOL_GOOGLE 126 -#define NDPI_PROTOCOL_DCERPC 127 -#define NDPI_PROTOCOL_NETFLOW 128 -#define NDPI_PROTOCOL_SFLOW 129 -#define NDPI_PROTOCOL_HTTP_CONNECT 130 -#define NDPI_PROTOCOL_HTTP_PROXY 131 -#define NDPI_PROTOCOL_CITRIX 132 /* It includes also the old NDPI_PROTOCOL_CITRIX_ONLINE */ -#define NDPI_PROTOCOL_NETFLIX 133 -#define NDPI_PROTOCOL_LASTFM 134 -#define NDPI_PROTOCOL_WAZE 135 -#define NDPI_PROTOCOL_YOUTUBE_UPLOAD 136 /* Upload files to youtube */ -#define NDPI_PROTOCOL_ICQ 137 -#define NDPI_PROTOCOL_CHECKMK 138 -#define NDPI_PROTOCOL_AJP 139 /* Leonn Paiva */ -#define NDPI_PROTOCOL_APPLE 140 -#define NDPI_PROTOCOL_WEBEX 141 -#define NDPI_PROTOCOL_WHATSAPP 142 -#define NDPI_PROTOCOL_APPLE_ICLOUD 143 -#define NDPI_PROTOCOL_VIBER 144 -#define NDPI_PROTOCOL_APPLE_ITUNES 145 -#define NDPI_PROTOCOL_RADIUS 146 -#define NDPI_PROTOCOL_WINDOWS_UPDATE 147 -#define NDPI_PROTOCOL_TEAMVIEWER 148 /* xplico.org */ -#define NDPI_PROTOCOL_TUENTI 149 -#define NDPI_PROTOCOL_LOTUS_NOTES 150 -#define NDPI_PROTOCOL_SAP 151 -#define NDPI_PROTOCOL_GTP 152 -#define NDPI_PROTOCOL_UPNP 153 -#define NDPI_PROTOCOL_LLMNR 154 -#define NDPI_PROTOCOL_REMOTE_SCAN 155 -#define NDPI_PROTOCOL_SPOTIFY 156 -#define NDPI_PROTOCOL_MESSENGER 157 -#define NDPI_PROTOCOL_H323 158 /* Remy Mudingay */ -#define NDPI_PROTOCOL_OPENVPN 159 /* Remy Mudingay */ -#define NDPI_PROTOCOL_NOE 160 /* Remy Mudingay */ -#define NDPI_PROTOCOL_CISCOVPN 161 /* Remy Mudingay */ -#define NDPI_PROTOCOL_TEAMSPEAK 162 /* Remy Mudingay */ -#define NDPI_PROTOCOL_TOR 163 /* Remy Mudingay */ -#define NDPI_PROTOCOL_SKINNY 164 /* Remy Mudingay */ -#define NDPI_PROTOCOL_RTCP 165 /* Remy Mudingay */ -#define NDPI_PROTOCOL_RSYNC 166 /* Remy Mudingay */ -#define NDPI_PROTOCOL_ORACLE 167 /* Remy Mudingay */ -#define NDPI_PROTOCOL_CORBA 168 /* Remy Mudingay */ -#define NDPI_PROTOCOL_UBUNTUONE 169 /* Remy Mudingay */ -#define NDPI_PROTOCOL_WHOIS_DAS 170 -#define NDPI_PROTOCOL_COLLECTD 171 -#define NDPI_PROTOCOL_SOCKS 172 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_NINTENDO 173 -#define NDPI_PROTOCOL_RTMP 174 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_FTP_DATA 175 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_WIKIPEDIA 176 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_ZMQ 177 -#define NDPI_PROTOCOL_AMAZON 178 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_EBAY 179 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_CNN 180 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_MEGACO 181 /* Gianluca Costa */ -#define NDPI_PROTOCOL_REDIS 182 -#define NDPI_PROTOCOL_PANDO 183 /* Tomasz Bujlow */ -#define NDPI_PROTOCOL_VHUA 184 -#define NDPI_PROTOCOL_TELEGRAM 185 /* Gianluca Costa */ -#define NDPI_PROTOCOL_VEVO 186 -#define NDPI_PROTOCOL_PANDORA 187 -#define NDPI_PROTOCOL_QUIC 188 /* Andrea Buscarinu - Michele Campus */ -#define NDPI_PROTOCOL_WHATSAPP_VOICE 189 -#define NDPI_PROTOCOL_EAQ 190 -#define NDPI_PROTOCOL_OOKLA 191 -#define NDPI_PROTOCOL_AMQP 192 -#define NDPI_PROTOCOL_KAKAOTALK 193 /* KakaoTalk Chat (no voice call) */ -#define NDPI_PROTOCOL_KAKAOTALK_VOICE 194 /* KakaoTalk Voice */ -#define NDPI_PROTOCOL_TWITCH 195 /* Edoardo Dominici */ -#define NDPI_PROTOCOL_QUICKPLAY 196 /* Streaming service used by various services such as hooq.tv */ -#define NDPI_PROTOCOL_WECHAT 197 -#define NDPI_PROTOCOL_MPEGTS 198 -#define NDPI_PROTOCOL_SNAPCHAT 199 -#define NDPI_PROTOCOL_SINA 200 -#define NDPI_PROTOCOL_HANGOUT 201 -#define NDPI_PROTOCOL_IFLIX 202 /* www.vizuamatix.com R&D team & M.Mallawaarachchie */ -#define NDPI_PROTOCOL_GITHUB 203 -#define NDPI_PROTOCOL_BJNP 204 -#define NDPI_PROTOCOL_1KXUN 205 -#define NDPI_PROTOCOL_IQIYI 206 -#define NDPI_PROTOCOL_SMPP 207 /* Damir Franusic */ -#define NDPI_PROTOCOL_DNSCRYPT 208 -#define NDPI_PROTOCOL_TINC 209 /* William Guglielmo */ -#define NDPI_PROTOCOL_DEEZER 210 -#define NDPI_PROTOCOL_INSTAGRAM 211 /* Andrea Buscarinu */ -#define NDPI_PROTOCOL_MICROSOFT 212 -#define NDPI_PROTOCOL_STARCRAFT 213 /* Matteo Bracci */ -#define NDPI_PROTOCOL_TEREDO 214 -#define NDPI_PROTOCOL_HOTSPOT_SHIELD 215 -#define NDPI_PROTOCOL_HEP 216 /* sipcapture.org QXIP BV */ -#define NDPI_PROTOCOL_GOOGLE_DRIVE 217 -#define NDPI_PROTOCOL_OCS 218 -#define NDPI_PROTOCOL_OFFICE_365 219 -#define NDPI_PROTOCOL_CLOUDFLARE 220 -#define NDPI_PROTOCOL_MS_ONE_DRIVE 221 -#define NDPI_PROTOCOL_MQTT 222 -#define NDPI_PROTOCOL_RX 223 -#define NDPI_PROTOCOL_APPLESTORE 224 -#define NDPI_PROTOCOL_OPENDNS 225 -#define NDPI_PROTOCOL_GIT 226 -#define NDPI_PROTOCOL_DRDA 227 -#define NDPI_PROTOCOL_PLAYSTORE 228 -#define NDPI_PROTOCOL_SOMEIP 229 -#define NDPI_PROTOCOL_FIX 230 -#define NDPI_PROTOCOL_PLAYSTATION 231 -#define NDPI_PROTOCOL_PASTEBIN 232 /* Paulo Angelo */ -#define NDPI_PROTOCOL_LINKEDIN 233 /* Paulo Angelo */ -#define NDPI_PROTOCOL_SOUNDCLOUD 234 -#define NDPI_PROTOCOL_CSGO 235 /* Counter-Strike Global Offensive, Dota 2 */ -#define NDPI_PROTOCOL_LISP 236 -#define NDPI_PROTOCOL_DIAMETER 237 -#define NDPI_PROTOCOL_APPLE_PUSH 238 -#define NDPI_PROTOCOL_GOOGLE_SERVICES 239 -#define NDPI_PROTOCOL_AMAZON_VIDEO 240 -#define NDPI_PROTOCOL_GOOGLE_DOCS 241 -#define NDPI_PROTOCOL_WHATSAPP_FILES 242 /* Videos, pictures, voice messages... */ -#define NDPI_PROTOCOL_VIDTO 243 /* VidTO streaming service */ -#define NDPI_PROTOCOL_RAPIDVIDEO 244 /* RapidVideo streaming */ -#define NDPI_PROTOCOL_SHOWMAX 245 /* showmax.com video streaming */ -/* IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT */ -/* */ -/* If you add new NDPI protocol defines after the last, DON'T forget */ -/* to update constant NDPI_LAST_IMPLEMENTED_PROTOCOL below !!! */ -/* */ -/* IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT */ -#define NDPI_LAST_IMPLEMENTED_PROTOCOL NDPI_PROTOCOL_SHOWMAX - -#define NDPI_MAX_SUPPORTED_PROTOCOLS (NDPI_LAST_IMPLEMENTED_PROTOCOL + 1) -#define NDPI_MAX_NUM_CUSTOM_PROTOCOLS (NDPI_NUM_BITS-NDPI_LAST_IMPLEMENTED_PROTOCOL) +#define NDPI_PROTOCOL_NO_MASTER_PROTO NDPI_PROTOCOL_UNKNOWN +#define NDPI_MAX_SUPPORTED_PROTOCOLS NDPI_LAST_IMPLEMENTED_PROTOCOL +#define NDPI_MAX_NUM_CUSTOM_PROTOCOLS (NDPI_NUM_BITS-NDPI_LAST_IMPLEMENTED_PROTOCOL) #endif diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 33b48526349..be9009e8a36 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -26,9 +26,6 @@ #include "ndpi_define.h" -#define BT_ANNOUNCE -#define SNAP_EXT - /* NDPI_LOG_LEVEL */ typedef enum { NDPI_LOG_ERROR, @@ -308,8 +305,7 @@ struct ndpi_icmphdr { /* ******************* ********************* ****************** */ /* ************************************************************ */ -#ifdef NDPI_PROTOCOL_BITTORRENT - +/* NDPI_PROTOCOL_BITTORRENT */ typedef struct spinlock { volatile int val; } spinlock_t; @@ -348,9 +344,8 @@ struct bt_announce { // 192 bytes u_int8_t name_len, name[192 - 4*10 - 2 - 1]; // 149 bytes }; -#endif -#ifdef NDPI_PROTOCOL_TINC +/* NDPI_PROTOCOL_TINC */ #define TINC_CACHE_MAX_SIZE 10 PACK_ON struct tinc_cache_entry { @@ -359,8 +354,6 @@ PACK_ON struct tinc_cache_entry { u_int16_t dst_port; } PACK_OFF; -#endif - typedef enum { HTTP_METHOD_UNKNOWN = 0, HTTP_METHOD_OPTIONS, @@ -381,227 +374,221 @@ struct ndpi_id_struct { to compare this, use: **/ NDPI_PROTOCOL_BITMASK detected_protocol_bitmask; -#ifdef NDPI_PROTOCOL_RTSP +/* NDPI_PROTOCOL_RTSP */ ndpi_ip_addr_t rtsp_ip_address; -#endif -#ifdef NDPI_PROTOCOL_SIP -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_YAHOO */ u_int32_t yahoo_video_lan_timer; -#endif -#endif + /* NDPI_PROTOCOL_IRC_MAXPORT % 2 must be 0 */ -#ifdef NDPI_PROTOCOL_IRC +/* NDPI_PROTOCOL_IRC */ #define NDPI_PROTOCOL_IRC_MAXPORT 8 u_int16_t irc_port[NDPI_PROTOCOL_IRC_MAXPORT]; u_int32_t last_time_port_used[NDPI_PROTOCOL_IRC_MAXPORT]; u_int32_t irc_ts; -#endif -#ifdef NDPI_PROTOCOL_GNUTELLA + +/* NDPI_PROTOCOL_GNUTELLA */ u_int32_t gnutella_ts; -#endif -#ifdef NDPI_PROTOCOL_BATTLEFIELD + +/* NDPI_PROTOCOL_BATTLEFIELD */ u_int32_t battlefield_ts; -#endif -#ifdef NDPI_PROTOCOL_THUNDER + +/* NDPI_PROTOCOL_THUNDER */ u_int32_t thunder_ts; -#endif -#ifdef NDPI_PROTOCOL_RTSP + +/* NDPI_PROTOCOL_RTSP */ u_int32_t rtsp_timer; -#endif -#ifdef NDPI_PROTOCOL_OSCAR + +/* NDPI_PROTOCOL_OSCAR */ u_int32_t oscar_last_safe_access_time; -#endif -#ifdef NDPI_PROTOCOL_ZATTOO + +/* NDPI_PROTOCOL_ZATTOO */ u_int32_t zattoo_ts; -#endif -#ifdef NDPI_PROTOCOL_UNENCRYPTED_JABBER + +/* NDPI_PROTOCOL_UNENCRYPTED_JABBER */ u_int32_t jabber_stun_or_ft_ts; -#endif -#ifdef NDPI_PROTOCOL_DIRECTCONNECT + +/* NDPI_PROTOCOL_DIRECTCONNECT */ u_int32_t directconnect_last_safe_access_time; -#endif -#ifdef NDPI_PROTOCOL_SOULSEEK + +/* NDPI_PROTOCOL_SOULSEEK */ u_int32_t soulseek_last_safe_access_time; -#endif -#ifdef NDPI_PROTOCOL_DIRECTCONNECT + +/* NDPI_PROTOCOL_DIRECTCONNECT */ u_int16_t detected_directconnect_port; u_int16_t detected_directconnect_udp_port; u_int16_t detected_directconnect_ssl_port; -#endif -#ifdef NDPI_PROTOCOL_BITTORRENT + +/* NDPI_PROTOCOL_BITTORRENT */ #define NDPI_BT_PORTS 8 u_int16_t bt_port_t[NDPI_BT_PORTS]; u_int16_t bt_port_u[NDPI_BT_PORTS]; -#endif -#ifdef NDPI_PROTOCOL_UNENCRYPTED_JABBER + +/* NDPI_PROTOCOL_UNENCRYPTED_JABBER */ #define JABBER_MAX_STUN_PORTS 6 u_int16_t jabber_voice_stun_port[JABBER_MAX_STUN_PORTS]; u_int16_t jabber_file_transfer_port[2]; -#endif -#ifdef NDPI_PROTOCOL_GNUTELLA + +/* NDPI_PROTOCOL_GNUTELLA */ u_int16_t detected_gnutella_port; -#endif -#ifdef NDPI_PROTOCOL_GNUTELLA + +/* NDPI_PROTOCOL_GNUTELLA */ u_int16_t detected_gnutella_udp_port1; u_int16_t detected_gnutella_udp_port2; -#endif -#ifdef NDPI_PROTOCOL_SOULSEEK + +/* NDPI_PROTOCOL_SOULSEEK */ u_int16_t soulseek_listen_port; -#endif -#ifdef NDPI_PROTOCOL_IRC + +/* NDPI_PROTOCOL_IRC */ u_int8_t irc_number_of_port; -#endif -#ifdef NDPI_PROTOCOL_OSCAR + +/* NDPI_PROTOCOL_OSCAR */ u_int8_t oscar_ssl_session_id[33]; -#endif -#ifdef NDPI_PROTOCOL_UNENCRYPTED_JABBER + +/* NDPI_PROTOCOL_UNENCRYPTED_JABBER */ u_int8_t jabber_voice_stun_used_ports; -#endif -#ifdef NDPI_PROTOCOL_SIP -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_SIP */ +/* NDPI_PROTOCOL_YAHOO */ u_int32_t yahoo_video_lan_dir:1; -#endif -#endif -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_YAHOO */ u_int32_t yahoo_conf_logged_in:1; u_int32_t yahoo_voice_conf_logged_in:1; -#endif -#ifdef NDPI_PROTOCOL_RTSP + +/* NDPI_PROTOCOL_RTSP */ u_int32_t rtsp_ts_set:1; -#endif }; /* ************************************************** */ struct ndpi_flow_tcp_struct { -#ifdef NDPI_PROTOCOL_MAIL_SMTP +/* NDPI_PROTOCOL_MAIL_SMTP */ u_int16_t smtp_command_bitmask; -#endif -#ifdef NDPI_PROTOCOL_MAIL_POP + +/* NDPI_PROTOCOL_MAIL_POP */ u_int16_t pop_command_bitmask; -#endif -#ifdef NDPI_PROTOCOL_QQ + +/* NDPI_PROTOCOL_QQ */ u_int16_t qq_nxt_len; -#endif -#ifdef NDPI_PROTOCOL_TDS + +/* NDPI_PROTOCOL_TDS */ u_int8_t tds_login_version; -#endif -#ifdef NDPI_PROTOCOL_IRC + +/* NDPI_PROTOCOL_IRC */ u_int8_t irc_stage; u_int8_t irc_port; -#endif -#ifdef NDPI_PROTOCOL_H323 +/* NDPI_PROTOCOL_H323 */ u_int8_t h323_valid_packets; -#endif -#ifdef NDPI_PROTOCOL_GNUTELLA + +/* NDPI_PROTOCOL_GNUTELLA */ u_int8_t gnutella_msg_id[3]; -#endif -#ifdef NDPI_PROTOCOL_IRC + +/* NDPI_PROTOCOL_IRC */ u_int32_t irc_3a_counter:3; u_int32_t irc_stage2:5; u_int32_t irc_direction:2; u_int32_t irc_0x1000_full:1; -#endif -#ifdef NDPI_PROTOCOL_SOULSEEK + +/* NDPI_PROTOCOL_SOULSEEK */ u_int32_t soulseek_stage:2; -#endif -#ifdef NDPI_PROTOCOL_TDS + +/* NDPI_PROTOCOL_TDS */ u_int32_t tds_stage:3; -#endif -#ifdef NDPI_PROTOCOL_USENET + +/* NDPI_PROTOCOL_USENET */ u_int32_t usenet_stage:2; -#endif -#ifdef NDPI_PROTOCOL_IMESH + +/* NDPI_PROTOCOL_IMESH */ u_int32_t imesh_stage:4; -#endif -#ifdef NDPI_PROTOCOL_HTTP + +/* NDPI_PROTOCOL_HTTP */ u_int32_t http_setup_dir:2; u_int32_t http_stage:2; u_int32_t http_empty_line_seen:1; u_int32_t http_wait_for_retransmission:1; -#endif -#ifdef NDPI_PROTOCOL_GNUTELLA + +/* NDPI_PROTOCOL_GNUTELLA */ u_int32_t gnutella_stage:2; // 0 - 2 -#endif -#ifdef NDPI_CONTENT_MMS + +/* NDPI_CONTENT_MMS */ u_int32_t mms_stage:2; -#endif -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_YAHOO */ u_int32_t yahoo_sip_comm:1; u_int32_t yahoo_http_proxy_stage:2; -#endif -#ifdef NDPI_PROTOCOL_MSN + +/* NDPI_PROTOCOL_MSN */ u_int32_t msn_stage:3; u_int32_t msn_ssl_ft:2; -#endif -#ifdef NDPI_PROTOCOL_SSH + +/* NDPI_PROTOCOL_SSH */ u_int32_t ssh_stage:3; -#endif -#ifdef NDPI_PROTOCOL_VNC + +/* NDPI_PROTOCOL_VNC */ u_int32_t vnc_stage:2; // 0 - 3 -#endif -#ifdef NDPI_PROTOCOL_TELNET + +/* NDPI_PROTOCOL_TELNET */ u_int32_t telnet_stage:2; // 0 - 2 -#endif -#ifdef NDPI_PROTOCOL_SSL + +/* NDPI_PROTOCOL_SSL */ u_int8_t ssl_stage:2, ssl_seen_client_cert:1, ssl_seen_server_cert:1; // 0 - 5 -#endif -#ifdef NDPI_PROTOCOL_POSTGRES + +/* NDPI_PROTOCOL_POSTGRES */ u_int32_t postgres_stage:3; -#endif -#ifdef NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK + +/* NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK */ u_int32_t ddlink_server_direction:1; -#endif u_int32_t seen_syn:1; u_int32_t seen_syn_ack:1; u_int32_t seen_ack:1; -#ifdef NDPI_PROTOCOL_ICECAST + +/* NDPI_PROTOCOL_ICECAST */ u_int32_t icecast_stage:1; -#endif -#ifdef NDPI_PROTOCOL_DOFUS + +/* NDPI_PROTOCOL_DOFUS */ u_int32_t dofus_stage:1; -#endif -#ifdef NDPI_PROTOCOL_FIESTA + +/* NDPI_PROTOCOL_FIESTA */ u_int32_t fiesta_stage:2; -#endif -#ifdef NDPI_PROTOCOL_WORLDOFWARCRAFT + +/* NDPI_PROTOCOL_WORLDOFWARCRAFT */ u_int32_t wow_stage:2; -#endif -#ifdef NDPI_PROTOCOL_HTTP_APPLICATION_VEOHTV + +/* NDPI_PROTOCOL_HTTP_APPLICATION_VEOHTV */ u_int32_t veoh_tv_stage:2; -#endif -#ifdef NDPI_PROTOCOL_SHOUTCAST + +/* NDPI_PROTOCOL_SHOUTCAST */ u_int32_t shoutcast_stage:2; -#endif -#ifdef NDPI_PROTOCOL_RTP + +/* NDPI_PROTOCOL_RTP */ u_int32_t rtp_special_packets_seen:1; -#endif -#ifdef NDPI_PROTOCOL_MAIL_POP + +/* NDPI_PROTOCOL_MAIL_POP */ u_int32_t mail_pop_stage:2; -#endif -#ifdef NDPI_PROTOCOL_MAIL_IMAP + +/* NDPI_PROTOCOL_MAIL_IMAP */ u_int32_t mail_imap_stage:3, mail_imap_starttls:2; -#endif -#ifdef NDPI_PROTOCOL_SKYPE + +/* NDPI_PROTOCOL_SKYPE */ u_int8_t skype_packet_id; -#endif -#ifdef NDPI_PROTOCOL_CITRIX + +/* NDPI_PROTOCOL_CITRIX */ u_int8_t citrix_packet_id; -#endif -#ifdef NDPI_PROTOCOL_LOTUS_NOTES + +/* NDPI_PROTOCOL_LOTUS_NOTES */ u_int8_t lotus_notes_packet_id; -#endif -#ifdef NDPI_PROTOCOL_TEAMVIEWER + +/* NDPI_PROTOCOL_TEAMVIEWER */ u_int8_t teamviewer_stage; -#endif -#ifdef NDPI_PROTOCOL_ZMQ + +/* NDPI_PROTOCOL_ZMQ */ u_int8_t prev_zmq_pkt_len; u_char prev_zmq_pkt[10]; -#endif -#ifdef NDPI_PROTOCOL_PPSTREAM + +/* NDPI_PROTOCOL_PPSTREAM */ u_int32_t ppstream_stage:3; -#endif } #ifndef WIN32 __attribute__ ((__packed__)) @@ -611,55 +598,54 @@ struct ndpi_flow_tcp_struct { /* ************************************************** */ struct ndpi_flow_udp_struct { -#ifdef NDPI_PROTOCOL_BATTLEFIELD +/* NDPI_PROTOCOL_BATTLEFIELD */ u_int32_t battlefield_msg_id; -#endif -#ifdef NDPI_PROTOCOL_SNMP + +/* NDPI_PROTOCOL_SNMP */ u_int32_t snmp_msg_id; -#endif -#ifdef NDPI_PROTOCOL_BATTLEFIELD + +/* NDPI_PROTOCOL_BATTLEFIELD */ u_int32_t battlefield_stage:3; -#endif -#ifdef NDPI_PROTOCOL_SNMP + +/* NDPI_PROTOCOL_SNMP */ u_int32_t snmp_stage:2; -#endif -#ifdef NDPI_PROTOCOL_PPSTREAM + +/* NDPI_PROTOCOL_PPSTREAM */ u_int32_t ppstream_stage:3; // 0 - 7 -#endif -#ifdef NDPI_PROTOCOL_HALFLIFE2 + +/* NDPI_PROTOCOL_HALFLIFE2 */ u_int32_t halflife2_stage:2; // 0 - 2 -#endif -#ifdef NDPI_PROTOCOL_TFTP + +/* NDPI_PROTOCOL_TFTP */ u_int32_t tftp_stage:1; -#endif -#ifdef NDPI_PROTOCOL_AIMINI + +/* NDPI_PROTOCOL_AIMINI */ u_int32_t aimini_stage:5; -#endif -#ifdef NDPI_PROTOCOL_XBOX + +/* NDPI_PROTOCOL_XBOX */ u_int32_t xbox_stage:1; -#endif -#ifdef NDPI_PROTOCOL_WINDOWS_UPDATE + +/* NDPI_PROTOCOL_WINDOWS_UPDATE */ u_int32_t wsus_stage:1; -#endif -#ifdef NDPI_PROTOCOL_SKYPE + +/* NDPI_PROTOCOL_SKYPE */ u_int8_t skype_packet_id; -#endif -#ifdef NDPI_PROTOCOL_TEAMVIEWER + +/* NDPI_PROTOCOL_TEAMVIEWER */ u_int8_t teamviewer_stage; -#endif -#ifdef NDPI_PROTOCOL_EAQ + +/* NDPI_PROTOCOL_EAQ */ u_int8_t eaq_pkt_id; u_int32_t eaq_sequence; -#endif -#ifdef NDPI_PROTOCOL_RX + +/* NDPI_PROTOCOL_RX */ u_int32_t rx_conn_epoch; u_int32_t rx_conn_id; -#endif } #ifndef WIN32 __attribute__ ((__packed__)) -#endif ; +#endif /* ************************************************** */ @@ -684,7 +670,6 @@ struct ndpi_packet_struct { u_int16_t detected_protocol_stack[NDPI_PROTOCOL_SIZE]; u_int8_t detected_subprotocol_stack[NDPI_PROTOCOL_SIZE]; - #ifndef WIN32 __attribute__ ((__packed__)) #endif @@ -799,7 +784,7 @@ typedef enum { NDPI_CONTENT_CATEGORY_WINDOWSMEDIA, NDPI_CONTENT_CATEGORY_WEBM, - /* Out custom categories */ + /* Some custom categories */ CUSTOM_CATEGORY_MINING = 99, CUSTOM_CATEGORY_MALWARE = 100, CUSTOM_CATEGORY_ADVERTISEMENT = 101, @@ -962,19 +947,18 @@ struct ndpi_detection_module_struct { char ip_string[NDPI_IP_STRING_SIZE]; #endif u_int8_t ip_version_limit; -#ifdef NDPI_PROTOCOL_BITTORRENT +/* NDPI_PROTOCOL_BITTORRENT */ struct hash_ip4p_table *bt_ht; #ifdef NDPI_DETECTION_SUPPORT_IPV6 struct hash_ip4p_table *bt6_ht; #endif -#ifdef BT_ANNOUNCE + +/* BT_ANNOUNCE */ struct bt_announce *bt_ann; int bt_ann_len; -#endif -#endif -#ifdef NDPI_PROTOCOL_TINC + +/* NDPI_PROTOCOL_TINC */ struct cache *tinc_cache; -#endif ndpi_proto_defaults_t proto_defaults[NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS]; @@ -986,7 +970,8 @@ struct ndpi_detection_module_struct { void *hyperscan; /* Intel Hyperscan */ }; -#endif + +#endif /* NDPI_LIB_COMPILATION */ struct ndpi_flow_struct { u_int16_t detected_protocol_stack[NDPI_PROTOCOL_SIZE]; @@ -1102,95 +1087,91 @@ struct ndpi_flow_struct { NDPI_PROTOCOL_BITMASK excluded_protocol_bitmask; -#ifdef NDPI_PROTOCOL_REDIS +/* NDPI_PROTOCOL_REDIS */ u_int8_t redis_s2d_first_char, redis_d2s_first_char; -#endif + u_int16_t packet_counter; // can be 0 - 65000 u_int16_t packet_direction_counter[2]; u_int16_t byte_counter[2]; -#ifdef NDPI_PROTOCOL_BITTORRENT +/* NDPI_PROTOCOL_BITTORRENT */ u_int8_t bittorrent_stage; // can be 0 - 255 -#endif -#ifdef NDPI_PROTOCOL_DIRECTCONNECT + +/* NDPI_PROTOCOL_DIRECTCONNECT */ u_int32_t directconnect_stage:2; // 0 - 1 -#endif -#ifdef NDPI_PROTOCOL_SIP -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_YAHOO */ u_int32_t sip_yahoo_voice:1; -#endif -#endif -#ifdef NDPI_PROTOCOL_HTTP + +/* NDPI_PROTOCOL_HTTP */ u_int32_t http_detected:1; -#endif -#ifdef NDPI_PROTOCOL_RTSP + +/* NDPI_PROTOCOL_RTSP */ u_int32_t rtsprdt_stage:2; u_int32_t rtsp_control_flow:1; -#endif -#ifdef NDPI_PROTOCOL_YAHOO + +/* NDPI_PROTOCOL_YAHOO */ u_int32_t yahoo_detection_finished:2; -#endif -#ifdef NDPI_PROTOCOL_ZATTOO + +/* NDPI_PROTOCOL_ZATTOO */ u_int32_t zattoo_stage:3; -#endif -#ifdef NDPI_PROTOCOL_QQ + +/* NDPI_PROTOCOL_QQ */ u_int32_t qq_stage:3; -#endif -#ifdef NDPI_PROTOCOL_THUNDER + +/* NDPI_PROTOCOL_THUNDER */ u_int32_t thunder_stage:2; // 0 - 3 -#endif -#ifdef NDPI_PROTOCOL_OSCAR + +/* NDPI_PROTOCOL_OSCAR */ u_int32_t oscar_ssl_voice_stage:3; u_int32_t oscar_video_voice:1; -#endif -#ifdef NDPI_PROTOCOL_FLORENSIA + +/* NDPI_PROTOCOL_FLORENSIA */ u_int32_t florensia_stage:1; -#endif -#ifdef NDPI_PROTOCOL_SOCKS + +/* NDPI_PROTOCOL_SOCKS */ u_int32_t socks5_stage:2; // 0 - 3 u_int32_t socks4_stage:2; // 0 - 3 -#endif -#ifdef NDPI_PROTOCOL_EDONKEY + +/* NDPI_PROTOCOL_EDONKEY */ u_int32_t edonkey_stage:2; // 0 - 3 -#endif -#ifdef NDPI_PROTOCOL_FTP_CONTROL + +/* NDPI_PROTOCOL_FTP_CONTROL */ u_int32_t ftp_control_stage:2; -#endif -#ifdef NDPI_PROTOCOL_RTMP + +/* NDPI_PROTOCOL_RTMP */ u_int32_t rtmp_stage:2; -#endif -#ifdef NDPI_PROTOCOL_PANDO + +/* NDPI_PROTOCOL_PANDO */ u_int32_t pando_stage:3; -#endif -#ifdef NDPI_PROTOCOL_STEAM + +/* NDPI_PROTOCOL_STEAM */ u_int32_t steam_stage:3; u_int32_t steam_stage1:3; // 0 - 4 u_int32_t steam_stage2:2; // 0 - 2 u_int32_t steam_stage3:2; // 0 - 2 -#endif -#ifdef NDPI_PROTOCOL_PPLIVE + +/* NDPI_PROTOCOL_PPLIVE */ u_int32_t pplive_stage1:3; // 0 - 6 u_int32_t pplive_stage2:2; // 0 - 2 u_int32_t pplive_stage3:2; // 0 - 2 -#endif -#ifdef NDPI_PROTOCOL_STARCRAFT + +/* NDPI_PROTOCOL_STARCRAFT */ u_int32_t starcraft_udp_stage : 3; // 0-7 -#endif -#ifdef NDPI_PROTOCOL_OPENVPN + +/* NDPI_PROTOCOL_OPENVPN */ u_int8_t ovpn_session_id[8]; u_int8_t ovpn_counter; -#endif -#ifdef NDPI_PROTOCOL_TINC + +/* NDPI_PROTOCOL_TINC */ u_int8_t tinc_state; struct tinc_cache_entry tinc_cache_entry; -#endif -#ifdef NDPI_PROTOCOL_CSGO + +/* NDPI_PROTOCOL_CSGO */ u_int8_t csgo_strid[18],csgo_state,csgo_s2; u_int32_t csgo_id2; -#endif -#if defined(NDPI_PROTOCOL_1KXUN) || defined(NDPI_PROTOCOL_IQIYI) +/* NDPI_PROTOCOL_1KXUN || NDPI_PROTOCOL_IQIYI */ u_int16_t kxun_counter, iqiyi_counter; -#endif /* internal structures to save functions calls */ struct ndpi_packet_struct packet; @@ -1212,4 +1193,4 @@ typedef struct { u_int8_t value; } ndpi_network; -#endif/* __NDPI_TYPEDEFS_H__ */ +#endif /* __NDPI_TYPEDEFS_H__ */ diff --git a/src/lib/Makefile.simple b/src/lib/Makefile similarity index 91% rename from src/lib/Makefile.simple rename to src/lib/Makefile index 1aae55636dd..2beca451659 100644 --- a/src/lib/Makefile.simple +++ b/src/lib/Makefile @@ -11,12 +11,14 @@ RANLIB=ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o HEADERS = $(wildcard ../include/*.h) +all: libndpi.a + libndpi.a: $(OBJECTS) ar rc $@ $(OBJECTS) $(RANLIB) $@ - + %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ clean: - /bin/rm -f libndpi.a $(OBJECTS) \ No newline at end of file + /bin/rm -f libndpi.a $(OBJECTS) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am deleted file mode 100644 index 10a54c719c3..00000000000 --- a/src/lib/Makefile.am +++ /dev/null @@ -1,181 +0,0 @@ -lib_LTLIBRARIES = libndpi.la - -CFLAGS += -fPIC -DPIC -DNDPI_LIB_COMPILATION # --coverage -libndpi_la_CPPFLAGS = -I$(top_srcdir)/src/include/ -I$(top_srcdir)/src/lib/third_party/include/ @HS_INC@ -libndpi_la_LDFLAGS = -version-info 1:0:0 -export-symbols $(top_srcdir)/libndpi.sym - -libndpi_la_includedir = $(includedir)/libndpi-@VERSION@/libndpi - -libndpi_la_include_HEADERS = ../include/ndpi_api.h \ - ../include/ndpi_define.h \ - ../include/ndpi_main.h \ - ../include/ndpi_includes.h \ - ../include/ndpi_config.h \ - ../include/ndpi_protocol_ids.h \ - ../include/ndpi_protocols.h \ - ../include/ndpi_typedefs.h \ - third_party/include/libcache.h - -libndpi_la_SOURCES = ndpi_content_match.c.inc \ - ndpi_main.c \ - protocols/afp.c \ - protocols/ajp.c \ - protocols/aimini.c \ - protocols/applejuice.c \ - protocols/apple_push.c \ - protocols/armagetron.c \ - protocols/ayiya.c \ - protocols/amqp.c \ - protocols/battlefield.c \ - protocols/bgp.c \ - protocols/bittorrent.c \ - protocols/bjnp.c \ - protocols/checkmk.c \ - protocols/ciscovpn.c \ - protocols/citrix.c \ - protocols/coap.c \ - protocols/collectd.c \ - protocols/corba.c \ - protocols/crossfire.c \ - protocols/csgo.c \ - protocols/dcerpc.c \ - protocols/dhcp.c \ - protocols/dhcpv6.c \ - protocols/diameter.c \ - protocols/directconnect.c \ - protocols/directdownloadlink.c \ - protocols/dns.c \ - protocols/dofus.c \ - protocols/drda.c \ - protocols/dropbox.c \ - protocols/eaq.c \ - protocols/edonkey.c \ - protocols/fasttrack.c \ - protocols/fbzero.c \ - protocols/fiesta.c \ - protocols/fix.c \ - protocols/florensia.c \ - protocols/ftp_control.c \ - protocols/ftp_data.c \ - protocols/git.c \ - protocols/gnutella.c \ - protocols/gtp.c \ - protocols/guildwars.c \ - protocols/hangout.c \ - protocols/h323.c \ - protocols/halflife2_and_mods.c \ - protocols/hep.c \ - protocols/http_activesync.c \ - protocols/http.c \ - protocols/iax.c \ - protocols/icecast.c \ - protocols/ipp.c \ - protocols/irc.c \ - protocols/jabber.c \ - protocols/kakaotalk_voice.c \ - protocols/kerberos.c \ - protocols/kontiki.c \ - protocols/ldap.c \ - protocols/lotus_notes.c \ - protocols/lisp.c \ - protocols/mail_imap.c \ - protocols/mail_pop.c \ - protocols/mail_smtp.c \ - protocols/maplestory.c \ - protocols/mdns.c \ - protocols/megaco.c \ - protocols/mgcp.c \ - protocols/mpegts.c \ - protocols/mqtt.c \ - protocols/msn.c \ - protocols/mssql_tds.c \ - protocols/mysql.c \ - protocols/netbios.c \ - protocols/netflow.c \ - protocols/nintendo.c \ - protocols/nfs.c \ - protocols/noe.c \ - protocols/non_tcp_udp.c \ - protocols/ntp.c \ - protocols/openft.c \ - protocols/openvpn.c \ - protocols/oracle.c \ - protocols/oscar.c \ - protocols/pando.c \ - protocols/pcanywhere.c \ - protocols/postgres.c \ - protocols/pplive.c \ - protocols/ppstream.c \ - protocols/pptp.c \ - protocols/qq.c \ - protocols/quic.c \ - protocols/radius.c \ - protocols/rdp.c \ - protocols/redis_net.c \ - protocols/rsync.c \ - protocols/rtcp.c \ - protocols/rtmp.c \ - protocols/rtp.c \ - protocols/rtsp.c \ - protocols/rx.c \ - protocols/sflow.c \ - protocols/shoutcast.c \ - protocols/sip.c \ - protocols/skinny.c \ - protocols/skype.c \ - protocols/smb.c \ - protocols/snmp.c \ - protocols/socks45.c \ - protocols/sopcast.c \ - protocols/soulseek.c \ - protocols/spotify.c \ - protocols/ssdp.c \ - protocols/ssh.c \ - protocols/ssl.c \ - protocols/starcraft.c \ - protocols/stealthnet.c \ - protocols/steam.c \ - protocols/stun.c \ - protocols/syslog.c \ - protocols/tcp_udp.c \ - protocols/teamspeak.c \ - protocols/teamviewer.c \ - protocols/telegram.c \ - protocols/telnet.c \ - protocols/tftp.c \ - protocols/thunder.c \ - protocols/tor.c \ - protocols/teredo.c \ - protocols/tvants.c \ - protocols/tvuplayer.c \ - protocols/ubntac2.c \ - protocols/usenet.c \ - protocols/viber.c \ - protocols/vhua.c \ - protocols/vmware.c \ - protocols/vnc.c \ - protocols/warcraft3.c \ - protocols/whoisdas.c \ - protocols/world_of_kung_fu.c \ - protocols/world_of_warcraft.c \ - protocols/xbox.c \ - protocols/xdmcp.c \ - protocols/yahoo.c \ - protocols/zattoo.c \ - protocols/zeromq.c \ - protocols/smpp.c \ - protocols/tinc.c \ - protocols/someip.c \ - protocols/whatsapp.c \ - third_party/include/actypes.h \ - third_party/include/ahocorasick.h \ - third_party/include/ndpi_patricia.h \ - third_party/include/node.h \ - third_party/include/sort.h \ - third_party/include/libcache.h \ - third_party/src/ahocorasick.c \ - third_party/src/node.c \ - third_party/src/sort.c \ - third_party/src/libcache.c - -EXTRA_DIST = third_party/src/ndpi_patricia.c diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 42031fc2b74..38c8ef70ffe 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -7946,9 +7946,8 @@ static ndpi_network host_protocol_list[] = { /* VidTO - */ - - { 0x51111030 /* 81.17.16.48/32 */, 32, NDPI_PROTOCOL_VIDTO }, + */ + { 0x51111030 /* 81.17.16.48/32 */, 32, NDPI_PROTOCOL_VIDTO }, { 0x5fb7329d /* 95.183.50.157/32 */, 32, NDPI_PROTOCOL_VIDTO }, { 0x577824f2 /* 87.120.36.242/32 */, 32, NDPI_PROTOCOL_VIDTO }, @@ -8212,8 +8211,6 @@ ndpi_protocol_match host_match[] = { { "static-cdn.jtvnw.net", NULL, NULL, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "www-cdn.jtvnw.net", NULL, NULL, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "quickplay.com", NULL, NULL, "QuickPlay", NDPI_PROTOCOL_QUICKPLAY, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".qq.com", NULL, NULL, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".gtimg.com", NULL, NULL, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, @@ -8316,17 +8313,6 @@ ndpi_protocol_match host_match[] = { { "githubusercontent.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, { ".githubusercontent.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".iqiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_IQIYI, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".qiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_IQIYI, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".71.am", NULL, NULL, "iQIYI", NDPI_PROTOCOL_IQIYI, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".qiyipic.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_IQIYI, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - - { ".ppstream.com", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".pps.tv", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - - { ".1kxun.", NULL, NULL, "1kxun", NDPI_PROTOCOL_1KXUN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "tcad.wedolook.com", NULL, NULL, "1kxun", NDPI_PROTOCOL_1KXUN, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".steampowered.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, { "steamcommunity.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, { ".steamcontent.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, @@ -8353,8 +8339,6 @@ ndpi_protocol_match host_match[] = { { ".playstation.com", NULL, NULL, "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, { ".sonyentertainmentnetwork.com", NULL, NULL,"Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".pastebin.com", NULL, NULL, "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - { ".linkedin.com", NULL, NULL, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".licdn.com", NULL, NULL, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, @@ -8366,17 +8350,42 @@ ndpi_protocol_match host_match[] = { { "tdesktop.com", NULL, NULL, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, { "tupdate.com", NULL, NULL, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_ICQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { "icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_ICQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".pastebin.com", NULL, NULL, "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + + { ".ppstream.com", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".pps.tv", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + /* + VidTO streaming service + NOTE: this is a possible candidate for NDPI_PROTOCOL_GENERIC + */ + { ".vidto.me", NULL, NULL, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".vidto.se", NULL, NULL, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".vidto.me", NULL, NULL, "VidTO", NDPI_PROTOCOL_VIDTO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".vidto.se", NULL, NULL, "VidTO", NDPI_PROTOCOL_VIDTO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + /* + Not so popular services without a protocl dissector (and thus not worth a protocolId) that are handled/detected by categpory rather + than by protocol id. They are bound to a generic protocol (NDPI_PROTOCOL_GENERIC) and placed onto the right category + */ + { "quickplay.com", NULL, NULL, "QuickPlay", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".rapidvideo.com", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_RAPIDVIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".playercdn.net", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_RAPIDVIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".iqiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".qiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".71.am", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".qiyipic.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + { ".1kxun.", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "tcad.wedolook.com", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + { ".icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + + /* RapidVideo streaming */ + { ".rapidvideo.com", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".playercdn.net", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "showmax.com", NULL, NULL, "Showmax", NDPI_PROTOCOL_SHOWMAX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "showmax.akamaized.net", NULL, NULL, "Showmax", NDPI_PROTOCOL_SHOWMAX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + /* showmax.com video streaming */ + { "showmax.com", NULL, NULL, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "showmax.akamaized.net", NULL, NULL, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { NULL, NULL, NULL, 0 } }; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index dc090b69893..5396187cd99 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1495,9 +1495,9 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Guildwars", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_ACTIVESYNC, no_master, - no_master, "HTTP_Application_ActiveSync", NDPI_PROTOCOL_CATEGORY_CLOUD, + no_master, "HTTP_ActiveSync", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KERBEROS, @@ -1917,8 +1917,6 @@ static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, void *param) { /* ******************************************************************** */ -#ifdef NDPI_PROTOCOL_TOR - static int fill_prefix_v4(prefix_t *p, struct in_addr *a, int b, int mb) { do { if(b < 0 || b > mb) @@ -1995,6 +1993,7 @@ static patricia_node_t* add_to_ptree(patricia_tree_t *tree, int family, return(node); } + /* ******************************************* */ static void ndpi_init_ptree_ipv4(struct ndpi_detection_module_struct *ndpi_str, @@ -2006,7 +2005,8 @@ static void ndpi_init_ptree_ipv4(struct ndpi_detection_module_struct *ndpi_str, patricia_node_t *node; pin.s_addr = htonl(host_list[i].network); - if((node = add_to_ptree(ptree, AF_INET, &pin, host_list[i].cidr /* bits */)) != NULL) + if((node = add_to_ptree(ptree, AF_INET, + &pin, host_list[i].cidr /* bits */)) != NULL) node->value.user_value = host_list[i].value; } } @@ -2036,8 +2036,6 @@ static int ndpi_add_host_ip_subprotocol(struct ndpi_detection_module_struct *ndp return 0; } -#endif - void set_ndpi_malloc(void* (*__ndpi_malloc)(size_t size)) { _ndpi_malloc = __ndpi_malloc; } void set_ndpi_flow_malloc(void* (*__ndpi_flow_malloc)(size_t size)) { _ndpi_flow_malloc = __ndpi_flow_malloc; } @@ -2293,13 +2291,13 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_struct ndpi_free(ndpi_struct->proto_defaults[i].protoName); } -#ifdef NDPI_PROTOCOL_TINC +/* NDPI_PROTOCOL_TINC */ if(ndpi_struct->tinc_cache) cache_free((cache_t)(ndpi_struct->tinc_cache)); -#endif if(ndpi_struct->protocols_ptree) - ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_struct->protocols_ptree, free_ptree_data); + ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_struct->protocols_ptree, + free_ptree_data); if (ndpi_struct->udpRoot != NULL) ndpi_tdestroy(ndpi_struct->udpRoot, ndpi_free); @@ -2358,7 +2356,8 @@ int ndpi_get_protocol_id_master_proto(struct ndpi_detection_module_struct *ndpi_ u_int16_t** tcp_master_proto, u_int16_t** udp_master_proto) { if(protocol_id >= (NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS)) { - *tcp_master_proto = *udp_master_proto = NDPI_PROTOCOL_UNKNOWN; + *tcp_master_proto = ndpi_struct->proto_defaults[NDPI_PROTOCOL_UNKNOWN].master_tcp_protoId, + *udp_master_proto = ndpi_struct->proto_defaults[NDPI_PROTOCOL_UNKNOWN].master_udp_protoId; return(-1); } @@ -2566,12 +2565,12 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, else removeDefaultPort(&range, def, is_tcp ? &ndpi_mod->tcpRoot : &ndpi_mod->udpRoot); } else if(is_ip) { -#ifdef NDPI_PROTOCOL_TOR +/* NDPI_PROTOCOL_TOR */ ndpi_add_host_ip_subprotocol(ndpi_mod, value, subprotocol_id); -#endif } else { if(do_add) - ndpi_add_host_url_subprotocol(ndpi_mod, value, subprotocol_id, NDPI_PROTOCOL_ACCEPTABLE); + ndpi_add_host_url_subprotocol(ndpi_mod, value, subprotocol_id, +NDPI_PROTOCOL_ACCEPTABLE); else ndpi_remove_host_url_subprotocol(ndpi_mod, value, subprotocol_id); } diff --git a/src/lib/protocols/afp.c b/src/lib/protocols/afp.c index ee8dc5973f8..ffe303cea0e 100644 --- a/src/lib/protocols/afp.c +++ b/src/lib/protocols/afp.c @@ -1,8 +1,8 @@ /* * afp.c * - * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-16 - ntop.org + * Copyright (C) 2009-11 by ipoque GmbH + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_AFP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AFP #include "ndpi_api.h" @@ -100,5 +98,3 @@ void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/aimini.c b/src/lib/protocols/aimini.c index fb439f817a2..dec8118c2ee 100644 --- a/src/lib/protocols/aimini.c +++ b/src/lib/protocols/aimini.c @@ -2,7 +2,7 @@ * aimini.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_AIMINI - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AIMINI #include "ndpi_api.h" @@ -293,5 +291,3 @@ void init_aimini_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/ajp.c b/src/lib/protocols/ajp.c index ed7bb83f712..7cae40f2031 100644 --- a/src/lib/protocols/ajp.c +++ b/src/lib/protocols/ajp.c @@ -22,8 +22,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_AJP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AJP #include "ndpi_api.h" @@ -149,5 +147,3 @@ void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/amqp.c b/src/lib/protocols/amqp.c index 6b530c16d0c..793b3699eae 100644 --- a/src/lib/protocols/amqp.c +++ b/src/lib/protocols/amqp.c @@ -1,7 +1,7 @@ /* * amqp.c * - * Copyright (C) 2011-17 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_AMQP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AMQP #include "ndpi_api.h" @@ -87,4 +85,3 @@ void init_amqp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/apple_push.c b/src/lib/protocols/apple_push.c index 734be6e9664..6930dba862e 100644 --- a/src/lib/protocols/apple_push.c +++ b/src/lib/protocols/apple_push.c @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_APPLE_PUSH - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_APPLE_PUSH #include "ndpi_api.h" @@ -76,6 +74,3 @@ void init_apple_push_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - - -#endif diff --git a/src/lib/protocols/applejuice.c b/src/lib/protocols/applejuice.c index a80c39d7f20..95e6b4458d2 100644 --- a/src/lib/protocols/applejuice.c +++ b/src/lib/protocols/applejuice.c @@ -2,7 +2,7 @@ * applejuice.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_APPLEJUICE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_APPLEJUICE #include "ndpi_api.h" @@ -67,5 +65,3 @@ void init_applejuice_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/armagetron.c b/src/lib/protocols/armagetron.c index 7f4fb9ec092..53c36a5f9b4 100644 --- a/src/lib/protocols/armagetron.c +++ b/src/lib/protocols/armagetron.c @@ -2,7 +2,7 @@ * armagetron.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_ARMAGETRON - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ARMAGETRON #include "ndpi_api.h" @@ -109,6 +107,3 @@ void init_armagetron_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - - -#endif diff --git a/src/lib/protocols/attic/flash.c b/src/lib/protocols/attic/flash.c index bc47ee881ae..eb27807d716 100644 --- a/src/lib/protocols/attic/flash.c +++ b/src/lib/protocols/attic/flash.c @@ -2,7 +2,7 @@ * flash.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH diff --git a/src/lib/protocols/attic/ftp.c b/src/lib/protocols/attic/ftp.c index 2e06aec9a59..19604089cd0 100644 --- a/src/lib/protocols/attic/ftp.c +++ b/src/lib/protocols/attic/ftp.c @@ -2,7 +2,7 @@ * ftp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH diff --git a/src/lib/protocols/attic/manolito.c b/src/lib/protocols/attic/manolito.c index 3b1db0df52a..71fdaeaffdb 100644 --- a/src/lib/protocols/attic/manolito.c +++ b/src/lib/protocols/attic/manolito.c @@ -2,7 +2,7 @@ * manolito.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH diff --git a/src/lib/protocols/attic/popo.c b/src/lib/protocols/attic/popo.c index 4bd040efe2d..c5b0447dfd5 100644 --- a/src/lib/protocols/attic/popo.c +++ b/src/lib/protocols/attic/popo.c @@ -2,7 +2,7 @@ * popo.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH diff --git a/src/lib/protocols/attic/secondlife.c b/src/lib/protocols/attic/secondlife.c index d475dc3860d..487c035971c 100644 --- a/src/lib/protocols/attic/secondlife.c +++ b/src/lib/protocols/attic/secondlife.c @@ -2,7 +2,7 @@ * secondlife.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH diff --git a/src/lib/protocols/ayiya.c b/src/lib/protocols/ayiya.c index bc993cfe3d3..c44c723b58c 100644 --- a/src/lib/protocols/ayiya.c +++ b/src/lib/protocols/ayiya.c @@ -1,7 +1,7 @@ /* * ayiya.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -28,8 +28,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_AYIYA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_AYIYA #include "ndpi_api.h" @@ -85,5 +83,3 @@ void init_ayiya_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/battlefield.c b/src/lib/protocols/battlefield.c index 23a3749b2ed..b4ec74cfe97 100644 --- a/src/lib/protocols/battlefield.c +++ b/src/lib/protocols/battlefield.c @@ -2,7 +2,7 @@ * battlefield.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_BATTLEFIELD - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BATTLEFIELD #include "ndpi_api.h" @@ -126,5 +124,3 @@ void init_battlefield_dissector(struct ndpi_detection_module_struct *ndpi_struct ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/bgp.c b/src/lib/protocols/bgp.c index f7896968b07..aaa5730f73b 100644 --- a/src/lib/protocols/bgp.c +++ b/src/lib/protocols/bgp.c @@ -1,7 +1,7 @@ /* * bgp.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_BGP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BGP #include "ndpi_api.h" @@ -67,5 +65,3 @@ void init_bgp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/bittorrent.c b/src/lib/protocols/bittorrent.c index fceafc188ec..ad7de6b42c8 100644 --- a/src/lib/protocols/bittorrent.c +++ b/src/lib/protocols/bittorrent.c @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_BITTORRENT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BITTORRENT #include "ndpi_api.h" @@ -503,5 +501,3 @@ void init_bittorrent_dissector(struct ndpi_detection_module_struct *ndpi_struct, ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/bjnp.c b/src/lib/protocols/bjnp.c index f9f69030835..759f810be52 100644 --- a/src/lib/protocols/bjnp.c +++ b/src/lib/protocols/bjnp.c @@ -1,16 +1,14 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_BJNP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_BJNP #include "ndpi_api.h" static void ndpi_int_bjnp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, - u_int8_t due_to_correlation) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BJNP, NDPI_PROTOCOL_UNKNOWN); + u_int8_t due_to_correlation) { + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_BJNP, NDPI_PROTOCOL_UNKNOWN); } @@ -61,7 +59,3 @@ void init_bjnp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int ADD_TO_DETECTION_BITMASK); *id += 1; } - - - -#endif diff --git a/src/lib/protocols/btlib.c b/src/lib/protocols/btlib.c index 4a63ebc3134..5992c1b2817 100644 --- a/src/lib/protocols/btlib.c +++ b/src/lib/protocols/btlib.c @@ -1,7 +1,7 @@ /* * btlib.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * Contributed by Vitaly Lavrov * * This file is part of nDPI, an open source deep packet inspection diff --git a/src/lib/protocols/checkmk.c b/src/lib/protocols/checkmk.c index 81ac543b667..991885fce83 100644 --- a/src/lib/protocols/checkmk.c +++ b/src/lib/protocols/checkmk.c @@ -1,7 +1,7 @@ /* * checkmk.c * - * Copyright (C) 2011-17 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CHECKMK - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CHECKMK #include "ndpi_api.h" @@ -82,6 +80,3 @@ void init_checkmk_dissector(struct ndpi_detection_module_struct *ndpi_struct, ADD_TO_DETECTION_BITMASK); *id += 1; } - - -#endif diff --git a/src/lib/protocols/ciscovpn.c b/src/lib/protocols/ciscovpn.c index e04fba936b6..d98f91e027e 100644 --- a/src/lib/protocols/ciscovpn.c +++ b/src/lib/protocols/ciscovpn.c @@ -6,8 +6,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CISCOVPN - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CISCOVPN #include "ndpi_api.h" @@ -84,5 +82,3 @@ void init_ciscovpn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/citrix.c b/src/lib/protocols/citrix.c index 7d6406bff18..89e5208153e 100644 --- a/src/lib/protocols/citrix.c +++ b/src/lib/protocols/citrix.c @@ -1,7 +1,7 @@ /* * citrix.c * - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CITRIX - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CITRIX #include "ndpi_api.h" @@ -95,5 +93,3 @@ void init_citrix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/coap.c b/src/lib/protocols/coap.c index 288d15f23f4..5ac8cb80e5f 100644 --- a/src/lib/protocols/coap.c +++ b/src/lib/protocols/coap.c @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_COAP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_COAP #include "ndpi_api.h" @@ -163,5 +161,3 @@ void init_coap_dissector (struct ndpi_detection_module_struct *ndpi_struct, *id +=1; } - -#endif // NDPI_PROTOCOL_COAP diff --git a/src/lib/protocols/collectd.c b/src/lib/protocols/collectd.c index 2d4a06bb390..6f96871ea4a 100644 --- a/src/lib/protocols/collectd.c +++ b/src/lib/protocols/collectd.c @@ -1,7 +1,7 @@ /* * collectd.c * - * Copyright (C) 2014 - ntop.org + * Copyright (C) 2014-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -21,8 +21,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_COLLECTD - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_COLLECTD #include "ndpi_api.h" @@ -54,5 +52,3 @@ void ndpi_search_collectd(struct ndpi_detection_module_struct *ndpi_struct, stru NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } } - -#endif diff --git a/src/lib/protocols/corba.c b/src/lib/protocols/corba.c index 94e9f324a12..ffb12fec163 100644 --- a/src/lib/protocols/corba.c +++ b/src/lib/protocols/corba.c @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CORBA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CORBA #include "ndpi_api.h" @@ -60,4 +58,3 @@ void init_corba_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in ADD_TO_DETECTION_BITMASK); *id += 1; } -#endif diff --git a/src/lib/protocols/crossfire.c b/src/lib/protocols/crossfire.c index ea1dce66a95..03f3b4264f4 100644 --- a/src/lib/protocols/crossfire.c +++ b/src/lib/protocols/crossfire.c @@ -1,7 +1,7 @@ /* * crossfire.c * - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CROSSFIRE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CROSSFIRE #include "ndpi_api.h" @@ -88,5 +86,3 @@ void init_crossfire_dissector(struct ndpi_detection_module_struct *ndpi_struct, ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/csgo.c b/src/lib/protocols/csgo.c index 3bf0b4fe929..7f4479419ca 100644 --- a/src/lib/protocols/csgo.c +++ b/src/lib/protocols/csgo.c @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_CSGO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_CSGO #include "ndpi_api.h" @@ -122,5 +120,3 @@ void init_csgo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif diff --git a/src/lib/protocols/dcerpc.c b/src/lib/protocols/dcerpc.c index 3aef077cd3b..ae1266a013c 100644 --- a/src/lib/protocols/dcerpc.c +++ b/src/lib/protocols/dcerpc.c @@ -1,7 +1,7 @@ /* * dcerpc.c * - * Copyright (C) 2011-13 by ntop.org + * Copyright (C) 2011-18 by ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DCERPC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DCERPC #include "ndpi_api.h" @@ -69,4 +67,3 @@ void init_dcerpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/dhcp.c b/src/lib/protocols/dhcp.c index 6ac07e8323c..52415946b31 100644 --- a/src/lib/protocols/dhcp.c +++ b/src/lib/protocols/dhcp.c @@ -1,7 +1,7 @@ /* * dhcp.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DHCP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DHCP #include "ndpi_api.h" @@ -166,5 +164,3 @@ void init_dhcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/dhcpv6.c b/src/lib/protocols/dhcpv6.c index 98ed08cda55..77be89e40ae 100644 --- a/src/lib/protocols/dhcpv6.c +++ b/src/lib/protocols/dhcpv6.c @@ -2,7 +2,7 @@ * dhcpv6.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DHCPV6 - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DHCPV6 #include "ndpi_api.h" @@ -68,5 +66,3 @@ void init_dhcpv6_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/diameter.c b/src/lib/protocols/diameter.c index f2f342914b2..7fb443c34f7 100644 --- a/src/lib/protocols/diameter.c +++ b/src/lib/protocols/diameter.c @@ -2,7 +2,6 @@ * diameter.c * * Copyright (C) 2018 - ntop.org - * Written by Michele Campus - * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -19,12 +18,12 @@ * * You should have received a copy of the GNU Lesser General Public License * along with nDPI. If not, see . - * + * + * Based on code of: + * Michele Campus - */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DIAMETER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DIAMETER #include "ndpi_api.h" @@ -128,5 +127,3 @@ void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } -#endif /* NDPI_PROTOCOL_DIAMETER */ - diff --git a/src/lib/protocols/directconnect.c b/src/lib/protocols/directconnect.c index 725e53348f8..6072c369772 100644 --- a/src/lib/protocols/directconnect.c +++ b/src/lib/protocols/directconnect.c @@ -2,7 +2,7 @@ * directconnect.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DIRECTCONNECT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DIRECTCONNECT #include "ndpi_api.h" @@ -446,5 +444,3 @@ void init_directconnect_dissector(struct ndpi_detection_module_struct *ndpi_stru *id += 1; } - -#endif diff --git a/src/lib/protocols/directdownloadlink.c b/src/lib/protocols/directdownloadlink.c index 0a4d528f292..cd824378614 100644 --- a/src/lib/protocols/directdownloadlink.c +++ b/src/lib/protocols/directdownloadlink.c @@ -2,7 +2,7 @@ * directdownloadlink.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-14svn - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK #include "ndpi_api.h" @@ -731,4 +729,4 @@ void init_directdownloadlink_dissector(struct ndpi_detection_module_struct *ndpi *id += 1; } -#endif + diff --git a/src/lib/protocols/dns.c b/src/lib/protocols/dns.c index 7b56c3c026d..6ffa74a277a 100644 --- a/src/lib/protocols/dns.c +++ b/src/lib/protocols/dns.c @@ -1,7 +1,7 @@ /* * dns.c * - * Copyright (C) 2012-16 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DNS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DNS #include "ndpi_api.h" @@ -247,5 +245,3 @@ void init_dns_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/dofus.c b/src/lib/protocols/dofus.c index baed6c262af..997f999a0b9 100644 --- a/src/lib/protocols/dofus.c +++ b/src/lib/protocols/dofus.c @@ -2,7 +2,7 @@ * dofus.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DOFUS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DOFUS #include "ndpi_api.h" @@ -151,4 +149,4 @@ void init_dofus_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } -#endif + diff --git a/src/lib/protocols/drda.c b/src/lib/protocols/drda.c index 72d708d132f..7dc24ffccd8 100644 --- a/src/lib/protocols/drda.c +++ b/src/lib/protocols/drda.c @@ -1,7 +1,7 @@ /* * drda.c * - * Copyright (C) 2012-16 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -19,8 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DRDA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DRDA #include "ndpi_api.h" @@ -103,5 +101,3 @@ void init_drda_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif /* NDPI_PROTOCOL_DRDA */ diff --git a/src/lib/protocols/dropbox.c b/src/lib/protocols/dropbox.c index 6e8a2dcb0ef..b987ba253e3 100644 --- a/src/lib/protocols/dropbox.c +++ b/src/lib/protocols/dropbox.c @@ -1,7 +1,7 @@ /* * dropbox.c * - * Copyright (C) 2012-16 by ntop.org + * Copyright (C) 2012-18 by ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_DROPBOX - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DROPBOX #include "ndpi_api.h" @@ -91,7 +89,3 @@ void init_dropbox_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ ADD_TO_DETECTION_BITMASK); *id += 1; } - - - -#endif diff --git a/src/lib/protocols/eaq.c b/src/lib/protocols/eaq.c index 3929b4ef6c7..2082b5263a8 100644 --- a/src/lib/protocols/eaq.c +++ b/src/lib/protocols/eaq.c @@ -1,7 +1,7 @@ /* * eaq.c * - * Copyright (C) 2015 - ntop.org + * Copyright (C) 2015-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -27,8 +27,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_EAQ - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_EAQ #include "ndpi_api.h" @@ -88,5 +86,3 @@ void init_eaq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/edonkey.c b/src/lib/protocols/edonkey.c index 34276bbcb8d..3a4801ab1a5 100644 --- a/src/lib/protocols/edonkey.c +++ b/src/lib/protocols/edonkey.c @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_EDONKEY - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_EDONKEY #include "ndpi_api.h" @@ -225,4 +223,3 @@ void init_edonkey_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif diff --git a/src/lib/protocols/fasttrack.c b/src/lib/protocols/fasttrack.c index 016a1562198..074468558e5 100644 --- a/src/lib/protocols/fasttrack.c +++ b/src/lib/protocols/fasttrack.c @@ -2,7 +2,7 @@ * fasttrack.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FASTTRACK - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FASTTRACK #include "ndpi_api.h" @@ -94,5 +92,3 @@ void init_fasttrack_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/fbzero.c b/src/lib/protocols/fbzero.c index 31acd0c9abc..3048bff7978 100644 --- a/src/lib/protocols/fbzero.c +++ b/src/lib/protocols/fbzero.c @@ -22,8 +22,6 @@ /* https://code.facebook.com/posts/608854979307125/building-zero-protocol-for-fast-secure-mobile-connections/ */ -#ifdef NDPI_PROTOCOL_FBZERO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FBZERO #include "ndpi_api.h" @@ -129,4 +127,3 @@ void init_fbzero_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/fiesta.c b/src/lib/protocols/fiesta.c index 9a9c7885286..dc7a86fd4b0 100644 --- a/src/lib/protocols/fiesta.c +++ b/src/lib/protocols/fiesta.c @@ -2,7 +2,7 @@ * fiesta.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FIESTA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FIESTA #include "ndpi_api.h" @@ -105,4 +103,3 @@ void init_fiesta_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/fix.c b/src/lib/protocols/fix.c index 4f3f9849b2e..3cc9e070cc1 100644 --- a/src/lib/protocols/fix.c +++ b/src/lib/protocols/fix.c @@ -1,7 +1,7 @@ /* * fix.c * - * Copyright (C) 2017 - ntop.org + * Copyright (C) 2017-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FIX - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FIX #include "ndpi_api.h" @@ -75,6 +73,3 @@ void init_fix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 ADD_TO_DETECTION_BITMASK); *id += 1; } - - -#endif diff --git a/src/lib/protocols/florensia.c b/src/lib/protocols/florensia.c index 217874a6a84..cca63485f94 100644 --- a/src/lib/protocols/florensia.c +++ b/src/lib/protocols/florensia.c @@ -2,7 +2,7 @@ * florensia.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FLORENSIA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FLORENSIA #include "ndpi_api.h" @@ -129,5 +127,3 @@ void init_florensia_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/ftp_control.c b/src/lib/protocols/ftp_control.c index f23476db0db..893f83d682b 100644 --- a/src/lib/protocols/ftp_control.c +++ b/src/lib/protocols/ftp_control.c @@ -1,7 +1,7 @@ /* * ftp_control.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FTP_CONTROL - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FTP_CONTROL #include "ndpi_api.h" @@ -1014,5 +1012,3 @@ void init_ftp_control_dissector(struct ndpi_detection_module_struct *ndpi_struct *id += 1; } - -#endif diff --git a/src/lib/protocols/ftp_data.c b/src/lib/protocols/ftp_data.c index ec1e8d7d8ce..8d3e6fa8cbb 100644 --- a/src/lib/protocols/ftp_data.c +++ b/src/lib/protocols/ftp_data.c @@ -1,7 +1,7 @@ /* * ftp_data.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * The signature is based on the Libprotoident library. * @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_FTP_DATA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_FTP_DATA #include "ndpi_api.h" @@ -258,5 +256,3 @@ void init_ftp_data_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } - -#endif diff --git a/src/lib/protocols/git.c b/src/lib/protocols/git.c index 0b41922899e..1e358d79b7c 100644 --- a/src/lib/protocols/git.c +++ b/src/lib/protocols/git.c @@ -1,7 +1,7 @@ /* * git.c * - * Copyright (C) 2012-16 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_GIT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GIT #include @@ -73,7 +71,6 @@ void ndpi_search_git(struct ndpi_detection_module_struct *ndpi_struct, /* ***************************************************************** */ - void init_git_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { @@ -86,5 +83,3 @@ void init_git_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif /* NDPI_PROTOCOL_GIT */ diff --git a/src/lib/protocols/gnutella.c b/src/lib/protocols/gnutella.c index 295cfaecd26..5bc2980ccac 100644 --- a/src/lib/protocols/gnutella.c +++ b/src/lib/protocols/gnutella.c @@ -2,7 +2,7 @@ * gnutella.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_GNUTELLA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GNUTELLA #include "ndpi_api.h" @@ -371,5 +369,3 @@ void init_gnutella_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } - -#endif diff --git a/src/lib/protocols/gtp.c b/src/lib/protocols/gtp.c index 0bdc4d8ee1c..ffe2b24988e 100644 --- a/src/lib/protocols/gtp.c +++ b/src/lib/protocols/gtp.c @@ -1,7 +1,7 @@ /* * gtp.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_GTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GTP #include "ndpi_api.h" @@ -89,5 +87,3 @@ void init_gtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/guildwars.c b/src/lib/protocols/guildwars.c index 7b6581851ab..1cf3888cfb1 100644 --- a/src/lib/protocols/guildwars.c +++ b/src/lib/protocols/guildwars.c @@ -2,7 +2,7 @@ * guildwars.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_GUILDWARS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GUILDWARS #include "ndpi_api.h" @@ -78,5 +76,3 @@ void init_guildwars_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/h323.c b/src/lib/protocols/h323.c index 31c353a2730..ddbcdadf396 100644 --- a/src/lib/protocols/h323.c +++ b/src/lib/protocols/h323.c @@ -1,16 +1,13 @@ /* * h323.c * - * Copyright (C) 2015 ntop.org + * Copyright (C) 2015-18 ntop.org * Copyright (C) 2013 Remy Mudingay * */ - #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_H323 - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_H323 #include "ndpi_api.h" @@ -115,5 +112,3 @@ void init_h323_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif diff --git a/src/lib/protocols/halflife2_and_mods.c b/src/lib/protocols/halflife2_and_mods.c index 5319424fa6b..44670322098 100644 --- a/src/lib/protocols/halflife2_and_mods.c +++ b/src/lib/protocols/halflife2_and_mods.c @@ -2,7 +2,7 @@ * halflife2_and_mods.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_HALFLIFE2 - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HALFLIFE2 #include "ndpi_api.h" @@ -77,5 +75,3 @@ void init_halflife2_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/hangout.c b/src/lib/protocols/hangout.c index de35653ea97..fc94aad5f61 100644 --- a/src/lib/protocols/hangout.c +++ b/src/lib/protocols/hangout.c @@ -1,7 +1,7 @@ /* * hangout.c * - * Copyright (C) 2012-16 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_HANGOUT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HANGOUT #include "ndpi_api.h" @@ -109,4 +107,3 @@ void init_hangout_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif /* NDPI_PROTOCOL_HANGOUT */ diff --git a/src/lib/protocols/hep.c b/src/lib/protocols/hep.c index 1c7617c8887..02a559af8f2 100644 --- a/src/lib/protocols/hep.c +++ b/src/lib/protocols/hep.c @@ -2,7 +2,7 @@ * hep.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * Copyright (C) 2011-15 - QXIP BV * * This file is part of nDPI, an open source deep packet inspection @@ -26,8 +26,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_HEP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HEP #include "ndpi_api.h" @@ -45,16 +43,17 @@ void ndpi_search_hep(struct ndpi_detection_module_struct *ndpi_struct, struct nd const u_int8_t *packet_payload = packet->payload; u_int32_t payload_len = packet->payload_packet_len; - NDPI_LOG_DBG(ndpi_struct, "searching HEP\n"); - if (payload_len > 10) { - if (memcmp(packet_payload, "HEP3", 4) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found HEP3\n"); - ndpi_int_hep_add_connection(ndpi_struct, flow); - return; - } - } + NDPI_LOG_DBG(ndpi_struct, "searching HEP\n"); + + if(payload_len > 10) { + if(memcmp(packet_payload, "HEP3", 4) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found HEP3\n"); + ndpi_int_hep_add_connection(ndpi_struct, flow); + return; + } + } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } @@ -69,5 +68,3 @@ void init_hep_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/http.c b/src/lib/protocols/http.c index ac5b9d17300..e03b48710a7 100644 --- a/src/lib/protocols/http.c +++ b/src/lib/protocols/http.c @@ -1,7 +1,7 @@ /* * http.c * - * Copyright (C) 2011-17 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_HTTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP #include "ndpi_api.h" @@ -121,7 +119,6 @@ static void avi_check_http_payload(struct ndpi_detection_module_struct *ndpi_str } #endif -#ifdef NDPI_PROTOCOL_TEAMVIEWER static void teamviewer_check_http_payload(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; @@ -140,10 +137,7 @@ static void teamviewer_check_http_payload(struct ndpi_detection_module_struct *n ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_TEAMVIEWER); } } -#endif - -#ifdef NDPI_PROTOCOL_RTSP static void rtsp_parse_packet_acceptline(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { @@ -154,7 +148,6 @@ static void rtsp_parse_packet_acceptline(struct ndpi_detection_module_struct ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_RTSP); } } -#endif static void setHttpUserAgent(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *ua) { @@ -428,25 +421,20 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ if(packet->accept_line.ptr != NULL) { NDPI_LOG_DBG2(ndpi_struct, "Accept line found %.*s\n", packet->accept_line.len, packet->accept_line.ptr); -#ifdef NDPI_PROTOCOL_RTSP - if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask, NDPI_PROTOCOL_RTSP) != 0) { + if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask, + NDPI_PROTOCOL_RTSP) != 0) { rtsp_parse_packet_acceptline(ndpi_struct, flow); } -#endif } /* search for line startin with "Icy-MetaData" */ -#ifdef NDPI_CONTENT_CATEGORY_MPEG - for (a = 0; a < packet->parsed_lines; a++) { + for (a = 0; a < packet->parsed_lines; a++) { if(packet->line[a].len > 11 && memcmp(packet->line[a].ptr, "Icy-MetaData", 12) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found MPEG: Icy-MetaData\n"); - ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_CONTENT_CATEGORY_MPEG); - return; - } + NDPI_LOG_INFO(ndpi_struct, "found MPEG: Icy-MetaData\n"); + ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_CONTENT_CATEGORY_MPEG); + return; + } } -#ifdef NDPI_CONTENT_CATEGORY_AVI -#endif -#endif if(packet->content_line.ptr != NULL && packet->content_line.len != 0) { NDPI_LOG_DBG2(ndpi_struct, "Content Type line found %.*s\n", @@ -471,10 +459,8 @@ static void check_http_payload(struct ndpi_detection_module_struct *ndpi_struct, if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask, NDPI_CONTENT_CATEGORY_AVI) != 0) avi_check_http_payload(ndpi_struct, flow); #endif -#ifdef NDPI_PROTOCOL_TEAMVIEWER - teamviewer_check_http_payload(ndpi_struct, flow); -#endif + teamviewer_check_http_payload(ndpi_struct, flow); } /** @@ -550,9 +536,8 @@ static void http_bitmask_exclude_other(struct ndpi_flow_struct *flow) #ifdef NDPI_CONTENT_CATEGORY_OGG NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_CONTENT_CATEGORY_OGG); #endif -#ifdef NDPI_PROTOCOL_XBOX + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_XBOX); -#endif } /*************************************************************************************************/ @@ -1007,7 +992,7 @@ void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int ADD_TO_DETECTION_BITMASK); *id += 1; #endif -#ifdef NDPI_PROTOCOL_XBOX + ndpi_set_bitmask_protocol_detection("Xbox", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_XBOX, ndpi_search_http_tcp, @@ -1015,8 +1000,7 @@ void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_QQ + ndpi_set_bitmask_protocol_detection("QQ", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_QQ, ndpi_search_http_tcp, @@ -1024,7 +1008,7 @@ void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif + #ifdef NDPI_CONTENT_CATEGORY_AVI ndpi_set_bitmask_protocol_detection("AVI", ndpi_struct, detection_bitmask, *id, NDPI_CONTENT_CATEGORY_AVI, @@ -1069,7 +1053,4 @@ void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int a++; #endif - } - -#endif diff --git a/src/lib/protocols/http_activesync.c b/src/lib/protocols/http_activesync.c index 55451f6bf59..0bf26729090 100644 --- a/src/lib/protocols/http_activesync.c +++ b/src/lib/protocols/http_activesync.c @@ -2,7 +2,7 @@ * http_activesync.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -26,42 +26,39 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP_ACTIVESYNC #include "ndpi_api.h" static void ndpi_int_activesync_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC, NDPI_PROTOCOL_HTTP); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HTTP_ACTIVESYNC, NDPI_PROTOCOL_HTTP); } void ndpi_search_activesync(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - struct ndpi_packet_struct *packet = &flow->packet; + struct ndpi_packet_struct *packet = &flow->packet; - NDPI_LOG_DBG(ndpi_struct, "search activesync\n"); - if (packet->tcp != NULL) { - - if (packet->payload_packet_len > 150 - && ((memcmp(packet->payload, "OPTIONS /Microsoft-Server-ActiveSync?", 37) == 0) - || (memcmp(packet->payload, "POST /Microsoft-Server-ActiveSync?", 34) == 0))) { - ndpi_int_activesync_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "found ActiveSync \n"); - return; - } - } + NDPI_LOG_DBG(ndpi_struct, "search activesync\n"); + if (packet->tcp != NULL) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + if (packet->payload_packet_len > 150 + && ((memcmp(packet->payload, "OPTIONS /Microsoft-Server-ActiveSync?", 37) == 0) + || (memcmp(packet->payload, "POST /Microsoft-Server-ActiveSync?", 34) == 0))) { + ndpi_int_activesync_add_connection(ndpi_struct, flow); + NDPI_LOG_INFO(ndpi_struct, "found ActiveSync \n"); + return; + } + } + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } - -void init_http_activesync_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_http_activesync_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("HTTP_Application_ActiveSync", ndpi_struct, detection_bitmask, *id, - NDPI_PROTOCOL_HTTP_APPLICATION_ACTIVESYNC, + NDPI_PROTOCOL_HTTP_ACTIVESYNC, ndpi_search_activesync, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, SAVE_DETECTION_BITMASK_AS_UNKNOWN, @@ -70,4 +67,3 @@ void init_http_activesync_dissector(struct ndpi_detection_module_struct *ndpi_st *id += 1; } -#endif diff --git a/src/lib/protocols/iax.c b/src/lib/protocols/iax.c index 7f6e960f1d4..104a59be4ef 100644 --- a/src/lib/protocols/iax.c +++ b/src/lib/protocols/iax.c @@ -2,7 +2,7 @@ * iax.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_IAX - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IAX #include "ndpi_api.h" @@ -107,5 +105,3 @@ void init_iax_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/icecast.c b/src/lib/protocols/icecast.c index 23aca33e947..515d5b572f9 100644 --- a/src/lib/protocols/icecast.c +++ b/src/lib/protocols/icecast.c @@ -2,7 +2,7 @@ * icecast.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_ICECAST - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ICECAST #include "ndpi_api.h" @@ -42,13 +40,13 @@ void ndpi_search_icecast_tcp(struct ndpi_detection_module_struct *ndpi_struct, s NDPI_LOG_DBG(ndpi_struct, "search icecast\n"); - if ((packet->payload_packet_len < 500 && + if((packet->payload_packet_len < 500 && packet->payload_packet_len >= 7 && memcmp(packet->payload, "SOURCE ", 7) == 0) || flow->l4.tcp.icecast_stage) { ndpi_parse_packet_line_info_any(ndpi_struct, flow); NDPI_LOG_DBG2(ndpi_struct, "Icecast lines=%d\n", packet->parsed_lines); for (i = 0; i < packet->parsed_lines; i++) { - if (packet->line[i].ptr != NULL && packet->line[i].len > 4 + if(packet->line[i].ptr != NULL && packet->line[i].len > 4 && memcmp(packet->line[i].ptr, "ice-", 4) == 0) { NDPI_LOG_INFO(ndpi_struct, "found Icecast\n"); ndpi_int_icecast_add_connection(ndpi_struct, flow); @@ -56,28 +54,30 @@ void ndpi_search_icecast_tcp(struct ndpi_detection_module_struct *ndpi_struct, s } } - if (packet->parsed_lines < 1 && !flow->l4.tcp.icecast_stage) { + if(packet->parsed_lines < 1 && !flow->l4.tcp.icecast_stage) { flow->l4.tcp.icecast_stage = 1; return; } } -#ifdef NDPI_PROTOCOL_HTTP - if (NDPI_FLOW_PROTOCOL_EXCLUDED(ndpi_struct, flow, NDPI_PROTOCOL_HTTP)) { + + if(NDPI_FLOW_PROTOCOL_EXCLUDED(ndpi_struct, flow, NDPI_PROTOCOL_HTTP)) { goto icecast_exclude; } -#endif - if (packet->packet_direction == flow->setup_packet_direction && flow->packet_counter < 10) { + if((packet->packet_direction == flow->setup_packet_direction) + && (flow->packet_counter < 10)) { return; } - if (packet->packet_direction != flow->setup_packet_direction) { + if(packet->packet_direction != flow->setup_packet_direction) { /* server answer, now test Server for Icecast */ ndpi_parse_packet_line_info(ndpi_struct, flow); - if (packet->server_line.ptr != NULL && packet->server_line.len > NDPI_STATICSTRING_LEN("Icecast") && - memcmp(packet->server_line.ptr, "Icecast", NDPI_STATICSTRING_LEN("Icecast")) == 0) { + if((packet->server_line.ptr != NULL) + && (packet->server_line.len > NDPI_STATICSTRING_LEN("Icecast")) + && memcmp(packet->server_line.ptr, "Icecast", + NDPI_STATICSTRING_LEN("Icecast")) == 0) { /* TODO maybe store the previous protocol type as subtype? * e.g. ogg or mpeg */ @@ -103,5 +103,3 @@ void init_icecast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } - -#endif diff --git a/src/lib/protocols/ipp.c b/src/lib/protocols/ipp.c index fcf25a7588d..4f4f2438fad 100644 --- a/src/lib/protocols/ipp.c +++ b/src/lib/protocols/ipp.c @@ -2,7 +2,7 @@ * ipp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_IPP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IPP #include "ndpi_api.h" @@ -123,5 +121,3 @@ void init_ipp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/irc.c b/src/lib/protocols/irc.c index 7bdd543c371..12660b52822 100644 --- a/src/lib/protocols/irc.c +++ b/src/lib/protocols/irc.c @@ -2,7 +2,7 @@ * irc.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_IRC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_IRC #include "ndpi_api.h" @@ -778,8 +776,8 @@ void ndpi_search_irc_tcp(struct ndpi_detection_module_struct *ndpi_struct, struc } } - -void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("IRC", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IRC, @@ -791,4 +789,3 @@ void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/jabber.c b/src/lib/protocols/jabber.c index 05950d8c55b..3917b8b2017 100644 --- a/src/lib/protocols/jabber.c +++ b/src/lib/protocols/jabber.c @@ -2,7 +2,7 @@ * jabber.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_UNENCRYPTED_JABBER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UNENCRYPTED_JABBER #include "ndpi_api.h" @@ -36,10 +34,8 @@ struct jabber_string { }; static struct jabber_string jabber_strings[] = { -#ifdef NDPI_PROTOCOL_TRUPHONE { "='im.truphone.com'", NDPI_PROTOCOL_TRUPHONE }, { "=\"im.truphone.com\"", NDPI_PROTOCOL_TRUPHONE }, -#endif { NULL, 0 } }; @@ -289,9 +285,8 @@ void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_struct, st NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -#ifdef NDPI_PROTOCOL_TRUPHONE - ndpi_exclude_protocol(ndpi_struct, flow, NDPI_PROTOCOL_TRUPHONE,__FILE__,__FUNCTION__,__LINE__); -#endif + ndpi_exclude_protocol(ndpi_struct, flow, NDPI_PROTOCOL_TRUPHONE, + __FILE__,__FUNCTION__,__LINE__); } @@ -306,4 +301,4 @@ void init_jabber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif + diff --git a/src/lib/protocols/kakaotalk_voice.c b/src/lib/protocols/kakaotalk_voice.c index 87c1ef061f0..1869e06db7f 100644 --- a/src/lib/protocols/kakaotalk_voice.c +++ b/src/lib/protocols/kakaotalk_voice.c @@ -1,7 +1,7 @@ /* * kakaotalk_voice.c * - * Copyright (C) 2015 - ntop.org + * Copyright (C) 2015-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -26,8 +26,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_KAKAOTALK_VOICE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KAKAOTALK_VOICE #include "ndpi_api.h" @@ -66,7 +64,8 @@ void ndpi_search_kakaotalk_voice(struct ndpi_detection_module_struct *ndpi_struc } -void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("KakaoTalk_Voice", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_KAKAOTALK_VOICE, @@ -77,4 +76,3 @@ void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_st *id += 1; } -#endif diff --git a/src/lib/protocols/kerberos.c b/src/lib/protocols/kerberos.c index 71f4a8636ba..8b059a1a207 100644 --- a/src/lib/protocols/kerberos.c +++ b/src/lib/protocols/kerberos.c @@ -2,7 +2,7 @@ * kerberos.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_KERBEROS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KERBEROS #include "ndpi_api.h" @@ -80,4 +78,3 @@ void init_kerberos_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } -#endif diff --git a/src/lib/protocols/kontiki.c b/src/lib/protocols/kontiki.c index 425fd6b1bb9..4882c779722 100644 --- a/src/lib/protocols/kontiki.c +++ b/src/lib/protocols/kontiki.c @@ -2,7 +2,7 @@ * kontiki.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_KONTIKI - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_KONTIKI #include "ndpi_api.h" @@ -66,7 +64,8 @@ void ndpi_search_kontiki(struct ndpi_detection_module_struct *ndpi_struct, struc } -void init_kontiki_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_kontiki_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("Kontiki", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_KONTIKI, @@ -78,4 +77,3 @@ void init_kontiki_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif diff --git a/src/lib/protocols/ldap.c b/src/lib/protocols/ldap.c index 4adb7c471ac..49b1a39d428 100644 --- a/src/lib/protocols/ldap.c +++ b/src/lib/protocols/ldap.c @@ -2,7 +2,7 @@ * ldap.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_LDAP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_LDAP #include "ndpi_api.h" @@ -104,4 +102,3 @@ void init_ldap_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/lisp.c b/src/lib/protocols/lisp.c index e507be9f921..2c6d7b611dd 100644 --- a/src/lib/protocols/lisp.c +++ b/src/lib/protocols/lisp.c @@ -1,7 +1,5 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_LISP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_LISP #include "ndpi_api.h" @@ -68,4 +66,3 @@ void init_lisp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/lotus_notes.c b/src/lib/protocols/lotus_notes.c index 5750c50cd2d..d5f8f1310d7 100644 --- a/src/lib/protocols/lotus_notes.c +++ b/src/lib/protocols/lotus_notes.c @@ -1,7 +1,7 @@ /* * lotus_notes.c * - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,13 +20,10 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_LOTUS_NOTES - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_LOTUS_NOTES #include "ndpi_api.h" - /* ************************************ */ static void ndpi_check_lotus_notes(struct ndpi_detection_module_struct *ndpi_struct, @@ -84,4 +81,3 @@ void init_lotus_notes_dissector(struct ndpi_detection_module_struct *ndpi_struct *id += 1; } -#endif diff --git a/src/lib/protocols/mail_imap.c b/src/lib/protocols/mail_imap.c index 2c3d3d2d736..65341cdc8b6 100644 --- a/src/lib/protocols/mail_imap.c +++ b/src/lib/protocols/mail_imap.c @@ -1,7 +1,7 @@ /* * mail_imap.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MAIL_IMAP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MAIL_IMAP #include "ndpi_api.h" @@ -48,12 +46,10 @@ void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search IMAP_IMAP\n"); if (flow->l4.tcp.mail_imap_starttls == 2) { -#ifdef NDPI_PROTOCOL_SSL NDPI_LOG_DBG2(ndpi_struct, "starttls detected\n"); NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MAIL_IMAP); NDPI_DEL_PROTOCOL_FROM_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SSL); return; -#endif } if (packet->payload_packet_len >= 4 && ntohs(get_u_int16_t(packet->payload, packet->payload_packet_len - 2)) == 0x0d0a) { @@ -320,5 +316,3 @@ void init_mail_imap_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/mail_pop.c b/src/lib/protocols/mail_pop.c index 4f9a6ea5fc6..83847f1f86b 100644 --- a/src/lib/protocols/mail_pop.c +++ b/src/lib/protocols/mail_pop.c @@ -2,7 +2,7 @@ * mail_pop.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MAIL_POP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MAIL_POP #include "ndpi_api.h" @@ -212,5 +210,3 @@ void init_mail_pop_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } - -#endif diff --git a/src/lib/protocols/mail_smtp.c b/src/lib/protocols/mail_smtp.c index 252c74ffe62..f7fbd337c5f 100644 --- a/src/lib/protocols/mail_smtp.c +++ b/src/lib/protocols/mail_smtp.c @@ -2,7 +2,7 @@ * mail_smtp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MAIL_SMTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MAIL_SMTP #include "ndpi_api.h" @@ -189,4 +187,3 @@ void init_mail_smtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/maplestory.c b/src/lib/protocols/maplestory.c index a55c2cc1100..e45729b8beb 100644 --- a/src/lib/protocols/maplestory.c +++ b/src/lib/protocols/maplestory.c @@ -2,7 +2,7 @@ * maplestory.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MAPLESTORY - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MAPLESTORY #include "ndpi_api.h" @@ -94,5 +92,3 @@ void init_maplestory_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/mdns.c b/src/lib/protocols/mdns.c index 17a6d921d86..77bdf42086c 100644 --- a/src/lib/protocols/mdns.c +++ b/src/lib/protocols/mdns.c @@ -1,7 +1,7 @@ /* * mdns.c * - * Copyright (C) 2016-17 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MDNS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MDNS #include "ndpi_api.h" @@ -159,4 +157,3 @@ void init_mdns_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/megaco.c b/src/lib/protocols/megaco.c index bb317f5d5de..e4b694ea6c7 100644 --- a/src/lib/protocols/megaco.c +++ b/src/lib/protocols/megaco.c @@ -2,7 +2,7 @@ * megaco.c * * Copyright (C) 2014 by Gianluca Costa http://www.capanalysis.net - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,14 +20,13 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MEGACO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MEGACO #include "ndpi_api.h" -void ndpi_search_megaco(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +void ndpi_search_megaco(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; @@ -61,4 +60,3 @@ void init_megaco_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/mgcp.c b/src/lib/protocols/mgcp.c index 69fe33facea..86fadcb63d5 100644 --- a/src/lib/protocols/mgcp.c +++ b/src/lib/protocols/mgcp.c @@ -1,7 +1,7 @@ /* * mgcp.c * - * Copyright (C) 2017 - ntop.org + * Copyright (C) 2017-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,14 +23,10 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MGCP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MGCP #include "ndpi_api.h" - - static void ndpi_int_mgcp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { @@ -93,4 +89,3 @@ void init_mgpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/mpegts.c b/src/lib/protocols/mpegts.c index 3558bdce759..c1f2275650f 100644 --- a/src/lib/protocols/mpegts.c +++ b/src/lib/protocols/mpegts.c @@ -2,7 +2,7 @@ * mpegts.c (MPEG Transport Stream) * https://en.wikipedia.org/wiki/MPEG_transport_stream * - * Copyright (C) 2015 - ntop.org + * Copyright (C) 2015-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -21,8 +21,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MPEGTS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MPEGTS #include "ndpi_api.h" @@ -65,4 +63,3 @@ void init_mpegts_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/mqtt.c b/src/lib/protocols/mqtt.c index 950dde5d125..b9f90c3b5ad 100644 --- a/src/lib/protocols/mqtt.c +++ b/src/lib/protocols/mqtt.c @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MQTT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MQTT #include "ndpi_api.h" @@ -255,5 +253,4 @@ void init_mqtt_dissector (struct ndpi_detection_module_struct *ndpi_struct, *id +=1; } -#endif // NDPI_PROTOCOL_MQTT diff --git a/src/lib/protocols/msn.c b/src/lib/protocols/msn.c index ec090cf00ef..8ab45ad32a8 100644 --- a/src/lib/protocols/msn.c +++ b/src/lib/protocols/msn.c @@ -2,7 +2,7 @@ * msn.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,9 +24,6 @@ #include "ndpi_protocol_ids.h" - -#ifdef NDPI_PROTOCOL_MSN - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MSN #include "ndpi_api.h" @@ -65,7 +62,6 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct u_int16_t plen; u_int16_t status = 0; -#ifdef NDPI_PROTOCOL_SSL if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) { NDPI_LOG_DBG2(ndpi_struct, "msn ssl ft test\n"); @@ -73,28 +69,32 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct if(flow->packet_counter < 10) { if(flow->packet_counter == 7 && packet->payload_packet_len > 300) { if(memcmp(packet->payload + 24, "MSNSLP", 6) == 0 - || (get_u_int32_t(packet->payload, 0) == htonl(0x30000000) && get_u_int32_t(packet->payload, 4) == 0x00000000)) { + || (get_u_int32_t(packet->payload, 0) == htonl(0x30000000) + && get_u_int32_t(packet->payload, 4) == 0x00000000)) { NDPI_LOG_INFO(ndpi_struct, "found MSN File Transfer, ifdef ssl\n"); ndpi_int_msn_add_connection(ndpi_struct, flow); return; } } - if(flow->packet_counter >= 5 && flow->packet_counter <= 10 && (get_u_int32_t(packet->payload, 0) == htonl(0x18000000) - && get_u_int32_t(packet->payload, 4) == 0x00000000)) { + + if(flow->packet_counter >= 5 && flow->packet_counter <= 10 + && (get_u_int32_t(packet->payload, 0) == htonl(0x18000000) + && get_u_int32_t(packet->payload, 4) == 0x00000000)) { flow->l4.tcp.msn_ssl_ft++; NDPI_LOG_DBG2(ndpi_struct, - "increased msn ft ssl stage to: %u at packet nr: %u\n", flow->l4.tcp.msn_ssl_ft, + "increased msn ft ssl stage to: %u at packet nr: %u\n", + flow->l4.tcp.msn_ssl_ft, flow->packet_counter); if (flow->l4.tcp.msn_ssl_ft == 2) { NDPI_LOG_INFO(ndpi_struct, "found MSN File Transfer, ifdef ssl 2.\n"); ndpi_int_msn_add_connection(ndpi_struct, flow); } + return; } } } -#endif /* we detect the initial connection only ! */ /* match: "VER " ..... "CVR" x 0x0d 0x0a @@ -103,15 +103,17 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct */ /* now we have a look at the first packet only. */ if(flow->packet_counter == 1 -#ifdef NDPI_PROTOCOL_SSL - || ((packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) && flow->packet_counter <= 3) -#endif + || ((packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) + && flow->packet_counter <= 3) ) { /* this part is working asymmetrically */ - if(packet->payload_packet_len > 32 && (packet->payload[0] == 0x02 || packet->payload[0] == 0x00) - && (ntohl(get_u_int32_t(packet->payload, 8)) == 0x2112a442 || ntohl(get_u_int32_t(packet->payload, 4)) == 0x2112a442) - && ((ntohl(get_u_int32_t(packet->payload, 24)) == 0x000f0004 && ntohl(get_u_int32_t(packet->payload, 28)) == 0x72c64bc6) + if(packet->payload_packet_len > 32 + && (packet->payload[0] == 0x02 || packet->payload[0] == 0x00) + && (ntohl(get_u_int32_t(packet->payload, 8)) == 0x2112a442 + || ntohl(get_u_int32_t(packet->payload, 4)) == 0x2112a442) + && ((ntohl(get_u_int32_t(packet->payload, 24)) == 0x000f0004 + && ntohl(get_u_int32_t(packet->payload, 28)) == 0x72c64bc6) || (ntohl(get_u_int32_t(packet->payload, 20)) == 0x000f0004 && ntohl(get_u_int32_t(packet->payload, 24)) == 0x72c64bc6))) { NDPI_LOG_INFO(ndpi_struct, @@ -145,10 +147,9 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct } } } + if( -#ifdef NDPI_PROTOCOL_HTTP packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP || -#endif ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "GET ") || ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "POST ")) { ndpi_parse_packet_line_info(ndpi_struct, flow); @@ -160,18 +161,12 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct return; } } -/* #ifdef NDPI_PROTOCOL_HTTP */ -/* /\* we have to examine two http packets *\/ */ -/* if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP) { */ -/* } */ -/* #endif */ + /* not seen this pattern in any trace */ /* now test for http login, at least 100 a bytes packet */ if(packet->payload_packet_len > 100) { if( -#ifdef NDPI_PROTOCOL_HTTP packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP || -#endif memcmp(packet->payload, "POST http://", 12) == 0) { /* scan packet if not already done... */ ndpi_parse_packet_line_info(ndpi_struct, flow); @@ -193,9 +188,7 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct /* for this case the asymmetric detection is asym (1) */ if(packet->payload_packet_len > 400) { if(( -#ifdef NDPI_PROTOCOL_HTTP packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP || -#endif (memcmp(packet->payload, "POST ", 5) == 0))) { u_int16_t c; if(memcmp(&packet->payload[5], "http://", 7) == 0) { @@ -259,9 +252,7 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct && packet->payload_packet_len > 100) { /* not necessary to check the length, because this has been done : >400. */ if( -#ifdef NDPI_PROTOCOL_HTTP packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP || -#endif ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "HTTP/1.0 200 OK") || ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "HTTP/1.1 200 OK") ) { @@ -342,9 +333,7 @@ static void ndpi_search_msn_tcp(struct ndpi_detection_module_struct *ndpi_struct packet->payload_packet_len > 100) { /* not necessary to check the length, because this has been done : >400. */ if( -#ifdef NDPI_PROTOCOL_HTTP packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP || -#endif (memcmp(packet->payload, "HTTP/1.0 200 OK", 15) == 0) || (memcmp(packet->payload, "HTTP/1.1 200 OK", 15) == 0)) { @@ -507,15 +496,9 @@ void ndpi_search_msn(struct ndpi_detection_module_struct *ndpi_struct, struct nd /* the detection can switch out the http or the ssl detection. In this case we need not check those protocols */ // need to do the ceck when protocol == http too (POST /gateway ...) if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN -#ifdef NDPI_PROTOCOL_HTTP || packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP -#endif -#ifdef NDPI_PROTOCOL_SSL || packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL -#endif -#ifdef NDPI_PROTOCOL_STUN || packet->detected_protocol_stack[0] == NDPI_PROTOCOL_STUN -#endif ) ndpi_search_msn_tcp(ndpi_struct, flow); } else if (packet->udp != NULL) { @@ -525,7 +508,8 @@ void ndpi_search_msn(struct ndpi_detection_module_struct *ndpi_struct, struct nd } -void init_msn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_msn_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { NDPI_BITMASK_RESET(ndpi_struct->callback_buffer[*id].excluded_protocol_bitmask); @@ -540,4 +524,3 @@ void init_msn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/mssql_tds.c b/src/lib/protocols/mssql_tds.c index 75507fd5259..621ea2b0e6d 100644 --- a/src/lib/protocols/mssql_tds.c +++ b/src/lib/protocols/mssql_tds.c @@ -1,7 +1,7 @@ /* * mssql.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MSSQL_TDS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MSSQL_TDS #include "ndpi_api.h" @@ -83,5 +81,3 @@ void init_mssql_tds_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/mysql.c b/src/lib/protocols/mysql.c index d1e695e55b6..d1602a2fef8 100644 --- a/src/lib/protocols/mysql.c +++ b/src/lib/protocols/mysql.c @@ -2,7 +2,7 @@ * mysql.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_MYSQL - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MYSQL #include "ndpi_api.h" @@ -85,5 +83,3 @@ void init_mysql_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/netbios.c b/src/lib/protocols/netbios.c index 6342841212f..4c5897c1476 100644 --- a/src/lib/protocols/netbios.c +++ b/src/lib/protocols/netbios.c @@ -2,7 +2,7 @@ * netbios.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-17 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NETBIOS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NETBIOS #include "ndpi_api.h" @@ -390,5 +388,3 @@ void init_netbios_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } - -#endif diff --git a/src/lib/protocols/netflow.c b/src/lib/protocols/netflow.c index a553e4b6aff..23c4bc58793 100644 --- a/src/lib/protocols/netflow.c +++ b/src/lib/protocols/netflow.c @@ -1,7 +1,7 @@ /* * netflow.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NETFLOW - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NETFLOW #include "ndpi_api.h" @@ -184,4 +182,3 @@ void init_netflow_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif diff --git a/src/lib/protocols/nfs.c b/src/lib/protocols/nfs.c index c074b9d3b4d..c9e3265a581 100644 --- a/src/lib/protocols/nfs.c +++ b/src/lib/protocols/nfs.c @@ -2,7 +2,7 @@ * nfs.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NFS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NFS #include "ndpi_api.h" @@ -101,4 +99,3 @@ void init_nfs_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/nintendo.c b/src/lib/protocols/nintendo.c index 8b76f33a6d0..bbc87a49546 100644 --- a/src/lib/protocols/nintendo.c +++ b/src/lib/protocols/nintendo.c @@ -1,7 +1,7 @@ /* * nintendo.c * - * Copyright (C) 2017 by ntop.org + * Copyright (C) 2017-18 by ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NINTENDO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NINTENDO #include "ndpi_api.h" @@ -67,4 +65,3 @@ void init_nintendo_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/noe.c b/src/lib/protocols/noe.c index 9899b056bbf..da572b6c02c 100644 --- a/src/lib/protocols/noe.c +++ b/src/lib/protocols/noe.c @@ -7,8 +7,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NOE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NOE #include "ndpi_api.h" @@ -21,7 +19,8 @@ static void ndpi_int_noe_add_connection(struct ndpi_detection_module_struct NDPI_LOG_INFO(ndpi_struct, "found noe\n"); } -void ndpi_search_noe(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +void ndpi_search_noe(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; @@ -66,4 +65,3 @@ void init_noe_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/non_tcp_udp.c b/src/lib/protocols/non_tcp_udp.c index 668a158d71c..b7cc4a4d0f1 100644 --- a/src/lib/protocols/non_tcp_udp.c +++ b/src/lib/protocols/non_tcp_udp.c @@ -2,7 +2,7 @@ * non_tcp_udp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#if defined(NDPI_PROTOCOL_IP_IPSEC) || defined(NDPI_PROTOCOL_IP_GRE) || defined(NDPI_PROTOCOL_IP_ICMP) || defined(NDPI_PROTOCOL_IP_IGMP) || defined(NDPI_PROTOCOL_IP_EGP) || defined(NDPI_PROTOCOL_IP_SCTP) || defined(NDPI_PROTOCOL_IP_OSPF) || defined(NDPI_PROTOCOL_IP_IP_IN_IP) - #include "ndpi_api.h" #define set_protocol_and_bmask(nprot) \ @@ -52,57 +50,46 @@ void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct } switch (packet->l4_protocol) { -#ifdef NDPI_PROTOCOL_IP_IPSEC case NDPI_IPSEC_PROTOCOL_ESP: case NDPI_IPSEC_PROTOCOL_AH: set_protocol_and_bmask(NDPI_PROTOCOL_IP_IPSEC); break; -#endif /* NDPI_PROTOCOL_IP_IPSEC */ -#ifdef NDPI_PROTOCOL_IP_GRE + case NDPI_GRE_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_GRE); break; -#endif /* NDPI_PROTOCOL_IP_GRE */ -#ifdef NDPI_PROTOCOL_IP_ICMP + case NDPI_ICMP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_ICMP); break; -#endif /* NDPI_PROTOCOL_IP_ICMP */ -#ifdef NDPI_PROTOCOL_IP_IGMP + case NDPI_IGMP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_IGMP); break; -#endif /* NDPI_PROTOCOL_IP_IGMP */ -#ifdef NDPI_PROTOCOL_IP_EGP + case NDPI_EGP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_EGP); break; -#endif /* NDPI_PROTOCOL_IP_EGP */ -#ifdef NDPI_PROTOCOL_IP_SCTP + case NDPI_SCTP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_SCTP); break; -#endif /* NDPI_PROTOCOL_IP_SCTP */ -#ifdef NDPI_PROTOCOL_IP_OSPF + case NDPI_OSPF_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_OSPF); break; -#endif /* NDPI_PROTOCOL_IP_OSPF */ -#ifdef NDPI_PROTOCOL_IP_IP_IN_IP + case NDPI_IPIP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_IP_IN_IP); break; -#endif /* NDPI_PROTOCOL_IP_IP_IN_IP */ -#ifdef NDPI_PROTOCOL_IP_ICMPV6 + case NDPI_ICMPV6_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_ICMPV6); break; -#endif /* NDPI_PROTOCOL_IP_ICMPV6 */ -#ifdef NDPI_PROTOCOL_IP_VRRP + case 112: set_protocol_and_bmask(NDPI_PROTOCOL_IP_VRRP); break; -#endif /* NDPI_PROTOCOL_IP_VRRP */ } } @@ -113,7 +100,6 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct /* always add non tcp/udp if one protocol is compiled in */ NDPI_SAVE_AS_BITMASK(ndpi_struct->callback_buffer[*id].detection_bitmask, NDPI_PROTOCOL_UNKNOWN); -#ifdef NDPI_PROTOCOL_IP_IPSEC ndpi_set_bitmask_protocol_detection("IP_IPSEC", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_IPSEC, ndpi_search_in_non_tcp_udp, @@ -121,8 +107,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_GRE + ndpi_set_bitmask_protocol_detection("IP_GRE", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_GRE, ndpi_search_in_non_tcp_udp, @@ -130,8 +115,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_ICMP + ndpi_set_bitmask_protocol_detection("IP_ICMP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_ICMP, ndpi_search_in_non_tcp_udp, @@ -139,8 +123,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_IGMP + ndpi_set_bitmask_protocol_detection("IP_IGMP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_IGMP, ndpi_search_in_non_tcp_udp, @@ -148,8 +131,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_EGP + ndpi_set_bitmask_protocol_detection("IP_EGP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_EGP, ndpi_search_in_non_tcp_udp, @@ -157,8 +139,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_SCTP + ndpi_set_bitmask_protocol_detection("IP_SCTP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_SCTP, ndpi_search_in_non_tcp_udp, @@ -166,8 +147,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_OSPF + ndpi_set_bitmask_protocol_detection("IP_OSPF", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_OSPF, ndpi_search_in_non_tcp_udp, @@ -175,8 +155,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_IP_IN_IP + ndpi_set_bitmask_protocol_detection("IP_IP_IN_IP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_IP_IN_IP, ndpi_search_in_non_tcp_udp, @@ -184,8 +163,7 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif -#ifdef NDPI_PROTOCOL_IP_ICMPV6 + ndpi_set_bitmask_protocol_detection("IP_ICMPV6", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_IP_ICMPV6, ndpi_search_in_non_tcp_udp, @@ -193,8 +171,4 @@ void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); *id += 1; -#endif - } - -#endif diff --git a/src/lib/protocols/ntp.c b/src/lib/protocols/ntp.c index 3b8eb3d7d28..9290fbfb331 100644 --- a/src/lib/protocols/ntp.c +++ b/src/lib/protocols/ntp.c @@ -2,7 +2,7 @@ * ntp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_NTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NTP #include "ndpi_api.h" @@ -77,4 +75,3 @@ void init_ntp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/openft.c b/src/lib/protocols/openft.c index d0b50c8a24d..30fb1c68fc4 100644 --- a/src/lib/protocols/openft.c +++ b/src/lib/protocols/openft.c @@ -2,7 +2,7 @@ * openft.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_OPENFT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_OPENFT #include "ndpi_api.h" @@ -67,5 +65,3 @@ void init_openft_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/openvpn.c b/src/lib/protocols/openvpn.c index 6756c173de2..6bd480ea154 100644 --- a/src/lib/protocols/openvpn.c +++ b/src/lib/protocols/openvpn.c @@ -1,7 +1,7 @@ /* * openvpn.c * - * Copyright (C) 2011-16 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * OpenVPN TCP / UDP Detection - 128/160 hmac * @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_OPENVPN - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_OPENVPN #include "ndpi_api.h" @@ -135,5 +133,3 @@ void init_openvpn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } - -#endif diff --git a/src/lib/protocols/oracle.c b/src/lib/protocols/oracle.c index 5fda786726c..6ad6bac4c26 100644 --- a/src/lib/protocols/oracle.c +++ b/src/lib/protocols/oracle.c @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_ORACLE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ORACLE #include "ndpi_api.h" @@ -75,5 +73,3 @@ void init_oracle_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/oscar.c b/src/lib/protocols/oscar.c index 6dec353a5ca..010a620e97f 100644 --- a/src/lib/protocols/oscar.c +++ b/src/lib/protocols/oscar.c @@ -2,7 +2,7 @@ * oscar.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_OSCAR - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_OSCAR #include "ndpi_api.h" @@ -816,5 +814,3 @@ void init_oscar_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/pando.c b/src/lib/protocols/pando.c index ccf1ee12d5f..ece78559d1f 100644 --- a/src/lib/protocols/pando.c +++ b/src/lib/protocols/pando.c @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_PANDO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_PANDO #include "ndpi_api.h" @@ -167,5 +165,3 @@ void init_pando_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/pcanywhere.c b/src/lib/protocols/pcanywhere.c index 56b68b56747..0d205d5f306 100644 --- a/src/lib/protocols/pcanywhere.c +++ b/src/lib/protocols/pcanywhere.c @@ -2,7 +2,7 @@ * pcanywhere.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_PCANYWHERE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_PCANYWHERE #include "ndpi_api.h" @@ -67,4 +65,3 @@ void init_pcanywhere_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/postgres.c b/src/lib/protocols/postgres.c index e23d316e47c..089be4e3136 100644 --- a/src/lib/protocols/postgres.c +++ b/src/lib/protocols/postgres.c @@ -2,7 +2,7 @@ * postgres.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_POSTGRES - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_POSTGRES #include "ndpi_api.h" @@ -131,4 +129,3 @@ void init_postgres_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } -#endif diff --git a/src/lib/protocols/pplive.c b/src/lib/protocols/pplive.c index 6f874d7b698..2e41d64f59f 100644 --- a/src/lib/protocols/pplive.c +++ b/src/lib/protocols/pplive.c @@ -26,8 +26,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_PPLIVE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_PPLIVE #include "ndpi_api.h" @@ -232,4 +230,3 @@ void init_pplive_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/ppstream.c b/src/lib/protocols/ppstream.c index 08d2f8adeed..20eb0d428bb 100644 --- a/src/lib/protocols/ppstream.c +++ b/src/lib/protocols/ppstream.c @@ -1,7 +1,7 @@ /* * ppstream.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_PPSTREAM - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_PPSTREAM #include "ndpi_api.h" @@ -237,4 +235,3 @@ void init_ppstream_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } -#endif diff --git a/src/lib/protocols/pptp.c b/src/lib/protocols/pptp.c index 9bacdeded63..cfe360b5b50 100644 --- a/src/lib/protocols/pptp.c +++ b/src/lib/protocols/pptp.c @@ -2,7 +2,7 @@ * pptp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_PPTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_PPTP #include "ndpi_api.h" @@ -69,5 +67,3 @@ void init_pptp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif diff --git a/src/lib/protocols/qq.c b/src/lib/protocols/qq.c index f3b713132fe..077d385fada 100644 --- a/src/lib/protocols/qq.c +++ b/src/lib/protocols/qq.c @@ -2,7 +2,7 @@ * qq.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_QQ - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_QQ #include "ndpi_api.h" @@ -636,17 +634,13 @@ void ndpi_search_qq_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct } } } -#ifdef NDPI_PROTOCOL_HTTP + if (NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_HTTP) != 0) { -#endif /* NDPI_PROTOCOL_HTTP */ NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_QQ); NDPI_LOG_DBG(ndpi_struct, "QQ tcp excluded; len %u\n", packet->payload_packet_len); - -#ifdef NDPI_PROTOCOL_HTTP } -#endif /* NDPI_PROTOCOL_HTTP */ } @@ -674,5 +668,3 @@ void init_qq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32 *id += 1; } - -#endif diff --git a/src/lib/protocols/quic.c b/src/lib/protocols/quic.c index 6bf5cb0b27b..4c838f41f35 100644 --- a/src/lib/protocols/quic.c +++ b/src/lib/protocols/quic.c @@ -3,10 +3,6 @@ * * Copyright (C) 2012-18 - ntop.org * - * Based on code of: - * Andrea Buscarinu - - * Michele Campus - - * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or @@ -20,12 +16,14 @@ * You should have received a copy of the GNU Lesser General Public License. * If not, see . * + * Based on code of: + * Andrea Buscarinu - + * Michele Campus - + * */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_QUIC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_QUIC #include "ndpi_api.h" @@ -148,5 +146,3 @@ void init_quic_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif /* NDPI_PROTOCOL_QUIC */ diff --git a/src/lib/protocols/radius.c b/src/lib/protocols/radius.c index e0eb2657b24..1c85f48d705 100644 --- a/src/lib/protocols/radius.c +++ b/src/lib/protocols/radius.c @@ -1,7 +1,7 @@ /* * radius.c * - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RADIUS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RADIUS #include "ndpi_api.h" @@ -79,5 +77,3 @@ void init_radius_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/rdp.c b/src/lib/protocols/rdp.c index 9ce69289371..bc59ea1fbc1 100644 --- a/src/lib/protocols/rdp.c +++ b/src/lib/protocols/rdp.c @@ -2,7 +2,7 @@ * rdp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RDP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RDP #include "ndpi_api.h" @@ -69,5 +67,3 @@ void init_rdp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/redis_net.c b/src/lib/protocols/redis_net.c index 4b51908fd47..cb1e2e39ba2 100644 --- a/src/lib/protocols/redis_net.c +++ b/src/lib/protocols/redis_net.c @@ -1,7 +1,7 @@ /* * redis.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_REDIS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_REDIS #include "ndpi_api.h" @@ -103,5 +101,3 @@ void init_redis_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/rsync.c b/src/lib/protocols/rsync.c index 157b2e0e0b5..8cc3dd16d51 100644 --- a/src/lib/protocols/rsync.c +++ b/src/lib/protocols/rsync.c @@ -2,7 +2,7 @@ * rsync.c * * Copyright (C) 2013 Remy Mudingay - * Copyright (C) 2016 ntop.org + * Copyright (C) 2016-18 ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -21,8 +21,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RSYNC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RSYNC #include "ndpi_api.h" @@ -69,5 +67,3 @@ void init_rsync_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/rtcp.c b/src/lib/protocols/rtcp.c index b924b476d93..77903d6cc12 100644 --- a/src/lib/protocols/rtcp.c +++ b/src/lib/protocols/rtcp.c @@ -6,8 +6,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RTCP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RTCP #include "ndpi_api.h" @@ -15,10 +13,12 @@ static void ndpi_int_rtcp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_RTCP, NDPI_PROTOCOL_UNKNOWN); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_RTCP, + NDPI_PROTOCOL_UNKNOWN); } -void ndpi_search_rtcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +void ndpi_search_rtcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; u_int16_t dport = 0, sport = 0; @@ -79,5 +79,3 @@ void init_rtcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif diff --git a/src/lib/protocols/rtmp.c b/src/lib/protocols/rtmp.c index 52492a290c9..9bf73fecdeb 100644 --- a/src/lib/protocols/rtmp.c +++ b/src/lib/protocols/rtmp.c @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RTMP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RTMP #include "ndpi_api.h" @@ -105,4 +103,3 @@ void init_rtmp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/rtp.c b/src/lib/protocols/rtp.c index 38cd625048f..0ccc0859421 100644 --- a/src/lib/protocols/rtp.c +++ b/src/lib/protocols/rtp.c @@ -2,7 +2,7 @@ * rtp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RTP #include "ndpi_api.h" @@ -308,13 +306,12 @@ static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, return; exclude_rtp: -#ifdef NDPI_PROTOCOL_STUN if (packet->detected_protocol_stack[0] == NDPI_PROTOCOL_STUN || /* packet->real_protocol_read_only == NDPI_PROTOCOL_STUN */) { NDPI_LOG_DBG(ndpi_struct, "STUN: is detected, need next packet\n"); return; } -#endif /* NDPI_PROTOCOL_STUN */ + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } @@ -337,7 +334,7 @@ void ndpi_search_rtp(struct ndpi_detection_module_struct *ndpi_struct, struct nd "skipping STUN-like, special yahoo packets with payload[0] == 0x90.\n"); return; } -#ifdef NDPI_PROTOCOL_STUN + /* TODO the rtp detection sometimes doesn't exclude rtp * so for TCP flows only run the detection if STUN has been * detected (or RTP is already detected) @@ -360,6 +357,7 @@ void ndpi_search_rtp(struct ndpi_detection_module_struct *ndpi_struct, struct nd return; } } + if (packet->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN && flow->l4.tcp.rtp_special_packets_seen == 1) { if (packet->payload_packet_len >= 4 && ntohl(get_u_int32_t(packet->payload, 0)) + 4 == packet->payload_packet_len) { @@ -378,15 +376,13 @@ void ndpi_search_rtp(struct ndpi_detection_module_struct *ndpi_struct, struct nd } else { NDPI_LOG_DBG(ndpi_struct, "STUN not yet excluded, need next packet\n"); } -#else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -#endif } } #endif -void init_rtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +void init_rtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("RTP", ndpi_struct, detection_bitmask, *id, NDPI_PROTOCOL_RTP, @@ -398,6 +394,3 @@ void init_rtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif -/* NDPI_PROTOCOL_RTP */ - diff --git a/src/lib/protocols/rtsp.c b/src/lib/protocols/rtsp.c index e20c5306576..9620dd50440 100644 --- a/src/lib/protocols/rtsp.c +++ b/src/lib/protocols/rtsp.c @@ -2,7 +2,7 @@ * rtsp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,14 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RTSP - #ifndef NDPI_PROTOCOL_RTP - #error RTSP requires RTP detection to work correctly - #endif - #ifndef NDPI_PROTOCOL_RDP - #error RTSP requires RDP detection to work correctly - #endif - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RTSP #include "ndpi_api.h" @@ -56,9 +48,7 @@ void ndpi_search_rtsp_tcp_udp(struct ndpi_detection_module_struct NDPI_LOG_DBG(ndpi_struct, "search RTSP\n"); if (flow->rtsprdt_stage == 0 -#ifdef NDPI_PROTOCOL_RTCP && !(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_RTCP) -#endif ) { flow->rtsprdt_stage = 1 + packet->packet_direction; NDPI_LOG_DBG2(ndpi_struct, "maybe handshake 1; need next packet, return\n"); @@ -102,9 +92,7 @@ void ndpi_search_rtsp_tcp_udp(struct ndpi_detection_module_struct } if (packet->udp != NULL && packet->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN && ((NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_RTP) == 0) -#ifdef NDPI_PROTOCOL_RTCP || (NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_RTCP) == 0) -#endif )) { NDPI_LOG_DBG2(ndpi_struct, "maybe RTSP RTP, RTSP RTCP, RDT; need next packet.\n"); @@ -127,5 +115,3 @@ void init_rtsp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/rx.c b/src/lib/protocols/rx.c index 6eb9bf1496f..522d9ef5c77 100644 --- a/src/lib/protocols/rx.c +++ b/src/lib/protocols/rx.c @@ -1,7 +1,7 @@ /* * rx.c * - * Copyright (C) 2012-16 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * Giovanni Mascellani * @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_RX - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_RX #include "ndpi_api.h" @@ -227,4 +225,3 @@ void init_rx_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/sflow.c b/src/lib/protocols/sflow.c index 75b631abcb8..cb1acff8d34 100644 --- a/src/lib/protocols/sflow.c +++ b/src/lib/protocols/sflow.c @@ -1,7 +1,7 @@ /* * sflow.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SFLOW - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SFLOW #include "ndpi_api.h" @@ -59,4 +57,3 @@ void init_sflow_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } -#endif diff --git a/src/lib/protocols/shoutcast.c b/src/lib/protocols/shoutcast.c index 2115c574f6d..10486c0bd83 100644 --- a/src/lib/protocols/shoutcast.c +++ b/src/lib/protocols/shoutcast.c @@ -2,7 +2,7 @@ * shoutcast.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SHOUTCAST - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SHOUTCAST #include "ndpi_api.h" @@ -52,9 +50,7 @@ void ndpi_search_shoutcast_tcp(struct ndpi_detection_module_struct return; } if (flow->packet_counter < 3 -#ifdef NDPI_PROTOCOL_HTTP && packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP -#endif ) { NDPI_LOG_DBG2(ndpi_struct, "http detected, need next packet for shoutcast detection.\n"); @@ -119,4 +115,4 @@ void init_shoutcast_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif + diff --git a/src/lib/protocols/sip.c b/src/lib/protocols/sip.c index 5edd377c6a4..1436b2cec07 100644 --- a/src/lib/protocols/sip.c +++ b/src/lib/protocols/sip.c @@ -2,7 +2,7 @@ * sip.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SIP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SIP #include "ndpi_api.h" @@ -59,12 +57,8 @@ void ndpi_search_sip_handshake(struct ndpi_detection_module_struct packet_payload += 4; } } -#ifndef NDPI_PROTOCOL_YAHOO - if (payload_len >= 14 && packet_payload[payload_len - 2] == 0x0d && packet_payload[payload_len - 1] == 0x0a) -#endif -#ifdef NDPI_PROTOCOL_YAHOO - if (payload_len >= 14) -#endif + + if (payload_len >= 14) { if ((memcmp(packet_payload, "NOTIFY ", 7) == 0 || memcmp(packet_payload, "notify ", 7) == 0) @@ -146,19 +140,18 @@ void ndpi_search_sip_handshake(struct ndpi_detection_module_struct NDPI_LOG_DBG2(ndpi_struct, "need next packet\n"); return; } -#ifdef NDPI_PROTOCOL_STUN + /* for STUN flows we need some more packets */ if (packet->udp != NULL && flow->detected_protocol_stack[0] == NDPI_PROTOCOL_STUN && flow->packet_counter < 40) { NDPI_LOG_DBG2(ndpi_struct, "need next STUN packet\n"); return; } -#endif if (payload_len == 4 && get_u_int32_t(packet_payload, 0) == 0) { NDPI_LOG_DBG2(ndpi_struct, "maybe sip. need next packet\n"); return; } -#ifdef NDPI_PROTOCOL_YAHOO + if (payload_len > 30 && packet_payload[0] == 0x90 && packet_payload[3] == payload_len - 20 && get_u_int32_t(packet_payload, 4) == 0 && get_u_int32_t(packet_payload, 8) == 0) { @@ -168,9 +161,8 @@ void ndpi_search_sip_handshake(struct ndpi_detection_module_struct if (flow->sip_yahoo_voice && flow->packet_counter < 10) { return; } -#endif - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } void ndpi_search_sip(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -200,4 +192,3 @@ void init_sip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/skinny.c b/src/lib/protocols/skinny.c index 0acebf27179..5ec54dbdff8 100644 --- a/src/lib/protocols/skinny.c +++ b/src/lib/protocols/skinny.c @@ -19,8 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SKINNY - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SKINNY #include "ndpi_api.h" @@ -75,5 +73,3 @@ void init_skinny_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index ea571961f3a..698fff0522d 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -1,7 +1,7 @@ /* * skype.c * - * Copyright (C) 2017 - ntop.org + * Copyright (C) 2017-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -19,8 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SKYPE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SKYPE #include "ndpi_api.h" @@ -112,5 +110,3 @@ void init_skype_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/smb.c b/src/lib/protocols/smb.c index 6ac7e282a14..fa684eb6637 100644 --- a/src/lib/protocols/smb.c +++ b/src/lib/protocols/smb.c @@ -1,7 +1,7 @@ /* * smb.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SMB - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SMB #include "ndpi_api.h" @@ -66,4 +64,3 @@ void init_smb_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/smpp.c b/src/lib/protocols/smpp.c index 1bd2a870ba3..444516cd387 100644 --- a/src/lib/protocols/smpp.c +++ b/src/lib/protocols/smpp.c @@ -2,7 +2,7 @@ * smpp.c * * Copyright (C) 2016 - Damir Franusic - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -22,8 +22,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SMPP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SMPP #include "ndpi_api.h" @@ -319,5 +317,3 @@ void init_smpp_dissector(struct ndpi_detection_module_struct* ndpi_struct, *id += 1; } - -#endif // NDPI_PROTOCOL_SMPP diff --git a/src/lib/protocols/snmp.c b/src/lib/protocols/snmp.c index 6a2f2624ff4..759d6bae03b 100644 --- a/src/lib/protocols/snmp.c +++ b/src/lib/protocols/snmp.c @@ -2,7 +2,7 @@ * snmp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SNMP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SNMP #include "ndpi_api.h" @@ -141,4 +139,3 @@ void init_snmp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/socks45.c b/src/lib/protocols/socks45.c index 32c83934ab2..36c18ef54ac 100644 --- a/src/lib/protocols/socks45.c +++ b/src/lib/protocols/socks45.c @@ -1,7 +1,7 @@ /* * socks4.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * Copyright (C) 2014 Tomasz Bujlow * * The signature is based on the Libprotoident library. @@ -25,8 +25,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SOCKS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SOCKS #include "ndpi_api.h" @@ -148,4 +146,3 @@ void init_socks_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } -#endif diff --git a/src/lib/protocols/someip.c b/src/lib/protocols/someip.c index 60402271445..e4ebc52ffc3 100644 --- a/src/lib/protocols/someip.c +++ b/src/lib/protocols/someip.c @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SOMEIP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SOMEIP #include "ndpi_api.h" @@ -227,5 +225,4 @@ void init_someip_dissector (struct ndpi_detection_module_struct *ndpi_struct, *id +=1; } -#endif // NDPI_PROTOCOL_SOMEIP diff --git a/src/lib/protocols/sopcast.c b/src/lib/protocols/sopcast.c index 3e800945463..c40213bf758 100644 --- a/src/lib/protocols/sopcast.c +++ b/src/lib/protocols/sopcast.c @@ -2,7 +2,7 @@ * sopcast.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SOPCAST - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SOPCAST #include "ndpi_api.h" @@ -226,4 +224,3 @@ void init_sopcast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif diff --git a/src/lib/protocols/soulseek.c b/src/lib/protocols/soulseek.c index 8f4bbb32c75..82b7097af23 100644 --- a/src/lib/protocols/soulseek.c +++ b/src/lib/protocols/soulseek.c @@ -1,7 +1,7 @@ /* * soulseek.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SOULSEEK - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SOULSEEK #include "ndpi_api.h" @@ -278,5 +276,3 @@ void init_soulseek_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } - -#endif diff --git a/src/lib/protocols/spotify.c b/src/lib/protocols/spotify.c index f3b23aadbe7..699d8f34631 100644 --- a/src/lib/protocols/spotify.c +++ b/src/lib/protocols/spotify.c @@ -23,8 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SPOTIFY - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SPOTIFY #include "ndpi_api.h" @@ -140,4 +138,3 @@ void init_spotify_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } -#endif diff --git a/src/lib/protocols/ssdp.c b/src/lib/protocols/ssdp.c index ce681d9b635..9fd5005aeb3 100644 --- a/src/lib/protocols/ssdp.c +++ b/src/lib/protocols/ssdp.c @@ -2,7 +2,7 @@ * ssdp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SSDP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SSDP #include "ndpi_api.h" @@ -80,4 +78,3 @@ void init_ssdp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/ssh.c b/src/lib/protocols/ssh.c index 89b3590402b..1a20078c33a 100644 --- a/src/lib/protocols/ssh.c +++ b/src/lib/protocols/ssh.c @@ -2,7 +2,7 @@ * ssh.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SSH - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SSH #include "ndpi_api.h" @@ -99,4 +97,3 @@ void init_ssh_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index 5c65b83c1e2..a277f81209a 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -1,7 +1,7 @@ /* * ssl.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,9 +23,6 @@ #include "ndpi_protocol_ids.h" - -#ifdef NDPI_PROTOCOL_SSL - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SSL #include "ndpi_api.h" @@ -65,9 +62,7 @@ static u_int32_t ndpi_ssl_refine_master_protocol(struct ndpi_detection_module_st if((sport == 465) || (dport == 465) || (sport == 587) || (dport == 587)) protocol = NDPI_PROTOCOL_MAIL_SMTPS; else if((sport == 993) || (dport == 993) -#ifdef NDPI_PROTOCOL_MAIL_IMAP || (flow->l4.tcp.mail_imap_starttls) -#endif ) protocol = NDPI_PROTOCOL_MAIL_IMAPS; else if((sport == 995) || (dport == 995)) protocol = NDPI_PROTOCOL_MAIL_POPS; } @@ -386,10 +381,9 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s ndpi_ssl_refine_master_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL)); return(rc); /* Fix courtesy of Gianluca Costa */ } -#ifdef NDPI_PROTOCOL_TOR + if(ndpi_is_ssl_tor(ndpi_struct, flow, certificate) != 0) return(rc); -#endif } if(((packet->ssl_certificate_num_checks >= 2) @@ -410,24 +404,22 @@ static void ssl_mark_and_payload_search_for_other_protocols(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { -#if defined(NDPI_PROTOCOL_TOR) || defined(NDPI_PROTOCOL_VPN_X) || defined(NDPI_PROTOCOL_UNENCRYPTED_JABBER) || defined (NDPI_PROTOCOL_OSCAR) || defined (NDPI_PROTOCOL_ITUNES) || defined (NDPI_PROTOCOL_GMAIL) struct ndpi_packet_struct *packet = &flow->packet; u_int32_t a; u_int32_t end; -#if defined(NDPI_PROTOCOL_UNENCRYPTED_JABBER) + if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask, NDPI_PROTOCOL_UNENCRYPTED_JABBER) != 0) goto check_for_ssl_payload; -#endif -#if defined(NDPI_PROTOCOL_OSCAR) + if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask, NDPI_PROTOCOL_OSCAR) != 0) goto check_for_ssl_payload; -#endif - goto no_check_for_ssl_payload; + else + goto no_check_for_ssl_payload; check_for_ssl_payload: end = packet->payload_packet_len - 20; for (a = 5; a < end; a++) { -#ifdef NDPI_PROTOCOL_UNENCRYPTED_JABBER + if(packet->payload[a] == 't') { if(memcmp(&packet->payload[a], "talk.google.com", 15) == 0) { if(NDPI_COMPARE_PROTOCOL_TO_BITMASK @@ -438,8 +430,7 @@ static void ssl_mark_and_payload_search_for_other_protocols(struct } } } -#endif -#ifdef NDPI_PROTOCOL_OSCAR + if(packet->payload[a] == 'A' || packet->payload[a] == 'k' || packet->payload[a] == 'c' || packet->payload[a] == 'h') { if(((a + 19) < packet->payload_packet_len && memcmp(&packet->payload[a], "America Online Inc.", 19) == 0) @@ -475,11 +466,9 @@ static void ssl_mark_and_payload_search_for_other_protocols(struct return; } } -#endif } no_check_for_ssl_payload: -#endif if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { NDPI_LOG_DBG(ndpi_struct, "found ssl connection\n"); sslDetectProtocolFromCertificate(ndpi_struct, flow); @@ -726,5 +715,3 @@ void init_ssl_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/starcraft.c b/src/lib/protocols/starcraft.c index 73cdd0b1204..8c344d78dc3 100644 --- a/src/lib/protocols/starcraft.c +++ b/src/lib/protocols/starcraft.c @@ -2,7 +2,7 @@ * starcraft.c * * Copyright (C) 2015 - Matteo Bracci -* Copyright (C) 2015 - ntop.org +* Copyright (C) 2015-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -21,8 +21,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_STARCRAFT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_STARCRAFT #include "ndpi_api.h" @@ -155,4 +153,3 @@ void init_starcraft_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/stealthnet.c b/src/lib/protocols/stealthnet.c index 8bd75b1a352..00c7ba64896 100644 --- a/src/lib/protocols/stealthnet.c +++ b/src/lib/protocols/stealthnet.c @@ -2,7 +2,7 @@ * stealthnet.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_STEALTHNET - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_STEALTHNET #include "ndpi_api.h" @@ -69,4 +67,3 @@ void init_stealthnet_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/steam.c b/src/lib/protocols/steam.c index 64eaa04fe6a..0a737baf96a 100644 --- a/src/lib/protocols/steam.c +++ b/src/lib/protocols/steam.c @@ -25,8 +25,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_STEAM - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_STEAM #include "ndpi_api.h" @@ -299,5 +297,3 @@ void init_steam_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/stun.c b/src/lib/protocols/stun.c index 8f374ff5933..ad6a585f9b0 100644 --- a/src/lib/protocols/stun.c +++ b/src/lib/protocols/stun.c @@ -2,7 +2,7 @@ * stun.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_STUN - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_STUN #include "ndpi_api.h" @@ -242,5 +240,3 @@ void init_stun_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } - -#endif diff --git a/src/lib/protocols/syslog.c b/src/lib/protocols/syslog.c index d83cd99f7fd..fc51fc065c7 100644 --- a/src/lib/protocols/syslog.c +++ b/src/lib/protocols/syslog.c @@ -2,7 +2,7 @@ * syslog.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_SYSLOG - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SYSLOG #include "ndpi_api.h" @@ -131,5 +129,3 @@ void init_syslog_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/tcp_udp.c b/src/lib/protocols/tcp_udp.c index 407d36b3bb3..2d28182df51 100644 --- a/src/lib/protocols/tcp_udp.c +++ b/src/lib/protocols/tcp_udp.c @@ -1,7 +1,7 @@ /* * tcp_or_udp.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by diff --git a/src/lib/protocols/teamspeak.c b/src/lib/protocols/teamspeak.c index df13c975674..214a2fe9976 100644 --- a/src/lib/protocols/teamspeak.c +++ b/src/lib/protocols/teamspeak.c @@ -19,8 +19,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TEAMSPEAK - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TEAMSPEAK #include "ndpi_api.h" @@ -79,4 +77,3 @@ void init_teamspeak_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/teamviewer.c b/src/lib/protocols/teamviewer.c index f06e40a73ac..1fa39ff43a1 100644 --- a/src/lib/protocols/teamviewer.c +++ b/src/lib/protocols/teamviewer.c @@ -2,7 +2,7 @@ * teamviewer.c * * Copyright (C) 2012 by Gianluca Costa xplico.org - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TEAMVIEWER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TEAMVIEWER #include "ndpi_api.h" @@ -116,4 +114,3 @@ void init_teamviewer_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/telegram.c b/src/lib/protocols/telegram.c index d80f5f6b543..79be38eae39 100644 --- a/src/lib/protocols/telegram.c +++ b/src/lib/protocols/telegram.c @@ -2,7 +2,7 @@ * telegram.c * * Copyright (C) 2014 by Gianluca Costa xplico.org - * Copyright (C) 2012-15 - ntop.org + * Copyright (C) 2012-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TELEGRAM - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TELEGRAM #include "ndpi_api.h" @@ -83,4 +81,3 @@ void init_telegram_dissector(struct ndpi_detection_module_struct *ndpi_struct, u *id += 1; } -#endif diff --git a/src/lib/protocols/telnet.c b/src/lib/protocols/telnet.c index 264e83aa1d6..33d19e1dc7c 100644 --- a/src/lib/protocols/telnet.c +++ b/src/lib/protocols/telnet.c @@ -2,7 +2,7 @@ * telnet.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TELNET - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TELNET #include "ndpi_api.h" @@ -117,5 +115,3 @@ void init_telnet_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/teredo.c b/src/lib/protocols/teredo.c index 2439f997b94..732b1d6c9a2 100644 --- a/src/lib/protocols/teredo.c +++ b/src/lib/protocols/teredo.c @@ -1,7 +1,7 @@ /* * teredo.c * - * Copyright (C) 2015 - ntop.org + * Copyright (C) 2015-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TEREDO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TEREDO #include "ndpi_api.h" @@ -57,4 +55,3 @@ void init_teredo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } -#endif diff --git a/src/lib/protocols/tftp.c b/src/lib/protocols/tftp.c index 082e0432609..f3da3463c54 100644 --- a/src/lib/protocols/tftp.c +++ b/src/lib/protocols/tftp.c @@ -2,7 +2,7 @@ * tftp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TFTP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TFTP #include "ndpi_api.h" @@ -79,4 +77,3 @@ void init_tftp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/thunder.c b/src/lib/protocols/thunder.c index 384436f1300..754f68f60a5 100644 --- a/src/lib/protocols/thunder.c +++ b/src/lib/protocols/thunder.c @@ -2,7 +2,7 @@ * thunder.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_THUNDER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_THUNDER #include "ndpi_api.h" @@ -221,5 +219,3 @@ void init_thunder_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ *id += 1; } - -#endif diff --git a/src/lib/protocols/tinc.c b/src/lib/protocols/tinc.c index 19bfa34aadb..7ee4105e8ea 100644 --- a/src/lib/protocols/tinc.c +++ b/src/lib/protocols/tinc.c @@ -2,7 +2,7 @@ * tinc.c * * Copyright (C) 2017 - William Guglielmo - * Copyright (C) 2017 - ntop.org + * Copyright (C) 2017-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TINC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TINC #include "ndpi_api.h" @@ -154,4 +152,3 @@ void init_tinc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/tor.c b/src/lib/protocols/tor.c index 134f191c373..f1c6f586a2d 100644 --- a/src/lib/protocols/tor.c +++ b/src/lib/protocols/tor.c @@ -1,14 +1,12 @@ /* * tor.c * - * Copyright (C) 2016 ntop.org + * Copyright (C) 2016-18 ntop.org * Copyright (C) 2013 Remy Mudingay * */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TOR - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TOR #include "ndpi_api.h" @@ -132,4 +130,3 @@ void init_tor_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } -#endif diff --git a/src/lib/protocols/tvants.c b/src/lib/protocols/tvants.c index ceee278b95b..eafce38c441 100644 --- a/src/lib/protocols/tvants.c +++ b/src/lib/protocols/tvants.c @@ -2,7 +2,7 @@ * tvants.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TVANTS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TVANTS #include "ndpi_api.h" @@ -85,5 +83,3 @@ void init_tvants_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/tvuplayer.c b/src/lib/protocols/tvuplayer.c index 2160a5afa68..ce84c7de3fe 100644 --- a/src/lib/protocols/tvuplayer.c +++ b/src/lib/protocols/tvuplayer.c @@ -2,7 +2,7 @@ * tvuplayer.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_TVUPLAYER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TVUPLAYER #include "ndpi_api.h" @@ -160,5 +158,3 @@ void init_tvuplayer_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/ubntac2.c b/src/lib/protocols/ubntac2.c index d8392fda7bf..2e35d1d985f 100644 --- a/src/lib/protocols/ubntac2.c +++ b/src/lib/protocols/ubntac2.c @@ -21,13 +21,10 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_UBNTAC2 - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UBNTAC2 #include "ndpi_api.h" - static void ndpi_int_ubntac2_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_UBNTAC2, NDPI_PROTOCOL_UNKNOWN); @@ -94,5 +91,3 @@ void init_ubntac2_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_ ADD_TO_DETECTION_BITMASK); *id += 1; } - -#endif diff --git a/src/lib/protocols/usenet.c b/src/lib/protocols/usenet.c index 0a995d6f80f..6a2970d6e49 100644 --- a/src/lib/protocols/usenet.c +++ b/src/lib/protocols/usenet.c @@ -2,7 +2,7 @@ * usenet.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -25,8 +25,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_USENET - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_USENET #include "ndpi_api.h" @@ -104,5 +102,3 @@ void init_usenet_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/vhua.c b/src/lib/protocols/vhua.c index 844eaf84fd7..eef5c065ffd 100644 --- a/src/lib/protocols/vhua.c +++ b/src/lib/protocols/vhua.c @@ -1,7 +1,7 @@ /* * vhua.c * - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * nDPI is free software: you can vhuatribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -19,8 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_VHUA - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_VHUA #include "ndpi_api.h" @@ -79,4 +77,3 @@ void init_vhua_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/viber.c b/src/lib/protocols/viber.c index 517b74b913a..65e22723447 100644 --- a/src/lib/protocols/viber.c +++ b/src/lib/protocols/viber.c @@ -2,7 +2,7 @@ * viber.c * * Copyright (C) 2013 Remy Mudingay - * Copyright (C) 2013 - 2014 ntop.org + * Copyright (C) 2013-18 - ntop.org * * This module is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_VIBER - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_VIBER #include "ndpi_api.h" @@ -61,5 +59,3 @@ void init_viber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/vmware.c b/src/lib/protocols/vmware.c index 34fe84ab9f2..138d09bbc75 100644 --- a/src/lib/protocols/vmware.c +++ b/src/lib/protocols/vmware.c @@ -1,7 +1,7 @@ /* * vmware.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_VMWARE - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_VMWARE #include "ndpi_api.h" @@ -56,5 +54,3 @@ void init_vmware_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/vnc.c b/src/lib/protocols/vnc.c index 6bbb26c6d17..65988bce63a 100644 --- a/src/lib/protocols/vnc.c +++ b/src/lib/protocols/vnc.c @@ -1,7 +1,7 @@ /* * vnc.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_VNC - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_VNC #include "ndpi_api.h" @@ -76,5 +74,3 @@ void init_vnc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif diff --git a/src/lib/protocols/warcraft3.c b/src/lib/protocols/warcraft3.c index bbc1d8388f1..3f970bd2588 100644 --- a/src/lib/protocols/warcraft3.c +++ b/src/lib/protocols/warcraft3.c @@ -2,7 +2,7 @@ * warcraft3.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_WARCRAFT3 - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WARCRAFT3 #include "ndpi_api.h" @@ -106,4 +104,3 @@ void init_warcraft3_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } -#endif diff --git a/src/lib/protocols/whatsapp.c b/src/lib/protocols/whatsapp.c index b079dcd012e..6a98eac6b85 100644 --- a/src/lib/protocols/whatsapp.c +++ b/src/lib/protocols/whatsapp.c @@ -19,8 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_WHATSAPP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WHATSAPP #include "ndpi_api.h" @@ -56,5 +54,3 @@ void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/whoisdas.c b/src/lib/protocols/whoisdas.c index 291ae15ca67..335aa6f652f 100644 --- a/src/lib/protocols/whoisdas.c +++ b/src/lib/protocols/whoisdas.c @@ -1,7 +1,7 @@ /* * whoisdas.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * nDPI is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -20,8 +20,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_WHOIS_DAS - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WHOIS_DAS #include "ndpi_api.h" @@ -75,5 +73,3 @@ void init_whois_das_dissector(struct ndpi_detection_module_struct *ndpi_struct, *id += 1; } - -#endif diff --git a/src/lib/protocols/world_of_kung_fu.c b/src/lib/protocols/world_of_kung_fu.c index 534addc7d4d..d179ef526db 100644 --- a/src/lib/protocols/world_of_kung_fu.c +++ b/src/lib/protocols/world_of_kung_fu.c @@ -2,7 +2,7 @@ * world_of_kung_fu.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,7 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_WORLD_OF_KUNG_FU #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WORLD_OF_KUNG_FU #include "ndpi_api.h" @@ -64,5 +63,3 @@ void init_world_of_kung_fu_dissector(struct ndpi_detection_module_struct *ndpi_s *id += 1; } - -#endif diff --git a/src/lib/protocols/world_of_warcraft.c b/src/lib/protocols/world_of_warcraft.c index bfcf3f4e126..acb010a85b6 100644 --- a/src/lib/protocols/world_of_warcraft.c +++ b/src/lib/protocols/world_of_warcraft.c @@ -2,7 +2,7 @@ * world_of_warcraft.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,8 +23,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_WORLDOFWARCRAFT - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WORLDOFWARCRAFT #include "ndpi_api.h" @@ -215,4 +213,3 @@ void init_world_of_warcraft_dissector(struct ndpi_detection_module_struct *ndpi_ *id += 1; } -#endif diff --git a/src/lib/protocols/xbox.c b/src/lib/protocols/xbox.c index 3182c191cb5..5d1f64d4328 100644 --- a/src/lib/protocols/xbox.c +++ b/src/lib/protocols/xbox.c @@ -1,7 +1,7 @@ /* * xbox.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -23,7 +23,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_XBOX #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_XBOX #include "ndpi_api.h" @@ -84,9 +83,7 @@ void ndpi_search_xbox(struct ndpi_detection_module_struct *ndpi_struct, struct n } /* exclude here all non matched udp traffic, exclude here tcp only if http has been excluded, because xbox could use http */ -#ifdef NDPI_PROTOCOL_HTTP if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_HTTP) != 0) { -#endif NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } } @@ -106,4 +103,3 @@ void init_xbox_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int *id += 1; } -#endif diff --git a/src/lib/protocols/xdmcp.c b/src/lib/protocols/xdmcp.c index 71bcd9c69bb..35b08b91bf5 100644 --- a/src/lib/protocols/xdmcp.c +++ b/src/lib/protocols/xdmcp.c @@ -2,7 +2,7 @@ * xdmcp.c * * Copyright (C) 2009-2011 by ipoque GmbH - * Copyright (C) 2011-15 - ntop.org + * Copyright (C) 2011-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -24,8 +24,6 @@ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_XDMCP - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_XDMCP #include "ndpi_api.h" @@ -77,5 +75,3 @@ void init_xdmcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } - -#endif diff --git a/src/lib/protocols/yahoo.c b/src/lib/protocols/yahoo.c index 1144fb4efee..3be9539390d 100644 --- a/src/lib/protocols/yahoo.c +++ b/src/lib/protocols/yahoo.c @@ -1,7 +1,7 @@ /* * yahoo.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -22,11 +22,9 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_YAHOO #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_YAHOO -#include "ndpi_api.h" - +#include "ndpi_api.h" struct ndpi_yahoo_header { u_int8_t YMSG_str[4]; @@ -313,9 +311,7 @@ static void ndpi_search_yahoo_tcp(struct ndpi_detection_module_struct *ndpi_stru } } /* detect YAHOO over HTTP proxy */ -#ifdef NDPI_PROTOCOL_HTTP if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP) -#endif { if (flow->l4.tcp.yahoo_http_proxy_stage == 0) { @@ -370,12 +366,8 @@ void ndpi_search_yahoo(struct ndpi_detection_module_struct *ndpi_struct, struct if(packet->tcp != NULL && packet->tcp_retransmission == 0) { if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN -#ifdef NDPI_PROTOCOL_HTTP || packet->detected_protocol_stack[0] == NDPI_PROTOCOL_HTTP -#endif -#ifdef NDPI_PROTOCOL_SSL || packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) { -#endif /* search over TCP */ ndpi_search_yahoo_tcp(ndpi_struct, flow); } @@ -412,4 +404,3 @@ void init_yahoo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_in *id += 1; } -#endif diff --git a/src/lib/protocols/zattoo.c b/src/lib/protocols/zattoo.c index c3e514dda1b..3b0c02d8099 100644 --- a/src/lib/protocols/zattoo.c +++ b/src/lib/protocols/zattoo.c @@ -1,7 +1,7 @@ /* * zattoo.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * This file is part of nDPI, an open source deep packet inspection * library based on the OpenDPI and PACE technology by ipoque GmbH @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_ZATTOO - #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ZATTOO #include "ndpi_api.h" @@ -240,5 +238,3 @@ void init_zattoo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_i *id += 1; } - -#endif diff --git a/src/lib/protocols/zeromq.c b/src/lib/protocols/zeromq.c index c7c8e9519ce..aa73d4a6d68 100644 --- a/src/lib/protocols/zeromq.c +++ b/src/lib/protocols/zeromq.c @@ -1,7 +1,7 @@ /* * zmq.c * - * Copyright (C) 2016 - ntop.org + * Copyright (C) 2016-18 - ntop.org * * nDPI is free software: you can zmqtribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -19,7 +19,6 @@ */ #include "ndpi_protocol_ids.h" -#ifdef NDPI_PROTOCOL_ZMQ #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_ZMQ #include "ndpi_api.h" @@ -109,5 +108,3 @@ void init_zmq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 *id += 1; } - -#endif From 591158bb9290a06fe96d52d7c0162c853cd90ec6 Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 21 Jul 2018 16:09:32 +0200 Subject: [PATCH 018/147] Defined type ndpi_protocol_id_t for protocol identifiers --- src/include/ndpi_protocol_ids.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 59de3ee0e9d..32f3177d841 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -289,7 +289,7 @@ typedef enum { /* IMPORTANT:NDPI_LAST_IMPLEMENTED_PROTOCOL MUST BE THE LAST ELEMENT */ NDPI_LAST_IMPLEMENTED_PROTOCOL -} ndpi_protocol_ids; +} ndpi_protocol_id_t; #define NDPI_PROTOCOL_NO_MASTER_PROTO NDPI_PROTOCOL_UNKNOWN #define NDPI_MAX_SUPPORTED_PROTOCOLS NDPI_LAST_IMPLEMENTED_PROTOCOL From f828dfc202b23f06e8613a9f6baf8d8b07580760 Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 21 Jul 2018 16:17:12 +0200 Subject: [PATCH 019/147] Added comment about typedefs --- src/include/ndpi_typedefs.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index be9009e8a36..40f35d5d39a 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -828,6 +828,11 @@ typedef struct _ndpi_automa { } ndpi_automa; typedef struct ndpi_proto { + /* + Note + below we do not use ndpi_protocol_id_t as users can define their own + custom protocols and thus the typedef could be too short in size. + */ u_int16_t master_protocol /* e.g. HTTP */, app_protocol /* e.g. FaceBook */; ndpi_protocol_category_t category; } ndpi_protocol; From 5246656ae000916464541ffb5b6f61077ee281e7 Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 21 Jul 2018 16:27:05 +0200 Subject: [PATCH 020/147] Fixed required library prefix --- example/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/Makefile.am b/example/Makefile.am index 9eedc21d80d..e50d8c05c0b 100644 --- a/example/Makefile.am +++ b/example/Makefile.am @@ -3,7 +3,7 @@ bin_PROGRAMS = ndpiReader AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(top_srcdir)/src/lib/third_party/include @PCAP_INC@ @HS_INC@ AM_CFLAGS = @PTHREAD_CFLAGS@ # --coverage -LDADD = $(top_builddir)/src/lib/libndpi.la @JSON_C_LIB@ @PTHREAD_LIBS@ @PCAP_LIB@ @DL_LIB@ @HS_LIB@ -lm +LDADD = $(top_builddir)/src/lib/libndpi.a @JSON_C_LIB@ @PTHREAD_LIBS@ @PCAP_LIB@ @DL_LIB@ @HS_LIB@ -lm AM_LDFLAGS = -static @DL_LIB@ @HS_LIB@ ndpiReader_SOURCES = ndpiReader.c ndpi_util.c ndpi_util.h uthash.h From 659649d2e92ee0eccba6d930d8da8397e75a45e2 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sat, 21 Jul 2018 18:23:48 +0200 Subject: [PATCH 021/147] Fixed warning --- src/include/ndpi_typedefs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 40f35d5d39a..41c78bb31a0 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -533,7 +533,7 @@ struct ndpi_flow_tcp_struct { u_int32_t telnet_stage:2; // 0 - 2 /* NDPI_PROTOCOL_SSL */ - u_int8_t ssl_stage:2, ssl_seen_client_cert:1, ssl_seen_server_cert:1; // 0 - 5 + u_int8_t ssl_seen_client_cert:1, ssl_seen_server_cert:1, ssl_stage:2; // 0 - 5 /* NDPI_PROTOCOL_POSTGRES */ u_int32_t postgres_stage:3; From 49ed41142c2d166ced74e2e85de52eea414ee7c2 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sun, 22 Jul 2018 21:06:10 +0200 Subject: [PATCH 022/147] Fixed SEGV with undepcified protos --- src/lib/ndpi_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 5396187cd99..d41e775b071 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2503,7 +2503,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, } for(i=0, def = NULL; i<(int)ndpi_mod->ndpi_num_supported_protocols; i++) { - if(strcasecmp(ndpi_mod->proto_defaults[i].protoName, proto) == 0) { + if(ndpi_mod->proto_defaults[i].protoName && strcasecmp(ndpi_mod->proto_defaults[i].protoName, proto) == 0) { def = &ndpi_mod->proto_defaults[i]; subprotocol_id = i; break; From 5100cc0eaec27c9796bab749435972adf2f89246 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 23 Jul 2018 14:58:16 +0200 Subject: [PATCH 023/147] Added checks for missing protocol initialization Fixed missing LOG_ERR initialization Fixed logging warnings --- src/include/ndpi_define.h.in | 10 ++-- src/lib/ndpi_main.c | 97 +++++++++++++++++++++++------------- src/lib/protocols/mqtt.c | 2 +- src/lib/protocols/someip.c | 2 +- src/lib/protocols/soulseek.c | 8 +-- 5 files changed, 75 insertions(+), 44 deletions(-) diff --git a/src/include/ndpi_define.h.in b/src/include/ndpi_define.h.in index a641c7b6626..37e33a0139a 100644 --- a/src/include/ndpi_define.h.in +++ b/src/include/ndpi_define.h.in @@ -231,11 +231,11 @@ # define NDPI_LOG_DBG(...) {} # define NDPI_LOG_DBG2(...) {} # else -# define NDPI_LOG(proto, mod, log_level, args...) {} -# define NDPI_LOG_ERR(mod, args...) {} -# define NDPI_LOG_INFO(mod, args...) {} -# define NDPI_LOG_DBG(mod, args...) {} -# define NDPI_LOG_DBG2(mod, args...) {} +# define NDPI_LOG(proto, mod, log_level, args...) { /* printf(args); */ } +# define NDPI_LOG_ERR(mod, args...) { printf(args); } +# define NDPI_LOG_INFO(mod, args...) { /* printf(args); */ } +# define NDPI_LOG_DBG(mod, args...) { /* printf(args); */ } +# define NDPI_LOG_DBG2(mod, args...) { /* printf(args); */ } # endif #endif /* NDPI_ENABLE_DEBUG_MESSAGES */ diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index d41e775b071..03c7e91cfc0 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -523,7 +523,7 @@ void ndpi_exclude_protocol(struct ndpi_detection_module_struct *ndpi_struct, if(protocol_id < NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS) { #ifdef NDPI_ENABLE_DEBUG_MESSAGES - if ( ndpi_struct && + if( ndpi_struct && ndpi_struct->ndpi_log_level >= NDPI_LOG_DEBUG && ndpi_struct->ndpi_debug_printf != NULL) { @@ -571,8 +571,13 @@ void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, memcpy(&ndpi_mod->proto_defaults[protoId].master_udp_protoId, udp_master_protoId, 2*sizeof(u_int16_t)); for(j=0; jproto_defaults[protoId], 0, &ndpi_mod->udpRoot, __FUNCTION__,__LINE__); - if(tcpDefPorts[j].port_low != 0) addDefaultPort(ndpi_mod, &tcpDefPorts[j], &ndpi_mod->proto_defaults[protoId], 0, &ndpi_mod->tcpRoot, __FUNCTION__,__LINE__); + if(udpDefPorts[j].port_low != 0) + addDefaultPort(ndpi_mod, &udpDefPorts[j], + &ndpi_mod->proto_defaults[protoId], 0, &ndpi_mod->udpRoot, __FUNCTION__,__LINE__); + + if(tcpDefPorts[j].port_low != 0) + addDefaultPort(ndpi_mod, &tcpDefPorts[j], + &ndpi_mod->proto_defaults[protoId], 0, &ndpi_mod->tcpRoot, __FUNCTION__,__LINE__); } } @@ -912,13 +917,30 @@ int ndpi_set_detection_preferences(struct ndpi_detection_module_struct *ndpi_mod /* ******************************************************************** */ +static void ndpi_validate_protocol_initialization(struct ndpi_detection_module_struct *ndpi_mod) { + int i; + + for(i=0; i<(int)ndpi_mod->ndpi_num_supported_protocols; i++) { + if(ndpi_mod->proto_defaults[i].protoName == NULL) { + NDPI_LOG_ERR(ndpi_mod, "[NDPI] INTERNAL ERROR missing protoName initialization for [protoId=%d]: recovering\n", i); + } else { + if((i != NDPI_PROTOCOL_UNKNOWN) + && (ndpi_mod->proto_defaults[i].protoCategory == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) { + NDPI_LOG_ERR(ndpi_mod, "[NDPI] INTERNAL ERROR missing category [protoId=%d/%s] initialization: recovering\n", + i, ndpi_mod->proto_defaults[i].protoName ? ndpi_mod->proto_defaults[i].protoName : "???"); + } + } + } +} + +/* ******************************************************************** */ + /* This function is used to map protocol name and default ports and it MUST be updated whenever a new protocol is added to NDPI. Do NOT add web services (NDPI_SERVICE_xxx) here. */ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndpi_mod) { - int i; ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; u_int16_t no_master[2] = { NDPI_PROTOCOL_NO_MASTER_PROTO, NDPI_PROTOCOL_NO_MASTER_PROTO }, @@ -1144,40 +1166,54 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_40, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_41, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_42, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_43, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_44, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_45, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_46, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196, + no_master, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_205, + no_master, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VIDTO, + no_master, + no_master, "PPStream", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_XBOX, no_master, @@ -1863,22 +1899,15 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AJP, - no_master, - no_master, "AJP", NDPI_PROTOCOL_CATEGORY_WEB, - ndpi_build_default_ports(ports_a, 8009, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + no_master, + no_master, "AJP", NDPI_PROTOCOL_CATEGORY_WEB, + ndpi_build_default_ports(ports_a, 8009, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); /* calling function for host and content matched protocols */ init_string_based_protocols(ndpi_mod); - for(i=0; i<(int)ndpi_mod->ndpi_num_supported_protocols; i++) { - if((ndpi_mod->proto_defaults[i].protoName == NULL) - || ((i != NDPI_PROTOCOL_UNKNOWN) - && (ndpi_mod->proto_defaults[i].protoCategory == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED))) { - NDPI_LOG_ERR(ndpi_mod, "[NDPI] missing protoId=%d/%s: INTERNAL ERROR: not all protocols have been initialized\n", - i, ndpi_mod->proto_defaults[i].protoName ? ndpi_mod->proto_defaults[i].protoName : "???"); - } - } + ndpi_validate_protocol_initialization(ndpi_mod); } /* ****************************************************** */ @@ -2057,7 +2086,7 @@ void ndpi_debug_printf(unsigned int proto, struct ndpi_detection_module_struct * vsnprintf(str,sizeof(str)-1, format, args); va_end(args); - if (ndpi_str != NULL) { + if(ndpi_str != NULL) { printf("%s:%s:%-3u - [%s]: %s", file_name, func_name, line_number, ndpi_get_proto_name(ndpi_str, proto), str); } else { @@ -2299,9 +2328,9 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_struct ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_struct->protocols_ptree, free_ptree_data); - if (ndpi_struct->udpRoot != NULL) + if(ndpi_struct->udpRoot != NULL) ndpi_tdestroy(ndpi_struct->udpRoot, ndpi_free); - if (ndpi_struct->tcpRoot != NULL) + if(ndpi_struct->tcpRoot != NULL) ndpi_tdestroy(ndpi_struct->tcpRoot, ndpi_free); if(ndpi_struct->host_automa.ac_automa != NULL) @@ -2463,10 +2492,10 @@ u_int ndpi_get_num_supported_protocols(struct ndpi_detection_module_struct *ndpi char * strsep(char **sp, char *sep) { char *p, *s; - if (sp == NULL || *sp == NULL || **sp == '\0') return(NULL); + if(sp == NULL || *sp == NULL || **sp == '\0') return(NULL); s = *sp; p = s + strcspn(s, sep); - if (*p != '\0') *p++ = '\0'; + if(*p != '\0') *p++ = '\0'; *sp = p; return(s); } @@ -3365,7 +3394,7 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str u_int8_t l4protocol; u_int8_t l4_result; - if (flow) { + if(flow) { /* reset payload_packet_len, will be set if ipv4 tcp or udp */ flow->packet.payload_packet_len = 0; flow->packet.l4_packet_len = 0; @@ -3898,8 +3927,8 @@ void ndpi_process_extra_packet(struct ndpi_detection_module_struct *ndpi_struct, ndpi_connection_tracking(ndpi_struct, flow); /* call the extra packet function (which may add more data/info to flow) */ - if (flow->extra_packets_func) { - if ((flow->extra_packets_func(ndpi_struct, flow)) == 0) + if(flow->extra_packets_func) { + if((flow->extra_packets_func(ndpi_struct, flow)) == 0) flow->check_extra_packets = 0; } @@ -3918,7 +3947,7 @@ void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_struct, if(ptr) { ptr[0] = '\0'; ptr++; - if (atoi(ptr)>=0 && atoi(ptr)<=32) + if(atoi(ptr)>=0 && atoi(ptr)<=32) bits = atoi(ptr); } @@ -5371,7 +5400,7 @@ const char* ndpi_category_get_name(struct ndpi_detection_module_struct *ndpi_mod ndpi_protocol_category_t ndpi_get_proto_category(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol proto) { /* simple rule: sub protocol first, master after */ - if ((proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) || + if((proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) || (ndpi_mod->proto_defaults[proto.app_protocol].protoCategory != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) return ndpi_mod->proto_defaults[proto.app_protocol].protoCategory; else diff --git a/src/lib/protocols/mqtt.c b/src/lib/protocols/mqtt.c index b9f90c3b5ad..45669c03a9a 100644 --- a/src/lib/protocols/mqtt.c +++ b/src/lib/protocols/mqtt.c @@ -230,7 +230,7 @@ void ndpi_search_mqtt (struct ndpi_detection_module_struct *ndpi_struct, NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); return; } else { - NDPI_LOG_INFO(ndpi_struct, "found Mqtt UNSUBSCRIBE\n",pt); + NDPI_LOG_INFO(ndpi_struct, "found Mqtt UNSUBSCRIBE\n"); ndpi_int_mqtt_add_connection(ndpi_struct,flow); return; } diff --git a/src/lib/protocols/someip.c b/src/lib/protocols/someip.c index e4ebc52ffc3..9211a4b854b 100644 --- a/src/lib/protocols/someip.c +++ b/src/lib/protocols/someip.c @@ -190,7 +190,7 @@ void ndpi_search_someip (struct ndpi_detection_module_struct *ndpi_struct, } if (message_id == MSG_SD){ - NDPI_LOG_DBG2(ndpi_struct, "SOME/IP-SD currently not supported\n", message_type); + NDPI_LOG_DBG2(ndpi_struct, "SOME/IP-SD currently not supported [%d]\n", message_type); } //Filtering by port. diff --git a/src/lib/protocols/soulseek.c b/src/lib/protocols/soulseek.c index 82b7097af23..de1b548be14 100644 --- a/src/lib/protocols/soulseek.c +++ b/src/lib/protocols/soulseek.c @@ -49,13 +49,15 @@ void ndpi_search_soulseek_tcp(struct ndpi_detection_module_struct *ndpi_struct, if(src != NULL) NDPI_LOG_DBG2(ndpi_struct, " SRC bitmask: %u, packet tick %llu , last safe access timestamp: %llu\n", - NDPI_COMPARE_PROTOCOL_TO_BITMASK(src->detected_protocol_bitmask, NDPI_PROTOCOL_SOULSEEK) - != 0 ? 1 : 0, (u_int64_t) packet->tick_timestamp, (u_int64_t) src->soulseek_last_safe_access_time); + NDPI_COMPARE_PROTOCOL_TO_BITMASK(src->detected_protocol_bitmask, NDPI_PROTOCOL_SOULSEEK) + != 0 ? 1 : 0, (long long unsigned int) packet->tick_timestamp, + (long long unsigned int) src->soulseek_last_safe_access_time); if(dst != NULL) NDPI_LOG_DBG2(ndpi_struct, " DST bitmask: %u, packet tick %llu , last safe ts: %llu\n", NDPI_COMPARE_PROTOCOL_TO_BITMASK(dst->detected_protocol_bitmask, NDPI_PROTOCOL_SOULSEEK) - != 0 ? 1 : 0, (u_int64_t) packet->tick_timestamp, (u_int64_t) dst->soulseek_last_safe_access_time); + != 0 ? 1 : 0, (long long unsigned int) packet->tick_timestamp, + (long long unsigned int) dst->soulseek_last_safe_access_time); if(packet->payload_packet_len == 431) { if(dst != NULL) { From d9cf7987535328275609516afd1a0fc6791bd4fa Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 6 Aug 2018 10:34:45 +0200 Subject: [PATCH 024/147] Updated YouTube support --- src/lib/Makefile | 4 +++- src/lib/ndpi_content_match.c.inc | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/Makefile b/src/lib/Makefile index 2beca451659..c9f3179311e 100644 --- a/src/lib/Makefile +++ b/src/lib/Makefile @@ -5,7 +5,7 @@ # cd src/lib # make -f Makefile.simple # -CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION +CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g RANLIB=ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o @@ -13,6 +13,8 @@ HEADERS = $(wildcard ../include/*.h) all: libndpi.a +ndpi_main.c: ndpi_content_match.c.inc + libndpi.a: $(OBJECTS) ar rc $@ $(OBJECTS) $(RANLIB) $@ diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 38c8ef70ffe..78a58a7bf1f 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8186,6 +8186,7 @@ ndpi_protocol_match host_match[] = { { "upload.youtube.com", NULL, NULL, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "upload.video.google.com", NULL, NULL, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "youtubei.googleapis.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "youtube.", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "youtu.be.", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "yt3.ggpht.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, From b3b8feabf1a60bcf9e6e8fc748a0a7a6cd8923f2 Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Wed, 15 Aug 2018 16:47:21 -0400 Subject: [PATCH 025/147] Added new dissector for Memcached. Signed-off-by: Darryl Sokoloski --- src/include/ndpi_protocol_ids.h | 2 +- src/include/ndpi_protocols.h | 2 + src/include/ndpi_typedefs.h | 6 + src/lib/ndpi_main.c | 11 +- src/lib/protocols/memcached.c | 189 ++++++++++++++++++++++++++++++++ tests/pcap/memcached.cap | Bin 0 -> 1895 bytes 6 files changed, 205 insertions(+), 5 deletions(-) create mode 100644 src/lib/protocols/memcached.c create mode 100644 tests/pcap/memcached.cap diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 32f3177d841..f3e100d64ba 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -74,8 +74,8 @@ typedef enum { NDPI_PROTOCOL_BITTORRENT = 37, NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, NDPI_PROTOCOL_MUSICALLY = 39, + NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ - NDPI_PROTOCOL_FREE_40 = 40, /* Free */ NDPI_PROTOCOL_FREE_41 = 41, /* Free */ NDPI_PROTOCOL_FREE_42 = 42, /* Free */ NDPI_PROTOCOL_FREE_43 = 43, /* Free */ diff --git a/src/include/ndpi_protocols.h b/src/include/ndpi_protocols.h index f08b1de73bc..5c08f85f5cc 100644 --- a/src/include/ndpi_protocols.h +++ b/src/include/ndpi_protocols.h @@ -203,6 +203,7 @@ void ndpi_search_tinc(struct ndpi_detection_module_struct *ndpi_struct, struct n void ndpi_search_fix(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); void ndpi_search_csgo(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); void ndpi_search_ajp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); +void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); /* --- INIT FUNCTIONS --- */ void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); @@ -356,4 +357,5 @@ void init_apple_push_dissector(struct ndpi_detection_module_struct *ndpi_struct, void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_fbzero_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); +void init_memcached_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); #endif /* __NDPI_PROTOCOLS_H__ */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 41c78bb31a0..5573c0e9001 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -589,6 +589,9 @@ struct ndpi_flow_tcp_struct { /* NDPI_PROTOCOL_PPSTREAM */ u_int32_t ppstream_stage:3; + +/* NDPI_PROTOCOL_MEMCACHED */ + u_int8_t memcached_matches; } #ifndef WIN32 __attribute__ ((__packed__)) @@ -641,6 +644,9 @@ struct ndpi_flow_udp_struct { /* NDPI_PROTOCOL_RX */ u_int32_t rx_conn_epoch; u_int32_t rx_conn_id; + +/* NDPI_PROTOCOL_MEMCACHED */ + u_int8_t memcached_matches; } #ifndef WIN32 __attribute__ ((__packed__)) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 13c89424ebb..45490685f39 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1164,11 +1164,11 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Musical.ly", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_40, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEMCACHED, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + no_master, "Memcached", NDPI_PROTOCOL_CATEGORY_NETWORK, + ndpi_build_default_ports(ports_a, 11211, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 11211, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_41, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, @@ -3160,6 +3160,9 @@ void ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *n /* AJP */ init_ajp_dissector(ndpi_struct, &a, detection_bitmask); + /* Memcached */ + init_memcached_dissector(ndpi_struct, &a, detection_bitmask); + /* ----------------------------------------------------------------- */ ndpi_struct->callback_buffer_size = a; diff --git a/src/lib/protocols/memcached.c b/src/lib/protocols/memcached.c new file mode 100644 index 00000000000..e9deb5cc912 --- /dev/null +++ b/src/lib/protocols/memcached.c @@ -0,0 +1,189 @@ +/* + * memcached.c + * + * Copyright (C) 2009-2011 by ipoque GmbH + * Copyright (C) 2011-18 - ntop.org + * Copyright (C) 2018 - eGloo Incorporated + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MEMCACHED + +#include "ndpi_api.h" + +#define MCDC_SET "set " +#define MCDC_SET_LEN (sizeof(MCDC_SET) - 1) +#define MCDC_ADD "add " +#define MCDC_ADD_LEN (sizeof(MCDC_ADD) - 1) +#define MCDC_REPLACE "replace " +#define MCDC_REPLACE_LEN (sizeof(MCDC_REPLACE) - 1) +#define MCDC_APPEND "append " +#define MCDC_APPEND_LEN (sizeof(MCDC_APPEND) - 1) +#define MCDC_PREPEND "prepend " +#define MCDC_PREPEND_LEN (sizeof(MCDC_PREPEND) - 1) +#define MCDC_CAS "cas " +#define MCDC_CAS_LEN (sizeof(MCDC_CAS) - 1) +#define MCDC_GET "get " +#define MCDC_GET_LEN (sizeof(MCDC_GET) - 1) +#define MCDC_GETS "gets " +#define MCDC_GETS_LEN (sizeof(MCDC_GETS) - 1) +#define MCDC_DELETE "delete " +#define MCDC_DELETE_LEN (sizeof(MCDC_DELETE) - 1) +#define MCDC_INCR "incr " +#define MCDC_INCR_LEN (sizeof(MCDC_INCR) - 1) +#define MCDC_DECR "decr " +#define MCDC_DECR_LEN (sizeof(MCDC_DECR) - 1) +#define MCDC_TOUCH "touch " +#define MCDC_TOUCH_LEN (sizeof(MCDC_TOUCH) - 1) +#define MCDC_GAT "gat " +#define MCDC_GAT_LEN (sizeof(MCDC_GAT) - 1) +#define MCDC_GATS "gats " +#define MCDC_GATS_LEN (sizeof(MCDC_GATS) - 1) +#define MCDC_STATS "stats" +#define MCDC_STATS_LEN (sizeof(MCDC_STATS) - 1) + +#define MCDR_ERROR "ERROR\r\n" +#define MCDR_ERROR_LEN (sizeof(MCDR_ERROR) - 1) +#define MCDR_CLIENT_ERROR "CLIENT_ERROR " +#define MCDR_CLIENT_ERROR_LEN (sizeof(MCDR_CLIENT_ERROR) - 1) +#define MCDR_SERVER_ERROR "SERVER_ERROR " +#define MCDR_SERVER_ERROR_LEN (sizeof(MCDR_SERVER_ERROR) - 1) +#define MCDR_STORED "STORED\r\n" +#define MCDR_STORED_LEN (sizeof(MCDR_STORED) - 1) +#define MCDR_NOT_STORED "NOT_STORED\r\n" +#define MCDR_NOT_STORED_LEN (sizeof(MCDR_NOT_STORED) - 1) +#define MCDR_EXISTS "EXISTS\r\n" +#define MCDR_EXISTS_LEN (sizeof(MCDR_EXISTS) - 1) +#define MCDR_NOT_FOUND "NOT_FOUND\r\n" +#define MCDR_NOT_FOUND_LEN (sizeof(MCDR_NOT_FOUND) - 1) +#define MCDR_END "END\r\n" +#define MCDR_END_LEN (sizeof(MCDR_END) - 1) +#define MCDR_DELETED "DELETED\r\n" +#define MCDR_DELETED_LEN (sizeof(MCDR_DELETED) - 1) +#define MCDR_TOUCHED "TOUCHED\r\n" +#define MCDR_TOUCHED_LEN (sizeof(MCDR_TOUCHED) - 1) +#define MCDR_STAT "STAT " +#define MCDR_STAT_LEN (sizeof(MCDR_STAT) - 1) + +#define MEMCACHED_UDP_HDR_LEN 8 +#define MEMCACHED_MIN_LEN MCDR_END_LEN +#define MEMCACHED_MIN_UDP_LEN (MEMCACHED_MIN_LEN + MEMCACHED_UDP_HDR_LEN) + +#define MEMCACHED_MIN_MATCH 2 /* Minimum number of command/responses required */ + +#define MEMCACHED_MATCH(cr) memcmp(offset, cr, cr ## _LEN) + +static void ndpi_int_memcached_add_connection(struct ndpi_detection_module_struct + *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found memcached\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_MEMCACHED, NDPI_PROTOCOL_UNKNOWN); +} + +void ndpi_search_memcached( + struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &flow->packet; + const u_int8_t *offset = packet->payload; + u_int8_t *matches; + + NDPI_LOG_DBG(ndpi_struct, "search memcached\n"); + + if (packet->tcp != NULL) { + if (packet->payload_packet_len < MEMCACHED_MIN_LEN) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + matches = &flow->l4.tcp.memcached_matches; + } + else if (packet->udp != NULL) { + if (packet->payload_packet_len < MEMCACHED_MIN_UDP_LEN) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if ((offset[4] == 0x00 && offset[5] == 0x00) || + offset[6] != 0x00 || offset[7] != 0x00) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + offset += MEMCACHED_UDP_HDR_LEN; + matches = &flow->l4.udp.memcached_matches; + } + else { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + /* grep MCD memcached.c |\ + * egrep -v '(LEN|MATCH)' |\ + * sed -e 's/^#define //g' |\ + * awk '{ printf "else if (! MEMCACHED_MATCH(%s)) *matches += 1;\n",$1 }' */ + + if (! MEMCACHED_MATCH(MCDC_SET)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_ADD)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_REPLACE)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_APPEND)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_PREPEND)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_CAS)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_GET)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_GETS)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_DELETE)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_INCR)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_DECR)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_TOUCH)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_GAT)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_GATS)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDC_STATS)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_ERROR)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_CLIENT_ERROR)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_SERVER_ERROR)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_STORED)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_NOT_STORED)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_EXISTS)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_NOT_FOUND)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_END)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_DELETED)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_TOUCHED)) *matches += 1; + else if (! MEMCACHED_MATCH(MCDR_STAT)) *matches += 1; + + if (*matches >= MEMCACHED_MIN_MATCH) + ndpi_int_memcached_add_connection(ndpi_struct, flow); +} + +void init_memcached_dissector( + struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +{ + ndpi_set_bitmask_protocol_detection("MEMCACHED", + ndpi_struct, detection_bitmask, *id, + NDPI_PROTOCOL_MEMCACHED, + ndpi_search_memcached, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/tests/pcap/memcached.cap b/tests/pcap/memcached.cap new file mode 100644 index 0000000000000000000000000000000000000000..3b4c1a4256dd02da32a5e54d2db1ad9bb3ab8553 GIT binary patch literal 1895 zcmaKszi-n(6vv%3B2}eU6qb&js-n^mJ3nfmf~HU;7+9!S7%a!WG$%PuxI3pm0!_pp z0Ca$^WysQzk(DtEl`6Gen5z!VOoex6UlONDE;=dq-n-BH-re&%`T6}@TuCUskx*i= zC_G?qPCw2lFW^6){bN#DSCp0Zqg7?~#zCX0C^0@SP8K_N_kaK5k%#f4qpP%{#1sEc z6Y}`q)fX5Br*2Pdop6Ou9OVTktA4)3pu`*9h zRauj~Ow1jO+&!;QJQ4*Izyj`qb^uuV~NQF(MuO4G3ceOCiK$t*6i@M X|9&j7{X}Tolf>}U=Wy!Quv7mBQW^$; literal 0 HcmV?d00001 From 335b3369689f8c338f9d7680490f500279ce9bba Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Thu, 16 Aug 2018 11:47:10 +0200 Subject: [PATCH 026/147] Hyperscan compilation fixes --- configure.seed | 28 ++++++++++++++++++---------- src/include/ndpi_typedefs.h | 3 +++ src/lib/ndpi_main.c | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/configure.seed b/configure.seed index 993ee03fa1b..6b85c66e963 100644 --- a/configure.seed +++ b/configure.seed @@ -54,16 +54,24 @@ fi HS_LIB= HS_INC= -BKP=$LIBS -LIBS="$LIBS -lstdc++ -lm" -AC_CHECK_LIB([hs], [hs_compile_multi], AC_DEFINE_UNQUOTED(HAVE_HYPERSCAN, 1, [Intel Hyperscan is present])) -LIBS=$BKP - -if test "x$ac_cv_lib_hs_hs_compile_multi" = xyes; then : -AC_CHECK_LIB([m], [pow]) -AC_CHECK_LIB([stdc++], [main]) -HS_INC=`pkg-config --cflags libhs` -HS_LIB=`pkg-config --libs libhs` + +AC_ARG_WITH(hyperscan, [ --with-hyperscan Enable nDPI build with Intel Hyperscan]) + +if test "${with_hyperscan+set}" = set; then + BKP=$LIBS + LIBS="$LIBS -lstdc++ -lm" + AC_CHECK_LIB([hs], [hs_compile_multi], AC_DEFINE_UNQUOTED(HAVE_HYPERSCAN, 1, [Intel Hyperscan is present])) + LIBS=$BKP + + if test "x$ac_cv_lib_hs_hs_compile_multi" = xyes; then : + AC_CHECK_LIB([m], [pow]) + AC_CHECK_LIB([stdc++], [main]) + HS_INC=`pkg-config --cflags libhs` + HS_LIB=`pkg-config --libs libhs` + else + AC_MSG_RESULT([Intel Hyperscan not found, exiting. See https://github.com/intel/hyperscan/blob/master/doc/dev-reference/getting_started.rst for install/build instructions]) + exit 1 + fi fi if test -f $PCAP_HOME/libpcap/libpcap.a; then : diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 5573c0e9001..92111dd73f1 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -26,6 +26,9 @@ #include "ndpi_define.h" +/* Needed to have access to HAVE_* defines */ +#include "ndpi_config.h" + /* NDPI_LOG_LEVEL */ typedef enum { NDPI_LOG_ERROR, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 45490685f39..4f15917003f 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -47,7 +47,7 @@ #include "third_party/src/hash.c" #ifdef HAVE_HYPERSCAN -#include +#include #endif #ifdef HAVE_HYPERSCAN From 9847c2ccbbe3db62b39249126fb5c86298f37c9d Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 16 Aug 2018 12:03:09 +0200 Subject: [PATCH 027/147] Generic protocol cleanup (work in progress) --- src/include/ndpi_typedefs.h | 2 +- src/lib/ndpi_content_match.c.inc | 2 + src/lib/ndpi_main.c | 144 ++++++++++++++-------- src/lib/third_party/include/actypes.h | 14 +-- src/lib/third_party/include/ahocorasick.h | 6 +- src/lib/third_party/src/ahocorasick.c | 16 +-- src/lib/third_party/src/node.c | 2 +- 7 files changed, 115 insertions(+), 71 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 5573c0e9001..2c4c2c63a2a 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -1194,7 +1194,7 @@ struct ndpi_flow_struct { typedef struct { char *string_to_match, *string2_to_match, *pattern_to_match, *proto_name; int protocol_id; - ndpi_protocol_category_t proto_category; + ndpi_protocol_category_t protocol_category; ndpi_protocol_breed_t protocol_breed; } ndpi_protocol_match; diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 78a58a7bf1f..64f1b5ee123 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8377,6 +8377,8 @@ ndpi_protocol_match host_match[] = { { ".1kxun.", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { "tcad.wedolook.com", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "baidu.com", NULL, NULL, "baidu", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN }, + { ".icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, { "icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 45490685f39..164481cc492 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -57,8 +57,12 @@ struct hs { }; #endif +#define NDPI_CONST_GENERIC_PROTOCOL_NAME "GenericProtocol" + static int _ndpi_debug_callbacks = 0; +// #define MATCH_DEBUG 1 + /* implementation of the punycode check function */ int check_punycode_string(char * buffer , int len) { @@ -675,7 +679,9 @@ static int removeDefaultPort(ndpi_port_range *range, static int ndpi_string_to_automa(struct ndpi_detection_module_struct *ndpi_struct, ndpi_automa *automa, - char *value, int protocol_id) { + char *value, u_int16_t protocol_id, + ndpi_protocol_category_t category, + ndpi_protocol_breed_t breed) { AC_PATTERN_t ac_pattern; if(protocol_id >= (NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS)) { @@ -684,8 +690,16 @@ static int ndpi_string_to_automa(struct ndpi_detection_module_struct *ndpi_struc } if(automa->ac_automa == NULL) return(-2); - ac_pattern.astring = value; - ac_pattern.rep.number = protocol_id; + ac_pattern.astring = value, + ac_pattern.rep.number = protocol_id, + ac_pattern.rep.category = (u_int16_t)category, + ac_pattern.rep.breed = (u_int16_t)breed; + +#ifdef MATCH_DEBUG + printf("Adding to automa [%s][protocol_id: %u][category: %u][breed: %u]\n", + value, protocol_id, category, breed); +#endif + if(value == NULL) ac_pattern.length = 0; else @@ -700,22 +714,25 @@ static int ndpi_string_to_automa(struct ndpi_detection_module_struct *ndpi_struc static int ndpi_add_host_url_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, char *value, int protocol_id, - ndpi_protocol_breed_t breed /* UNUSED */) + ndpi_protocol_category_t category, + ndpi_protocol_breed_t breed) { #ifdef DEBUG NDPI_LOG_DEBUG2(ndpi_struct, "[NDPI] Adding [%s][%d]\n", value, protocol_id); #endif - return(ndpi_string_to_automa(ndpi_struct, &ndpi_struct->host_automa, value, protocol_id)); + return(ndpi_string_to_automa(ndpi_struct, &ndpi_struct->host_automa, value, protocol_id, + category, breed)); } /* ****************************************************** */ int ndpi_add_content_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, char *value, int protocol_id, - ndpi_protocol_breed_t breed /* UNUSED */) { + ndpi_protocol_category_t category, + ndpi_protocol_breed_t breed) { return(ndpi_string_to_automa(ndpi_struct, &ndpi_struct->content_automa, - value, protocol_id)); + value, protocol_id, category, breed)); } /* ****************************************************** */ @@ -740,25 +757,34 @@ void ndpi_init_protocol_match(struct ndpi_detection_module_struct *ndpi_mod, { u_int16_t no_master[2] = { NDPI_PROTOCOL_NO_MASTER_PROTO, NDPI_PROTOCOL_NO_MASTER_PROTO }; ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; - - ndpi_add_host_url_subprotocol(ndpi_mod, match->string_to_match, - match->protocol_id, match->protocol_breed); - + static u_int16_t generic_id = NDPI_LAST_IMPLEMENTED_PROTOCOL; + u_int16_t p_id; + if(ndpi_mod->proto_defaults[match->protocol_id].protoName == NULL) { - ndpi_mod->proto_defaults[match->protocol_id].protoName = ndpi_strdup(match->proto_name); - ndpi_mod->proto_defaults[match->protocol_id].protoCategory = match->proto_category; - ndpi_mod->proto_defaults[match->protocol_id].protoId = match->protocol_id; - ndpi_mod->proto_defaults[match->protocol_id].protoBreed = match->protocol_breed; + if(match->protocol_id == NDPI_PROTOCOL_GENERIC) + ndpi_mod->proto_defaults[match->protocol_id].protoName = ndpi_strdup(NDPI_CONST_GENERIC_PROTOCOL_NAME); + else + ndpi_mod->proto_defaults[match->protocol_id].protoName = ndpi_strdup(match->proto_name); + + ndpi_mod->proto_defaults[match->protocol_id].protoId = match->protocol_id; + ndpi_mod->proto_defaults[match->protocol_id].protoCategory = match->protocol_category; + ndpi_mod->proto_defaults[match->protocol_id].protoBreed = match->protocol_breed; + + ndpi_set_proto_defaults(ndpi_mod, + ndpi_mod->proto_defaults[match->protocol_id].protoBreed, + ndpi_mod->proto_defaults[match->protocol_id].protoId, + no_master, no_master, + ndpi_mod->proto_defaults[match->protocol_id].protoName, + ndpi_mod->proto_defaults[match->protocol_id].protoCategory, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); } - ndpi_set_proto_defaults(ndpi_mod, - ndpi_mod->proto_defaults[match->protocol_id].protoBreed, - ndpi_mod->proto_defaults[match->protocol_id].protoId, - no_master, no_master, - ndpi_mod->proto_defaults[match->protocol_id].protoName, - ndpi_mod->proto_defaults[match->protocol_id].protoCategory, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_add_host_url_subprotocol(ndpi_mod, + match->string_to_match, + match->protocol_id, + match->protocol_category, + match->protocol_breed); } /* ******************************************************************** */ @@ -862,24 +888,25 @@ static void init_string_based_protocols(struct ndpi_detection_module_struct *ndp for(i=0; host_match[i].string_to_match != NULL; i++) ndpi_init_protocol_match(ndpi_mod, &host_match[i]); -#ifdef DEBUG - ac_automata_display(ndpi_mod->host_automa.ac_automa, 'n'); +#ifdef MATCH_DEBUG + // ac_automata_display(ndpi_mod->host_automa.ac_automa, 'n'); #endif for(i=0; content_match[i].string_to_match != NULL; i++) ndpi_add_content_subprotocol(ndpi_mod, content_match[i].string_to_match, content_match[i].protocol_id, + content_match[i].protocol_category, content_match[i].protocol_breed); for(i=0; ndpi_en_bigrams[i] != NULL; i++) ndpi_string_to_automa(ndpi_mod, &ndpi_mod->bigrams_automa, (char*)ndpi_en_bigrams[i], - 1); + 1, 1, 1); for(i=0; ndpi_en_impossible_bigrams[i] != NULL; i++) ndpi_string_to_automa(ndpi_mod, &ndpi_mod->impossible_bigrams_automa, (char*)ndpi_en_impossible_bigrams[i], - 1); + 1, 1, 1); } /* ******************************************************************** */ @@ -1466,6 +1493,11 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "AFP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 548, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 548, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CATEGORY_CUSTOM_1, + no_master, + no_master, NDPI_CONST_GENERIC_PROTOCOL_NAME, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CHECKMK, no_master, no_master, "CHECKMK", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, @@ -1912,19 +1944,19 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp /* ****************************************************** */ -static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, void *param) { - int *matching_protocol_id = (int*)param; +static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, AC_REP_t *match) { int min_len = (txt->length < m->patterns->length) ? txt->length : m->patterns->length; - char *match, buf[64]; + char buf[64]; int min_buf_len = (txt->length > 63 /* sizeof(buf)-1 */) ? 63 : txt->length; - + u_int buf_len = strlen(buf); + strncpy(buf, txt->astring, min_buf_len); buf[min_buf_len] = '\0'; #ifdef MATCH_DEBUG - printf("Searching [to search: %s/%u][pattern: %s/%u] [len: %u][match_num: %u]\n", + printf("Searching [to search: %s/%u][pattern: %s/%u] [len: %u][match_num: %u][%s]\n", buf, txt->length, m->patterns->astring, m->patterns->length, min_len, - m->match_num); + m->match_num, m->patterns->astring); #endif /* @@ -1933,11 +1965,15 @@ static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, void *param) { specific match, paying more cpu cycles. */ - *matching_protocol_id = m->patterns[0].rep.number; + memcpy(match, &m->patterns[0].rep, sizeof(AC_REP_t)); - if(strncmp(buf, m->patterns->astring, min_len) == 0) { + if(((buf_len >= min_len) && (strncmp(&buf[buf_len-min_len], m->patterns->astring, min_len) == 0)) + || (strncmp(buf, m->patterns->astring, min_len) == 0) /* begins with */ + ) + { #ifdef MATCH_DEBUG - printf("Found match [%s][%s] [len: %u]\n", buf, m->patterns->astring, min_len); + printf("Found match [%s][%s] [len: %u][proto_id: %u]\n", + buf, m->patterns->astring, min_len, *matching_protocol_id); #endif return(1); /* If the pattern found matches the string at the beginning we stop here */ } else @@ -2195,6 +2231,7 @@ int ndpi_add_string_value_to_automa(void *_automa, char *str, unsigned long num) if(automa == NULL) return(-1); + memset(&ac_pattern, 0, sizeof(ac_pattern)); ac_pattern.astring = str; ac_pattern.rep.number = num; ac_pattern.length = strlen(ac_pattern.astring); @@ -2211,7 +2248,7 @@ void ndpi_finalize_automa(void *_automa) { ac_automata_finalize((AC_AUTOMATA_t*) /* ****************************************************** */ int ndpi_match_string(void *_automa, char *string_to_match) { - int matching_protocol_id = NDPI_PROTOCOL_UNKNOWN; + AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; AC_TEXT_t ac_input_text; AC_AUTOMATA_t *automa = (AC_AUTOMATA_t*)_automa; @@ -2221,10 +2258,10 @@ int ndpi_match_string(void *_automa, char *string_to_match) { return(-2); ac_input_text.astring = string_to_match, ac_input_text.length = strlen(string_to_match); - ac_automata_search(automa, &ac_input_text, (void*)&matching_protocol_id); + ac_automata_search(automa, &ac_input_text, &match); ac_automata_reset(automa); - return(matching_protocol_id > 0 ? 0 : -1); + return(match.number > 0 ? 0 : -1); } /* ****************************************************** */ @@ -2232,7 +2269,8 @@ int ndpi_match_string(void *_automa, char *string_to_match) { int ndpi_match_string_id(void *_automa, char *string_to_match, unsigned long *id) { AC_TEXT_t ac_input_text; AC_AUTOMATA_t *automa = (AC_AUTOMATA_t*)_automa; - + AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; + *id = -1; if((automa == NULL) || (string_to_match == NULL) @@ -2240,10 +2278,12 @@ int ndpi_match_string_id(void *_automa, char *string_to_match, unsigned long *id return(-2); ac_input_text.astring = string_to_match, ac_input_text.length = strlen(string_to_match); - ac_automata_search(automa, &ac_input_text, (void*)id); + ac_automata_search(automa, &ac_input_text, &match); ac_automata_reset(automa); - return(*id != -1 ? 0 : -1); + *id = match.number; + + return(*id != NDPI_PROTOCOL_UNKNOWN ? 0 : -1); } /* *********************************************** */ @@ -2599,7 +2639,8 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, } else { if(do_add) ndpi_add_host_url_subprotocol(ndpi_mod, value, subprotocol_id, -NDPI_PROTOCOL_ACCEPTABLE); + NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + NDPI_PROTOCOL_ACCEPTABLE); else ndpi_remove_host_url_subprotocol(ndpi_mod, value, subprotocol_id); } @@ -3989,6 +4030,8 @@ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct /* printf("===> Loading %s as %u\n", name, category); */ + memset(&ac_pattern, 0, sizeof(ac_pattern)); + #ifdef HAVE_HYPERSCAN { struct hs_list *h = (struct hs_list*)malloc(sizeof(struct hs_list)); @@ -5558,7 +5601,7 @@ int ndpi_match_prefix(const u_int8_t *payload, size_t payload_len, int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, char *string_to_match, u_int string_to_match_len, u_int8_t is_host_match) { - int matching_protocol_id = NDPI_PROTOCOL_UNKNOWN; + AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; AC_TEXT_t ac_input_text; ndpi_automa *automa = is_host_match ? &ndpi_struct->host_automa : &ndpi_struct->content_automa; @@ -5570,11 +5613,10 @@ int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_stru } ac_input_text.astring = string_to_match, ac_input_text.length = string_to_match_len; - ac_automata_search(((AC_AUTOMATA_t*)automa->ac_automa), &ac_input_text, (void*)&matching_protocol_id); - + ac_automata_search(((AC_AUTOMATA_t*)automa->ac_automa), &ac_input_text, &match); ac_automata_reset(((AC_AUTOMATA_t*)automa->ac_automa)); - return(matching_protocol_id); + return(match.number); } /* ****************************************************** */ @@ -5678,10 +5720,10 @@ int ndpi_match_content_subprotocol(struct ndpi_detection_module_struct *ndpi_str int ndpi_match_bigram(struct ndpi_detection_module_struct *ndpi_struct, ndpi_automa *automa, char *bigram_to_match) { AC_TEXT_t ac_input_text; - int ret = 0; + AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; if((automa->ac_automa == NULL) || (bigram_to_match == NULL)) - return(ret); + return(-1); if(!automa->ac_automa_finalized) { ac_automata_finalize((AC_AUTOMATA_t*)automa->ac_automa); @@ -5689,10 +5731,10 @@ int ndpi_match_bigram(struct ndpi_detection_module_struct *ndpi_struct, } ac_input_text.astring = bigram_to_match, ac_input_text.length = 2; - ac_automata_search(((AC_AUTOMATA_t*)automa->ac_automa), &ac_input_text, (void*)&ret); + ac_automata_search(((AC_AUTOMATA_t*)automa->ac_automa), &ac_input_text, &match); ac_automata_reset(((AC_AUTOMATA_t*)automa->ac_automa)); - return(ret); + return(match.number); } /* ****************************************************** */ diff --git a/src/lib/third_party/include/actypes.h b/src/lib/third_party/include/actypes.h index 807e5026ac4..c09d787c6a1 100644 --- a/src/lib/third_party/include/actypes.h +++ b/src/lib/third_party/include/actypes.h @@ -42,9 +42,9 @@ typedef char AC_ALPHABET_t; * automata for further reference. we provisioned two possible types as a * union for this purpose. you can add your desired type in it. **/ -typedef union { - char * stringy; /* null-terminated string */ - unsigned long number; +typedef struct { + int number; + u_int16_t category, breed; } AC_REP_t; /* AC_PATTERN_t: @@ -112,20 +112,20 @@ typedef enum ac_automata_finalize() you can not add new patterns to the automata. */ } AC_ERROR_t; -/* MATCH_CALBACK_t: +/* MATCH_CALLBACK_t: * This is the call-back function type that must be given to automata at * initialization to report match occurrence to the caller. * at a match event, the automata will reach you using this function and sends * you a pointer to AC_MATCH_t. using that pointer you can handle * matches. you can send parameters to the call-back function when you call * ac_automata_search(). at call-back, the automata will sent you those - * parameters as the second parameter (void *) of MATCH_CALBACK_t. inside + * parameters as the second parameter (void *) of MATCH_CALLBACK_t. inside * the call-back function you can cast it to whatever you want. - * If you return 0 from MATCH_CALBACK_t function to the automata, it will + * If you return 0 from MATCH_CALLBACK_t function to the automata, it will * continue searching, otherwise it will return from ac_automata_search() * to your calling function. **/ -typedef int (*MATCH_CALBACK_f)(AC_MATCH_t *, AC_TEXT_t *, void *); +typedef int (*MATCH_CALLBACK_f)(AC_MATCH_t *, AC_TEXT_t *, AC_REP_t *); /* AC_PATTRN_MAX_LENGTH: * Maximum acceptable pattern length in AC_PATTERN_t.length diff --git a/src/lib/third_party/include/ahocorasick.h b/src/lib/third_party/include/ahocorasick.h index ea92e4a1ba8..192a0e728f0 100644 --- a/src/lib/third_party/include/ahocorasick.h +++ b/src/lib/third_party/include/ahocorasick.h @@ -36,7 +36,7 @@ typedef struct unsigned int all_nodes_max; /* Current max allocated memory for *all_nodes */ AC_MATCH_t match; /* Any match is reported with this */ - MATCH_CALBACK_f match_callback; /* Match call-back function */ + MATCH_CALLBACK_f match_callback; /* Match call-back function */ /* this flag indicates that if automata is finalized by * ac_automata_finalize() or not. 1 means finalized and 0 @@ -58,10 +58,10 @@ typedef struct } AC_AUTOMATA_t; -AC_AUTOMATA_t * ac_automata_init (MATCH_CALBACK_f mc); +AC_AUTOMATA_t * ac_automata_init (MATCH_CALLBACK_f mc); AC_ERROR_t ac_automata_add (AC_AUTOMATA_t * thiz, AC_PATTERN_t * str); void ac_automata_finalize (AC_AUTOMATA_t * thiz); -int ac_automata_search (AC_AUTOMATA_t * thiz, AC_TEXT_t * str, void * param); +int ac_automata_search (AC_AUTOMATA_t * thiz, AC_TEXT_t * str, AC_REP_t * param); void ac_automata_reset (AC_AUTOMATA_t * thiz); void ac_automata_release (AC_AUTOMATA_t * thiz); void ac_automata_display (AC_AUTOMATA_t * thiz, char repcast); diff --git a/src/lib/third_party/src/ahocorasick.c b/src/lib/third_party/src/ahocorasick.c index fd6541dd769..371dc06f875 100644 --- a/src/lib/third_party/src/ahocorasick.c +++ b/src/lib/third_party/src/ahocorasick.c @@ -44,10 +44,10 @@ static void ac_automata_traverse_setfailure * FUNCTION: ac_automata_init * Initialize automata; allocate memories and set initial values * PARAMS: - * MATCH_CALBACK mc: call-back function + * MATCH_CALLBACK mc: call-back function * the call-back function will be used to reach the caller on match occurrence ******************************************************************************/ -AC_AUTOMATA_t * ac_automata_init (MATCH_CALBACK_f mc) +AC_AUTOMATA_t * ac_automata_init (MATCH_CALLBACK_f mc) { AC_AUTOMATA_t * thiz = (AC_AUTOMATA_t *)ndpi_malloc(sizeof(AC_AUTOMATA_t)); memset (thiz, 0, sizeof(AC_AUTOMATA_t)); @@ -159,7 +159,7 @@ void ac_automata_finalize (AC_AUTOMATA_t * thiz) * 0: success; continue searching; call-back sent me a 0 value * 1: success; stop searching; call-back sent me a non-0 value ******************************************************************************/ -int ac_automata_search (AC_AUTOMATA_t * thiz, AC_TEXT_t * txt, void * param) +int ac_automata_search (AC_AUTOMATA_t * thiz, AC_TEXT_t * txt, AC_REP_t * param) { unsigned long position; AC_NODE_t *curr; @@ -283,10 +283,10 @@ void ac_automata_display (AC_AUTOMATA_t * thiz, char repcast) switch (repcast) { case 'n': - printf("%ld", sid.rep.number); - break; - case 's': - printf("%s", sid.rep.stringy); + printf("%u/%u/%u", + sid.rep.number, + sid.rep.category, + sid.rep.breed); break; } } @@ -304,7 +304,7 @@ static void ac_automata_register_nodeptr (AC_AUTOMATA_t * thiz, AC_NODE_t * node { if(thiz->all_nodes_num >= thiz->all_nodes_max) { - thiz->all_nodes = ndpi_realloc(thiz->all_nodes, + thiz->all_nodes = ndpi_realloc(thiz->all_nodes, thiz->all_nodes_max*sizeof(AC_NODE_t *), (REALLOC_CHUNK_ALLNODES+thiz->all_nodes_max)*sizeof(AC_NODE_t *) ); diff --git a/src/lib/third_party/src/node.c b/src/lib/third_party/src/node.c index a43cc59a6fa..4da04de9bb9 100644 --- a/src/lib/third_party/src/node.c +++ b/src/lib/third_party/src/node.c @@ -192,7 +192,7 @@ void node_register_matchstr (AC_NODE_t * thiz, AC_PATTERN_t * str) thiz->matched_patterns[thiz->matched_patterns_num].astring = str->astring; thiz->matched_patterns[thiz->matched_patterns_num].length = str->length; - thiz->matched_patterns[thiz->matched_patterns_num].rep = str->rep; + memcpy(&thiz->matched_patterns[thiz->matched_patterns_num].rep, &str->rep, sizeof(AC_REP_t)); thiz->matched_patterns_num++; } From f88648fbc845eaf75a74f1c45a9483d144993e29 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 16 Aug 2018 12:05:07 +0200 Subject: [PATCH 028/147] Tests update --- tests/result/1kxun.pcap.out | 35 +++++---- tests/result/pps.pcap.out | 113 ++++++++++++++-------------- tests/result/quickplay.pcap.out | 24 +++--- tests/result/whatsappfiles.pcap.out | 4 +- 4 files changed, 87 insertions(+), 89 deletions(-) diff --git a/tests/result/1kxun.pcap.out b/tests/result/1kxun.pcap.out index 260e8c48534..5e37a65af00 100644 --- a/tests/result/1kxun.pcap.out +++ b/tests/result/1kxun.pcap.out @@ -1,29 +1,28 @@ Unknown 24 6428 14 DNS 2 378 1 -HTTP 105 36430 8 +HTTP 524 220123 9 MDNS 1 82 1 NTP 1 90 1 NetBIOS 31 3589 8 SSDP 143 36951 13 DHCP 24 8208 5 -SMTPS 419 183693 1 QQ 28 5216 2 RTP 2 132 1 SSL 105 21914 7 DHCPV6 10 980 3 Facebook 19 6840 2 Google 3 176 1 +GenericProtocol 433 311919 14 LLMNR 89 6799 47 -1kxun 433 311919 14 - 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7.29/HTTP.SMTPS][cat: Email/3][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] - 2 TCP 192.168.115.8:49600 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][18 pkts/1722 bytes <-> 51 pkts/61707 bytes][Host: pic.1kxun.com] - 3 TCP 192.168.115.8:49601 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][18 pkts/2440 bytes <-> 43 pkts/49237 bytes][Host: pic.1kxun.com] - 4 TCP 192.168.115.8:49602 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][24 pkts/2786 bytes <-> 41 pkts/46203 bytes][Host: pic.1kxun.com] - 5 TCP 192.168.115.8:49604 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][20 pkts/2564 bytes <-> 38 pkts/43013 bytes][Host: pic.1kxun.com] - 6 TCP 192.168.115.8:49606 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][22 pkts/1926 bytes <-> 28 pkts/33821 bytes][Host: jp.kankan.1kxun.mobi] - 7 TCP 192.168.115.8:49599 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][16 pkts/1612 bytes <-> 27 pkts/29579 bytes][Host: pic.1kxun.com] - 8 TCP 192.168.115.8:49603 <-> 106.187.35.246:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][12 pkts/1396 bytes <-> 22 pkts/24184 bytes][Host: pic.1kxun.com] + 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7/HTTP][cat: Web/5][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] + 2 TCP 192.168.115.8:49600 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][18 pkts/1722 bytes <-> 51 pkts/61707 bytes][Host: pic.1kxun.com] + 3 TCP 192.168.115.8:49601 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][18 pkts/2440 bytes <-> 43 pkts/49237 bytes][Host: pic.1kxun.com] + 4 TCP 192.168.115.8:49602 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][24 pkts/2786 bytes <-> 41 pkts/46203 bytes][Host: pic.1kxun.com] + 5 TCP 192.168.115.8:49604 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][20 pkts/2564 bytes <-> 38 pkts/43013 bytes][Host: pic.1kxun.com] + 6 TCP 192.168.115.8:49606 <-> 106.185.35.110:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][22 pkts/1926 bytes <-> 28 pkts/33821 bytes][Host: jp.kankan.1kxun.mobi] + 7 TCP 192.168.115.8:49599 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][16 pkts/1612 bytes <-> 27 pkts/29579 bytes][Host: pic.1kxun.com] + 8 TCP 192.168.115.8:49603 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][12 pkts/1396 bytes <-> 22 pkts/24184 bytes][Host: pic.1kxun.com] 9 TCP 192.168.115.8:49609 <-> 42.120.51.152:8080 [proto: 7/HTTP][cat: Web/5][20 pkts/4716 bytes <-> 13 pkts/7005 bytes][Host: 42.120.51.152] 10 TCP 192.168.5.16:53627 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web/5][6 pkts/676 bytes <-> 8 pkts/8822 bytes][Host: dl-obs.official.line.naver.jp] 11 TCP 192.168.5.16:53628 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web/5][6 pkts/676 bytes <-> 8 pkts/8482 bytes][Host: dl-obs.official.line.naver.jp] @@ -36,12 +35,12 @@ LLMNR 89 6799 47 18 TCP 192.168.5.16:53623 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1959 bytes <-> 8 pkts/1683 bytes][client: 1] 19 TCP 192.168.5.16:53625 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1955 bytes <-> 8 pkts/1683 bytes][client: 1] 20 TCP 192.168.5.16:53629 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][10 pkts/1895 bytes <-> 7 pkts/1623 bytes][client: 1] - 21 TCP 192.168.115.8:49605 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][8 pkts/1128 bytes <-> 5 pkts/2282 bytes][Host: jp.kankan.1kxun.mobi] + 21 TCP 192.168.115.8:49605 <-> 106.185.35.110:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][8 pkts/1128 bytes <-> 5 pkts/2282 bytes][Host: jp.kankan.1kxun.mobi] 22 TCP 192.168.5.16:53626 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1943 bytes <-> 8 pkts/1267 bytes][client: 1] - 23 TCP 192.168.115.8:49597 <-> 106.185.35.110:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][10 pkts/1394 bytes <-> 4 pkts/1464 bytes][Host: jp.kankan.1kxun.mobi] + 23 TCP 192.168.115.8:49597 <-> 106.185.35.110:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][10 pkts/1394 bytes <-> 4 pkts/1464 bytes][Host: jp.kankan.1kxun.mobi] 24 TCP 31.13.87.1:443 <-> 192.168.5.16:53578 [proto: 91.119/SSL.Facebook][5 pkts/1006 bytes <-> 5 pkts/1487 bytes] 25 UDP 192.168.5.57:55809 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/2450 bytes -> 0 pkts/0 bytes] - 26 TCP 192.168.115.8:49598 <-> 222.73.254.167:80 [proto: 7.205/HTTP.1kxun][cat: Streaming/17][10 pkts/1406 bytes <-> 4 pkts/980 bytes][Host: kankan.1kxun.com] + 26 TCP 192.168.115.8:49598 <-> 222.73.254.167:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][10 pkts/1406 bytes <-> 4 pkts/980 bytes][Host: kankan.1kxun.com] 27 TCP 192.168.115.8:49612 <-> 183.131.48.145:80 [proto: 7/HTTP][cat: Web/5][10 pkts/1428 bytes <-> 4 pkts/867 bytes][Host: 183.131.48.145] 28 UDP 192.168.5.44:51389 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][13 pkts/2275 bytes -> 0 pkts/0 bytes] 29 UDP 192.168.3.95:59468 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][12 pkts/2100 bytes -> 0 pkts/0 bytes] @@ -67,12 +66,12 @@ LLMNR 89 6799 47 49 TCP 192.168.115.8:49596 <-> 203.66.182.87:443 [proto: 91/SSL][4 pkts/220 bytes <-> 2 pkts/132 bytes] 50 UDP 192.168.5.9:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: joanna-pc] 51 UDP 192.168.5.41:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 52 UDP 192.168.115.8:60724 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/146 bytes <-> 1 pkts/137 bytes][Host: pic.1kxun.com] + 52 UDP 192.168.115.8:60724 <-> 8.8.8.8:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/146 bytes <-> 1 pkts/137 bytes][Host: pic.1kxun.com] 53 UDP 192.168.0.104:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][3 pkts/276 bytes -> 0 pkts/0 bytes] - 54 UDP 192.168.115.8:51024 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/160 bytes <-> 1 pkts/112 bytes][Host: jp.kankan.1kxun.mobi] + 54 UDP 192.168.115.8:51024 <-> 8.8.8.8:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/160 bytes <-> 1 pkts/112 bytes][Host: jp.kankan.1kxun.mobi] 55 UDP 192.168.115.8:54420 <-> 8.8.8.8:53 [proto: 5.48/DNS.QQ][cat: Chat/9][2 pkts/150 bytes <-> 1 pkts/116 bytes][Host: vv.video.qq.com] - 56 UDP 192.168.115.8:52723 <-> 8.8.8.8:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] - 57 UDP 192.168.115.8:52723 <-> 168.95.1.1:53 [proto: 5.205/DNS.1kxun][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] + 56 UDP 192.168.115.8:52723 <-> 8.8.8.8:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] + 57 UDP 192.168.115.8:52723 <-> 168.95.1.1:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] 58 UDP 192.168.115.8:51458 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][4 pkts/256 bytes -> 0 pkts/0 bytes][Host: wpad] 59 TCP 192.168.5.16:53613 -> 68.233.253.133:80 [proto: 7/HTTP][3 pkts/198 bytes -> 0 pkts/0 bytes] 60 UDP [fe80::9bd:81dd:2fdc:5750]:61548 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index 225e6b88684..5b3c3e7ce3f 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -1,82 +1,81 @@ Unknown 990 378832 34 -HTTP 20 7716 10 -SSDP 62 17013 9 -HTTP_Download 23 25892 1 +HTTP 47 42014 11 +SSDP 63 17143 10 +HTTP_Download 26 27222 2 Google 2 1093 1 -UPnP 1 130 1 -iQIYI 1459 1815935 51 +GenericProtocol 1429 1780307 49 - 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] - 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] - 3 TCP 192.168.115.8:50505 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/400 bytes <-> 244 pkts/319633 bytes][Host: static.qiyi.com] - 4 TCP 192.168.115.8:50491 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/426 bytes <-> 26 pkts/33872 bytes][Host: 223.26.106.66] + 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] + 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] + 3 TCP 192.168.115.8:50505 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/400 bytes <-> 244 pkts/319633 bytes][Host: static.qiyi.com] + 4 TCP 192.168.115.8:50491 <-> 223.26.106.66:80 [proto: 7/HTTP][cat: Web/5][1 pkts/426 bytes <-> 26 pkts/33872 bytes][Host: 223.26.106.66] 5 TCP 192.168.115.8:50486 <-> 77.234.40.96:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][11 pkts/11023 bytes <-> 12 pkts/14869 bytes][Host: bcu.ff.avast.com] 6 UDP 192.168.5.38:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][18 pkts/9327 bytes -> 0 pkts/0 bytes] - 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] - 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] + 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] + 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] 9 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] - 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] - 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] - 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] - 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] + 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] + 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] + 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] - 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] - 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] - 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] - 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] - 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] + 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] + 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] + 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] + 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] 33 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] - 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] 35 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] 36 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] 37 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] 38 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] - 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] + 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] 43 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] - 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] - 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] + 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] 50 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] - 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] + 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] 52 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] + 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] 54 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] - 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] - 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] - 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] + 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] + 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] + 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] 65 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] 66 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] 67 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] - 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.206/HTTP.iQIYI][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] + 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] - 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 153/UPnP][1 pkts/130 bytes -> 0 pkts/0 bytes] + 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][2 pkts/108 bytes -> 0 pkts/0 bytes] 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][1 pkts/66 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/quickplay.pcap.out b/tests/result/quickplay.pcap.out index 6dba3077ea4..c510958ebd1 100644 --- a/tests/result/quickplay.pcap.out +++ b/tests/result/quickplay.pcap.out @@ -1,19 +1,19 @@ QQ 12 4781 5 Facebook 6 1740 3 Google 2 378 1 +GenericProtocol 133 96179 11 Amazon 2 1469 1 -QuickPlay 133 96179 11 - 1 TCP 10.54.169.250:52009 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][35 pkts/17902 bytes <-> 30 pkts/28000 bytes][Host: vod-singtelhawk.quickplay.com] - 2 TCP 10.54.169.250:52019 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][14 pkts/7028 bytes <-> 11 pkts/12578 bytes][Host: vod-singtelhawk.quickplay.com] - 3 TCP 10.54.169.250:52017 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][5 pkts/2510 bytes <-> 3 pkts/3522 bytes][Host: vod-singtelhawk.quickplay.com] - 4 TCP 10.54.169.250:52018 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/3040 bytes][Host: vod-singtelhawk.quickplay.com] - 5 TCP 10.54.169.250:52022 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/2276 bytes][Host: vod-singtelhawk.quickplay.com] - 6 TCP 10.54.169.250:50669 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/844 bytes <-> 2 pkts/2836 bytes][Host: api-singtelhawk.quickplay.com] - 7 TCP 10.54.169.250:50668 <-> 120.28.35.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/733 bytes <-> 2 pkts/2627 bytes][Host: api-singtelhawk.quickplay.com] - 8 TCP 10.54.169.250:52021 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][3 pkts/1506 bytes <-> 1 pkts/1248 bytes][Host: vod-singtelhawk.quickplay.com] - 9 TCP 10.54.169.250:52007 <-> 120.28.35.40:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][3 pkts/1583 bytes <-> 1 pkts/1152 bytes][Host: vod-singtelhawk.quickplay.com] - 10 TCP 10.54.169.250:44256 <-> 120.28.5.41:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][2 pkts/1086 bytes <-> 1 pkts/1225 bytes][Host: play-singtelhawk.quickplay.com] + 1 TCP 10.54.169.250:52009 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][35 pkts/17902 bytes <-> 30 pkts/28000 bytes][Host: vod-singtelhawk.quickplay.com] + 2 TCP 10.54.169.250:52019 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][14 pkts/7028 bytes <-> 11 pkts/12578 bytes][Host: vod-singtelhawk.quickplay.com] + 3 TCP 10.54.169.250:52017 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][5 pkts/2510 bytes <-> 3 pkts/3522 bytes][Host: vod-singtelhawk.quickplay.com] + 4 TCP 10.54.169.250:52018 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/3040 bytes][Host: vod-singtelhawk.quickplay.com] + 5 TCP 10.54.169.250:52022 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/2008 bytes <-> 3 pkts/2276 bytes][Host: vod-singtelhawk.quickplay.com] + 6 TCP 10.54.169.250:50669 <-> 120.28.35.41:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/844 bytes <-> 2 pkts/2836 bytes][Host: api-singtelhawk.quickplay.com] + 7 TCP 10.54.169.250:50668 <-> 120.28.35.41:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/733 bytes <-> 2 pkts/2627 bytes][Host: api-singtelhawk.quickplay.com] + 8 TCP 10.54.169.250:52021 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/1506 bytes <-> 1 pkts/1248 bytes][Host: vod-singtelhawk.quickplay.com] + 9 TCP 10.54.169.250:52007 <-> 120.28.35.40:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/1583 bytes <-> 1 pkts/1152 bytes][Host: vod-singtelhawk.quickplay.com] + 10 TCP 10.54.169.250:44256 <-> 120.28.5.41:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1086 bytes <-> 1 pkts/1225 bytes][Host: play-singtelhawk.quickplay.com] 11 TCP 10.54.169.250:56381 <-> 54.179.140.65:80 [proto: 7.178/HTTP.Amazon][cat: Web/5][1 pkts/638 bytes <-> 1 pkts/831 bytes][Host: api.account.xiaomi.com] 12 TCP 10.54.169.250:54883 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][2 pkts/1192 bytes <-> 1 pkts/145 bytes][Host: hkextshort.weixin.qq.com] 13 TCP 10.54.169.250:54885 <-> 203.205.151.160:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][1 pkts/461 bytes <-> 2 pkts/522 bytes][Host: hkextshort.weixin.qq.com] @@ -23,5 +23,5 @@ QuickPlay 133 96179 11 17 TCP 10.54.169.250:52285 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] 18 TCP 10.54.169.250:52288 <-> 173.252.74.22:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/243 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] 19 TCP 10.54.169.250:44793 <-> 31.13.68.49:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][1 pkts/237 bytes <-> 1 pkts/339 bytes][Host: www.facebook.com] - 20 TCP 10.54.169.250:33064 <-> 120.28.5.18:80 [proto: 7.196/HTTP.QuickPlay][cat: Streaming/17][1 pkts/358 bytes <-> 1 pkts/109 bytes][Host: api-singtelhawk.quickplay.com] + 20 TCP 10.54.169.250:33064 <-> 120.28.5.18:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/358 bytes <-> 1 pkts/109 bytes][Host: api-singtelhawk.quickplay.com] 21 TCP 10.54.169.250:33277 <-> 120.28.26.231:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/241 bytes <-> 1 pkts/137 bytes][Host: clients3.google.com] diff --git a/tests/result/whatsappfiles.pcap.out b/tests/result/whatsappfiles.pcap.out index 6feb992170f..e6e8f0fa766 100644 --- a/tests/result/whatsappfiles.pcap.out +++ b/tests/result/whatsappfiles.pcap.out @@ -1,4 +1,4 @@ WhatsAppFiles 620 452233 2 - 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][132 pkts/9906 bytes <-> 178 pkts/237405 bytes][client: mmg-fna.whatsapp.net] - 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][161 pkts/189194 bytes <-> 149 pkts/15728 bytes][client: mmg-fna.whatsapp.net][server: *.whatsapp.net] + 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][132 pkts/9906 bytes <-> 178 pkts/237405 bytes] + 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][161 pkts/189194 bytes <-> 149 pkts/15728 bytes] From 01bf295a19c19dc4f521ee40f0c478c794e1b5e4 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 16 Aug 2018 14:57:44 +0200 Subject: [PATCH 029/147] Completed custom category implementation --- example/ndpiReader.c | 81 +++++++++++++-------- src/include/ndpi_api.h | 6 ++ src/include/ndpi_main.h | 60 +++++++++++----- src/include/ndpi_typedefs.h | 9 ++- src/lib/Makefile | 2 +- src/lib/ndpi_main.c | 108 +++++++++++++++++++--------- src/lib/protocols/dns.c | 8 ++- src/lib/protocols/fbzero.c | 4 +- src/lib/protocols/http.c | 27 +++++-- src/lib/protocols/quic.c | 2 + src/lib/protocols/ssl.c | 67 +++++++++-------- tests/result/pps.pcap.out | 4 +- tests/result/webex.pcap.out | 58 +++++++-------- tests/result/whatsappfiles.pcap.out | 4 +- 14 files changed, 283 insertions(+), 157 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 39748cd90f6..faa453ee2de 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -111,7 +111,6 @@ struct flow_info { static struct flow_info *all_flows; - struct info_pair { u_int32_t addr; u_int8_t version; /* IP version */ @@ -135,16 +134,15 @@ struct port_stats { u_int32_t cumulative_addr; /*cumulative some of IP addresses */ addr_node *addr_tree; /* tree of distinct IP addresses */ struct info_pair top_ip_addrs[MAX_NUM_IP_ADDRESS]; - u_int8_t hasTopHost; /* as boolean flag*/ - u_int32_t top_host; /*host that is contributed to > 95% of traffic*/ - u_int8_t version; /* top host's ip version */ - char proto[16]; /*application level protocol of top host */ - UT_hash_handle hh; /* makes this structure hashable */ + u_int8_t hasTopHost; /* as boolean flag */ + u_int32_t top_host; /* host that is contributed to > 95% of traffic */ + u_int8_t version; /* top host's ip version */ + char proto[16]; /* application level protocol of top host */ + UT_hash_handle hh; /* makes this structure hashable */ }; struct port_stats *srcStats = NULL, *dstStats = NULL; - // struct to hold count of flows received by destination ports struct port_flow_info { u_int32_t port; /* key */ @@ -349,6 +347,8 @@ struct ndpi_proto_sorter { char name[16]; }; +/* ********************************** */ + int cmpProto(const void *_a, const void *_b) { struct ndpi_proto_sorter *a = (struct ndpi_proto_sorter*)_a; struct ndpi_proto_sorter *b = (struct ndpi_proto_sorter*)_b; @@ -356,6 +356,8 @@ int cmpProto(const void *_a, const void *_b) { return(strcmp(a->name, b->name)); } +/* ********************************** */ + int cmpFlows(const void *_a, const void *_b) { struct ndpi_flow_info *fa = ((struct flow_info*)_a)->flow; struct ndpi_flow_info *fb = ((struct flow_info*)_b)->flow; @@ -375,6 +377,8 @@ int cmpFlows(const void *_a, const void *_b) { return(0); } +/* ********************************** */ + void extcap_config() { int i, argidx = 0; struct ndpi_proto_sorter *protos; @@ -656,12 +660,12 @@ static void parseOptions(int argc, char **argv) { #endif } +/* ********************************** */ /** * @brief From IPPROTO to string NAME */ static char* ipProto2Name(u_int16_t proto_id) { - static char proto[8]; switch(proto_id) { @@ -689,12 +693,12 @@ static char* ipProto2Name(u_int16_t proto_id) { return(proto); } +/* ********************************** */ /** * @brief A faster replacement for inet_ntoa(). */ char* intoaV4(u_int32_t addr, char* buf, u_int16_t bufLen) { - char *cp, *retStr; uint byte; int n; @@ -723,6 +727,8 @@ char* intoaV4(u_int32_t addr, char* buf, u_int16_t bufLen) { return(retStr); } +/* ********************************** */ + /** * @brief Print the flow */ @@ -792,16 +798,20 @@ static void printFlow(u_int16_t id, struct ndpi_flow_info *flow, u_int16_t threa json_object_object_add(jObj,"host_b.port",json_object_new_int(ntohs(flow->dst_port))); if(flow->detected_protocol.master_protocol) - json_object_object_add(jObj,"detected.master_protocol",json_object_new_int(flow->detected_protocol.master_protocol)); + json_object_object_add(jObj,"detected.master_protocol", + json_object_new_int(flow->detected_protocol.master_protocol)); - json_object_object_add(jObj,"detected.app_protocol",json_object_new_int(flow->detected_protocol.app_protocol)); + json_object_object_add(jObj,"detected.app_protocol", + json_object_new_int(flow->detected_protocol.app_protocol)); if(flow->detected_protocol.master_protocol) { char tmp[256]; snprintf(tmp, sizeof(tmp), "%s.%s", - ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, flow->detected_protocol.master_protocol), - ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, flow->detected_protocol.app_protocol)); + ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, + flow->detected_protocol.master_protocol), + ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, + flow->detected_protocol.app_protocol)); json_object_object_add(jObj,"detected.protocol.name", json_object_new_string(tmp)); @@ -836,12 +846,13 @@ static void printFlow(u_int16_t id, struct ndpi_flow_info *flow, u_int16_t threa } } +/* ********************************** */ /** * @brief Unknown Proto Walker */ -static void node_print_unknown_proto_walker(const void *node, ndpi_VISIT which, int depth, void *user_data) { - +static void node_print_unknown_proto_walker(const void *node, + ndpi_VISIT which, int depth, void *user_data) { struct ndpi_flow_info *flow = *(struct ndpi_flow_info**)node; u_int16_t thread_id = *((u_int16_t*)user_data); @@ -854,11 +865,13 @@ static void node_print_unknown_proto_walker(const void *node, ndpi_VISIT which, } } +/* ********************************** */ + /** * @brief Known Proto Walker */ -static void node_print_known_proto_walker(const void *node, ndpi_VISIT which, int depth, void *user_data) { - +static void node_print_known_proto_walker(const void *node, + ndpi_VISIT which, int depth, void *user_data) { struct ndpi_flow_info *flow = *(struct ndpi_flow_info**)node; u_int16_t thread_id = *((u_int16_t*)user_data); @@ -871,6 +884,7 @@ static void node_print_known_proto_walker(const void *node, ndpi_VISIT which, in } } +/* ********************************** */ /** * @brief Guess Undetected Protocol @@ -890,6 +904,7 @@ static u_int16_t node_guess_undetected_protocol(u_int16_t thread_id, struct ndpi return(flow->detected_protocol.app_protocol); } +/* ********************************** */ /** * @brief Proto Guess Walker @@ -909,6 +924,7 @@ static void node_proto_guess_walker(const void *node, ndpi_VISIT which, int dept } process_ndpi_collected_info(ndpi_thread_info[thread_id].workflow, flow); + ndpi_thread_info[thread_id].workflow->stats.protocol_counter[flow->detected_protocol.app_protocol] += flow->src2dst_packets + flow->dst2src_packets; ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes[flow->detected_protocol.app_protocol] += flow->src2dst_bytes + flow->dst2src_bytes; ndpi_thread_info[thread_id].workflow->stats.protocol_flows[flow->detected_protocol.app_protocol]++; @@ -1354,7 +1370,6 @@ static void port_stats_walker(const void *node, ndpi_VISIT which, int depth, voi * @brief Idle Scan Walker */ static void node_idle_scan_walker(const void *node, ndpi_VISIT which, int depth, void *user_data) { - struct ndpi_flow_info *flow = *(struct ndpi_flow_info **) node; u_int16_t thread_id = *((u_int16_t *) user_data); @@ -1386,7 +1401,6 @@ static void node_idle_scan_walker(const void *node, ndpi_VISIT which, int depth, static void on_protocol_discovered(struct ndpi_workflow * workflow, struct ndpi_flow_info * flow, void * udata) { - const u_int16_t thread_id = (uintptr_t) udata; if(verbose > 1) { @@ -1446,7 +1460,6 @@ static void debug_printf(u_int32_t protocol, void *id_struct, * @brief Setup for detection begin */ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) { - NDPI_PROTOCOL_BITMASK all; struct ndpi_workflow_prefs prefs; @@ -1468,16 +1481,20 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) { ndpi_pref_enable_category_substring_match, 1); ndpi_workflow_set_flow_detected_callback(ndpi_thread_info[thread_id].workflow, - on_protocol_discovered, (void *)(uintptr_t)thread_id); + on_protocol_discovered, + (void *)(uintptr_t)thread_id); // enable all protocols NDPI_BITMASK_SET_ALL(all); ndpi_set_protocol_detection_bitmask2(ndpi_thread_info[thread_id].workflow->ndpi_struct, &all); // clear memory for results - memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter, 0, sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter)); - memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes, 0, sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes)); - memset(ndpi_thread_info[thread_id].workflow->stats.protocol_flows, 0, sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_flows)); + memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter, 0, + sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter)); + memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes, 0, + sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes)); + memset(ndpi_thread_info[thread_id].workflow->stats.protocol_flows, 0, + sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_flows)); if(_protoFilePath != NULL) ndpi_load_protocols_file(ndpi_thread_info[thread_id].workflow->ndpi_struct, _protoFilePath); @@ -1608,7 +1625,9 @@ static void json_open_stats_file() { static void json_close_stats_file() { json_object *jObjFinal = json_object_new_object(); - json_object_object_add(jObjFinal,"duration.in.seconds",json_object_new_int(pcap_analysis_duration)); + + json_object_object_add(jObjFinal,"duration.in.seconds", + json_object_new_int(pcap_analysis_duration)); json_object_object_add(jObjFinal,"statistics", jArray_topStats); fprintf(stats_fp,"%s\n",json_object_to_json_string(jObjFinal)); fclose(stats_fp); @@ -1910,8 +1929,10 @@ static void printResults(u_int64_t tot_usec) { continue; for(i=0; indpi_flows_root[i], node_proto_guess_walker, &thread_id); - if(verbose == 3 || stats_flag) ndpi_twalk(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[i], port_stats_walker, &thread_id); + ndpi_twalk(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[i], + node_proto_guess_walker, &thread_id); + if(verbose == 3 || stats_flag) ndpi_twalk(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[i], + port_stats_walker, &thread_id); } /* Stats aggregation */ @@ -2396,11 +2417,11 @@ static void pcap_process_packet(u_char *args, if(live_capture) { if(ndpi_thread_info[thread_id].last_idle_scan_time + IDLE_SCAN_PERIOD < ndpi_thread_info[thread_id].workflow->last_time) { /* scan for idle flows */ - ndpi_twalk(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[ndpi_thread_info[thread_id].idle_scan_idx], node_idle_scan_walker, &thread_id); + ndpi_twalk(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[ndpi_thread_info[thread_id].idle_scan_idx], + node_idle_scan_walker, &thread_id); /* remove idle flows (unfortunately we cannot do this inline) */ - while (ndpi_thread_info[thread_id].num_idle_flows > 0) { - + while(ndpi_thread_info[thread_id].num_idle_flows > 0) { /* search and delete the idle flow from the "ndpi_flow_root" (see struct reader thread) - here flows are the node of a b-tree */ ndpi_tdelete(ndpi_thread_info[thread_id].idle_flows[--ndpi_thread_info[thread_id].num_idle_flows], &ndpi_thread_info[thread_id].workflow->ndpi_flows_root[ndpi_thread_info[thread_id].idle_scan_idx], diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 358c0491cd9..3fefc8e4b52 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -346,6 +346,7 @@ extern "C" { * @par ndpi_struct = the detection module * @par string_to_match = the string to match * @par string_to_match_len = the length of the string + * @par ret_match = completed returned match information * @par is_host_match = value of the second field of struct ndpi_automa * @return the ID of the matched subprotocol * @@ -353,6 +354,7 @@ extern "C" { int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int8_t is_host_match); /** * Check if the host passed match with a protocol @@ -361,6 +363,7 @@ extern "C" { * @par flow = the flow where match the host * @par string_to_match = the string to match * @par string_to_match_len = the length of the string + * @par ret_match = completed returned match information * @par master_protocol_id = value of the ID associated to the master protocol detected * @return the ID of the matched subprotocol * @@ -369,6 +372,7 @@ extern "C" { struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int16_t master_protocol_id); @@ -379,6 +383,7 @@ extern "C" { * @par flow = the flow where match the host * @par string_to_match = the string to match * @par string_to_match_len = the length of the string + * @par ret_match = completed returned match information * @par master_protocol_id = value of the ID associated to the master protocol detected * @return the ID of the matched subprotocol * @@ -387,6 +392,7 @@ extern "C" { struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int16_t master_protocol_id); /** * Exclude protocol from search diff --git a/src/include/ndpi_main.h b/src/include/ndpi_main.h index b18efa21aad..3517d45b293 100644 --- a/src/include/ndpi_main.h +++ b/src/include/ndpi_main.h @@ -53,34 +53,55 @@ extern "C" { extern u_int8_t ndpi_ips_match(u_int32_t src, u_int32_t dst, u_int32_t net, u_int32_t num_bits); - u_int16_t ntohs_ndpi_bytestream_to_number(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); - - u_int32_t ndpi_bytestream_to_number(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); - u_int64_t ndpi_bytestream_to_number64(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); - u_int32_t ndpi_bytestream_dec_or_hex_to_number(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); - u_int64_t ndpi_bytestream_dec_or_hex_to_number64(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); - u_int32_t ndpi_bytestream_to_ipv4(const u_int8_t * str, u_int16_t max_chars_to_read, u_int16_t * bytes_read); + u_int16_t ntohs_ndpi_bytestream_to_number(const u_int8_t * str, + u_int16_t max_chars_to_read, + u_int16_t * bytes_read); + + u_int32_t ndpi_bytestream_to_number(const u_int8_t * str, u_int16_t max_chars_to_read, + u_int16_t * bytes_read); + u_int64_t ndpi_bytestream_to_number64(const u_int8_t * str, u_int16_t max_chars_to_read, + u_int16_t * bytes_read); + u_int32_t ndpi_bytestream_dec_or_hex_to_number(const u_int8_t * str, + u_int16_t max_chars_to_read, + u_int16_t * bytes_read); + u_int64_t ndpi_bytestream_dec_or_hex_to_number64(const u_int8_t * str, + u_int16_t max_chars_to_read, + u_int16_t * bytes_read); + u_int32_t ndpi_bytestream_to_ipv4(const u_int8_t * str, u_int16_t max_chars_to_read, + u_int16_t * bytes_read); void ndpi_set_detected_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, u_int16_t lower_detected_protocol); - extern void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); - extern void ndpi_parse_packet_line_info_any(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); + extern void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + extern void ndpi_parse_packet_line_info_any(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); - extern u_int16_t ndpi_check_for_email_address(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int16_t counter); + extern u_int16_t ndpi_check_for_email_address(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int16_t counter); - extern void ndpi_int_change_packet_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, + extern void ndpi_int_change_packet_protocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, u_int16_t lower_detected_protocol); - extern void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, + extern void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, u_int16_t lower_detected_protocol); - extern void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol_breed_t protoBreed, u_int16_t protoId, - u_int16_t tcp_alias_protoId[2], u_int16_t udp_alias_protoId[2], char *protoName, + extern void ndpi_int_change_category(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + ndpi_protocol_category_t protocol_category); + + extern void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, + ndpi_protocol_breed_t protoBreed, u_int16_t protoId, + u_int16_t tcp_alias_protoId[2], + u_int16_t udp_alias_protoId[2], char *protoName, ndpi_protocol_category_t protoCategory, - ndpi_port_range *tcpDefPorts, ndpi_port_range *udpDefPorts); + ndpi_port_range *tcpDefPorts, + ndpi_port_range *udpDefPorts); extern void ndpi_int_reset_packet_protocol(struct ndpi_packet_struct *packet); extern void ndpi_int_reset_protocol(struct ndpi_flow_struct *flow); @@ -90,8 +111,10 @@ extern "C" { extern void ndpi_packet_src_ip_get(const struct ndpi_packet_struct *packet, ndpi_ip_addr_t * ip); extern void ndpi_packet_dst_ip_get(const struct ndpi_packet_struct *packet, ndpi_ip_addr_t * ip); - extern char *ndpi_get_ip_string(struct ndpi_detection_module_struct *ndpi_struct, const ndpi_ip_addr_t * ip); - extern char *ndpi_get_packet_src_ip_string(struct ndpi_detection_module_struct *ndpi_struct, const struct ndpi_packet_struct *packet); + extern char *ndpi_get_ip_string(struct ndpi_detection_module_struct *ndpi_struct, + const ndpi_ip_addr_t * ip); + extern char *ndpi_get_packet_src_ip_string(struct ndpi_detection_module_struct *ndpi_struct, + const struct ndpi_packet_struct *packet); extern char* ndpi_get_proto_by_id(struct ndpi_detection_module_struct *ndpi_mod, u_int id); u_int16_t ndpi_get_proto_by_name(struct ndpi_detection_module_struct *ndpi_mod, const char *name); @@ -102,7 +125,8 @@ extern "C" { extern u_int8_t ndpi_is_proto(ndpi_protocol p, u_int16_t proto); extern u_int16_t ndpi_get_lower_proto(ndpi_protocol p); - extern int ndpi_get_protocol_id_master_proto(struct ndpi_detection_module_struct *ndpi_struct, u_int16_t protocol_id, + extern int ndpi_get_protocol_id_master_proto(struct ndpi_detection_module_struct *ndpi_struct, + u_int16_t protocol_id, u_int16_t** tcp_master_proto, u_int16_t** udp_master_proto); #/* NDPI_PROTOCOL_NETBIOS */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 24407404490..3d0eccab7f8 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -1099,8 +1099,9 @@ struct ndpi_flow_struct { /* protocols which have marked a connection as this connection cannot be protocol XXX, multiple u_int64_t */ NDPI_PROTOCOL_BITMASK excluded_protocol_bitmask; - + ndpi_protocol_category_t category; + /* NDPI_PROTOCOL_REDIS */ u_int8_t redis_s2d_first_char, redis_d2s_first_char; @@ -1207,4 +1208,10 @@ typedef struct { u_int8_t value; } ndpi_network; +typedef struct { + int protocol_id; + ndpi_protocol_category_t protocol_category; + ndpi_protocol_breed_t protocol_breed; +} ndpi_protocol_match_result; + #endif /* __NDPI_TYPEDEFS_H__ */ diff --git a/src/lib/Makefile b/src/lib/Makefile index c9f3179311e..19c6f1cfe30 100644 --- a/src/lib/Makefile +++ b/src/lib/Makefile @@ -6,7 +6,7 @@ # make -f Makefile.simple # CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g -RANLIB=ranlib +RANLIB = ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o HEADERS = $(wildcard ../include/*.h) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 494c93bd0d2..952026ce6ae 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -413,15 +413,13 @@ u_int32_t ndpi_detection_get_sizeof_ndpi_id_struct(void) { return sizeof(struct /* *********************************************************************************** */ -char * ndpi_get_proto_by_id(struct ndpi_detection_module_struct *ndpi_mod, u_int id) -{ +char * ndpi_get_proto_by_id(struct ndpi_detection_module_struct *ndpi_mod, u_int id) { return((id >= ndpi_mod->ndpi_num_supported_protocols) ? NULL : ndpi_mod->proto_defaults[id].protoName); } /* *********************************************************************************** */ -u_int16_t ndpi_get_proto_by_name(struct ndpi_detection_module_struct *ndpi_mod, const char *name) -{ +u_int16_t ndpi_get_proto_by_name(struct ndpi_detection_module_struct *ndpi_mod, const char *name) { u_int16_t i, num = ndpi_get_num_supported_protocols(ndpi_mod); for(i = 0; i < num; i++) @@ -438,8 +436,7 @@ ndpi_port_range * ndpi_build_default_ports_range(ndpi_port_range *ports, u_int16_t portB_low, u_int16_t portB_high, u_int16_t portC_low, u_int16_t portC_high, u_int16_t portD_low, u_int16_t portD_high, - u_int16_t portE_low, u_int16_t portE_high) -{ + u_int16_t portE_low, u_int16_t portE_high) { int i = 0; ports[i].port_low = portA_low, ports[i].port_high = portA_high; i++; @@ -458,8 +455,7 @@ ndpi_port_range * ndpi_build_default_ports(ndpi_port_range *ports, u_int16_t portB, u_int16_t portC, u_int16_t portD, - u_int16_t portE) -{ + u_int16_t portE) { int i = 0; ports[i].port_low = portA, ports[i].port_high = portA; i++; @@ -753,8 +749,7 @@ static int ndpi_remove_host_url_subprotocol(struct ndpi_detection_module_struct /* ******************************************************************** */ void ndpi_init_protocol_match(struct ndpi_detection_module_struct *ndpi_mod, - ndpi_protocol_match *match) -{ + ndpi_protocol_match *match) { u_int16_t no_master[2] = { NDPI_PROTOCOL_NO_MASTER_PROTO, NDPI_PROTOCOL_NO_MASTER_PROTO }; ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; static u_int16_t generic_id = NDPI_LAST_IMPLEMENTED_PROTOCOL; @@ -2634,7 +2629,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, else removeDefaultPort(&range, def, is_tcp ? &ndpi_mod->tcpRoot : &ndpi_mod->udpRoot); } else if(is_ip) { -/* NDPI_PROTOCOL_TOR */ + /* NDPI_PROTOCOL_TOR */ ndpi_add_host_ip_subprotocol(ndpi_mod, value, subprotocol_id); } else { if(do_add) @@ -4172,6 +4167,11 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, ndpi_protocol *ret) { + if(flow->category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) { + ret->category = flow->category; + return; + } + if(ndpi_struct->custom_categories.categories_loaded) { if(flow->packet.iph) { prefix_t prefix; @@ -4189,7 +4189,7 @@ void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struc } if(node) { - ret->category = (ndpi_protocol_category_t)node->value.user_value; + flow->category = ret->category = (ndpi_protocol_category_t)node->value.user_value; return; } } @@ -4199,7 +4199,7 @@ void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struc int rc = ndpi_match_custom_category(ndpi_struct, (char *)flow->host_server_name, &id); if(rc == 0) { - ret->category = (ndpi_protocol_category_t)id; + flow->category = ret->category = (ndpi_protocol_category_t)id; return; } } @@ -4209,13 +4209,13 @@ void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struc int rc = ndpi_match_custom_category(ndpi_struct, (char *)flow->protos.stun_ssl.ssl.server_certificate, &id); if(rc == 0) { - ret->category = (ndpi_protocol_category_t)id; + flow->category = ret->category = (ndpi_protocol_category_t)id; return; } } } - ret->category = ndpi_get_proto_category(ndpi_struct, *ret); + flow->category = ret->category = ndpi_get_proto_category(ndpi_struct, *ret); } /* ********************************************************************************* */ @@ -4347,6 +4347,19 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct if(flow->guessed_host_protocol_id >= (NDPI_MAX_SUPPORTED_PROTOCOLS-1)) { /* This is a custom protocol and it has priority over everything else */ ret.master_protocol = NDPI_PROTOCOL_UNKNOWN, ret.app_protocol = flow->guessed_host_protocol_id; + + if(flow->packet.tcp) { + /* Minimal guess for HTTP/SSL-based protocols */ + switch(ntohs(flow->packet.tcp->dest)) { + case 80: + ret.master_protocol = NDPI_PROTOCOL_HTTP; + break; + case 443: + ret.master_protocol = NDPI_PROTOCOL_SSL; /* QUIC could also match */ + break; + } + } + ndpi_check_flow_func(ndpi_struct, flow, &ndpi_selection_packet); ndpi_fill_protocol_category(ndpi_struct, flow, &ret); return(ret); @@ -4921,10 +4934,11 @@ void ndpi_debug_get_last_log_function_line(struct ndpi_detection_module_struct /* ********************************************************************************* */ -u_int8_t ndpi_detection_get_l4(const u_int8_t * l3, u_int16_t l3_len, const u_int8_t ** l4_return, u_int16_t * l4_len_return, - u_int8_t * l4_protocol_return, u_int32_t flags) -{ - return ndpi_detection_get_l4_internal(NULL, l3, l3_len, l4_return, l4_len_return, l4_protocol_return, flags); +u_int8_t ndpi_detection_get_l4(const u_int8_t * l3, u_int16_t l3_len, + const u_int8_t ** l4_return, u_int16_t * l4_len_return, + u_int8_t * l4_protocol_return, u_int32_t flags) { + return ndpi_detection_get_l4_internal(NULL, l3, l3_len, + l4_return, l4_len_return, l4_protocol_return, flags); } /* ********************************************************************************* */ @@ -4932,8 +4946,7 @@ u_int8_t ndpi_detection_get_l4(const u_int8_t * l3, u_int16_t l3_len, const u_in void ndpi_set_detected_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, - u_int16_t lower_detected_protocol) -{ + u_int16_t lower_detected_protocol) { struct ndpi_id_struct *src = flow->src; struct ndpi_id_struct *dst = flow->dst; @@ -4969,7 +4982,8 @@ void ndpi_int_change_flow_protocol(struct ndpi_detection_module_struct *ndpi_str u_int16_t lower_detected_protocol) { if(!flow) return; - flow->detected_protocol_stack[0] = upper_detected_protocol, flow->detected_protocol_stack[1] = lower_detected_protocol; + flow->detected_protocol_stack[0] = upper_detected_protocol, + flow->detected_protocol_stack[1] = lower_detected_protocol; } /* ********************************************************************************* */ @@ -5018,6 +5032,14 @@ void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, /* ********************************************************************************* */ +void ndpi_int_change_category(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + ndpi_protocol_category_t protocol_category) { + flow->category = protocol_category; +} + +/* ********************************************************************************* */ + /* change protocol only if guessing is active */ /* void ndpi_guess_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, */ /* struct ndpi_flow_struct *flow) */ @@ -5600,22 +5622,29 @@ int ndpi_match_prefix(const u_int8_t *payload, size_t payload_len, int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int8_t is_host_match) { - AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; AC_TEXT_t ac_input_text; - ndpi_automa *automa = is_host_match ? &ndpi_struct->host_automa : &ndpi_struct->content_automa; - - if((automa->ac_automa == NULL) || (string_to_match_len == 0)) return(NDPI_PROTOCOL_UNKNOWN); + ndpi_automa *automa = is_host_match ? &ndpi_struct->host_automa : + &ndpi_struct->content_automa; + AC_REP_t match = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_UNRATED }; + + if((automa->ac_automa == NULL) || (string_to_match_len == 0)) + return(NDPI_PROTOCOL_UNKNOWN); if(!automa->ac_automa_finalized) { ac_automata_finalize((AC_AUTOMATA_t*)automa->ac_automa); automa->ac_automa_finalized = 1; } - + ac_input_text.astring = string_to_match, ac_input_text.length = string_to_match_len; ac_automata_search(((AC_AUTOMATA_t*)automa->ac_automa), &ac_input_text, &match); ac_automata_reset(((AC_AUTOMATA_t*)automa->ac_automa)); - + + ret_match->protocol_id = match.number, + ret_match->protocol_category = match.category, + ret_match->protocol_breed = match.breed; + return(match.number); } @@ -5627,10 +5656,15 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, u_int16_t master_protocol_id, + ndpi_protocol_match_result *ret_match, u_int8_t is_host_match) { - int matching_protocol_id = ndpi_match_string_subprotocol(ndpi_struct, string_to_match, string_to_match_len, is_host_match); + int matching_protocol_id; struct ndpi_packet_struct *packet = &flow->packet; + matching_protocol_id = ndpi_match_string_subprotocol(ndpi_struct, string_to_match, + string_to_match_len, ret_match, + is_host_match); + #ifdef DEBUG { char m[256]; @@ -5650,8 +5684,9 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str packet->detected_protocol_stack[0] = matching_protocol_id; flow->detected_protocol_stack[0] = packet->detected_protocol_stack[0], - flow->detected_protocol_stack[1] = packet->detected_protocol_stack[1]; - + flow->detected_protocol_stack[1] = packet->detected_protocol_stack[1], + flow->category = ret_match->protocol_category; + return(packet->detected_protocol_stack[0]); } @@ -5679,10 +5714,15 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, u_int16_t master_protocol_id, + ndpi_automa_match_string_subprotocol *ret_match, u_int8_t is_host_match) { int rv = NDPI_PROTOCOL_UNKNOWN; struct hs *hs = (struct hs*)ndpi_struct->hyperscan; + /* + TODO HYPERSCAN + In case of match fill up ret_match and set flow protocol + category + */ if(hs_scan(hs->database, string_to_match, string_to_match_len, 0, hs->scratch, hyperscanEventHandler, &rv) != HS_SUCCESS) @@ -5698,10 +5738,11 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str int ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int16_t master_protocol_id) { return(ndpi_automa_match_string_subprotocol(ndpi_struct, flow, string_to_match, string_to_match_len, - master_protocol_id, 1)); + master_protocol_id, ret_match, 1)); } /* ****************************************************** */ @@ -5709,10 +5750,11 @@ int ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_struct int ndpi_match_content_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, + ndpi_protocol_match_result *ret_match, u_int16_t master_protocol_id) { return(ndpi_automa_match_string_subprotocol(ndpi_struct, flow, string_to_match, string_to_match_len, - master_protocol_id, 0)); + master_protocol_id, ret_match, 0)); } /* ****************************************************** */ diff --git a/src/lib/protocols/dns.c b/src/lib/protocols/dns.c index 6ffa74a277a..90be9544c9c 100644 --- a/src/lib/protocols/dns.c +++ b/src/lib/protocols/dns.c @@ -207,12 +207,16 @@ void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, struct nd flow->protos.dns.num_queries = (u_int8_t)dns_header.num_queries, flow->protos.dns.num_answers = (u_int8_t) (dns_header.num_answers + dns_header.authority_rrs + dns_header.additional_rrs); - if(j > 0) + if(j > 0) { + ndpi_protocol_match_result ret_match; + ndpi_match_host_subprotocol(ndpi_struct, flow, (char *)flow->host_server_name, strlen((const char*)flow->host_server_name), + &ret_match, NDPI_PROTOCOL_DNS); - + } + #ifdef DNS_DEBUG NDPI_LOG_DBG2(ndpi_struct, "[num_queries=%d][num_answers=%d][reply_code=%u][rsp_type=%u][host_server_name=%s]\n", flow->protos.dns.num_queries, flow->protos.dns.num_answers, diff --git a/src/lib/protocols/fbzero.c b/src/lib/protocols/fbzero.c index 3048bff7978..6c818e3c7fa 100644 --- a/src/lib/protocols/fbzero.c +++ b/src/lib/protocols/fbzero.c @@ -84,7 +84,8 @@ void ndpi_search_fbzero(struct ndpi_detection_module_struct *ndpi_struct, && (t->tag[2] == 'I') && (t->tag[3] == '\0')) { char *value = (char*)&packet->payload[data_offset + data_prev_offset]; u_int tag_len = t->tag_offset_len-data_prev_offset, max_len; - + ndpi_protocol_match_result ret_match; + max_len = ndpi_min(tag_len, sizeof(flow->host_server_name)-1); strncpy((char*)flow->host_server_name, value, max_len); @@ -99,6 +100,7 @@ void ndpi_search_fbzero(struct ndpi_detection_module_struct *ndpi_struct, ndpi_match_host_subprotocol(ndpi_struct, flow, (char *)flow->host_server_name, strlen((const char *)flow->host_server_name), + &ret_match, NDPI_PROTOCOL_FBZERO); return; } diff --git a/src/lib/protocols/http.c b/src/lib/protocols/http.c index e03b48710a7..94d918e76e7 100644 --- a/src/lib/protocols/http.c +++ b/src/lib/protocols/http.c @@ -172,7 +172,8 @@ static void setHttpUserAgent(struct ndpi_detection_module_struct *ndpi_struct, static void parseHttpSubprotocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { if((flow->l4.tcp.http_stage == 0) || (flow->http.url && flow->http_detected)) { char *double_col = strchr((char*)flow->host_server_name, ':'); - + ndpi_protocol_match_result ret_match; + if(double_col) double_col[0] = '\0'; /** @@ -182,6 +183,7 @@ static void parseHttpSubprotocol(struct ndpi_detection_module_struct *ndpi_struc */ ndpi_match_host_subprotocol(ndpi_struct, flow, (char *)flow->host_server_name, strlen((const char *)flow->host_server_name), + &ret_match, NDPI_PROTOCOL_HTTP); } } @@ -349,12 +351,16 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ packet->host_line.len, packet->host_line.ptr); /* call ndpi_match_host_subprotocol to see if there is a match with known-host HTTP subprotocol */ - if((ndpi_struct->http_dont_dissect_response) || flow->http_detected) + if((ndpi_struct->http_dont_dissect_response) || flow->http_detected) { + ndpi_protocol_match_result ret_match; + ndpi_match_host_subprotocol(ndpi_struct, flow, (char*)packet->host_line.ptr, packet->host_line.len, + &ret_match, NDPI_PROTOCOL_HTTP); - + } + /* Copy result for nDPI apps */ if(!ndpi_struct->disable_metadata_export) { len = ndpi_min(packet->host_line.len, sizeof(flow->host_server_name)-1); @@ -395,12 +401,16 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) && ((ndpi_struct->http_dont_dissect_response) || flow->http_detected) - && (packet->http_origin.len > 0)) + && (packet->http_origin.len > 0)) { + ndpi_protocol_match_result ret_match; + ndpi_match_host_subprotocol(ndpi_struct, flow, (char *)packet->http_origin.ptr, packet->http_origin.len, + &ret_match, NDPI_PROTOCOL_HTTP); - + } + if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_UNKNOWN) { if(packet->detected_protocol_stack[0] != NDPI_PROTOCOL_HTTP) { NDPI_LOG_INFO(ndpi_struct, "found HTTP/%s\n", @@ -440,10 +450,13 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ NDPI_LOG_DBG2(ndpi_struct, "Content Type line found %.*s\n", packet->content_line.len, packet->content_line.ptr); - if((ndpi_struct->http_dont_dissect_response) || flow->http_detected) + if((ndpi_struct->http_dont_dissect_response) || flow->http_detected) { + ndpi_protocol_match_result ret_match; + ndpi_match_content_subprotocol(ndpi_struct, flow, (char*)packet->content_line.ptr, packet->content_line.len, - NDPI_PROTOCOL_HTTP); + &ret_match, NDPI_PROTOCOL_HTTP); + } } } diff --git a/src/lib/protocols/quic.c b/src/lib/protocols/quic.c index 4c838f41f35..e28db634ac8 100644 --- a/src/lib/protocols/quic.c +++ b/src/lib/protocols/quic.c @@ -107,6 +107,7 @@ void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, if((sni_offset+len) < udp_len) { if(!ndpi_struct->disable_metadata_export) { int max_len = sizeof(flow->host_server_name)-1, j = 0; + ndpi_protocol_match_result ret_match; if(len > max_len) len = max_len; @@ -118,6 +119,7 @@ void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, ndpi_match_host_subprotocol(ndpi_struct, flow, (char *)flow->host_server_name, strlen((const char*)flow->host_server_name), + &ret_match, NDPI_PROTOCOL_QUIC); } } diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index a277f81209a..b8c36976b6b 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -327,13 +327,13 @@ int sslTryAndRetrieveServerCertificate(struct ndpi_detection_module_struct *ndpi } /* Client hello, Server Hello, and certificate packets probably all checked in this case */ if ((packet->ssl_certificate_num_checks >= 3) - && (flow->l4.tcp.seen_syn) - && (flow->l4.tcp.seen_syn_ack) - && (flow->l4.tcp.seen_ack) /* We have seen the 3-way handshake */) - { - /* We're done processing extra packets since we've probably checked all possible cert packets */ - return 0; - } + && (flow->l4.tcp.seen_syn) + && (flow->l4.tcp.seen_syn_ack) + && (flow->l4.tcp.seen_ack) /* We have seen the 3-way handshake */) + { + /* We're done processing extra packets since we've probably checked all possible cert packets */ + return 0; + } } /* 1 means keep looking for more packets */ return 1; @@ -368,22 +368,27 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s #ifdef CERTIFICATE_DEBUG NDPI_LOG_DBG2(ndpi_struct, "***** [SSL] %s\n", certificate); #endif + ndpi_protocol_match_result ret_match; u_int32_t subproto = ndpi_match_host_subprotocol(ndpi_struct, flow, certificate, - strlen(certificate), NDPI_PROTOCOL_SSL); + strlen(certificate), + &ret_match, + NDPI_PROTOCOL_SSL); + if(subproto != NDPI_PROTOCOL_UNKNOWN) { - /* If we've detected the subprotocol from client certificate but haven't had a chance - * to see the server certificate yet, set up extra packet processing to wait - * a few more packets. */ - if((flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') && (flow->protos.stun_ssl.ssl.server_certificate[0] == '\0')) { - sslInitExtraPacketProcessing(0, flow); - } - ndpi_set_detected_protocol(ndpi_struct, flow, subproto, - ndpi_ssl_refine_master_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL)); - return(rc); /* Fix courtesy of Gianluca Costa */ - } + /* If we've detected the subprotocol from client certificate but haven't had a chance + * to see the server certificate yet, set up extra packet processing to wait + * a few more packets. */ + if((flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') && (flow->protos.stun_ssl.ssl.server_certificate[0] == '\0')) { + sslInitExtraPacketProcessing(0, flow); + } + + ndpi_set_detected_protocol(ndpi_struct, flow, subproto, + ndpi_ssl_refine_master_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL)); + return(rc); /* Fix courtesy of Gianluca Costa */ + } - if(ndpi_is_ssl_tor(ndpi_struct, flow, certificate) != 0) - return(rc); + if(ndpi_is_ssl_tor(ndpi_struct, flow, certificate) != 0) + return(rc); } if(((packet->ssl_certificate_num_checks >= 2) @@ -394,9 +399,9 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s /* || (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') */ ) { ndpi_int_ssl_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_SSL); - } + } + } } - } return(0); } @@ -480,7 +485,7 @@ static void ssl_mark_and_payload_search_for_other_protocols(struct ndpi_int_ssl_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_SSL_NO_CERT); } else NDPI_LOG_INFO(ndpi_struct, "found ssl\n"); - ndpi_int_ssl_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_SSL); + ndpi_int_ssl_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_SSL); } } @@ -516,16 +521,16 @@ static u_int8_t ndpi_search_sslv3_direction1(struct ndpi_detection_module_struct u_int32_t cert_start; NDPI_LOG_DBG2(ndpi_struct, - "maybe SSLv3 server hello split into smaller packets\n"); + "maybe SSLv3 server hello split into smaller packets\n"); /* lets hope at least the server hello and the start of the certificate block are in the first packet */ cert_start = ntohs(get_u_int16_t(packet->payload, 7)) + 5 + 4; NDPI_LOG_DBG2(ndpi_struct, "suspected start of certificate: %u\n", - cert_start); + cert_start); if(cert_start < packet->payload_packet_len && packet->payload[cert_start] == 0x0b) { NDPI_LOG_DBG2(ndpi_struct, - "found 0x0b at suspected start of certificate block\n"); + "found 0x0b at suspected start of certificate block\n"); return 2; } } @@ -536,16 +541,16 @@ static u_int8_t ndpi_search_sslv3_direction1(struct ndpi_detection_module_struct u_int32_t cert_start; NDPI_LOG_DBG2(ndpi_struct, - "maybe SSLv3 server hello split into smaller packets but with seperate record for the certificate\n"); + "maybe SSLv3 server hello split into smaller packets but with seperate record for the certificate\n"); /* lets hope at least the server hello record and the start of the certificate record are in the first packet */ cert_start = ntohs(get_u_int16_t(packet->payload, 7)) + 5 + 5 + 4; NDPI_LOG_DBG2(ndpi_struct, "suspected start of certificate: %u\n", - cert_start); + cert_start); if(cert_start < packet->payload_packet_len && packet->payload[cert_start] == 0x0b) { NDPI_LOG_DBG2(ndpi_struct, - "found 0x0b at suspected start of certificate block\n"); + "found 0x0b at suspected start of certificate block\n"); return 2; } } @@ -603,7 +608,7 @@ void ndpi_search_ssl_tcp(struct ndpi_detection_module_struct *ndpi_struct, struc * so go on checking for certificate patterns for a couple more packets */ NDPI_LOG_DBG2(ndpi_struct, - "ssl flow but check another packet for patterns\n"); + "ssl flow but check another packet for patterns\n"); ssl_mark_and_payload_search_for_other_protocols(ndpi_struct, flow); if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) { /* still ssl so check another packet */ @@ -685,7 +690,7 @@ void ndpi_search_ssl_tcp(struct ndpi_detection_module_struct *ndpi_struct, struc return; } else if(ret == 2) { NDPI_LOG_DBG2(ndpi_struct, - "sslv3 server len match with split packet -> check some more packets for SSL patterns\n"); + "sslv3 server len match with split packet -> check some more packets for SSL patterns\n"); ssl_mark_and_payload_search_for_other_protocols(ndpi_struct, flow); if(packet->detected_protocol_stack[0] == NDPI_PROTOCOL_SSL) { flow->l4.tcp.ssl_stage = 3; diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index 5b3c3e7ce3f..a8259c514c1 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -23,11 +23,11 @@ GenericProtocol 1429 1780307 49 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Web/5][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Web/5][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] diff --git a/tests/result/webex.pcap.out b/tests/result/webex.pcap.out index fbf34191805..ecd0f6432b9 100644 --- a/tests/result/webex.pcap.out +++ b/tests/result/webex.pcap.out @@ -6,36 +6,36 @@ Google 17 6375 1 Webex 1380 818407 43 Amazon 3 174 1 - 1 TCP 10.8.0.1:51155 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][256 pkts/14707 bytes <-> 257 pkts/329379 bytes][server: *.webex.com] - 2 TCP 10.8.0.1:41348 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][28 pkts/4815 bytes <-> 28 pkts/104881 bytes][client: radcom.webex.com] - 3 TCP 10.8.0.1:41346 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][48 pkts/11540 bytes <-> 47 pkts/80696 bytes][client: radcom.webex.com][server: *.webex.com] - 4 TCP 10.8.0.1:41358 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][19 pkts/2005 bytes <-> 19 pkts/40477 bytes][server: *.webex.com] - 5 TCP 10.8.0.1:51194 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][12 pkts/1531 bytes <-> 12 pkts/34357 bytes][server: *.webex.com] - 6 TCP 10.8.0.1:41354 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][13 pkts/2145 bytes <-> 13 pkts/24239 bytes][server: *.webex.com] - 7 TCP 10.8.0.1:51154 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][55 pkts/12583 bytes <-> 50 pkts/6703 bytes][server: *.webex.com] + 1 TCP 10.8.0.1:51155 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][256 pkts/14707 bytes <-> 257 pkts/329379 bytes][server: *.webex.com] + 2 TCP 10.8.0.1:41348 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][28 pkts/4815 bytes <-> 28 pkts/104881 bytes][client: radcom.webex.com] + 3 TCP 10.8.0.1:41346 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][48 pkts/11540 bytes <-> 47 pkts/80696 bytes][client: radcom.webex.com][server: *.webex.com] + 4 TCP 10.8.0.1:41358 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][19 pkts/2005 bytes <-> 19 pkts/40477 bytes][server: *.webex.com] + 5 TCP 10.8.0.1:51194 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][12 pkts/1531 bytes <-> 12 pkts/34357 bytes][server: *.webex.com] + 6 TCP 10.8.0.1:41354 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][13 pkts/2145 bytes <-> 13 pkts/24239 bytes][server: *.webex.com] + 7 TCP 10.8.0.1:51154 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][55 pkts/12583 bytes <-> 50 pkts/6703 bytes][server: *.webex.com] 8 UDP 10.8.0.1:64538 -> 172.16.1.75:5060 [proto: 100/SIP][cat: VoIP/10][22 pkts/15356 bytes -> 0 pkts/0 bytes] - 9 TCP 10.8.0.1:51857 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][29 pkts/4559 bytes <-> 21 pkts/5801 bytes][server: *.webex.com] + 9 TCP 10.8.0.1:51857 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][29 pkts/4559 bytes <-> 21 pkts/5801 bytes][server: *.webex.com] 10 TCP 10.8.0.1:46211 <-> 54.241.32.14:443 [proto: 91/SSL][cat: Web/5][16 pkts/1984 bytes <-> 14 pkts/7584 bytes][client: api.crittercism.com][server: *.crittercism.com] - 11 TCP 10.8.0.1:41386 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1417 bytes <-> 8 pkts/6984 bytes][server: *.webex.com] - 12 TCP 10.8.0.1:41419 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1309 bytes <-> 7 pkts/6930 bytes][server: *.webex.com] - 13 TCP 10.8.0.1:52730 <-> 173.243.4.76:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 8 pkts/6621 bytes][server: *.webex.com] - 14 TCP 10.8.0.1:44492 <-> 64.68.104.140:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 8 pkts/6600 bytes][server: *.webex.com] - 15 TCP 10.8.0.1:45814 <-> 62.109.231.3:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/1315 bytes <-> 8 pkts/6653 bytes][server: *.webex.com] - 16 TCP 10.8.0.1:47498 <-> 209.197.222.159:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] - 17 TCP 10.8.0.1:57647 <-> 64.68.121.153:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] - 18 TCP 10.8.0.1:37129 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/1369 bytes <-> 9 pkts/5838 bytes][server: *.webex.com] - 19 TCP 10.8.0.1:51370 <-> 64.68.105.97:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/1315 bytes <-> 8 pkts/5784 bytes][server: *.webex.com] - 20 TCP 10.8.0.1:55669 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1830 bytes <-> 12 pkts/4811 bytes][server: *.webex.com] - 21 TCP 10.8.0.1:55665 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] - 22 TCP 10.8.0.1:55671 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] - 23 TCP 10.8.0.1:55687 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 11 TCP 10.8.0.1:41386 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1417 bytes <-> 8 pkts/6984 bytes][server: *.webex.com] + 12 TCP 10.8.0.1:41419 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/1309 bytes <-> 7 pkts/6930 bytes][server: *.webex.com] + 13 TCP 10.8.0.1:52730 <-> 173.243.4.76:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1369 bytes <-> 8 pkts/6621 bytes][server: *.webex.com] + 14 TCP 10.8.0.1:44492 <-> 64.68.104.140:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1369 bytes <-> 8 pkts/6600 bytes][server: *.webex.com] + 15 TCP 10.8.0.1:45814 <-> 62.109.231.3:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][8 pkts/1315 bytes <-> 8 pkts/6653 bytes][server: *.webex.com] + 16 TCP 10.8.0.1:47498 <-> 209.197.222.159:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] + 17 TCP 10.8.0.1:57647 <-> 64.68.121.153:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/1261 bytes <-> 7 pkts/6535 bytes][server: *.webex.com] + 18 TCP 10.8.0.1:37129 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1369 bytes <-> 9 pkts/5838 bytes][server: *.webex.com] + 19 TCP 10.8.0.1:51370 <-> 64.68.105.97:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][8 pkts/1315 bytes <-> 8 pkts/5784 bytes][server: *.webex.com] + 20 TCP 10.8.0.1:55669 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][11 pkts/1830 bytes <-> 12 pkts/4811 bytes][server: *.webex.com] + 21 TCP 10.8.0.1:55665 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 22 TCP 10.8.0.1:55671 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] + 23 TCP 10.8.0.1:55687 <-> 173.243.0.110:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][11 pkts/1798 bytes <-> 11 pkts/4757 bytes][server: *.webex.com] 24 TCP 10.8.0.1:43433 <-> 216.58.208.40:443 [proto: 91.126/SSL.Google][cat: Web/5][9 pkts/1540 bytes <-> 8 pkts/4835 bytes][client: ssl.google-analytics.com][server: *.google-analytics.com] - 25 TCP 10.8.0.1:51646 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][9 pkts/895 bytes <-> 8 pkts/4398 bytes][server: *.webex.com] - 26 TCP 10.8.0.1:52219 <-> 64.68.121.100:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] - 27 TCP 10.8.0.1:55969 <-> 64.68.121.99:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] - 28 TCP 10.8.0.1:49048 <-> 23.44.253.243:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/1181 bytes <-> 7 pkts/4021 bytes][server: www.webex.com] - 29 TCP 10.8.0.1:47116 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][7 pkts/461 bytes <-> 6 pkts/4231 bytes][server: *.webex.com] - 30 TCP 10.8.0.1:47841 <-> 114.29.200.11:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][6 pkts/407 bytes <-> 5 pkts/4177 bytes][server: *.webex.com] + 25 TCP 10.8.0.1:51646 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/895 bytes <-> 8 pkts/4398 bytes][server: *.webex.com] + 26 TCP 10.8.0.1:52219 <-> 64.68.121.100:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] + 27 TCP 10.8.0.1:55969 <-> 64.68.121.99:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][8 pkts/841 bytes <-> 7 pkts/4376 bytes][server: *.webex.com] + 28 TCP 10.8.0.1:49048 <-> 23.44.253.243:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/1181 bytes <-> 7 pkts/4021 bytes][server: www.webex.com] + 29 TCP 10.8.0.1:47116 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/461 bytes <-> 6 pkts/4231 bytes][server: *.webex.com] + 30 TCP 10.8.0.1:47841 <-> 114.29.200.11:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/407 bytes <-> 5 pkts/4177 bytes][server: *.webex.com] 31 TCP 10.8.0.1:33551 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][10 pkts/1465 bytes <-> 11 pkts/1065 bytes] 32 TCP 10.8.0.1:33553 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][10 pkts/1388 bytes <-> 10 pkts/1087 bytes] 33 TCP 10.8.0.1:33512 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][9 pkts/1357 bytes <-> 9 pkts/615 bytes] @@ -44,8 +44,8 @@ Amazon 3 174 1 36 TCP 10.8.0.1:33559 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][7 pkts/1280 bytes <-> 6 pkts/453 bytes] 37 TCP 10.8.0.1:59757 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web/5][5 pkts/624 bytes <-> 5 pkts/767 bytes][Host: cp.pushwoosh.com] 38 UDP 10.8.0.1:51772 <-> 62.109.229.158:9000 [proto: 141/Webex][14 pkts/1071 bytes <-> 2 pkts/100 bytes] - 39 TCP 10.8.0.1:41350 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][6 pkts/614 bytes <-> 5 pkts/399 bytes][client: radcom.webex.com] - 40 TCP 10.8.0.1:41351 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: Collaborative/15][5 pkts/560 bytes <-> 4 pkts/345 bytes][client: radcom.webex.com] + 39 TCP 10.8.0.1:41350 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/614 bytes <-> 5 pkts/399 bytes][client: radcom.webex.com] + 40 TCP 10.8.0.1:41351 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][5 pkts/560 bytes <-> 4 pkts/345 bytes][client: radcom.webex.com] 41 TCP 10.8.0.1:51190 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][7 pkts/501 bytes <-> 4 pkts/216 bytes] 42 TCP 10.8.0.1:37139 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] 43 TCP 10.8.0.1:41394 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] diff --git a/tests/result/whatsappfiles.pcap.out b/tests/result/whatsappfiles.pcap.out index e6e8f0fa766..40d4fa391e1 100644 --- a/tests/result/whatsappfiles.pcap.out +++ b/tests/result/whatsappfiles.pcap.out @@ -1,4 +1,4 @@ WhatsAppFiles 620 452233 2 - 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][132 pkts/9906 bytes <-> 178 pkts/237405 bytes] - 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 242/WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][161 pkts/189194 bytes <-> 149 pkts/15728 bytes] + 1 TCP 192.168.2.29:49698 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][132 pkts/9906 bytes <-> 178 pkts/237405 bytes] + 2 TCP 192.168.2.29:49674 <-> 185.60.216.53:443 [proto: 91.242/SSL.WhatsAppFiles][cat: Download-FileTransfer-FileSharing/7][161 pkts/189194 bytes <-> 149 pkts/15728 bytes] From 3091dc3c4880d3d51cc5a0df6004e941c24f9e28 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 16 Aug 2018 15:23:30 +0200 Subject: [PATCH 030/147] Fix for #400 --- src/include/ndpi_typedefs.h | 3 +++ src/lib/protocols/directconnect.c | 3 +-- src/lib/protocols/whatsapp.c | 23 ++++++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 3d0eccab7f8..1a9924d366c 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -475,6 +475,9 @@ struct ndpi_flow_tcp_struct { /* NDPI_PROTOCOL_QQ */ u_int16_t qq_nxt_len; + /* NDPI_PROTOCOL_WHATSAPP */ + u_int8_t wa_matched_so_far; + /* NDPI_PROTOCOL_TDS */ u_int8_t tds_login_version; diff --git a/src/lib/protocols/directconnect.c b/src/lib/protocols/directconnect.c index 6072c369772..5088685e4a2 100644 --- a/src/lib/protocols/directconnect.c +++ b/src/lib/protocols/directconnect.c @@ -78,8 +78,7 @@ static void ndpi_int_directconnect_add_connection(struct ndpi_detection_module_s const u_int8_t connection_type) { - struct ndpi_packet_struct *packet = &flow->packet; - + struct ndpi_packet_struct *packet = &flow->packet; struct ndpi_id_struct *src = flow->src; struct ndpi_id_struct *dst = flow->dst; diff --git a/src/lib/protocols/whatsapp.c b/src/lib/protocols/whatsapp.c index 6a98eac6b85..6964a8e0e2e 100644 --- a/src/lib/protocols/whatsapp.c +++ b/src/lib/protocols/whatsapp.c @@ -33,12 +33,30 @@ void ndpi_search_whatsapp(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search WhatsApp\n"); + if(flow->l4.tcp.wa_matched_so_far == 0) { + if(memcmp(packet->payload, whatsapp_sequence, packet->payload_packet_len)) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } else + flow->l4.tcp.wa_matched_so_far = packet->payload_packet_len; + + return; + } else { + if(memcmp(packet->payload, &whatsapp_sequence[flow->l4.tcp.wa_matched_so_far], + sizeof(whatsapp_sequence)-flow->l4.tcp.wa_matched_so_far)) + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + else + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_UNKNOWN); + + return; + } + if((packet->payload_packet_len > 240) && (memcmp(packet->payload, whatsapp_sequence, sizeof(whatsapp_sequence)) == 0)) { NDPI_LOG_INFO(ndpi_struct, "found WhatsApp\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_UNKNOWN); - } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + } + + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); } @@ -53,4 +71,3 @@ void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct, ADD_TO_DETECTION_BITMASK); *id += 1; } - From 7e41309fa997323b6d86a92368bc3f3ce6d8d86a Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Thu, 16 Aug 2018 15:43:35 +0200 Subject: [PATCH 031/147] Hyperscan compilation fix --- src/lib/ndpi_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 952026ce6ae..c61227a9f8c 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5714,7 +5714,7 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str struct ndpi_flow_struct *flow, char *string_to_match, u_int string_to_match_len, u_int16_t master_protocol_id, - ndpi_automa_match_string_subprotocol *ret_match, + ndpi_protocol_match_result *ret_match, u_int8_t is_host_match) { int rv = NDPI_PROTOCOL_UNKNOWN; struct hs *hs = (struct hs*)ndpi_struct->hyperscan; From 579f1b05dbc351f310cfbbb0ff01c0682bc7f4f0 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Thu, 16 Aug 2018 19:42:04 +0200 Subject: [PATCH 032/147] Adds hyperscan support for Apple and Dropbox --- src/lib/ndpi_content_match.c.inc | 87 +++++++++++++++++++------------- src/lib/ndpi_main.c | 86 ++++++++++++++++--------------- 2 files changed, 99 insertions(+), 74 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 64f1b5ee123..0d1e15ce0fd 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -7954,6 +7954,7 @@ static ndpi_network host_protocol_list[] = { { 0x0, 0, 0 } }; + /* ****************************************************** */ /* @@ -8006,44 +8007,62 @@ static ndpi_network host_protocol_list[] = { */ +/* ****************************************************** */ + +/* + +Each part of a domain name can be no longer than 63 characters. There are no single-digit top-level domains and none contain digits. It doesn't look like ICANN will approve such domains either. + +https://www.regular-expressions.info/email.html + +We also add an optional .co to match domains such as .co.uk + +(?i) is to make searches case insensitive +*/ + +#define TLD "(?i)(\\.co){0,1}\\.[a-z]{2,63}$" + +/* ****************************************************** */ + ndpi_protocol_match host_match[] = { - { "s3.ll.dash.row.aiv-cdn.net", NULL, "s3\\.ll\\.dash\\.row\\.aiv-cdn\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "s3.ll.dash.row.aiv-cdn.net", NULL, "s3\\.ll\\.dash\\.row\\.aiv-cdn\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { "s3-dub.cf.dash.row.aiv-cdn.net", NULL, "s3-dub\\.cf\\.dash\\.row\\.aiv-cdn\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "dmqdd6hw24ucf.cloudfront.net", NULL, "dmqdd6hw24ucf\\.cloudfront\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "d25xi40x97liuc.cloudfront.net", NULL, "d25xi40x97liuc\\.cloudfront\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".aiv-delivery.net", NULL, "\\.aiv-delivery\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "amazon.", NULL, NULL, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "amazon.com", NULL, "amazon\\.com$", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "images-amazon.com", NULL, "images-amazon\\.com$", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "amazonaws.com", NULL, "amazonaws\\.com$", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "amazon-adsystem.com", NULL, "amazon-adsystem\\.com$", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { ".cloudfront.net", NULL, "\\.cloudfront\\.net$", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".push.apple.com", NULL, NULL, "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE }, - { ".apple-dns.net", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".mzstatic.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".aaplimg.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "iosapps.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* iOS */ - { "osxapps.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* MacOS */ - { "buy.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "su.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "se.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "myapp.itunes.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "swscan.apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "itunes-apple.com", NULL, NULL, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "itunes.apple.com", NULL, NULL, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "tlnk.io", NULL, NULL, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "aaplimg.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { ".apple.com", NULL, NULL, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".icloud.com", NULL, NULL, "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".cnn.c", NULL, NULL, "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "dmqdd6hw24ucf.cloudfront.net", NULL, "dmqdd6hw24ucf\\.cloudfront\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "d25xi40x97liuc.cloudfront.net", NULL, "d25xi40x97liuc\\.cloudfront\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".aiv-delivery.net", NULL, "\\.aiv-delivery\\.net", "AmazonVideo", NDPI_PROTOCOL_AMAZON_VIDEO, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "amazon.", NULL, NULL, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "amazon.com", NULL, "amazon" TLD, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "images-amazon.com", NULL, "images-amazon" TLD, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "amazonaws.com", NULL, "amazonaws" TLD, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "amazon-adsystem.com", NULL, "amazon-adsystem" TLD, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".cloudfront.net", NULL, "\\.cloudfront" TLD, "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + + { ".push.apple.com", NULL, "\\.push\\.apple" TLD, "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE }, + { ".apple-dns.net", NULL, "\\.apple-dns" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".mzstatic.com", NULL, "\\.mzstatic" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".aaplimg.com", NULL, "\\.aaplimg" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "aaplimg.com", NULL, "aaplimg" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { ".apple.com", NULL, "\\.apple" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".icloud.com", NULL, "\\.icloud" TLD, "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "iosapps.itunes.apple.com", NULL, "iosapps\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* iOS */ + { "osxapps.itunes.apple.com", NULL, "osxapps\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* MacOS */ + { "buy.itunes.apple.com", NULL, "buy\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "su.itunes.apple.com", NULL, "su\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "se.itunes.apple.com", NULL, "se\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "myapp.itunes.apple.com", NULL, "myapp\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "swscan.apple.com", NULL, "swscan\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "itunes-apple.com", NULL, "itunes-apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "itunes.apple.com", NULL, "itunes\\.apple" TLD, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "tlnk.io", NULL, "tlnk" TLD, "AppleiTunes", NDPI_PROTOCOL_APPLE_ITUNES, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + + { ".cnn.c", NULL, "\\.cnn" TLD, "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".cnn.net", NULL, NULL, "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".dropbox.com", NULL, NULL, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { ".dropboxstatic.com", NULL, NULL, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { ".dropbox-dns.com", NULL, NULL, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { "log.getdropbox.com", NULL, NULL, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { ".dropbox.com", NULL, ".\\dropbox" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { ".dropboxstatic.com", NULL, "\\.dropboxstatic" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { ".dropbox-dns.com", NULL, "\\.dropbox-dns" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "log.getdropbox.com", NULL, "log\\.getdropbox" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { ".ebay.", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* or FUN */ { ".ebay.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index c61227a9f8c..85cd4b9ebdd 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5648,9 +5648,23 @@ int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_stru return(match.number); } -/* ****************************************************** */ +#ifdef HAVE_HYPERSCAN -#ifndef HAVE_HYPERSCAN +/* ******************************************************************** */ + +static int hyperscanEventHandler(unsigned int id, unsigned long long from, + unsigned long long to, unsigned int flags, void *ctx) { + *((int *)ctx) = (int)id; + + NDPI_LOG_DBG2(ndpi_struct, "[NDPI] Match with: %d [from: %llu][to: %llu]\n", id, from, to); + + /* return HS_SCAN_TERMINATED; */ + return 0; /* keep searching */ +} + +#endif + +/* ****************************************************** */ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, @@ -5658,13 +5672,40 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str u_int16_t master_protocol_id, ndpi_protocol_match_result *ret_match, u_int8_t is_host_match) { - int matching_protocol_id; + int matching_protocol_id = NDPI_PROTOCOL_UNKNOWN; struct ndpi_packet_struct *packet = &flow->packet; +#ifndef HAVE_HYPERSCAN matching_protocol_id = ndpi_match_string_subprotocol(ndpi_struct, string_to_match, string_to_match_len, ret_match, is_host_match); - + +#else + struct hs *hs = (struct hs*)ndpi_struct->hyperscan; + hs_error_t status; + /* + TODO HYPERSCAN + In case of match fill up ret_match and set flow protocol + category + */ + status = hs_scan(hs->database, string_to_match, + string_to_match_len, 0, hs->scratch, + hyperscanEventHandler, &matching_protocol_id); + + if(status == HS_SUCCESS) { + NDPI_LOG_DBG2(ndpi_struct, "[NDPI] Hyperscan engine completed normally. Result: %s [%d][%s]\n", + ndpi_get_proto_name(ndpi_struct, matching_protocol_id), matching_protocol_id, string_to_match); + } else if(status == HS_SCAN_TERMINATED) { + NDPI_LOG_DBG2(ndpi_struct, "[NDPI] Hyperscan engine was terminated by callback. Result: %s [%d][%s]\n", + ndpi_get_proto_name(ndpi_struct, matching_protocol_id), matching_protocol_id, string_to_match); + } else { + NDPI_LOG_DBG2(ndpi_struct, "[NDPI] Hyperscan returned with error.\n"); + } + + ret_match->protocol_id = matching_protocol_id, + ret_match->protocol_category = ndpi_struct->proto_defaults[matching_protocol_id].protoCategory, + ret_match->protocol_breed = ndpi_struct->proto_defaults[matching_protocol_id].protoBreed; +#endif + #ifdef DEBUG { char m[256]; @@ -5686,7 +5727,7 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str flow->detected_protocol_stack[0] = packet->detected_protocol_stack[0], flow->detected_protocol_stack[1] = packet->detected_protocol_stack[1], flow->category = ret_match->protocol_category; - + return(packet->detected_protocol_stack[0]); } @@ -5698,41 +5739,6 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str return(NDPI_PROTOCOL_UNKNOWN); } -#else - -/* ******************************************************************** */ - -static int hyperscanEventHandler(unsigned int id, unsigned long long from, - unsigned long long to, unsigned int flags, void *ctx) { - *((int *)ctx) = (int)id; - return HS_SCAN_TERMINATED; -} - -/* *********************************************** */ - -static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow, - char *string_to_match, u_int string_to_match_len, - u_int16_t master_protocol_id, - ndpi_protocol_match_result *ret_match, - u_int8_t is_host_match) { - int rv = NDPI_PROTOCOL_UNKNOWN; - struct hs *hs = (struct hs*)ndpi_struct->hyperscan; - - /* - TODO HYPERSCAN - In case of match fill up ret_match and set flow protocol + category - */ - if(hs_scan(hs->database, string_to_match, - string_to_match_len, 0, hs->scratch, - hyperscanEventHandler, &rv) != HS_SUCCESS) - NDPI_LOG_ERR(ndpi_struct, "[NDPI] Hyperscan match returned error\n"); - - return rv; -} - -#endif - /* ****************************************************** */ int ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_struct, From 06befec642103bb4b20be3ac9227fe42d92fde1b Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Thu, 16 Aug 2018 22:24:15 -0400 Subject: [PATCH 033/147] Remove autoconf include from typedefs headers. Including this file in any "public" API header breaks all projects that also use autotools because macros such as PACKAGE_VERSION will be redefined. Signed-off-by: Darryl Sokoloski --- src/include/ndpi_typedefs.h | 11 ----------- src/lib/ndpi_main.c | 8 ++++++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 1a9924d366c..44248dfb9ee 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -26,9 +26,6 @@ #include "ndpi_define.h" -/* Needed to have access to HAVE_* defines */ -#include "ndpi_config.h" - /* NDPI_LOG_LEVEL */ typedef enum { NDPI_LOG_ERROR, @@ -854,14 +851,6 @@ typedef struct ndpi_proto { #define NUM_CUSTOM_CATEGORIES 5 #define CUSTOM_CATEGORY_LABEL_LEN 32 -#ifdef HAVE_HYPERSCAN -struct hs_list { - char *expression; - unsigned int id; - struct hs_list *next; -}; -#endif - #ifdef NDPI_LIB_COMPILATION struct ndpi_detection_module_struct { diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 85cd4b9ebdd..8b99a9c95c0 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -48,9 +48,13 @@ #ifdef HAVE_HYPERSCAN #include -#endif -#ifdef HAVE_HYPERSCAN +struct hs_list { + char *expression; + unsigned int id; + struct hs_list *next; +}; + struct hs { hs_database_t *database; hs_scratch_t *scratch; From cd9d4569946055fc995a357d74e2fb67bf1e1f8c Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Thu, 16 Aug 2018 22:31:23 -0400 Subject: [PATCH 034/147] Include sys/types.h for u_int16_t. On various embedded environments (OpenWrt, EdgeOS), must be included for u_intX_t types. The Hyperscan changes made recently introducted a u_int16_t member in actypes.h which is undeclared in certainly environments without this include. Signed-off-by: Darryl Sokoloski --- src/lib/ndpi_main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 85cd4b9ebdd..fc6f4ea55b4 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -27,6 +27,7 @@ #include #include +#include #include "ahocorasick.h" #include "libcache.h" From d2bc3ea20927ace331abcd8b939cb6e74fbc8ce1 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 12:00:28 +0200 Subject: [PATCH 035/147] Initial hyperscan support for all protocols --- src/lib/ndpi_content_match.c.inc | 516 ++++++++++++++++--------------- 1 file changed, 260 insertions(+), 256 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 0d1e15ce0fd..d6da458eb9c 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8059,45 +8059,48 @@ ndpi_protocol_match host_match[] = { { ".cnn.c", NULL, "\\.cnn" TLD, "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".cnn.net", NULL, NULL, "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".dropbox.com", NULL, ".\\dropbox" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { ".dropbox.com", NULL, "\\.dropbox" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { ".dropboxstatic.com", NULL, "\\.dropboxstatic" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { ".dropbox-dns.com", NULL, "\\.dropbox-dns" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { "log.getdropbox.com", NULL, "log\\.getdropbox" TLD, "DropBox", NDPI_PROTOCOL_DROPBOX, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { ".ebay.", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* or FUN */ - { ".ebay.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".ebaystatic.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".ebaydesc.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".ebayrtm.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".ebaystratus.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".ebayimg.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebay.", NULL, "\\.ebay" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* or FUN */ + { ".ebay.com", NULL, NULL, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebaystatic.com", NULL, "\\.ebaystatic" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebaydesc.com", NULL, "\\.ebaydesc" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebayrtm.com", NULL, "\\.ebayrtm" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebaystratus.com", NULL, "\\.ebaystratus" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".ebayimg.com", NULL, "\\.ebayimg" TLD, "eBay", NDPI_PROTOCOL_EBAY, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* Detected "instagram.c10r.facebook.com". Omitted "*amazonaws.com" and "*facebook.com" CDNs e.g. "ig-telegraph-shv-04-frc3.facebook.com" */ - { ".cdninstagram.com", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".instagram.", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "igcdn-photos-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagramimages-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "instagramstatic-", NULL, NULL, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".instagram.", NULL, "\\.instagram" TLD, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagram.", NULL, "instagram" TLD, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".cdninstagram.com", NULL, "\\.cdninstagram" TLD, "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "facebook.com", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "fbstatic-a.akamaihd.net", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".fbcdn.net", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "fbcdn-", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".facebook.net", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".fbsbx.com", NULL, NULL, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "igcdn-photos-", NULL, "igcdn-photos-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagramimages-", NULL, "instagramimages-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "instagramstatic-", NULL, "instagramstatic-", "Instagram", NDPI_PROTOCOL_INSTAGRAM, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".speedtest.net", NULL, NULL, "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, + { "facebook.com", NULL, "facebook" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "fbstatic-a.akamaihd.net", NULL, "fbstatic-a\\.akamaihd" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".fbcdn.net", NULL, "\\.fbcdn" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "fbcdn-", NULL, "fbcdn-", "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".facebook.net", NULL, "\\.facebook" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".fbsbx.com", NULL, "\\.fbsbx" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "docs.googleusercontent.com", NULL, NULL, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, + { ".speedtest.net", NULL, "\\.speedtest" TLD, "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, - { "drive-thirdparty.googleusercontent.com", NULL, NULL, "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "drive.google.com", NULL, NULL, "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "ntop.org", NULL, "ntop\\.org$", "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, - { "android.clients.google.com", NULL, NULL, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "ggpht.com", NULL, NULL, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "docs.googleusercontent.com", NULL, "docs\\.googleusercontent" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, + { "docs.googleusercontent.com", NULL, "docs.googleusercontent" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, + { "docs.google.com", NULL, "docs.google" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, - { "ntop.org", NULL, NULL, "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, + { "drive-thirdparty.googleusercontent.com", NULL, "drive-thirdparty\\.googleusercontent" TLD, "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "drive.google.com", NULL, "drive.google" TLD, "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + + { "android.clients.google.com", NULL, "android\\.clients\\.google" TLD, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { "ggpht.com", NULL, "ggpht" TLD, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* See https://better.fyi/trackers/ @@ -8118,296 +8121,297 @@ ndpi_protocol_match host_match[] = { Gstatic by Google (gstatic.com) */ + + /* Google Advertisements */ - { ".googlesyndication.com", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { "googleads.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { ".doubleclick.net", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { "googleadservices.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { ".2mdn.net", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { ".dmtry.com", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { "google-analytics.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, - { "gtv1.com", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".googlesyndication.com", NULL, "\\.googlesyndication" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { "googleads.", NULL, "googleads\\.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { ".doubleclick.net", NULL, "\\.doubleclick" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { "googleadservices.", NULL, "googleadservices\\.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { ".2mdn.net", NULL, "\\.2mdn" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { ".dmtry.com", NULL, "\\.dmtry" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { "google-analytics.", NULL, "google-analytics\\.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, + { "gtv1.com", NULL, "gtv1" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, /* Google Hangout */ - { "images2-hangout-opensocial.googleusercontent.com", NULL, NULL, "GoogleHangout", NDPI_PROTOCOL_HANGOUT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "images2-hangout-opensocial.googleusercontent.com", NULL, "images2-hangout-opensocial\\.googleusercontent" TLD, "GoogleHangout", NDPI_PROTOCOL_HANGOUT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, /* Google Services */ - { "googleapis.com", NULL, NULL, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { ".googletagservices.com", NULL, NULL, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "mtalk.google.com", NULL, NULL, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "googleapis.com", NULL, "googleapis" TLD, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".googletagservices.com", NULL, "\\.googletagservices" TLD, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "mtalk.google.com", NULL, "mtalk\\.google" TLD, "GoogleServices", NDPI_PROTOCOL_GOOGLE_SERVICES, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "plus.google.com", NULL, NULL, "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "plus.url.google.com", NULL, NULL, "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "plus.google.com", NULL, "plus\\.google" TLD, "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "plus.url.google.com", NULL, "plus\\.url\\.google" TLD, "GooglePlus", NDPI_PROTOCOL_GOOGLE_PLUS, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, /* http://check.googlezip.net/connect [check browser connectivity] */ - { ".googlezip.net", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - - { "docs.googleusercontent.com", NULL, NULL, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, - { "docs.google.com", NULL, NULL, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, + { ".googlezip.net", NULL, "\\.googlezip" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "googleusercontent.com", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "1e100.net", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "googleusercontent.com", NULL, "googleusercontent" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "1e100.net", NULL, "1e100" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "maps.google.", NULL, NULL, "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "maps.gstatic.com", NULL, NULL, "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "maps.google.", NULL, "maps\\.google" TLD, "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "maps.gstatic.com", NULL, "maps\\.gstatic" TLD, "GoogleMaps", NDPI_PROTOCOL_GOOGLE_MAPS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".gmail.", NULL, NULL, "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, - { "mail.google.", NULL, NULL, "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, + { ".gmail.", NULL, "\\.gmail" TLD, "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, + { "mail.google.", NULL, "mail\\.google" TLD, "GMail", NDPI_PROTOCOL_GMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, - { "google.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".google.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".gstatic.com", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "google.", NULL, "google" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".google.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".gstatic.com", NULL, "\\.gstatic" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "mail.outlook.com", NULL, NULL, "Hotmail", NDPI_PROTOCOL_HOTMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, + { "mail.outlook.com", NULL, "mail\\.outlook" TLD, "Hotmail", NDPI_PROTOCOL_HOTMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, - { ".last.fm", NULL, NULL, "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".last.fm", NULL, "\\.last\\.fm$", "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "msn.com", NULL, NULL, "MSN", NDPI_PROTOCOL_MSN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* News site */ + { "msn.com", NULL, "msn" TLD, "MSN", NDPI_PROTOCOL_MSN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* News site */ - { "netflix.com", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "nflxext.com", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "nflximg.com", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "nflximg.net", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "nflxvideo.net", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "nflxso.net", NULL, NULL, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "netflix.com", NULL, "netflix" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "nflxext.com", NULL, "nflxext" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "nflximg.com", NULL, "nflximg" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "nflximg.net", NULL, "nflximg" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "nflxvideo.net", NULL, "nflxvideo" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "nflxso.net", NULL, "nflxso" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".skype.", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypeassets.", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypedata.", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypeecs-", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypeforbusiness.", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".lync.com", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { "e7768.b.akamaiedge.net", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { "e4593.dspg.akamaiedge.net", NULL, NULL,"Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { "e4593.g.akamaiedge.net", NULL, NULL, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skype.", NULL, "\\.skype" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypeassets.", NULL, "\\.skypeassets" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypedata.", NULL, "\\.skypedata" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypeecs-", NULL, "\\.skypeecs-", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypeforbusiness.", NULL, "\\.skypeforbusiness" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".lync.com", NULL, "\\.lync" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { "e7768.b.akamaiedge.net", NULL, "e7768\\.b\\.akamaiedge" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { "e4593.dspg.akamaiedge.net", NULL, "e4593\\.dspg\\.akamaiedge" TLD,"Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { "e4593.g.akamaiedge.net", NULL, "e4593\\.g\\.akamaiedge" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".tuenti.com", NULL, NULL, "Tuenti", NDPI_PROTOCOL_TUENTI, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".tuenti.com", NULL, "\\.tuenti" TLD, "Tuenti", NDPI_PROTOCOL_TUENTI, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".twttr.com", NULL, NULL, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "twitter.", NULL, NULL, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "twimg.com", NULL, NULL, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".twttr.com", NULL, "\\.twttr" TLD, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "twitter.", NULL, "twitter" TLD, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "twimg.com", NULL, "twimg" TLD, "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".viber.com", NULL, NULL, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".cdn.viber.com", NULL, NULL, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".viber.it", NULL, NULL, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".viber.com", NULL, "\\.viber" TLD, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".cdn.viber.com", NULL, NULL, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".viber.it", NULL, NULL, "Viber", NDPI_PROTOCOL_VIBER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { "wikipedia.", NULL, NULL, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "wikimedia.", NULL, NULL, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "mediawiki.", NULL, NULL, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "wikimediafoundation.", NULL, NULL, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "wikipedia.", NULL, "wikipedia" TLD, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "wikimedia.", NULL, "wikimedia" TLD, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "mediawiki.", NULL, "mediawiki" TLD, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "wikimediafoundation.", NULL, "wikimediafoundation" TLD, "Wikipedia", NDPI_PROTOCOL_WIKIPEDIA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "mmg-fna.whatsapp.net", NULL, NULL, "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".whatsapp.", NULL, NULL, "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "mmg-fna.whatsapp.net", NULL, "mmg-fna\\.whatsapp" TLD, "WhatsAppFiles", NDPI_PROTOCOL_WHATSAPP_FILES, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".whatsapp.", NULL, "\\.whatsapp" TLD, "WhatsApp", NDPI_PROTOCOL_WHATSAPP, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".yahoo.", NULL, NULL, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".yimg.com", NULL, NULL, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "yahooapis.", NULL, NULL, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".yahoo.", NULL, "\\.yahoo" TLD, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".yimg.com", NULL, "\\.yimg" TLD, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "yahooapis.", NULL, "yahooapis" TLD, "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "upload.youtube.com", NULL, NULL, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "upload.video.google.com", NULL, NULL, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "youtubei.googleapis.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "youtube.", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "youtu.be.", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "yt3.ggpht.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".googlevideo.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".ytimg.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "youtube-nocookie.", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "ggpht.com", NULL, NULL, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "upload.youtube.com", NULL, "upload\\.youtube" TLD, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "upload.video.google.com", NULL, "upload\\.video\\.google" TLD, "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "youtubei.googleapis.com", NULL, "youtubei\\.googleapis" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "youtube.", NULL, "youtube" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "youtu.be.", NULL, "youtu\\.be" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "yt3.ggpht.com", NULL, "yt3\\.ggpht" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".googlevideo.com", NULL, "\\.googlevideo" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".ytimg.com", NULL, "\\.ytimg" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "youtube-nocookie.", NULL, "youtube-nocookie" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "ggpht.com", NULL, "ggpht" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".vevo.com", NULL, NULL, "Vevo", NDPI_PROTOCOL_VEVO, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".vevo.com", NULL, "\\.vevo" TLD, "Vevo", NDPI_PROTOCOL_VEVO, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".spotify.", NULL, NULL, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "audio-fa.scdn.co", NULL, NULL, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".spotify.", NULL, "\\.spotify" TLD, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "audio-fa.scdn.co", NULL, "audio-fa\\.scdn" TLD, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "edge-mqtt.facebook.com", NULL, NULL, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { "edge-mqtt.facebook.com", NULL, "edge-mqtt\\.facebook" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".pandora.com", NULL, NULL, "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".pandora.com", NULL, "\\.pandora" TLD, "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".torproject.org", NULL, NULL, "Tor", NDPI_PROTOCOL_TOR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + { ".torproject.org", NULL, "\\.torproject\\.org$", "Tor", NDPI_PROTOCOL_TOR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - { ".kakao.com", NULL, NULL, "KakaoTalk", NDPI_PROTOCOL_KAKAOTALK, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".kakao.com", NULL, "\\.kakao" TLD, "KakaoTalk", NDPI_PROTOCOL_KAKAOTALK, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { "ttvnw.net", NULL, NULL, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "static-cdn.jtvnw.net", NULL, NULL, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "www-cdn.jtvnw.net", NULL, NULL, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "ttvnw.net", NULL, "ttvnw" TLD, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "static-cdn.jtvnw.net", NULL, "static-cdn\\.jtvnw" TLD, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "www-cdn.jtvnw.net", NULL, "www-cdn\\.jtvnw" TLD, "Twitch", NDPI_PROTOCOL_TWITCH, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".qq.com", NULL, NULL, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".gtimg.com", NULL, NULL, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".qq.com", NULL, "\\.qq" TLD, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".gtimg.com", NULL, "\\.gtimg" TLD, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".weibo.com", NULL, NULL, "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".sinaimg.cn", NULL, NULL, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".sinajs.cn", NULL, NULL, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".sina.cn", NULL, NULL, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".sina.com.cn", NULL, NULL, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".weibo.com", NULL, "\\.weibo" TLD, "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".sinaimg.cn", NULL, "\\.sinaimg" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".sinajs.cn", NULL, "\\.sinajs" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".sina.cn", NULL, "\\.sina" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".sina.com.cn", NULL, "\\.sina\\.com\\.cn$", "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, /* https://support.cipafilter.com/index.php?/Knowledgebase/Article/View/117/0/snapchat---how-to-block */ - { "feelinsonice.appspot.com", NULL, "\\.appspot\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { "feelinsonice-hrd.appspot.com", NULL, NULL, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { "feelinsonice.com", NULL, "\\.feelsonice\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".snapchat.", NULL, "\\.snapchat\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".snapads.", NULL, "\\.snapads\\.com$", "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - - { ".waze.com", NULL, NULL, "Waze", NDPI_PROTOCOL_WAZE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".deezer.com", NULL, NULL, "Deezer", NDPI_PROTOCOL_DEEZER, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - - { ".microsoft.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { "i-msdn.sec.s-msft.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE }, - { "i2-msdn.sec.s-msft.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE }, - { ".webtrends.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { ".msecnd.net", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "bing.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".visualstudio.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE }, - { "login.live.com", NULL, NULL, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - - { "bn1301.storage.live.com", NULL, NULL, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE,NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { "*.gateway.messenger.live.com", NULL, NULL, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { "skyapi.live.net", NULL, NULL, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { "d.docs.live.net", NULL, NULL, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - { "onedrive.live.com", NULL, NULL, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, - - { "update.microsoft.com", NULL, NULL, "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { ".windowsupdate.com", NULL, NULL, "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - - { "worldofwarcraft.com", NULL, NULL, "WorldOfWarcraft", NDPI_PROTOCOL_WORLDOFWARCRAFT, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - - { ".anchorfree.", NULL, NULL, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - { "hotspotshield.com", NULL, NULL, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - { ".northghost.com", NULL, NULL, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - - { ".webex.com", NULL, NULL, "Webex", NDPI_PROTOCOL_WEBEX, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".ocsdomain.com", NULL, NULL, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "ocs.fr", NULL, NULL, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".ocs.fr", NULL, NULL, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".labgency.ws", NULL, NULL, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - - { ".iflix.com", NULL, NULL, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".app.iflixcorp.com", NULL, NULL, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { ".images.iflixassets.com", NULL, NULL, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - - { "crl.microsoft.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "evsecure-ocsp.verisign.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "evsecure-aia.verisign.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "evsecure-crl.verisign.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".omniroot.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".microsoftonline.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".office365.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".office.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".msocsp.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".msocdn.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "officeapps.live.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "outlook.live.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "office.live.com", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".onenote.", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "office.net", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "feelinsonice.appspot.com", NULL, "\\.appspot" TLD, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { "feelinsonice-hrd.appspot.com", NULL, "feelinsonice-hrd\\.appspot" TLD, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { "feelinsonice.com", NULL, "\\.feelsonice" TLD, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".snapchat.", NULL, "\\.snapchat" TLD, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".snapads.", NULL, "\\.snapads" TLD, "Snapchat", NDPI_PROTOCOL_SNAPCHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + + { ".waze.com", NULL, "\\.waze" TLD, "Waze", NDPI_PROTOCOL_WAZE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + + { ".deezer.com", NULL, "\\.deezer" TLD, "Deezer", NDPI_PROTOCOL_DEEZER, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + { ".microsoft.com", NULL, "\\.microsoft" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "i-msdn.sec.s-msft.com", NULL, "i-msdn.sec\\.s-msft" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE }, + { "i2-msdn.sec.s-msft.com", NULL, "i2-msdn\\.sec\\.s-msft" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE }, + { ".webtrends.com", NULL, "\\.webtrends" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".msecnd.net", NULL, "\\.msecnd" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "bing.com", NULL, "bing" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { ".visualstudio.com", NULL, "\\.visualstudio" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE }, + { "login.live.com", NULL, "login\\.live" TLD, "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + + { "bn1301.storage.live.com", NULL, "bn1301\\.storage\\.live" TLD, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE,NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "*.gateway.messenger.live.com", NULL, "\\*\\.gateway\\.messenger\\.live" TLD, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "skyapi.live.net", NULL, "skyapi\\.live" TLD, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "d.docs.live.net", NULL, "d\\.docs\\.live" TLD, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "onedrive.live.com", NULL, "onedrive\\.live" TLD, "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + + { "update.microsoft.com", NULL, "update\\.microsoft" TLD, "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + { ".windowsupdate.com", NULL, "\\.windowsupdate" TLD, "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, + + { "worldofwarcraft.com", NULL, "worldofwarcraft" TLD, "WorldOfWarcraft", NDPI_PROTOCOL_WORLDOFWARCRAFT, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + + { ".anchorfree.", NULL, "\\.anchorfree" TLD, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + { "hotspotshield.com", NULL, "hotspotshield" TLD, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + { ".northghost.com", NULL, "\\.northghost" TLD, "HotspotShield", NDPI_PROTOCOL_HOTSPOT_SHIELD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + + { ".webex.com", NULL, "\\.webex" TLD, "Webex", NDPI_PROTOCOL_WEBEX, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + + { ".ocsdomain.com", NULL, "\\.ocsdomain" TLD, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "ocs.fr", NULL, "ocs" TLD, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".ocs.fr", NULL, NULL, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".labgency.ws", NULL, ".labgency" TLD, "OCS", NDPI_PROTOCOL_OCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + + { ".iflix.com", NULL, "\\.iflix" TLD, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".app.iflixcorp.com", NULL, "\\.app\\.iflixcorp" TLD, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { ".images.iflixassets.com", NULL, "\\.images\\.iflixassets" TLD, "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + + { "crl.microsoft.com", NULL, "crl\\.microsoft" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "evsecure-ocsp.verisign.com", NULL, "evsecure-ocsp\\.verisign" TLD,"Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "evsecure-aia.verisign.com", NULL, "evsecure-aia\\.verisign" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "evsecure-crl.verisign.com", NULL, "evsecure-crl\\.verisign" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".omniroot.com", NULL, "\\.omniroot" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".microsoftonline.com", NULL, "\\.microsoftonline" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".office365.com", NULL, "\\.office365" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".office.com", NULL, "\\.office" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "office.net", NULL, NULL, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".msocsp.com", NULL, "\\.msocsp" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".msocdn.com", NULL, "\\.msocdn" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "officeapps.live.com", NULL, "officeapps\\.live" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "outlook.live.com", NULL, "outlook\\.live" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "office.live.com", NULL, "office\\.live" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".onenote.", NULL, "\\.onenote" TLD, "Office365", NDPI_PROTOCOL_OFFICE_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, /* http://www.urlquery.net/report.php?id=1453233646161 */ - { "lifedom.top", NULL, NULL, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "coby.ns.cloudflare.com", NULL, NULL, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "amanda.ns.cloudflare.com", NULL, NULL, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "lifedom.top", NULL, "lifedom" TLD, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "coby.ns.cloudflare.com", NULL, "coby\\.ns\\.cloudflare" TLD, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { "amanda.ns.cloudflare.com", NULL, "amanda\\.ns\\.cloudflare" TLD, "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { "d295hzzivaok4k.cloudfront.net", NULL, NULL,"OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - { ".opendns.com", NULL, NULL, "OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE }, + { "d295hzzivaok4k.cloudfront.net", NULL, "d295hzzivaok4k\\.cloudfront" TLD,"OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".opendns.com", NULL, "\\.opendns" TLD, "OpenDNS", NDPI_PROTOCOL_OPENDNS, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE }, /* https://get.slack.help/hc/en-us/articles/205138367-Troubleshooting-Slack-connection-issues */ - { "slack.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".slack-msgs.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "slack-files.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "slack-imgs.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".slack-edge.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".slack-core.com", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "slack-redir.net", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "slack.com", NULL, "slack" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".slack-msgs.com", NULL, "\\.slack-msgs" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "slack-files.com", NULL, "slack-files" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "slack-imgs.com", NULL, "slack-imgs" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".slack-edge.com", NULL, "\\.slack-edge" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".slack-core.com", NULL, "\\.slack-core" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "slack-redir.net", NULL, "slack-redir" TLD, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, /* Detected "slack-assets2.s3-us-west-2.amazonaws.com.". Omitted "*amazonaws.com" CDN, but no generic pattern to use on first part */ - { "slack-assets2.s3-", NULL, NULL, "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "slack-assets2.s3-", NULL, "slack-assets2\\.s3-", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "zhiliaoapp.com", NULL, NULL, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "muscdn.com", NULL, NULL, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "livelycdn.com", NULL, NULL, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "direct.ly", NULL, NULL, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "zhiliaoapp.com", NULL, "zhiliaoapp" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "muscdn.com", NULL, "muscdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "livelycdn.com", NULL, "livelycdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "direct.ly", NULL, "direct\\.ly$", "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "github.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".github.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "github.io", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".github.io", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "githubusercontent.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { ".githubusercontent.com", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".steampowered.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { "steamcommunity.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".steamcontent.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".steamstatic.com", NULL, NULL, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { "steamcommunity-a.akamaihd.net", NULL, NULL,"Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - - { ".wechat.com", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".wechat.org", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".wechatapp.com", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".we.chat", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".wx.", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".weixin.", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".mmsns.qpic.cn", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - - { "dnscrypt.org", NULL, NULL, "DNScrypt", NDPI_PROTOCOL_DNSCRYPT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE }, - - { "torrent.", NULL, NULL, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, - { "torrents.", NULL, NULL, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, - { "torrentz.", NULL, NULL, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, - - { ".nintendo.net", NULL, NULL, "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".nintendo.com", NULL, NULL, "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".playstation.net", NULL, NULL, "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".playstation.com", NULL, NULL, "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".sonyentertainmentnetwork.com", NULL, NULL,"Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - - { ".linkedin.com", NULL, NULL, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".licdn.com", NULL, NULL, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - - { ".sndcdn.com", NULL, NULL, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".soundcloud.com", NULL, NULL, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "getrockerbox.com", NULL, NULL, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - - { "web.telegram.org", NULL, NULL, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { "tdesktop.com", NULL, NULL, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { "tupdate.com", NULL, NULL, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - - { ".pastebin.com", NULL, NULL, "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, - - { ".ppstream.com", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".pps.tv", NULL, NULL, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "github.com", NULL, "github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".github.com", NULL, "\\.github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "github.io", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".github.io", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { "githubusercontent.com", NULL, "githubusercontent" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + { ".githubusercontent.com", NULL, "\\.githubusercontent" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, + + { ".steampowered.com", NULL, "\\.steampowered" TLD, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { "steamcommunity.com", NULL, "steamcommunity" TLD, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { ".steamcontent.com", NULL, "\\.steamcontent" TLD, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { ".steamstatic.com", NULL, "\\.steamstatic" TLD, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { "steamcommunity-a.akamaihd.net", NULL, "steamcommunity-a\\.akamaihd" TLD,"Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + + { ".wechat.com", NULL, "\\.wechat" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".wechat.org", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".wechatapp.com", NULL, "\\.wechatapp" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".we.chat", NULL, "\\.we\\.chat", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".wx.", NULL, "\\.wx\\.", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".weixin.", NULL, "\\.weixin\\.", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".mmsns.qpic.cn", NULL, "\\.mmsns\\.qpic" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + + { "dnscrypt.org", NULL, "dnscrypt\\.org$", "DNScrypt", NDPI_PROTOCOL_DNSCRYPT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE }, + + { "torrent.", NULL, "torrent" TLD, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, + { "torrents.", NULL, "torrents" TLD, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, + { "torrentz.", NULL, "torrentz" TLD, "BitTorrent", NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_UNSAFE }, + + { ".nintendo.net", NULL, "\\.nintendo" TLD, "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { ".nintendo.com", NULL, NULL, "Nintendo", NDPI_PROTOCOL_NINTENDO, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + + { ".playstation.net", NULL, "\\.playstation" TLD, "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { ".playstation.com", NULL, NULL, "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + { ".sonyentertainmentnetwork.com", NULL, "\\.sonyentertainmentnetwork" TLD,"Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, + + { ".linkedin.com", NULL, "\\.linkedin" TLD, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".licdn.com", NULL, "\\.licdn" TLD, "LinkedIn", NDPI_PROTOCOL_LINKEDIN, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + + { ".sndcdn.com", NULL, "\\.sndcdn" TLD, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".soundcloud.com", NULL, "\\.soundcloud" TLD, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "getrockerbox.com", NULL, "getrockerbox" TLD, "SoundCloud", NDPI_PROTOCOL_SOUNDCLOUD, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + { "web.telegram.org", NULL, "web\\.telegram" TLD, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "tdesktop.com", NULL, "tdesktop" TLD, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "tupdate.com", NULL, "tupdate" TLD, "Telegram", NDPI_PROTOCOL_TELEGRAM, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + + { ".pastebin.com", NULL, "\\.pastebin" TLD, "Pastebin", NDPI_PROTOCOL_PASTEBIN, NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS }, + + { ".ppstream.com", NULL, "\\.ppstream" TLD, "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".pps.tv", NULL, "\\.pps\\.tv$", "PPStream", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, /* VidTO streaming service NOTE: this is a possible candidate for NDPI_PROTOCOL_GENERIC */ - { ".vidto.me", NULL, NULL, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".vidto.se", NULL, NULL, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".vidto.me", NULL, "\\.vidto" TLD, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".vidto.se", NULL, NULL, "VidTO", NDPI_PROTOCOL_PPSTREAM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, /* Not so popular services without a protocl dissector (and thus not worth a protocolId) that are handled/detected by categpory rather than by protocol id. They are bound to a generic protocol (NDPI_PROTOCOL_GENERIC) and placed onto the right category */ - { "quickplay.com", NULL, NULL, "QuickPlay", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "quickplay.com", NULL, "quickplay" TLD, "QuickPlay", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".iqiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".qiyi.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".71.am", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".qiyipic.com", NULL, NULL, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".iqiyi.com", NULL, "\\.iqiyi" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".qiyi.com", NULL, "\\.qiyi" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".71.am", NULL, "\\.71" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".qiyipic.com", NULL, "\\.qiyipic" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + + { ".1kxun.", NULL, "\\.1kxun\\.", "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "tcad.wedolook.com", NULL, "tcad\\.wedolook" TLD, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".1kxun.", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { "tcad.wedolook.com", NULL, NULL, "1kxun", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { "baidu.com", NULL, "baidu" TLD, "baidu", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN }, - { "baidu.com", NULL, NULL, "baidu", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN }, + { "icq.", NULL, "icq" TLD, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { ".icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { ".icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, - { "icq.", NULL, NULL, "ICQ", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, /* RapidVideo streaming */ - { ".rapidvideo.com", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".playercdn.net", NULL, NULL, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".rapidvideo.com", NULL, "\\.rapidvideo" TLD, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, + { ".playercdn.net", NULL, "\\.playercdn" TLD, "RapidVideo", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, /* showmax.com video streaming */ - { "showmax.com", NULL, NULL, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "showmax.akamaized.net", NULL, NULL, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "showmax.com", NULL, "showmax" TLD, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "showmax.akamaized.net", NULL, "showmax\\.akamaized" TLD, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { NULL, NULL, NULL, 0 } }; From db74459ca2b8a05f52019c324b06f698a1df1465 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 12:29:08 +0200 Subject: [PATCH 036/147] Fixes weibo detection --- src/lib/ndpi_content_match.c.inc | 1 + tests/result/weibo.pcap.out | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index d6da458eb9c..390424eebf5 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8237,6 +8237,7 @@ ndpi_protocol_match host_match[] = { { ".gtimg.com", NULL, "\\.gtimg" TLD, "QQ", NDPI_PROTOCOL_QQ, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".weibo.com", NULL, "\\.weibo" TLD, "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { ".weibo.cn", NULL, NULL, "Sina(Weibo)", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".sinaimg.cn", NULL, "\\.sinaimg" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".sinajs.cn", NULL, "\\.sinajs" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".sina.cn", NULL, "\\.sina" TLD, "Sina", NDPI_PROTOCOL_SINA, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, diff --git a/tests/result/weibo.pcap.out b/tests/result/weibo.pcap.out index 8ae9cdea15a..befa40beae0 100644 --- a/tests/result/weibo.pcap.out +++ b/tests/result/weibo.pcap.out @@ -1,10 +1,10 @@ -DNS 11 1129 6 +DNS 10 1059 5 HTTP 19 2275 5 SSL 15 1234 10 Google 10 660 5 Amazon 2 132 1 QUIC 23 4118 2 -Sina(Weibo) 418 258007 15 +Sina(Weibo) 419 258077 16 1 TCP 192.168.1.105:35803 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][52 pkts/5367 bytes <-> 54 pkts/71536 bytes][Host: img.t.sinajs.cn] 2 TCP 192.168.1.105:35804 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][32 pkts/3624 bytes <-> 40 pkts/50657 bytes][Host: img.t.sinajs.cn] @@ -49,4 +49,4 @@ Sina(Weibo) 418 258007 15 41 TCP 192.168.1.105:52272 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] 42 TCP 192.168.1.105:52274 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] 43 UDP 192.168.1.105:50533 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/74 bytes -> 0 pkts/0 bytes][Host: data.weibo.com] - 44 UDP 192.168.1.105:16804 -> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: c.weibo.cn] + 44 UDP 192.168.1.105:16804 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: c.weibo.cn] From 28ac30d82737d58dd2a75ea0c36891eaf29eaa60 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 12:41:35 +0200 Subject: [PATCH 037/147] Fixes hyperscan skype detection --- src/lib/ndpi_content_match.c.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 390424eebf5..4ad43077847 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8043,7 +8043,7 @@ ndpi_protocol_match host_match[] = { { ".aaplimg.com", NULL, "\\.aaplimg" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { "aaplimg.com", NULL, "aaplimg" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, { ".apple.com", NULL, "\\.apple" TLD, "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, - { ".icloud.com", NULL, "\\.icloud" TLD, "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, + { ".icloud.com", NULL, "\\.icloud\\.com", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, { "iosapps.itunes.apple.com", NULL, "iosapps\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* iOS */ { "osxapps.itunes.apple.com", NULL, "osxapps\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* MacOS */ { "buy.itunes.apple.com", NULL, "buy\\.itunes\\.apple" TLD, "AppleStore", NDPI_PROTOCOL_APPLESTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, @@ -8173,11 +8173,11 @@ ndpi_protocol_match host_match[] = { { "nflxvideo.net", NULL, "nflxvideo" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { "nflxso.net", NULL, "nflxso" TLD, "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - { ".skype.", NULL, "\\.skype" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypeassets.", NULL, "\\.skypeassets" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypedata.", NULL, "\\.skypedata" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skype.", NULL, "\\.skype\\.", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypeassets.", NULL, "\\.skypeassets\\.", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypedata.", NULL, "\\.skypedata\\.", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, { ".skypeecs-", NULL, "\\.skypeecs-", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, - { ".skypeforbusiness.", NULL, "\\.skypeforbusiness" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, + { ".skypeforbusiness.", NULL, "\\.skypeforbusiness\\.", "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, { ".lync.com", NULL, "\\.lync" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, { "e7768.b.akamaiedge.net", NULL, "e7768\\.b\\.akamaiedge" TLD, "Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, { "e4593.dspg.akamaiedge.net", NULL, "e4593\\.dspg\\.akamaiedge" TLD,"Skype", NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE }, From 6491568e15a6e10df963383b62431b4a647af3ea Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 12:48:53 +0200 Subject: [PATCH 038/147] Fixes hyperscan WeChat detection --- src/lib/ndpi_content_match.c.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 4ad43077847..2ba38dee1aa 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8342,8 +8342,8 @@ ndpi_protocol_match host_match[] = { { ".steamstatic.com", NULL, "\\.steamstatic" TLD, "Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, { "steamcommunity-a.akamaihd.net", NULL, "steamcommunity-a\\.akamaihd" TLD,"Steam", NDPI_PROTOCOL_STEAM, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN }, - { ".wechat.com", NULL, "\\.wechat" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { ".wechat.org", NULL, NULL, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".wechat.com", NULL, "\\.wechat\\.com", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { ".wechat.org", NULL, "\\.wechat\\.org", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".wechatapp.com", NULL, "\\.wechatapp" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".we.chat", NULL, "\\.we\\.chat", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".wx.", NULL, "\\.wx\\.", "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, From 47c2ad1b5f6e7a790a0b46d3950c915aad9c2f8f Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 12:59:19 +0200 Subject: [PATCH 039/147] Webex category fix --- src/lib/ndpi_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 85cd4b9ebdd..25171328af8 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1630,7 +1630,7 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBEX, no_master, - no_master, "Webex", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + no_master, "Webex", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RADIUS, From 291acb94591da6fd9abf7c56177e61d35726f8f6 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Fri, 17 Aug 2018 13:13:26 +0200 Subject: [PATCH 040/147] Hyperscan regex for domains such as .com.cn or .co.uk --- src/lib/ndpi_content_match.c.inc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 2ba38dee1aa..60bc3498f46 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8015,12 +8015,15 @@ Each part of a domain name can be no longer than 63 characters. There are no sin https://www.regular-expressions.info/email.html -We also add an optional .co to match domains such as .co.uk - (?i) is to make searches case insensitive + +(?:) is a non-capturing group used to allow patterns such as .co.uk or .com.cn + The non-capturing group is used in a nested fashion to capture the + .co, and then, optionally, another m. + */ -#define TLD "(?i)(\\.co){0,1}\\.[a-z]{2,63}$" +#define TLD "(?i)(?:\\.co(?:m)?)?\\.[a-z]{2,63}$" /* ****************************************************** */ From 6cb40ac75e2e2f1a35c77f028a64a5cd8873ce10 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 20 Aug 2018 12:39:55 +0200 Subject: [PATCH 041/147] Compilation fix --- src/include/ndpi_typedefs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 1a9924d366c..6a61b44fa1f 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -656,8 +656,8 @@ struct ndpi_flow_udp_struct { } #ifndef WIN32 __attribute__ ((__packed__)) - ; #endif + ; /* ************************************************** */ From 1a6a9593fb603e84a87614cacc3856faa0ed916e Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 20 Aug 2018 14:49:59 +0200 Subject: [PATCH 042/147] Changed type to ease compilation accross platforms --- src/lib/third_party/include/actypes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/third_party/include/actypes.h b/src/lib/third_party/include/actypes.h index c09d787c6a1..5a94b63a13e 100644 --- a/src/lib/third_party/include/actypes.h +++ b/src/lib/third_party/include/actypes.h @@ -44,7 +44,7 @@ typedef char AC_ALPHABET_t; **/ typedef struct { int number; - u_int16_t category, breed; + unsigned int category, breed; } AC_REP_t; /* AC_PATTERN_t: From aad896c2a83a43d6a58e8f959be5a8cce3bf1e2f Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Tue, 21 Aug 2018 18:12:36 +0200 Subject: [PATCH 043/147] Updates ChangeLog --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6dde946ef44..153cac30044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,63 @@ # CHANGELOG +#### nDPI 2.4 (July 2018) + +## New Supported Protocols and Services + +* Showmax.com +* Musical.ly +* RapidVideo +* VidTO streaming service +* Apache JServ Protocol +* Facebook Messenger +* FacebookZero protocol + +## Improvements + +* Improved YouTube support +* Improved Netflix support +* Updated Google Hangout detection +* Updated Twitter address range +* Updated Viber ports, subnet and domain +* Updated AmazonVideo detection +* Updated list of FaceBook sites +* Initial Skype in/out support +* Improved Tor detection +* Improved hyperscan support and category definition +* Custom categories loading, extended ndpiReader (`-c `) for loading name-based categories + +## Fixes + +* Fixes for Instagram flows classified as Facebook +* Fixed Spotify detection +* Fixed minimum packet payload length for SSDP +* Fixed length check in MSN, x-steam-sid, Tor certificate name +* Increase client's maximum payload length for SSH +* Fixed end-of-line bounds handling +* Fixed substring matching +* Fix for handling IP address based custom categories +* Repaired wrong timestamp calculation +* Fixed memory leak +* Optimized memory usage + +## Other/Changes + +* New API calls: + * `ndpi_set_detection_preferences()` + * `ndpi_load_hostname_category()` + * `ndpi_enable_loaded_categories()` + * `ndpi_fill_protocol_category()` + * `ndpi_process_extra_packet()` +* Skype CallIn/CallOut are now set as Skype.SkypeCallOut Skype.SkypeCallIn +* Added support for SMTPS on port 587 +* Changed RTP from VoIP to Media category +* Added site unavailable category +* Added custom categories CUSTOM_CATEGORY_MINING, CUSTOM_CATEGORY_MALWARE, CUSTOM_CATEGORY_ADVERTISEMENT, CUSTOM_CATEGORY_BANNED_SITE +* Implemented hash-based categories +* Converted some not popular protocols to NDPI_PROTOCOL_GENERIC with category detection + +------------------------------------------------------------------------ + #### nDPI 2.2.2 (April 2018) ## Main New Features @@ -95,7 +153,7 @@ * Ubiquity AirControl 2 * HEP (Extensible Encapsulation Protocol) * WhatsApp Voice vs WhatsApp (chat, no voice) -* Viber +* Viber * Wechat * Github * Hotmail @@ -124,7 +182,7 @@ * Improved HTTP subprotocol matching * Implemented DHCP host name extraction * Updated Facebook detection by ip server ranges -* Updated Twitter networks +* Updated Twitter networks * Improved Microsoft detection * Enhanced Google detection * Improved BT-uTP protocol dissection From e6c3c0139a6552dd045db620d7594cb16aca2a33 Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Tue, 21 Aug 2018 18:13:54 +0200 Subject: [PATCH 044/147] Updates changelog release date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 153cac30044..977b02bc77c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG -#### nDPI 2.4 (July 2018) +#### nDPI 2.4 (August 2018) ## New Supported Protocols and Services From 89b3b085afa1e115d63149031a1bc897dcc52b4d Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 22 Aug 2018 08:45:13 +0200 Subject: [PATCH 045/147] Moved to 2.5.0 --- autogen.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autogen.sh b/autogen.sh index 6ce84c3b40a..ea5ed66947b 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,8 +1,8 @@ #!/bin/sh NDPI_MAJOR="2" -NDPI_MINOR="3" -NDPI_PATCH="1" +NDPI_MINOR="5" +NDPI_PATCH="0" NDPI_VERSION_SHORT="$NDPI_MAJOR.$NDPI_MINOR.$NDPI_PATCH" rm -f configure config.h config.h.in src/lib/Makefile.in From 58a784e3429d9a41b544bdef73fe740f168b5750 Mon Sep 17 00:00:00 2001 From: alm-A <41326835+alm-A@users.noreply.github.com> Date: Wed, 22 Aug 2018 16:18:44 +0200 Subject: [PATCH 046/147] README add protocol : removed Makefile.am step --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5aff79ae9dc..6b5a20a11fb 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,9 @@ The entire procedure of adding new protocols in detail: 5. Choose (do not change anything) a selection bitmask from: src/include/ndpi_define.h 6. Add a new entry in ndpi_set_protocol_detection_bitmask2 in: src/lib/ndpi_main.c 7. Set protocol default ports in ndpi_init_protocol_defaults in: src/lib/ndpi_main.c -8. Add the new protocol file to: src/lib/Makefile.am -9. ./autogen.sh -10. ./configure -11. make -12. make check +8. ./autogen.sh +9. make +10. make check ### How to use nDPI to Block Selected Traffic From dd307af2156e5a7105d3be7895d7da51bc1dfbd1 Mon Sep 17 00:00:00 2001 From: alm-A <41326835+alm-A@users.noreply.github.com> Date: Wed, 22 Aug 2018 16:37:59 +0200 Subject: [PATCH 047/147] ndpi_typedefs.h : missing include include to ndpi_protocol_ids.h needed for: - NDPI_PROTOCOL_SIZE - NDPI_MAX_SUPPORTED_PROTOCOLS - NDPI_MAX_NUM_CUSTOM_PROTOCOLS --- src/include/ndpi_typedefs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 6a61b44fa1f..cd1c7b92555 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -25,6 +25,7 @@ #define __NDPI_TYPEDEFS_H__ #include "ndpi_define.h" +#include "ndpi_protocol_ids.h" /* Needed to have access to HAVE_* defines */ #include "ndpi_config.h" From ff83bfbad073c106b41ace67cf828d6982d29635 Mon Sep 17 00:00:00 2001 From: Campus Date: Thu, 23 Aug 2018 11:22:21 +0200 Subject: [PATCH 048/147] ADD: add prototype of function ht_free in hash.h - DEL: delete include file .c in ndpi_main.c --- src/lib/ndpi_main.c | 4 ++-- src/lib/third_party/include/hash.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b00212651d0..55af168e88f 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -43,9 +43,9 @@ #include "ndpi_content_match.c.inc" #include "third_party/include/ndpi_patricia.h" -#include "third_party/src/ndpi_patricia.c" +/* #include "third_party/src/ndpi_patricia.c" */ #include "third_party/include/hash.h" -#include "third_party/src/hash.c" +/* #include "third_party/src/hash.c" */ #ifdef HAVE_HYPERSCAN #include diff --git a/src/lib/third_party/include/hash.h b/src/lib/third_party/include/hash.h index 4f53e5a5e08..2251706e4cd 100644 --- a/src/lib/third_party/include/hash.h +++ b/src/lib/third_party/include/hash.h @@ -25,5 +25,6 @@ extern int ht_hash( hashtable_t *hashtable, char *key ); extern entry_t *ht_newpair( char *key, u_int16_t value ); extern void ht_set( hashtable_t *hashtable, char *key, u_int16_t value ); extern u_int16_t ht_get( hashtable_t *hashtable, char *key ); +extern void ht_free( hashtable_t *hashtable ); #endif /* _HASH_H_ */ From a98c0a81be86936e96be7d2312ae11ef85b785b2 Mon Sep 17 00:00:00 2001 From: Luca Date: Sat, 25 Aug 2018 10:50:16 +0200 Subject: [PATCH 049/147] Added target for shared liubrary creation Added target for install Fixes #593 --- Makefile.am | 7 +-- autogen.sh | 2 +- configure.seed | 4 +- libndpi.pc.in | 10 ---- libndpi.sym | 75 ----------------------------- src/lib/Makefile | 26 ---------- src/lib/Makefile.in | 49 +++++++++++++++++++ tests/result/ssdp-m-search.pcap.out | 3 ++ 8 files changed, 57 insertions(+), 119 deletions(-) delete mode 100644 libndpi.pc.in delete mode 100644 libndpi.sym delete mode 100644 src/lib/Makefile create mode 100644 src/lib/Makefile.in create mode 100644 tests/result/ssdp-m-search.pcap.out diff --git a/Makefile.am b/Makefile.am index 17c67481289..0642aec9d17 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,8 +1,3 @@ ACLOCAL_AMFLAGS = -I m4 - SUBDIRS = src/lib example tests - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libndpi.pc - -EXTRA_DIST = libndpi.sym autogen.sh +EXTRA_DIST = autogen.sh diff --git a/autogen.sh b/autogen.sh index ea5ed66947b..20bf400abad 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,7 +5,7 @@ NDPI_MINOR="5" NDPI_PATCH="0" NDPI_VERSION_SHORT="$NDPI_MAJOR.$NDPI_MINOR.$NDPI_PATCH" -rm -f configure config.h config.h.in src/lib/Makefile.in +rm -f configure config.h config.h.in AUTOCONF=$(command -v autoconf) AUTOMAKE=$(command -v automake) diff --git a/configure.seed b/configure.seed index 6b85c66e963..946557a33f4 100644 --- a/configure.seed +++ b/configure.seed @@ -10,6 +10,7 @@ AC_PROG_CC AM_PROG_CC_C_O AX_PTHREAD +NDPI_VERSION_SHORT="@NDPI_VERSION_SHORT@" NDPI_MAJOR="@NDPI_MAJOR@" NDPI_MINOR="@NDPI_MINOR@" NDPI_PATCH="@NDPI_PATCH@" @@ -127,12 +128,13 @@ AC_ARG_ENABLE([debug-messages], AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np])) -AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile libndpi.pc src/include/ndpi_define.h]) +AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile src/include/ndpi_define.h src/lib/Makefile]) AC_CONFIG_HEADERS(src/include/ndpi_config.h) AC_SUBST(GIT_RELEASE) AC_SUBST(NDPI_MAJOR) AC_SUBST(NDPI_MINOR) AC_SUBST(NDPI_PATCH) +AC_SUBST(NDPI_VERSION_SHORT) AC_SUBST(SVN_DATE) AC_SUBST(JSON_C_LIB) AC_SUBST(PCAP_INC) diff --git a/libndpi.pc.in b/libndpi.pc.in deleted file mode 100644 index 291429cc76f..00000000000 --- a/libndpi.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: libndpi -Description: deep packet inspection library -Version: @VERSION@ -Libs: -L${libdir} -lndpi -Cflags: -I${includedir}/libndpi-@VERSION@ diff --git a/libndpi.sym b/libndpi.sym deleted file mode 100644 index 66cffbb181f..00000000000 --- a/libndpi.sym +++ /dev/null @@ -1,75 +0,0 @@ -ndpi_dump_protocols -ndpi_strnstr -ndpi_detection_giveup -ndpi_get_proto_name -ndpi_free -ndpi_flow_free -ndpi_guess_undetected_protocol -ndpi_tfind -ndpi_tsearch -ndpi_set_protocol_detection_bitmask2 -ndpi_detection_get_sizeof_ndpi_id_struct -ndpi_detection_get_sizeof_ndpi_flow_struct -ndpi_load_protocols_file -ndpi_tdestroy -ndpi_exit_detection_module -ndpi_l4_detection_process_packet -ndpi_detection_process_packet -ndpi_process_extra_packet -ndpi_twalk -ndpi_tdelete -ndpi_revision -ndpi_init_detection_module -ndpi_get_num_supported_protocols -ndpi_set_proto_defaults -ndpi_get_protocol_id -ndpi_get_category_id -ndpi_find_port_based_protocol -ndpi_get_http_method -ndpi_get_http_url -ndpi_get_http_content_type -ndpi_free_flow -ndpi_get_proto_breed -ndpi_get_proto_breed_name -ndpi_get_proto_by_id -ndpi_get_proto_by_name -ndpi_get_protocol_id_master_proto -ndpi_guess_protocol_id -ndpi_protocol2name -ndpi_get_lower_proto -ndpi_is_proto -ndpi_malloc -ndpi_calloc -ndpi_set_detected_protocol -ndpi_match_string_subprotocol -ndpi_init_automa -ndpi_free_automa -ndpi_add_string_value_to_automa -ndpi_add_string_to_automa -ndpi_finalize_automa -ndpi_match_string -ndpi_match_string_id -set_ndpi_malloc -set_ndpi_flow_malloc -set_ndpi_free -set_ndpi_flow_free -set_ndpi_debug_function -ndpi_category_str -ndpi_get_proto_category -ndpi_netbios_name_interpret -ndpi_category_set_name -ndpi_category_get_name -ndpi_is_custom_category -ndpi_is_subprotocol_informative -ndpi_set_proto_category -ndpi_get_api_version -ndpi_network_ptree_match -ndpi_check_flow_func -ndpi_fill_protocol_category -ndpi_load_hostname_category -ndpi_enable_loaded_categories -ndpi_set_detection_preferences -ndpi_get_proto_defaults -ndpi_get_ndpi_num_supported_protocols -ndpi_get_ndpi_num_custom_protocols -ndpi_get_ndpi_detection_module_size diff --git a/src/lib/Makefile b/src/lib/Makefile deleted file mode 100644 index 19c6f1cfe30..00000000000 --- a/src/lib/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# -# Simple non-autotools dependent makefile -# -# ./autogen.sh -# cd src/lib -# make -f Makefile.simple -# -CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g -RANLIB = ranlib - -OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o -HEADERS = $(wildcard ../include/*.h) - -all: libndpi.a - -ndpi_main.c: ndpi_content_match.c.inc - -libndpi.a: $(OBJECTS) - ar rc $@ $(OBJECTS) - $(RANLIB) $@ - -%.o: %.c $(HEADERS) Makefile - $(CC) $(CFLAGS) -c $< -o $@ - -clean: - /bin/rm -f libndpi.a $(OBJECTS) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in new file mode 100644 index 00000000000..1bbc4095e2f --- /dev/null +++ b/src/lib/Makefile.in @@ -0,0 +1,49 @@ +# +# Simple non-autotools dependent makefile +# +# ./autogen.sh +# cd src/lib +# make Makefile +# + +# +# Installation directories +# +prefix = /usr/local +libdir = ${prefix}/lib +includedir = ${prefix}/include/ndpi + +CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g +RANLIB = ranlib + +OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o +HEADERS = $(wildcard ../include/*.h) +NDPI_LIB_STATIC = libndpi.a +NDPI_LIB_SHARED_BASE = libndpi.so +NDPI_LIB_SHARED = $(NDPI_LIB_SHARED_BASE).@NDPI_VERSION_SHORT@ +NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED) + +all: $(NDPI_LIBS) + +ndpi_main.c: ndpi_content_match.c.inc + +$(NDPI_LIB_STATIC): $(OBJECTS) + ar rc $@ $(OBJECTS) + $(RANLIB) $@ + +$(NDPI_LIB_SHARED): $(OBJECTS) + gcc -shared -fPIC -o $@ $(OBJECTS) + ln -Fs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) + +%.o: %.c $(HEADERS) Makefile + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + /bin/rm -f $(NDPI_LIB_STATIC) $(OBJECTS) *.o *.so *.lo + +install: $(NDPI_LIBS) + mkdir -p $(DESTDIR)$(libdir) + cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ + ln -Fs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) + mkdir -p $(DESTDIR)$(includedir) + cp ../include/*.h $(DESTDIR)$(includedir) diff --git a/tests/result/ssdp-m-search.pcap.out b/tests/result/ssdp-m-search.pcap.out new file mode 100644 index 00000000000..e975bfeb49f --- /dev/null +++ b/tests/result/ssdp-m-search.pcap.out @@ -0,0 +1,3 @@ +SSDP 19 1197 1 + + 1 UDP 192.168.242.8:42253 -> 192.168.242.255:32412 [proto: 12/SSDP][cat: System/18][19 pkts/1197 bytes -> 0 pkts/0 bytes] From 405e2f8dd01cfde121f4af2d95b0e7bc94d3e052 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Sat, 25 Aug 2018 23:35:42 +0200 Subject: [PATCH 050/147] Add back pkgconfig file. It is required by ntopng to find the installed shared library. --- Makefile.am | 4 ++++ configure.seed | 2 +- libndpi.pc.in | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 libndpi.pc.in diff --git a/Makefile.am b/Makefile.am index 0642aec9d17..37f0849162f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,3 +1,7 @@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src/lib example tests + +pkgconfigdir = $(prefix)/libdata/pkgconfig +pkgconfig_DATA = libndpi.pc + EXTRA_DIST = autogen.sh diff --git a/configure.seed b/configure.seed index 946557a33f4..24ca87413e4 100644 --- a/configure.seed +++ b/configure.seed @@ -128,7 +128,7 @@ AC_ARG_ENABLE([debug-messages], AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np])) -AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile src/include/ndpi_define.h src/lib/Makefile]) +AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile libndpi.pc src/include/ndpi_define.h src/lib/Makefile]) AC_CONFIG_HEADERS(src/include/ndpi_config.h) AC_SUBST(GIT_RELEASE) AC_SUBST(NDPI_MAJOR) diff --git a/libndpi.pc.in b/libndpi.pc.in new file mode 100644 index 00000000000..291429cc76f --- /dev/null +++ b/libndpi.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libndpi +Description: deep packet inspection library +Version: @VERSION@ +Libs: -L${libdir} -lndpi +Cflags: -I${includedir}/libndpi-@VERSION@ From d31a29bf6a0c8efa11203badff3afe9f3b19ce08 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Sun, 26 Aug 2018 00:35:01 +0200 Subject: [PATCH 051/147] Adapt pkgconfig file include path to new Makefile install location. --- libndpi.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libndpi.pc.in b/libndpi.pc.in index 291429cc76f..5e1cde70bfa 100644 --- a/libndpi.pc.in +++ b/libndpi.pc.in @@ -7,4 +7,4 @@ Name: libndpi Description: deep packet inspection library Version: @VERSION@ Libs: -L${libdir} -lndpi -Cflags: -I${includedir}/libndpi-@VERSION@ +Cflags: -I${includedir}/ndpi From 396e72f4fe79f9579f36a0ec963e12c29fddb0d1 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Mon, 27 Aug 2018 17:23:53 +0200 Subject: [PATCH 052/147] Move the configure include file inclusion and code depending on it in code protected by the NDPI_LIB_COMPILATION define, this should avoid it polluting the environment when including this file from ntopng. --- src/include/ndpi_typedefs.h | 16 ++++++++++++++++ src/lib/ndpi_main.c | 11 ----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index a3ed39c2dec..8a2aec2c5a8 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -854,6 +854,22 @@ typedef struct ndpi_proto { #ifdef NDPI_LIB_COMPILATION +/* Needed to have access to HAVE_* defines */ +#include "ndpi_config.h" + +#ifdef HAVE_HYPERSCAN +struct hs_list { + char *expression; + unsigned int id; + struct hs_list *next; +}; + +struct hs { + hs_database_t *database; + hs_scratch_t *scratch; +}; +#endif + struct ndpi_detection_module_struct { NDPI_PROTOCOL_BITMASK detection_bitmask; NDPI_PROTOCOL_BITMASK generic_http_packet_bitmask; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 2a51316fa9c..b8e22abe64c 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -49,17 +49,6 @@ #ifdef HAVE_HYPERSCAN #include - -struct hs_list { - char *expression; - unsigned int id; - struct hs_list *next; -}; - -struct hs { - hs_database_t *database; - hs_scratch_t *scratch; -}; #endif #define NDPI_CONST_GENERIC_PROTOCOL_NAME "GenericProtocol" From f948f3525fddaae23eef0b88680e2c4e17c050ae Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 09:59:39 +0200 Subject: [PATCH 053/147] Cleaned up makefile Used clang instead of gcc on MacOS --- example/Makefile.am | 12 ------------ src/lib/Makefile.in | 14 ++++++++++---- 2 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 example/Makefile.am diff --git a/example/Makefile.am b/example/Makefile.am deleted file mode 100644 index e50d8c05c0b..00000000000 --- a/example/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -bin_PROGRAMS = ndpiReader - -AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(top_srcdir)/src/lib/third_party/include @PCAP_INC@ @HS_INC@ -AM_CFLAGS = @PTHREAD_CFLAGS@ # --coverage - -LDADD = $(top_builddir)/src/lib/libndpi.a @JSON_C_LIB@ @PTHREAD_LIBS@ @PCAP_LIB@ @DL_LIB@ @HS_LIB@ -lm -AM_LDFLAGS = -static @DL_LIB@ @HS_LIB@ - -ndpiReader_SOURCES = ndpiReader.c ndpi_util.c ndpi_util.h uthash.h - -ndpiReader.o: ndpiReader.c - diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 1bbc4095e2f..62f1b12a25d 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -6,15 +6,17 @@ # make Makefile # +OS := $(shell uname -s) + # # Installation directories # prefix = /usr/local libdir = ${prefix}/lib includedir = ${prefix}/include/ndpi - -CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g -RANLIB = ranlib +CC = gcc +CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g +RANLIB = ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o HEADERS = $(wildcard ../include/*.h) @@ -23,6 +25,10 @@ NDPI_LIB_SHARED_BASE = libndpi.so NDPI_LIB_SHARED = $(NDPI_LIB_SHARED_BASE).@NDPI_VERSION_SHORT@ NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED) +ifeq ($(OS),Darwin) +CC=clang +endif + all: $(NDPI_LIBS) ndpi_main.c: ndpi_content_match.c.inc @@ -32,7 +38,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(RANLIB) $@ $(NDPI_LIB_SHARED): $(OBJECTS) - gcc -shared -fPIC -o $@ $(OBJECTS) + $(CC) -shared -fPIC -o $@ $(OBJECTS) ln -Fs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile From 0a33e439bde47d58391b14028ebcb50936926b78 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 10:05:53 +0200 Subject: [PATCH 054/147] Better clang handling --- configure.seed | 7 ++++++- src/lib/Makefile.in | 3 +-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/configure.seed b/configure.seed index 946557a33f4..bce16c7c44b 100644 --- a/configure.seed +++ b/configure.seed @@ -52,7 +52,12 @@ else AC_CHECK_LIB([numa], [numa_available], [LIBNUMA="-lnuma"]) fi - +if test -z `which clang`; then +CC=gcc +else +CC=clang +fi + HS_LIB= HS_INC= diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 62f1b12a25d..a0ac4a574ab 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -6,7 +6,6 @@ # make Makefile # -OS := $(shell uname -s) # # Installation directories @@ -14,7 +13,7 @@ OS := $(shell uname -s) prefix = /usr/local libdir = ${prefix}/lib includedir = ${prefix}/include/ndpi -CC = gcc +CC = @CC@ CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g RANLIB = ranlib From e4f01976a66f1943bde7b253b62430d36c6d9e74 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 11:10:30 +0200 Subject: [PATCH 055/147] Added missing categorization when giveup/guess is called Added optimization for TCP flows that do not start with a SYN packet: early giveup is performed Code cleanup --- src/include/ndpi_typedefs.h | 3 +- src/lib/ndpi_main.c | 75 ++++++++++--------- tests/result/1kxun.pcap.out | 16 ++-- tests/result/6in4tunnel.pcap.out | 4 +- tests/result/EAQ.pcap.out | 58 +++++++------- tests/result/Instagram.pcap.out | 24 +++--- tests/result/KakaoTalk_chat.pcap.out | 18 ++--- tests/result/KakaoTalk_talk.pcap.out | 22 +++--- tests/result/bittorrent_ip.pcap.out | 4 +- tests/result/coap_mqtt.pcap.out | 8 +- tests/result/diameter.pcap.out | 2 +- tests/result/dropbox.pcap.out | 8 +- tests/result/http_ipv6.pcap.out | 14 ++-- tests/result/mssql_tds.pcap.out | 2 +- tests/result/netflix.pcap.out | 2 +- tests/result/nintendo.pcap.out | 14 ++-- tests/result/ocs.pcap.out | 12 +-- tests/result/pps.pcap.out | 4 +- tests/result/skype.pcap.out | 68 ++++++++--------- tests/result/skype_no_unknown.pcap.out | 60 +++++++-------- tests/result/starcraft_battle.pcap.out | 46 ++++++------ tests/result/teredo.pcap.out | 10 +-- tests/result/tor.pcap.out | 2 +- tests/result/viber.pcap.out | 14 ++-- tests/result/waze.pcap.out | 18 ++--- tests/result/webex.pcap.out | 36 ++++----- tests/result/wechat.pcap.out | 62 +++++++-------- tests/result/weibo.pcap.out | 40 +++++----- tests/result/whatsapp_login_call.pcap.out | 72 +++++++++--------- tests/result/whatsapp_login_chat.pcap.out | 2 +- .../whatsapp_voice_and_message.pcap.out | 16 ++-- 31 files changed, 372 insertions(+), 364 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index a3ed39c2dec..0e069ae77c3 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -989,7 +989,6 @@ struct ndpi_flow_struct { /* init parameter, internal used to set up timestamp,... */ u_int16_t guessed_protocol_id, guessed_host_protocol_id, guessed_category; - u_int8_t protocol_id_already_guessed:1, host_already_guessed:1, init_finished:1, setup_packet_direction:1, packet_direction:1, check_extra_packets:1; /* @@ -1000,6 +999,8 @@ struct ndpi_flow_struct { u_int8_t max_extra_packets_to_check; u_int8_t num_extra_packets_checked; + u_int8_t num_processed_pkts; /* <= WARNING it can wrap but we do expect people to giveup earlier */ + int (*extra_packets_func) (struct ndpi_detection_module_struct *, struct ndpi_flow_struct *flow); /* diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 2a51316fa9c..b5d587dce14 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3516,7 +3516,7 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str if(flow->packet.l4_packet_len >=flow->packet.tcp->doff * 4) { flow->packet.payload_packet_len = flow->packet.l4_packet_len -flow->packet.tcp->doff * 4; - flow->packet.actual_payload_len =flow->packet.payload_packet_len; + flow->packet.actual_payload_len = flow->packet.payload_packet_len; flow->packet.payload = ((u_int8_t *)flow->packet.tcp) + (flow->packet.tcp->doff * 4); /* check for new tcp syn packets, here @@ -3526,15 +3526,17 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str && flow->packet.tcp->ack == 0 && flow->init_finished != 0 && flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { - if(flow->http.url) - ndpi_free(flow->http.url); - if(flow->http.content_type) - ndpi_free(flow->http.content_type); - memset(flow, 0, sizeof(*(flow))); + u_int8_t backup; + + if(flow->http.url) ndpi_free(flow->http.url); + if(flow->http.content_type) ndpi_free(flow->http.content_type); + backup = flow->num_processed_pkts; + memset(flow, 0, sizeof(*(flow))); + flow->num_processed_pkts = backup; + NDPI_LOG_DBG(ndpi_struct, "tcp syn packet for unknown protocol, reset detection state\n"); - } } else { /* tcp header not complete */ @@ -3547,6 +3549,7 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str } else { flow->packet.generic_l4_ptr = l4ptr; } + return 0; } @@ -3837,7 +3840,6 @@ void check_ndpi_tcp_flow_func(struct ndpi_detection_module_struct *ndpi_struct, } } - /* ********************************************************************************* */ void ndpi_check_flow_func(struct ndpi_detection_module_struct *ndpi_struct, @@ -3932,6 +3934,7 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st } ret.master_protocol = flow->detected_protocol_stack[1], ret.app_protocol = flow->detected_protocol_stack[0]; + ndpi_fill_protocol_category(ndpi_struct, flow, &ret); return(ret); } @@ -4236,6 +4239,8 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct u_int32_t a; ndpi_protocol ret = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED }; + flow->num_processed_pkts++; + if(ndpi_struct->ndpi_log_level >= NDPI_LOG_TRACE) NDPI_LOG(flow ? flow->detected_protocol_stack[0]:NDPI_PROTOCOL_UNKNOWN, ndpi_struct, NDPI_LOG_TRACE, "START packet processing\n"); @@ -4264,7 +4269,6 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct return(ret); /* detect traffic for tcp or udp only */ - flow->src = src, flow->dst = dst; ndpi_connection_tracking(ndpi_struct, flow); @@ -4367,6 +4371,7 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct ndpi_check_flow_func(ndpi_struct, flow, &ndpi_selection_packet); ndpi_fill_protocol_category(ndpi_struct, flow, &ret); + return(ret); } @@ -4395,6 +4400,24 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct ret.app_protocol = flow->detected_protocol_stack[0]; ndpi_fill_protocol_category(ndpi_struct, flow, &ret); + + if((flow->num_processed_pkts == 1) + && (ret.master_protocol == NDPI_PROTOCOL_UNKNOWN) + && (ret.app_protocol == NDPI_PROTOCOL_UNKNOWN) + && flow->packet.tcp + && (flow->packet.tcp->syn == 0) + ) { + /* + This is a TCP flow + - whose first packet is NOT a SYN + - no protocol has been detected + + We don't see how future packets can match anything + hence we giveup here + */ + ret = ndpi_detection_giveup(ndpi_struct, flow); + } + return(ret); } @@ -4613,7 +4636,6 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc strncpy((char*)flow->http.response_status_code, (char*)packet->http_response.ptr, 3); flow->http.response_status_code[4]='\0'; - NDPI_LOG_DBG2(ndpi_struct, "ndpi_parse_packet_line_info: HTTP response parsed: \"%.*s\"\n", packet->http_response.len, packet->http_response.ptr); @@ -5045,27 +5067,6 @@ void ndpi_int_change_category(struct ndpi_detection_module_struct *ndpi_struct, /* ********************************************************************************* */ -/* change protocol only if guessing is active */ -/* void ndpi_guess_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, */ -/* struct ndpi_flow_struct *flow) */ -/* { */ -/* if(flow->guessed_host_protocol_id != 0 && */ -/* flow->guessed_protocol_id != 0) { */ -/* /\* app proto for flow *\/ */ -/* flow->detected_protocol_stack[0] = flow->guessed_host_protocol_id; */ -/* /\* master proto for flow *\/ */ -/* flow->detected_protocol_stack[1] = flow->guessed_protocol_id; */ - -/* /\* app proto for packet *\/ */ -/* flow->packet.detected_protocol_stack[0] = flow->guessed_host_protocol_id; */ -/* /\* master proto for packet *\/ */ -/* flow->packet.detected_protocol_stack[1] = flow->guessed_protocol_id; */ - -/* } */ -/* } */ - -/* ********************************************************************************* */ - /* turns a packet back to unknown */ void ndpi_int_reset_packet_protocol(struct ndpi_packet_struct *packet) { int a; @@ -5297,11 +5298,13 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct if(rc != NDPI_PROTOCOL_UNKNOWN) { ret.app_protocol = rc, - ret.master_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, dport, &user_defined_proto); + ret.master_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, + dport, &user_defined_proto); if(ret.app_protocol == ret.master_protocol) ret.master_protocol = NDPI_PROTOCOL_UNKNOWN; + ret.category = ndpi_get_proto_category(ndpi_struct, ret); return(ret); } @@ -5311,8 +5314,10 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct if(rc == NDPI_PROTOCOL_SSL) goto check_guessed_skype; - else + else { + ret.category = ndpi_get_proto_category(ndpi_struct, ret); return(ret); + } } check_guessed_skype: @@ -5325,8 +5330,10 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct ret.app_protocol = NDPI_PROTOCOL_SKYPE; } } else - ret.app_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, dport, &user_defined_proto); + ret.app_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, + dport, &user_defined_proto); + ret.category = ndpi_get_proto_category(ndpi_struct, ret); return(ret); } diff --git a/tests/result/1kxun.pcap.out b/tests/result/1kxun.pcap.out index 5e37a65af00..e02ddac2f50 100644 --- a/tests/result/1kxun.pcap.out +++ b/tests/result/1kxun.pcap.out @@ -28,17 +28,17 @@ LLMNR 89 6799 47 11 TCP 192.168.5.16:53628 <-> 203.69.81.73:80 [proto: 7/HTTP][cat: Web/5][6 pkts/676 bytes <-> 8 pkts/8482 bytes][Host: dl-obs.official.line.naver.jp] 12 UDP [fe80::9bd:81dd:2fdc:5750]:1900 -> [ff02::c]:1900 [proto: 12/SSDP][cat: System/18][16 pkts/8921 bytes -> 0 pkts/0 bytes] 13 UDP 192.168.5.49:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][16 pkts/8473 bytes -> 0 pkts/0 bytes] - 14 TCP 119.235.235.84:443 <-> 192.168.5.16:53406 [proto: 91/SSL][13 pkts/6269 bytes <-> 10 pkts/1165 bytes] + 14 TCP 119.235.235.84:443 <-> 192.168.5.16:53406 [proto: 91/SSL][cat: Web/5][13 pkts/6269 bytes <-> 10 pkts/1165 bytes] 15 TCP 192.168.115.8:49608 <-> 203.205.151.234:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][18 pkts/3550 bytes <-> 7 pkts/1400 bytes][Host: vv.video.qq.com] 16 UDP 192.168.119.1:67 -> 255.255.255.255:68 [proto: 18/DHCP][cat: Network/14][14 pkts/4788 bytes -> 0 pkts/0 bytes] - 17 TCP 192.168.5.16:53580 <-> 31.13.87.36:443 [proto: 91.119/SSL.Facebook][4 pkts/2050 bytes <-> 5 pkts/2297 bytes] + 17 TCP 192.168.5.16:53580 <-> 31.13.87.36:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][4 pkts/2050 bytes <-> 5 pkts/2297 bytes] 18 TCP 192.168.5.16:53623 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1959 bytes <-> 8 pkts/1683 bytes][client: 1] 19 TCP 192.168.5.16:53625 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1955 bytes <-> 8 pkts/1683 bytes][client: 1] 20 TCP 192.168.5.16:53629 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][10 pkts/1895 bytes <-> 7 pkts/1623 bytes][client: 1] 21 TCP 192.168.115.8:49605 <-> 106.185.35.110:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][8 pkts/1128 bytes <-> 5 pkts/2282 bytes][Host: jp.kankan.1kxun.mobi] 22 TCP 192.168.5.16:53626 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][11 pkts/1943 bytes <-> 8 pkts/1267 bytes][client: 1] 23 TCP 192.168.115.8:49597 <-> 106.185.35.110:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][10 pkts/1394 bytes <-> 4 pkts/1464 bytes][Host: jp.kankan.1kxun.mobi] - 24 TCP 31.13.87.1:443 <-> 192.168.5.16:53578 [proto: 91.119/SSL.Facebook][5 pkts/1006 bytes <-> 5 pkts/1487 bytes] + 24 TCP 31.13.87.1:443 <-> 192.168.5.16:53578 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][5 pkts/1006 bytes <-> 5 pkts/1487 bytes] 25 UDP 192.168.5.57:55809 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/2450 bytes -> 0 pkts/0 bytes] 26 TCP 192.168.115.8:49598 <-> 222.73.254.167:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][10 pkts/1406 bytes <-> 4 pkts/980 bytes][Host: kankan.1kxun.com] 27 TCP 192.168.115.8:49612 <-> 183.131.48.145:80 [proto: 7/HTTP][cat: Web/5][10 pkts/1428 bytes <-> 4 pkts/867 bytes][Host: 183.131.48.145] @@ -63,7 +63,7 @@ LLMNR 89 6799 47 46 UDP [fe80::406:55a8:6453:25dd]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][5 pkts/490 bytes -> 0 pkts/0 bytes] 47 UDP [fe80::beee:7bff:fe0c:b3de]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][4 pkts/392 bytes -> 0 pkts/0 bytes] 48 UDP 192.168.5.16:63372 <-> 168.95.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/89 bytes <-> 1 pkts/289 bytes][Host: dl-obs.official.line.naver.jp] - 49 TCP 192.168.115.8:49596 <-> 203.66.182.87:443 [proto: 91/SSL][4 pkts/220 bytes <-> 2 pkts/132 bytes] + 49 TCP 192.168.115.8:49596 <-> 203.66.182.87:443 [proto: 91/SSL][cat: Web/5][4 pkts/220 bytes <-> 2 pkts/132 bytes] 50 UDP 192.168.5.9:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: joanna-pc] 51 UDP 192.168.5.41:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: kevin-pc] 52 UDP 192.168.115.8:60724 <-> 8.8.8.8:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/146 bytes <-> 1 pkts/137 bytes][Host: pic.1kxun.com] @@ -73,7 +73,7 @@ LLMNR 89 6799 47 56 UDP 192.168.115.8:52723 <-> 8.8.8.8:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] 57 UDP 192.168.115.8:52723 <-> 168.95.1.1:53 [proto: 5.137/DNS.GenericProtocol][cat: Streaming/17][2 pkts/152 bytes <-> 1 pkts/108 bytes][Host: kankan.1kxun.com] 58 UDP 192.168.115.8:51458 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][4 pkts/256 bytes -> 0 pkts/0 bytes][Host: wpad] - 59 TCP 192.168.5.16:53613 -> 68.233.253.133:80 [proto: 7/HTTP][3 pkts/198 bytes -> 0 pkts/0 bytes] + 59 TCP 192.168.5.16:53613 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][3 pkts/198 bytes -> 0 pkts/0 bytes] 60 UDP [fe80::9bd:81dd:2fdc:5750]:61548 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] 61 UDP [fe80::9bd:81dd:2fdc:5750]:64568 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/190 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] 62 UDP 192.168.5.45:137 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][2 pkts/184 bytes -> 0 pkts/0 bytes] @@ -83,7 +83,7 @@ LLMNR 89 6799 47 66 UDP [fe80::e034:7be:d8f9:6197]:49766 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/182 bytes -> 0 pkts/0 bytes][Host: charming-pc] 67 UDP [fe80::5d92:62a8:ebde:1319]:49735 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] 68 UDP [fe80::5d92:62a8:ebde:1319]:58468 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/178 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 69 TCP 192.168.115.8:49581 <-> 64.233.189.128:80 [proto: 7.126/HTTP.Google][2 pkts/110 bytes <-> 1 pkts/66 bytes] + 69 TCP 192.168.115.8:49581 <-> 64.233.189.128:80 [proto: 7.126/HTTP.Google][cat: Web/5][2 pkts/110 bytes <-> 1 pkts/66 bytes] 70 UDP [fe80::4568:efbc:40b1:1346]:50194 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] 71 UDP [fe80::4568:efbc:40b1:1346]:57148 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: kevin-pc] 72 UDP [fe80::5d92:62a8:ebde:1319]:61172 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/174 bytes -> 0 pkts/0 bytes][Host: sonusav] @@ -116,8 +116,8 @@ LLMNR 89 6799 47 99 UDP 192.168.3.236:56043 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] 100 UDP 192.168.5.47:53962 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: ro_x1c] 101 UDP 192.168.5.47:61603 -> 224.0.0.252:5355 [proto: 87/RTP][cat: Media/1][2 pkts/132 bytes -> 0 pkts/0 bytes] - 102 TCP 192.168.5.16:53605 -> 68.233.253.133:80 [proto: 7/HTTP][2 pkts/126 bytes -> 0 pkts/0 bytes] - 103 TCP 192.168.5.16:53622 <-> 192.168.115.75:443 [proto: 91/SSL][1 pkts/60 bytes <-> 1 pkts/60 bytes] + 102 TCP 192.168.5.16:53605 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][2 pkts/126 bytes -> 0 pkts/0 bytes] + 103 TCP 192.168.5.16:53622 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes <-> 1 pkts/60 bytes] 104 UDP [fe80::f65c:89ff:fe89:e607]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][1 pkts/98 bytes -> 0 pkts/0 bytes] 105 UDP 192.168.5.45:59461 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 106 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/6in4tunnel.pcap.out b/tests/result/6in4tunnel.pcap.out index 28b2f571613..32ddda1688e 100644 --- a/tests/result/6in4tunnel.pcap.out +++ b/tests/result/6in4tunnel.pcap.out @@ -11,6 +11,6 @@ Facebook 37 14726 3 5 ICMPV6 [2a03:2880:1010:6f03:face:b00c::2]:0 -> [2001:470:1f17:13f:3e97:eff:fe73:4dec]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/1314 bytes -> 0 pkts/0 bytes] 6 UDP [2001:470:1f16:13f::2]:53959 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/133 bytes <-> 1 pkts/273 bytes][Host: star.c10r.facebook.com] 7 UDP [2001:470:1f16:13f::2]:6404 <-> [2a03:2880:fffe:b:face:b00c::99]:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/133 bytes <-> 1 pkts/261 bytes][Host: star.c10r.facebook.com] - 8 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:35610 [proto: 51/IMAPS][1 pkts/152 bytes <-> 1 pkts/106 bytes] - 9 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:56381 [proto: 51/IMAPS][1 pkts/152 bytes <-> 1 pkts/106 bytes] + 8 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:35610 [proto: 51/IMAPS][cat: Email/3][1 pkts/152 bytes <-> 1 pkts/106 bytes] + 9 TCP [2604:a880:1:20::224:b001]:993 <-> [2001:470:1f17:13f:6d69:c72:7313:616f]:56381 [proto: 51/IMAPS][cat: Email/3][1 pkts/152 bytes <-> 1 pkts/106 bytes] 10 ICMPV6 [2001:470:1f16:13f::2]:0 -> [2604:a880:1:20::224:b001]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/200 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/EAQ.pcap.out b/tests/result/EAQ.pcap.out index 673f8309d43..88828fa6743 100644 --- a/tests/result/EAQ.pcap.out +++ b/tests/result/EAQ.pcap.out @@ -3,32 +3,32 @@ EAQ 174 10092 29 1 TCP 10.8.0.1:40467 <-> 173.194.119.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][8 pkts/591 bytes <-> 6 pkts/9998 bytes][Host: www.google.com.br] 2 TCP 10.8.0.1:53497 <-> 173.194.119.48:80 [proto: 7.126/HTTP.Google][cat: Web/5][5 pkts/390 bytes <-> 4 pkts/764 bytes][Host: www.google.com] - 3 UDP 10.8.0.1:39185 <-> 200.194.132.67:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 4 UDP 10.8.0.1:42620 <-> 200.194.148.66:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 5 UDP 10.8.0.1:43641 <-> 200.194.148.68:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 6 UDP 10.8.0.1:43979 <-> 200.194.132.66:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 7 UDP 10.8.0.1:48890 <-> 200.185.125.226:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 8 UDP 10.8.0.1:51569 <-> 200.194.148.67:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 9 UDP 10.8.0.1:52257 <-> 200.185.138.146:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 10 UDP 10.8.0.1:52726 <-> 200.194.132.68:6000 [proto: 190/EAQ][5 pkts/290 bytes <-> 5 pkts/290 bytes] - 11 UDP 10.8.0.1:34687 -> 200.194.141.68:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 12 UDP 10.8.0.1:37985 -> 200.194.129.67:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 13 UDP 10.8.0.1:39221 -> 200.194.137.67:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 14 UDP 10.8.0.1:41438 -> 200.194.141.66:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 15 UDP 10.8.0.1:47714 -> 200.194.129.68:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 16 UDP 10.8.0.1:48563 -> 200.194.141.67:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 17 UDP 10.8.0.1:48666 -> 200.194.129.66:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 18 UDP 10.8.0.1:53354 -> 200.194.137.66:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 19 UDP 10.8.0.1:56128 -> 200.194.133.66:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 20 UDP 10.8.0.1:59959 -> 200.194.137.68:6000 [proto: 190/EAQ][5 pkts/290 bytes -> 0 pkts/0 bytes] - 21 UDP 10.8.0.1:33356 -> 200.194.149.66:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 22 UDP 10.8.0.1:36552 -> 200.194.136.66:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 23 UDP 10.8.0.1:36577 -> 200.194.149.68:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 24 UDP 10.8.0.1:40058 -> 200.194.134.67:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 25 UDP 10.8.0.1:43934 -> 200.194.136.68:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 26 UDP 10.8.0.1:47346 -> 200.194.134.66:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 27 UDP 10.8.0.1:50175 -> 200.194.149.67:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 28 UDP 10.8.0.1:53059 -> 200.194.133.68:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 29 UDP 10.8.0.1:57004 -> 200.194.133.67:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 30 UDP 10.8.0.1:59098 -> 200.194.134.68:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] - 31 UDP 10.8.0.1:60013 -> 200.194.136.67:6000 [proto: 190/EAQ][4 pkts/232 bytes -> 0 pkts/0 bytes] + 3 UDP 10.8.0.1:39185 <-> 200.194.132.67:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 4 UDP 10.8.0.1:42620 <-> 200.194.148.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 5 UDP 10.8.0.1:43641 <-> 200.194.148.68:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 6 UDP 10.8.0.1:43979 <-> 200.194.132.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 7 UDP 10.8.0.1:48890 <-> 200.185.125.226:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 8 UDP 10.8.0.1:51569 <-> 200.194.148.67:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 9 UDP 10.8.0.1:52257 <-> 200.185.138.146:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 10 UDP 10.8.0.1:52726 <-> 200.194.132.68:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 11 UDP 10.8.0.1:34687 -> 200.194.141.68:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 12 UDP 10.8.0.1:37985 -> 200.194.129.67:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 13 UDP 10.8.0.1:39221 -> 200.194.137.67:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 14 UDP 10.8.0.1:41438 -> 200.194.141.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 15 UDP 10.8.0.1:47714 -> 200.194.129.68:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 16 UDP 10.8.0.1:48563 -> 200.194.141.67:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 17 UDP 10.8.0.1:48666 -> 200.194.129.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 18 UDP 10.8.0.1:53354 -> 200.194.137.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 19 UDP 10.8.0.1:56128 -> 200.194.133.66:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 20 UDP 10.8.0.1:59959 -> 200.194.137.68:6000 [proto: 190/EAQ][cat: Network/14][5 pkts/290 bytes -> 0 pkts/0 bytes] + 21 UDP 10.8.0.1:33356 -> 200.194.149.66:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 22 UDP 10.8.0.1:36552 -> 200.194.136.66:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 23 UDP 10.8.0.1:36577 -> 200.194.149.68:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 24 UDP 10.8.0.1:40058 -> 200.194.134.67:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 25 UDP 10.8.0.1:43934 -> 200.194.136.68:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 26 UDP 10.8.0.1:47346 -> 200.194.134.66:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 27 UDP 10.8.0.1:50175 -> 200.194.149.67:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 28 UDP 10.8.0.1:53059 -> 200.194.133.68:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 29 UDP 10.8.0.1:57004 -> 200.194.133.67:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 30 UDP 10.8.0.1:59098 -> 200.194.134.68:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] + 31 UDP 10.8.0.1:60013 -> 200.194.136.67:6000 [proto: 190/EAQ][cat: Network/14][4 pkts/232 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/Instagram.pcap.out b/tests/result/Instagram.pcap.out index 416c11dca90..9a34e200889 100644 --- a/tests/result/Instagram.pcap.out +++ b/tests/result/Instagram.pcap.out @@ -6,22 +6,22 @@ Facebook 251 215986 5 Dropbox 5 725 2 Instagram 363 255094 16 - 1 TCP 31.13.86.52:80 <-> 192.168.0.103:58216 [proto: 7.119/HTTP.Facebook][103 pkts/150456 bytes <-> 47 pkts/3102 bytes] + 1 TCP 31.13.86.52:80 <-> 192.168.0.103:58216 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][103 pkts/150456 bytes <-> 47 pkts/3102 bytes] 2 TCP 192.168.0.103:38816 <-> 46.33.70.160:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][13 pkts/1118 bytes <-> 39 pkts/57876 bytes][Host: photos-h.ak.instagram.com] 3 TCP 192.168.0.103:58052 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][37 pkts/2702 bytes <-> 38 pkts/54537 bytes][Host: photos-g.ak.instagram.com] 4 TCP 192.168.0.103:44379 <-> 82.85.26.186:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][41 pkts/3392 bytes <-> 40 pkts/50024 bytes][Host: photos-e.ak.instagram.com] 5 TCP 192.168.0.103:57936 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][24 pkts/1837 bytes <-> 34 pkts/48383 bytes][Host: photos-g.ak.instagram.com] - 6 TCP 192.168.0.103:33936 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][34 pkts/5555 bytes <-> 34 pkts/40133 bytes] - 7 TCP 2.22.236.51:80 <-> 192.168.0.103:44151 [proto: 7/HTTP][25 pkts/37100 bytes <-> 24 pkts/1584 bytes] - 8 TCP 192.168.0.103:33976 <-> 77.67.29.17:80 [proto: 7/HTTP][14 pkts/924 bytes <-> 20 pkts/28115 bytes] - 9 TCP 92.122.48.138:80 <-> 192.168.0.103:41562 [proto: 7/HTTP][16 pkts/22931 bytes <-> 9 pkts/594 bytes] + 6 TCP 192.168.0.103:33936 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][34 pkts/5555 bytes <-> 34 pkts/40133 bytes] + 7 TCP 2.22.236.51:80 <-> 192.168.0.103:44151 [proto: 7/HTTP][cat: Web/5][25 pkts/37100 bytes <-> 24 pkts/1584 bytes] + 8 TCP 192.168.0.103:33976 <-> 77.67.29.17:80 [proto: 7/HTTP][cat: Web/5][14 pkts/924 bytes <-> 20 pkts/28115 bytes] + 9 TCP 92.122.48.138:80 <-> 192.168.0.103:41562 [proto: 7/HTTP][cat: Web/5][16 pkts/22931 bytes <-> 9 pkts/594 bytes] 10 TCP 192.168.0.103:60908 <-> 46.33.70.136:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][10 pkts/1369 bytes <-> 9 pkts/7971 bytes][client: igcdn-photos-g-a.akamaihd.net][server: a248.e.akamai.net] 11 TCP 192.168.0.103:44558 <-> 46.33.70.174:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][10 pkts/1545 bytes <-> 7 pkts/4824 bytes][client: igcdn-photos-h-a.akamaihd.net][server: a248.e.akamai.net] - 12 TCP 31.13.93.52:443 <-> 192.168.0.103:33934 [proto: 91.119/SSL.Facebook][6 pkts/4699 bytes <-> 6 pkts/1345 bytes] + 12 TCP 31.13.93.52:443 <-> 192.168.0.103:33934 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][6 pkts/4699 bytes <-> 6 pkts/1345 bytes] 13 TCP 192.168.0.103:41181 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] 14 TCP 192.168.0.103:41182 <-> 82.85.26.154:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][8 pkts/896 bytes <-> 6 pkts/4671 bytes][client: igcdn-photos-a-a.akamaihd.net][server: a248.e.akamai.net] - 15 TCP 192.168.0.103:33763 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][5 pkts/1279 bytes <-> 6 pkts/4118 bytes] - 16 TCP 192.168.0.103:33935 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][5 pkts/1279 bytes <-> 5 pkts/4020 bytes] + 15 TCP 192.168.0.103:33763 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][5 pkts/1279 bytes <-> 6 pkts/4118 bytes] + 16 TCP 192.168.0.103:33935 <-> 31.13.93.52:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][5 pkts/1279 bytes <-> 5 pkts/4020 bytes] 17 TCP 192.168.0.103:57965 <-> 82.85.26.185:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][4 pkts/559 bytes <-> 3 pkts/3456 bytes][Host: photos-f.ak.instagram.com] 18 TCP 192.168.0.103:56382 <-> 173.252.107.4:443 [proto: 91.211/SSL.Instagram][cat: SocialNetwork/6][9 pkts/1583 bytes <-> 8 pkts/1064 bytes][client: telegraph-ash.instagram.com] 19 UDP 192.168.0.106:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/580 bytes -> 0 pkts/0 bytes] @@ -31,11 +31,11 @@ Instagram 363 255094 16 23 TCP 192.168.0.103:58053 -> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][1 pkts/321 bytes -> 0 pkts/0 bytes][Host: photos-g.ak.instagram.com] 24 UDP 192.168.0.103:26540 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-g-a.akamaihd.net] 25 UDP 192.168.0.103:33603 <-> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/89 bytes <-> 1 pkts/209 bytes][Host: igcdn-photos-a-a.akamaihd.net] - 26 TCP 192.168.0.103:38817 <-> 46.33.70.160:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 27 TCP 192.168.0.103:57966 <-> 82.85.26.185:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 28 TCP 192.168.0.103:58690 -> 46.33.70.159:443 [proto: 91/SSL][2 pkts/169 bytes -> 0 pkts/0 bytes] + 26 TCP 192.168.0.103:38817 <-> 46.33.70.160:80 [proto: 7/HTTP][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 27 TCP 192.168.0.103:57966 <-> 82.85.26.185:80 [proto: 7/HTTP][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 28 TCP 192.168.0.103:58690 -> 46.33.70.159:443 [proto: 91/SSL][cat: Web/5][2 pkts/169 bytes -> 0 pkts/0 bytes] 29 UDP 192.168.0.106:17500 -> 192.168.0.255:17500 [proto: 121/Dropbox][cat: Cloud/13][1 pkts/145 bytes -> 0 pkts/0 bytes] - 30 TCP 46.33.70.150:80 <-> 192.168.0.103:40855 [proto: 7/HTTP][1 pkts/74 bytes <-> 1 pkts/66 bytes] + 30 TCP 46.33.70.150:80 <-> 192.168.0.103:40855 [proto: 7/HTTP][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/66 bytes] 31 UDP 192.168.0.103:27124 -> 8.8.8.8:53 [proto: 5.211/DNS.Instagram][cat: SocialNetwork/6][1 pkts/85 bytes -> 0 pkts/0 bytes][Host: photos-b.ak.instagram.com] diff --git a/tests/result/KakaoTalk_chat.pcap.out b/tests/result/KakaoTalk_chat.pcap.out index 4753451223d..2648cce2aaa 100644 --- a/tests/result/KakaoTalk_chat.pcap.out +++ b/tests/result/KakaoTalk_chat.pcap.out @@ -15,14 +15,14 @@ KakaoTalk 55 9990 15 5 TCP 10.24.82.188:45213 <-> 31.13.68.84:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][15 pkts/2508 bytes <-> 13 pkts/5053 bytes][server: *.facebook.com] 6 TCP 10.24.82.188:35511 <-> 173.252.97.2:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][18 pkts/2390 bytes <-> 18 pkts/4762 bytes][server: *.facebook.com] 7 TCP 10.24.82.188:37821 <-> 210.103.240.15:443 [proto: 91.193/SSL.KakaoTalk][cat: VoIP/10][13 pkts/2036 bytes <-> 14 pkts/5090 bytes][server: *.kakao.com] - 8 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][17 pkts/2231 bytes <-> 9 pkts/1695 bytes] - 9 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][9 pkts/1737 bytes <-> 9 pkts/672 bytes] + 8 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][cat: Web/5][17 pkts/2231 bytes <-> 9 pkts/1695 bytes] + 9 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][cat: Web/5][9 pkts/1737 bytes <-> 9 pkts/672 bytes] 10 TCP 10.24.82.188:58964 <-> 54.255.253.199:5223 [proto: 91/SSL][cat: Web/5][3 pkts/290 bytes <-> 3 pkts/1600 bytes][server: *.push.samsungosp.com] 11 TCP 10.24.82.188:37557 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 6 pkts/627 bytes][Host: www.facebook.com] 12 TCP 10.24.82.188:37553 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 5 pkts/571 bytes][Host: www.facebook.com] - 13 TCP 216.58.221.10:80 <-> 10.24.82.188:35922 [proto: 7.126/HTTP.Google][7 pkts/392 bytes <-> 7 pkts/392 bytes] - 14 TCP 10.24.82.188:42332 <-> 210.103.240.15:443 [proto: 91/SSL][2 pkts/112 bytes <-> 3 pkts/168 bytes] - 15 TCP 31.13.68.73:443 <-> 10.24.82.188:47007 [proto: 91.119/SSL.Facebook][2 pkts/139 bytes <-> 2 pkts/112 bytes] + 13 TCP 216.58.221.10:80 <-> 10.24.82.188:35922 [proto: 7.126/HTTP.Google][cat: Web/5][7 pkts/392 bytes <-> 7 pkts/392 bytes] + 14 TCP 10.24.82.188:42332 <-> 210.103.240.15:443 [proto: 91/SSL][cat: Web/5][2 pkts/112 bytes <-> 3 pkts/168 bytes] + 15 TCP 31.13.68.73:443 <-> 10.24.82.188:47007 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][2 pkts/139 bytes <-> 2 pkts/112 bytes] 16 UDP 10.24.82.188:57816 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/78 bytes <-> 1 pkts/166 bytes][Host: katalk.kakao.com] 17 UDP 10.24.82.188:4017 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/85 bytes <-> 1 pkts/144 bytes][Host: developers.facebook.com] 18 UDP 10.24.82.188:19582 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/80 bytes <-> 1 pkts/138 bytes][Host: graph.facebook.com] @@ -40,9 +40,9 @@ KakaoTalk 55 9990 15 30 UDP 10.24.82.188:24596 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/118 bytes][Host: api.facebook.com] 31 UDP 10.24.82.188:38448 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: auth.kakao.com] 32 UDP 10.24.82.188:58810 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: item.kakao.com] - 33 TCP 10.24.82.188:58927 -> 54.255.253.199:5223 [proto: 178/Amazon][2 pkts/181 bytes -> 0 pkts/0 bytes] + 33 TCP 10.24.82.188:58927 -> 54.255.253.199:5223 [proto: 178/Amazon][cat: Web/5][2 pkts/181 bytes -> 0 pkts/0 bytes] 34 UDP 10.24.82.188:43077 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/97 bytes][Host: dn-l.talk.kakao.com] - 35 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][1 pkts/164 bytes -> 0 pkts/0 bytes] + 35 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][cat: Web/5][1 pkts/164 bytes -> 0 pkts/0 bytes] 36 ICMP 10.24.82.188:0 -> 10.188.191.1:0 [proto: 81/ICMP][cat: Network/14][1 pkts/147 bytes -> 0 pkts/0 bytes] - 37 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][1 pkts/83 bytes -> 0 pkts/0 bytes] - 38 TCP 120.28.26.242:80 -> 10.24.82.188:34503 [proto: 7/HTTP][1 pkts/56 bytes -> 0 pkts/0 bytes] + 37 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/83 bytes -> 0 pkts/0 bytes] + 38 TCP 120.28.26.242:80 -> 10.24.82.188:34503 [proto: 7/HTTP][cat: Web/5][1 pkts/56 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/KakaoTalk_talk.pcap.out b/tests/result/KakaoTalk_talk.pcap.out index 02be4742879..9bb9fca1ba7 100644 --- a/tests/result/KakaoTalk_talk.pcap.out +++ b/tests/result/KakaoTalk_talk.pcap.out @@ -18,15 +18,15 @@ KakaoTalk_Voice 44 6196 2 6 UDP 10.24.82.188:10269 <-> 1.201.1.174:23047 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][12 pkts/1692 bytes <-> 10 pkts/1420 bytes] 7 UDP 10.24.82.188:11321 <-> 1.201.1.174:23045 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][11 pkts/1542 bytes <-> 11 pkts/1542 bytes] 8 TCP 10.24.82.188:48489 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][8 pkts/1117 bytes <-> 7 pkts/610 bytes][Host: hkminorshort.weixin.qq.com] - 9 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][6 pkts/543 bytes <-> 5 pkts/945 bytes] - 10 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][3 pkts/1044 bytes <-> 2 pkts/154 bytes] - 11 TCP 10.24.82.188:58916 <-> 54.255.185.236:5222 [proto: 178/Amazon][2 pkts/225 bytes <-> 2 pkts/171 bytes] - 12 TCP 10.24.82.188:53974 -> 203.205.151.233:8080 [proto: 131/HTTP_Proxy][5 pkts/350 bytes -> 0 pkts/0 bytes] - 13 TCP 120.28.26.242:80 <-> 10.24.82.188:34533 [proto: 7/HTTP][3 pkts/168 bytes <-> 2 pkts/112 bytes] + 9 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][cat: Web/5][6 pkts/543 bytes <-> 5 pkts/945 bytes] + 10 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][cat: Web/5][3 pkts/1044 bytes <-> 2 pkts/154 bytes] + 11 TCP 10.24.82.188:58916 <-> 54.255.185.236:5222 [proto: 178/Amazon][cat: Web/5][2 pkts/225 bytes <-> 2 pkts/171 bytes] + 12 TCP 10.24.82.188:53974 -> 203.205.151.233:8080 [proto: 131/HTTP_Proxy][cat: Web/5][5 pkts/350 bytes -> 0 pkts/0 bytes] + 13 TCP 120.28.26.242:80 <-> 10.24.82.188:34533 [proto: 7/HTTP][cat: Web/5][3 pkts/168 bytes <-> 2 pkts/112 bytes] 14 UDP 10.24.82.188:25223 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/79 bytes <-> 1 pkts/118 bytes][Host: mqtt.facebook.com] - 15 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][1 pkts/164 bytes -> 0 pkts/0 bytes] - 16 TCP 173.252.88.128:443 -> 10.24.82.188:59912 [proto: 91.119/SSL.Facebook][2 pkts/124 bytes -> 0 pkts/0 bytes] - 17 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][1 pkts/83 bytes -> 0 pkts/0 bytes] - 18 TCP 173.194.117.229:443 -> 10.24.82.188:38380 [proto: 91.126/SSL.Google][1 pkts/56 bytes -> 0 pkts/0 bytes] - 19 TCP 173.252.122.1:443 -> 10.24.82.188:52123 [proto: 91.119/SSL.Facebook][1 pkts/56 bytes -> 0 pkts/0 bytes] - 20 TCP 216.58.220.161:443 -> 10.24.82.188:56697 [proto: 91.126/SSL.Google][1 pkts/56 bytes -> 0 pkts/0 bytes] + 15 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][cat: Web/5][1 pkts/164 bytes -> 0 pkts/0 bytes] + 16 TCP 173.252.88.128:443 -> 10.24.82.188:59912 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][2 pkts/124 bytes -> 0 pkts/0 bytes] + 17 TCP 10.24.82.188:49217 -> 216.58.220.174:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/83 bytes -> 0 pkts/0 bytes] + 18 TCP 173.194.117.229:443 -> 10.24.82.188:38380 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/56 bytes -> 0 pkts/0 bytes] + 19 TCP 173.252.122.1:443 -> 10.24.82.188:52123 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][1 pkts/56 bytes -> 0 pkts/0 bytes] + 20 TCP 216.58.220.161:443 -> 10.24.82.188:56697 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/56 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/bittorrent_ip.pcap.out b/tests/result/bittorrent_ip.pcap.out index 5a08d2dee92..5594deec3dc 100644 --- a/tests/result/bittorrent_ip.pcap.out +++ b/tests/result/bittorrent_ip.pcap.out @@ -1,4 +1,4 @@ BitTorrent 479 508018 2 - 1 TCP 77.222.174.20:2866 <-> 10.0.0.14:46610 [proto: 37/BitTorrent][305 pkts/461770 bytes <-> 126 pkts/8316 bytes] - 2 TCP 185.56.20.36:53646 <-> 10.0.0.14:35030 [proto: 37/BitTorrent][25 pkts/36414 bytes <-> 23 pkts/1518 bytes] + 1 TCP 77.222.174.20:2866 <-> 10.0.0.14:46610 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][305 pkts/461770 bytes <-> 126 pkts/8316 bytes] + 2 TCP 185.56.20.36:53646 <-> 10.0.0.14:35030 [proto: 37/BitTorrent][cat: Download-FileTransfer-FileSharing/7][25 pkts/36414 bytes <-> 23 pkts/1518 bytes] diff --git a/tests/result/coap_mqtt.pcap.out b/tests/result/coap_mqtt.pcap.out index 20d6762916b..4b780fee0b9 100644 --- a/tests/result/coap_mqtt.pcap.out +++ b/tests/result/coap_mqtt.pcap.out @@ -6,10 +6,10 @@ MQTT 7695 668291 4 2 TCP 192.168.56.1:53523 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC/16][918 pkts/76692 bytes <-> 1008 pkts/90434 bytes] 3 TCP 192.168.56.1:53522 <-> 192.168.56.101:17501 [proto: 222/MQTT][cat: RPC/16][921 pkts/76872 bytes <-> 1001 pkts/90056 bytes] 4 TCP 192.168.56.101:17501 <-> 192.168.56.1:53524 [proto: 222/MQTT][cat: RPC/16][1005 pkts/90274 bytes <-> 914 pkts/76454 bytes] - 5 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] - 6 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] - 7 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] - 8 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] + 5 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] + 6 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] + 7 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] + 8 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] 9 UDP [bbbb::1]:46819 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][3 pkts/262 bytes <-> 3 pkts/205 bytes] 10 UDP [bbbb::1]:33499 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][2 pkts/147 bytes <-> 2 pkts/257 bytes] 11 UDP [bbbb::1]:50250 <-> [bbbb::3]:5683 [proto: 27/COAP][cat: RPC/16][2 pkts/158 bytes <-> 2 pkts/151 bytes] diff --git a/tests/result/diameter.pcap.out b/tests/result/diameter.pcap.out index 9a43af0ef4f..50b5651ab4a 100644 --- a/tests/result/diameter.pcap.out +++ b/tests/result/diameter.pcap.out @@ -1,3 +1,3 @@ Diameter 6 1980 1 - 1 TCP 10.201.9.245:50957 <-> 10.201.9.11:3868 [proto: 237/Diameter][3 pkts/1174 bytes <-> 3 pkts/806 bytes] + 1 TCP 10.201.9.245:50957 <-> 10.201.9.11:3868 [proto: 237/Diameter][cat: Web/5][3 pkts/1174 bytes <-> 3 pkts/806 bytes] diff --git a/tests/result/dropbox.pcap.out b/tests/result/dropbox.pcap.out index 4ba0e0e0233..10fb21cb62a 100644 --- a/tests/result/dropbox.pcap.out +++ b/tests/result/dropbox.pcap.out @@ -4,10 +4,10 @@ Dropbox 1104 246122 16 1 TCP 192.168.1.105:44949 <-> 54.240.174.31:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][64 pkts/12228 bytes <-> 74 pkts/85074 bytes][client: client-cf.dropbox.com][server: client-cf.dropbox.com] 2 TCP 192.168.1.105:47747 <-> 108.160.172.225:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][28 pkts/12486 bytes <-> 26 pkts/14946 bytes][client: d.dropbox.com] - 3 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] - 4 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] - 5 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] - 6 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] + 3 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] + 4 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] + 5 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] + 6 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] 7 UDP 192.168.1.254:50828 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][44 pkts/19936 bytes -> 0 pkts/0 bytes] 8 TCP 192.168.1.105:59975 <-> 108.160.172.204:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][18 pkts/3562 bytes <-> 16 pkts/14464 bytes][client: client.dropbox.com][server: *.dropbox.com] 9 TCP 192.168.1.105:46394 <-> 162.125.17.131:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][12 pkts/2338 bytes <-> 10 pkts/9054 bytes][client: notify.dropbox.com][server: *.dropbox.com] diff --git a/tests/result/http_ipv6.pcap.out b/tests/result/http_ipv6.pcap.out index f0b5577d670..c9de9cedb82 100644 --- a/tests/result/http_ipv6.pcap.out +++ b/tests/result/http_ipv6.pcap.out @@ -11,11 +11,11 @@ QUIC 3 502 1 5 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:37488 <-> [2a03:b0c0:3:d0::70:1001]:443 [proto: 91.26/SSL.ntop][cat: Network/14][10 pkts/1206 bytes <-> 7 pkts/5636 bytes][client: www.ntop.org] 6 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53132 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][7 pkts/960 bytes <-> 5 pkts/4227 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] 7 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:53134 <-> [2a02:26f0:ad:197::236]:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][6 pkts/874 bytes <-> 4 pkts/4141 bytes][client: s-static.ak.facebook.com][server: *.ak.fbcdn.net] - 8 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:41776 <-> [2a00:1450:4001:803::1017]:443 [proto: 91/SSL][7 pkts/860 bytes <-> 7 pkts/1353 bytes] + 8 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:41776 <-> [2a00:1450:4001:803::1017]:443 [proto: 91/SSL][cat: Web/5][7 pkts/860 bytes <-> 7 pkts/1353 bytes] 9 UDP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:55145 <-> [2a00:1450:400b:c02::5f]:443 [proto: 188/QUIC][cat: Web/5][2 pkts/359 bytes <-> 1 pkts/143 bytes] - 10 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:33062 <-> [2a00:1450:400b:c02::9a]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] - 11 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40308 <-> [2a03:2880:1010:3f20:face:b00c::25de]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] - 12 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40526 <-> [2a00:1450:4006:804::200e]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] - 13 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:58660 <-> [2a00:1450:4006:803::2008]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] - 14 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:59690 <-> [2a00:1450:4001:803::1012]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] - 15 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:60124 <-> [2a02:26f0:ad:1a1::eed]:443 [proto: 91/SSL][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 10 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:33062 <-> [2a00:1450:400b:c02::9a]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 11 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40308 <-> [2a03:2880:1010:3f20:face:b00c::25de]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 12 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:40526 <-> [2a00:1450:4006:804::200e]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 13 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:58660 <-> [2a00:1450:4006:803::2008]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 14 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:59690 <-> [2a00:1450:4001:803::1012]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] + 15 TCP [2a00:d40:1:3:7aac:c0ff:fea7:d4c]:60124 <-> [2a02:26f0:ad:1a1::eed]:443 [proto: 91/SSL][cat: Web/5][1 pkts/86 bytes <-> 1 pkts/86 bytes] diff --git a/tests/result/mssql_tds.pcap.out b/tests/result/mssql_tds.pcap.out index 47403889ea1..b24080ac7a2 100644 --- a/tests/result/mssql_tds.pcap.out +++ b/tests/result/mssql_tds.pcap.out @@ -1,6 +1,6 @@ MsSQL-TDS 38 16260 12 - 1 TCP 10.111.111.111:6666 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][7 pkts/8717 bytes -> 0 pkts/0 bytes] + 1 TCP 10.111.111.111:6666 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][7 pkts/8717 bytes -> 0 pkts/0 bytes] 2 TCP 10.111.111.111:5555 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][10 pkts/1552 bytes <-> 7 pkts/1521 bytes] 3 TCP 10.111.111.111:1111 <-> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][2 pkts/614 bytes <-> 2 pkts/524 bytes] 4 TCP 10.111.111.111:4444 -> 10.0.0.1:1433 [proto: 114/MsSQL-TDS][cat: Database/11][1 pkts/1136 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/netflix.pcap.out b/tests/result/netflix.pcap.out index 9a3029b4cab..41ad6e3f9a4 100644 --- a/tests/result/netflix.pcap.out +++ b/tests/result/netflix.pcap.out @@ -63,5 +63,5 @@ Amazon 2 126 1 57 UDP 192.168.1.7:57719 <-> 192.168.1.1:53 [proto: 5.133/DNS.NetFlix][cat: Streaming/17][1 pkts/85 bytes <-> 1 pkts/137 bytes][Host: sha2.san.akam.nflximg.net] 58 UDP 192.168.1.7:57093 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/81 bytes <-> 1 pkts/113 bytes][Host: a1907.dscg.akamai.net] 59 UDP 192.168.1.7:51728 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/80 bytes <-> 1 pkts/112 bytes][Host: a803.dscg.akamai.net] - 60 TCP 192.168.1.7:52929 -> 52.24.87.6:443 [proto: 91.178/SSL.Amazon][2 pkts/126 bytes -> 0 pkts/0 bytes] + 60 TCP 192.168.1.7:52929 -> 52.24.87.6:443 [proto: 91.178/SSL.Amazon][cat: Web/5][2 pkts/126 bytes -> 0 pkts/0 bytes] 61 IGMP 192.168.1.7:0 -> 239.255.255.250:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index 2dd6179139d..025c468b3af 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -5,7 +5,7 @@ Amazon 76 10811 7 1 UDP 192.168.12.114:55915 <-> 185.118.169.65:27520 [proto: 173/Nintendo][cat: Game/8][169 pkts/61414 bytes <-> 278 pkts/126260 bytes] 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] 3 UDP 192.168.12.114:55915 <-> 81.61.158.138:51769 [proto: 173/Nintendo][cat: Game/8][122 pkts/46476 bytes <-> 38 pkts/5268 bytes] - 4 TCP 54.187.10.185:443 <-> 192.168.12.114:48328 [proto: 91.178/SSL.Amazon][34 pkts/4466 bytes <-> 20 pkts/4021 bytes] + 4 TCP 54.187.10.185:443 <-> 192.168.12.114:48328 [proto: 91.178/SSL.Amazon][cat: Web/5][34 pkts/4466 bytes <-> 20 pkts/4021 bytes] 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: 5][server: *.baas.nintendo.com] 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: 5][server: *.baas.nintendo.com] 7 UDP 192.168.12.114:52119 <-> 91.8.243.35:49432 [proto: 173/Nintendo][cat: Game/8][23 pkts/2682 bytes <-> 16 pkts/3408 bytes] @@ -13,13 +13,13 @@ Amazon 76 10811 7 9 UDP 192.168.12.114:52119 <-> 134.3.248.25:56955 [proto: 173/Nintendo][cat: Game/8][8 pkts/1040 bytes <-> 7 pkts/922 bytes] 10 ICMP 151.6.184.100:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network/14][21 pkts/1470 bytes -> 0 pkts/0 bytes] 11 UDP 192.168.12.114:10184 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][4 pkts/368 bytes <-> 4 pkts/400 bytes][Host: g2df33d01-lp1.p.srv.nintendo.net] - 12 UDP 192.168.12.114:52119 -> 52.10.205.177:34343 [proto: 178/Amazon][1 pkts/730 bytes -> 0 pkts/0 bytes] + 12 UDP 192.168.12.114:52119 -> 52.10.205.177:34343 [proto: 178/Amazon][cat: Web/5][1 pkts/730 bytes -> 0 pkts/0 bytes] 13 ICMP 151.6.184.98:0 -> 192.168.12.114:0 [proto: 81/ICMP][cat: Network/14][9 pkts/630 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.12.114:55915 <-> 35.158.74.61:10025 [proto: 178/Amazon][5 pkts/290 bytes <-> 5 pkts/290 bytes] + 14 UDP 192.168.12.114:55915 <-> 35.158.74.61:10025 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes <-> 5 pkts/290 bytes] 15 UDP 192.168.12.114:18874 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] 16 UDP 192.168.12.114:51035 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173/Nintendo][cat: Game/8][3 pkts/354 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.12.114:55915 -> 35.158.74.61:33335 [proto: 178/Amazon][3 pkts/318 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.12.114:55915 -> 52.10.205.177:34343 [proto: 178/Amazon][1 pkts/298 bytes -> 0 pkts/0 bytes] - 20 UDP 192.168.12.114:55915 -> 35.158.74.61:33334 [proto: 178/Amazon][5 pkts/290 bytes -> 0 pkts/0 bytes] - 21 TCP 192.168.12.114:11534 <-> 54.146.242.74:443 [proto: 91.178/SSL.Amazon][1 pkts/54 bytes <-> 1 pkts/54 bytes] + 18 UDP 192.168.12.114:55915 -> 35.158.74.61:33335 [proto: 178/Amazon][cat: Web/5][3 pkts/318 bytes -> 0 pkts/0 bytes] + 19 UDP 192.168.12.114:55915 -> 52.10.205.177:34343 [proto: 178/Amazon][cat: Web/5][1 pkts/298 bytes -> 0 pkts/0 bytes] + 20 UDP 192.168.12.114:55915 -> 35.158.74.61:33334 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes -> 0 pkts/0 bytes] + 21 TCP 192.168.12.114:11534 <-> 54.146.242.74:443 [proto: 91.178/SSL.Amazon][cat: Web/5][1 pkts/54 bytes <-> 1 pkts/54 bytes] diff --git a/tests/result/ocs.pcap.out b/tests/result/ocs.pcap.out index ed1e8218c9b..b5b526bfa2e 100644 --- a/tests/result/ocs.pcap.out +++ b/tests/result/ocs.pcap.out @@ -10,14 +10,14 @@ GoogleServices 13 2277 2 1 TCP 192.168.180.2:49881 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media/1][751 pkts/44783 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] 2 TCP 192.168.180.2:36680 -> 178.248.208.54:443 [proto: 91.218/SSL.OCS][cat: Media/1][20 pkts/6089 bytes -> 0 pkts/0 bytes][client: ocs.labgency.ws] 3 TCP 192.168.180.2:42590 -> 178.248.208.210:80 [proto: 7.218/HTTP.OCS][cat: Media/1][83 pkts/5408 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] - 4 TCP 192.168.180.2:39263 -> 23.21.230.199:443 [proto: 91/SSL][20 pkts/2715 bytes -> 0 pkts/0 bytes][client: settings.crashlytics.com] + 4 TCP 192.168.180.2:39263 -> 23.21.230.199:443 [proto: 91/SSL][cat: Web/5][20 pkts/2715 bytes -> 0 pkts/0 bytes][client: settings.crashlytics.com] 5 TCP 192.168.180.2:32946 -> 64.233.184.188:443 [proto: 91.239/SSL.GoogleServices][cat: Web/5][12 pkts/2212 bytes -> 0 pkts/0 bytes][client: mtalk.google.com] - 6 TCP 192.168.180.2:47803 -> 64.233.166.95:443 [proto: 91.126/SSL.Google][12 pkts/1608 bytes -> 0 pkts/0 bytes] - 7 TCP 192.168.180.2:41223 -> 216.58.208.46:443 [proto: 91.126/SSL.Google][13 pkts/1448 bytes -> 0 pkts/0 bytes] + 6 TCP 192.168.180.2:47803 -> 64.233.166.95:443 [proto: 91.126/SSL.Google][cat: Web/5][12 pkts/1608 bytes -> 0 pkts/0 bytes] + 7 TCP 192.168.180.2:41223 -> 216.58.208.46:443 [proto: 91.126/SSL.Google][cat: Web/5][13 pkts/1448 bytes -> 0 pkts/0 bytes] 8 TCP 192.168.180.2:48250 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media/1][6 pkts/1092 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] - 9 TCP 192.168.180.2:44959 -> 137.135.129.206:80 [proto: 7/HTTP][7 pkts/540 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] - 10 TCP 192.168.180.2:53356 -> 137.135.129.206:80 [proto: 7/HTTP][6 pkts/479 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] - 11 TCP 192.168.180.2:47699 -> 64.233.184.188:5228 [proto: 126/Google][2 pkts/120 bytes -> 0 pkts/0 bytes] + 9 TCP 192.168.180.2:44959 -> 137.135.129.206:80 [proto: 7/HTTP][cat: Web/5][7 pkts/540 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] + 10 TCP 192.168.180.2:53356 -> 137.135.129.206:80 [proto: 7/HTTP][cat: Web/5][6 pkts/479 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] + 11 TCP 192.168.180.2:47699 -> 64.233.184.188:5228 [proto: 126/Google][cat: Web/5][2 pkts/120 bytes -> 0 pkts/0 bytes] 12 UDP 192.168.180.2:3621 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: xmpp.device06.eu01.capptain.com] 13 UDP 192.168.180.2:48770 -> 8.8.8.8:53 [proto: 5.228/DNS.PlayStore][cat: SoftwareUpdate/19][1 pkts/72 bytes -> 0 pkts/0 bytes][Host: android.clients.google.com] 14 UDP 192.168.180.2:40097 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: settings.crashlytics.com] diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index a8259c514c1..dd6d1710b6e 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -76,8 +76,8 @@ GenericProtocol 1429 1780307 49 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] - 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][2 pkts/108 bytes -> 0 pkts/0 bytes] - 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][1 pkts/66 bytes -> 0 pkts/0 bytes] + 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes -> 0 pkts/0 bytes] + 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] Undetected flows: diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index 9f50790f399..590f97c71ea 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -20,7 +20,7 @@ ApplePush 12 1877 1 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web/5][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/7281 bytes -> 0 pkts/0 bytes] - 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] + 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] @@ -35,76 +35,76 @@ ApplePush 12 1877 1 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125/Skype][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/1211 bytes <-> 6 pkts/666 bytes] - 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][13 pkts/1554 bytes <-> 3 pkts/200 bytes] + 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1554 bytes <-> 3 pkts/200 bytes] 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125/Skype][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] - 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][13 pkts/1392 bytes <-> 3 pkts/200 bytes] - 25 TCP 192.168.1.34:50101 <-> 157.55.235.176:443 [proto: 91.125/SSL.Skype][12 pkts/1305 bytes <-> 3 pkts/285 bytes] - 26 TCP 192.168.1.34:50037 <-> 157.55.56.170:443 [proto: 91.125/SSL.Skype][11 pkts/1218 bytes <-> 4 pkts/351 bytes] - 27 TCP 192.168.1.34:50080 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][12 pkts/1249 bytes <-> 3 pkts/285 bytes] - 28 TCP 192.168.1.34:50111 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][11 pkts/955 bytes <-> 9 pkts/561 bytes] - 29 TCP 192.168.1.34:50081 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][12 pkts/1270 bytes <-> 3 pkts/243 bytes] + 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][13 pkts/1392 bytes <-> 3 pkts/200 bytes] + 25 TCP 192.168.1.34:50101 <-> 157.55.235.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1305 bytes <-> 3 pkts/285 bytes] + 26 TCP 192.168.1.34:50037 <-> 157.55.56.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1218 bytes <-> 4 pkts/351 bytes] + 27 TCP 192.168.1.34:50080 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/285 bytes] + 28 TCP 192.168.1.34:50111 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/955 bytes <-> 9 pkts/561 bytes] + 29 TCP 192.168.1.34:50081 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1270 bytes <-> 3 pkts/243 bytes] 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125/Skype][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] - 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][12 pkts/1207 bytes <-> 3 pkts/277 bytes] - 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][12 pkts/1221 bytes <-> 3 pkts/231 bytes] + 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1207 bytes <-> 3 pkts/277 bytes] + 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][cat: Web/5][12 pkts/1221 bytes <-> 3 pkts/231 bytes] 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] - 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][12 pkts/1151 bytes <-> 3 pkts/260 bytes] + 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1151 bytes <-> 3 pkts/260 bytes] 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] - 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][11 pkts/1050 bytes <-> 4 pkts/351 bytes] + 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1050 bytes <-> 4 pkts/351 bytes] 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] - 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][11 pkts/1140 bytes <-> 3 pkts/250 bytes] + 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][cat: Web/5][11 pkts/1140 bytes <-> 3 pkts/250 bytes] 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] - 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][13 pkts/1176 bytes <-> 3 pkts/200 bytes] + 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][cat: Web/5][13 pkts/1176 bytes <-> 3 pkts/200 bytes] 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] - 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][12 pkts/1074 bytes <-> 3 pkts/277 bytes] - 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][12 pkts/1102 bytes <-> 3 pkts/247 bytes] - 59 TCP 192.168.1.34:50048 <-> 157.55.130.150:443 [proto: 91.125/SSL.Skype][12 pkts/1109 bytes <-> 3 pkts/236 bytes] + 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1074 bytes <-> 3 pkts/277 bytes] + 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1102 bytes <-> 3 pkts/247 bytes] + 59 TCP 192.168.1.34:50048 <-> 157.55.130.150:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1109 bytes <-> 3 pkts/236 bytes] 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] - 61 TCP 192.168.1.34:50036 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][11 pkts/1074 bytes <-> 3 pkts/254 bytes] + 61 TCP 192.168.1.34:50036 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1074 bytes <-> 3 pkts/254 bytes] 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] - 63 TCP 192.168.1.34:50078 <-> 157.55.130.173:443 [proto: 91.125/SSL.Skype][12 pkts/1088 bytes <-> 3 pkts/236 bytes] + 63 TCP 192.168.1.34:50078 <-> 157.55.130.173:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1088 bytes <-> 3 pkts/236 bytes] 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] - 65 TCP 192.168.1.34:50030 <-> 65.55.223.33:443 [proto: 91/SSL][11 pkts/960 bytes <-> 4 pkts/351 bytes] + 65 TCP 192.168.1.34:50030 <-> 65.55.223.33:443 [proto: 91/SSL][cat: Web/5][11 pkts/960 bytes <-> 4 pkts/351 bytes] 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] - 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][12 pkts/1039 bytes <-> 3 pkts/267 bytes] + 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1039 bytes <-> 3 pkts/267 bytes] 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] - 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][10 pkts/1002 bytes <-> 3 pkts/285 bytes] + 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1002 bytes <-> 3 pkts/285 bytes] 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] - 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][11 pkts/999 bytes <-> 4 pkts/266 bytes] - 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][12 pkts/1032 bytes <-> 3 pkts/230 bytes] + 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/999 bytes <-> 4 pkts/266 bytes] + 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1032 bytes <-> 3 pkts/230 bytes] 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] - 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][10 pkts/857 bytes <-> 4 pkts/351 bytes] + 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/857 bytes <-> 4 pkts/351 bytes] 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] - 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][9 pkts/862 bytes <-> 3 pkts/285 bytes] + 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][9 pkts/862 bytes <-> 3 pkts/285 bytes] 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125/Skype][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] - 85 TCP 192.168.1.34:50100 <-> 111.221.74.46:443 [proto: 91.125/SSL.Skype][10 pkts/872 bytes <-> 3 pkts/237 bytes] + 85 TCP 192.168.1.34:50100 <-> 111.221.74.46:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/237 bytes] 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] - 87 TCP 192.168.1.34:50087 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][9 pkts/822 bytes <-> 3 pkts/285 bytes] + 87 TCP 192.168.1.34:50087 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][9 pkts/822 bytes <-> 3 pkts/285 bytes] 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] 89 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/908 bytes -> 0 pkts/0 bytes] 90 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/828 bytes -> 0 pkts/0 bytes] - 91 TCP 192.168.1.34:50125 <-> 91.190.218.125:12350 [proto: 125/Skype][6 pkts/417 bytes <-> 4 pkts/352 bytes] + 91 TCP 192.168.1.34:50125 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/417 bytes <-> 4 pkts/352 bytes] 92 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][8 pkts/656 bytes -> 0 pkts/0 bytes] 93 UDP 192.168.1.34:55159 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] 94 UDP 192.168.1.34:63108 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/651 bytes -> 0 pkts/0 bytes][Host: a.config.skype.trafficmanager.net] @@ -123,8 +123,8 @@ ApplePush 12 1877 1 107 UDP 192.168.1.34:52742 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] 108 UDP 192.168.1.34:56387 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst5.r.skype.net] 109 UDP 192.168.1.34:57288 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst6.r.skype.net] - 110 TCP 192.168.1.34:50146 -> 157.56.53.51:443 [proto: 91/SSL][8 pkts/608 bytes -> 0 pkts/0 bytes] - 111 TCP 192.168.1.34:50129 <-> 91.190.218.125:12350 [proto: 125/Skype][6 pkts/353 bytes <-> 4 pkts/246 bytes] + 110 TCP 192.168.1.34:50146 -> 157.56.53.51:443 [proto: 91/SSL][cat: Web/5][8 pkts/608 bytes -> 0 pkts/0 bytes] + 111 TCP 192.168.1.34:50129 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/353 bytes <-> 4 pkts/246 bytes] 112 UDP 192.168.1.34:49163 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] 113 UDP 192.168.1.34:51802 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] 114 UDP 192.168.1.34:52714 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] @@ -133,9 +133,9 @@ ApplePush 12 1877 1 117 UDP 192.168.1.34:65045 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/532 bytes -> 0 pkts/0 bytes][Host: dsn4.d.skype.net] 118 UDP 192.168.1.34:54396 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] 119 UDP 192.168.1.34:65426 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] - 120 TCP 192.168.1.34:50109 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/297 bytes <-> 3 pkts/186 bytes] + 120 TCP 192.168.1.34:50109 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][3 pkts/297 bytes <-> 3 pkts/186 bytes] 121 UDP 192.168.1.92:57621 -> 192.168.1.255:57621 [proto: 156/Spotify][cat: Streaming/17][5 pkts/430 bytes -> 0 pkts/0 bytes] - 122 TCP 192.168.1.34:50110 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] + 122 TCP 192.168.1.34:50110 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][3 pkts/191 bytes <-> 3 pkts/186 bytes] 123 UDP 192.168.1.34:55893 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][5 pkts/360 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] 124 UDP 192.168.1.34:49485 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 125 UDP 192.168.1.34:51066 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] @@ -149,7 +149,7 @@ ApplePush 12 1877 1 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] - 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/60 bytes] + 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index a4e58cd544a..9c1dcbd1f13 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -13,38 +13,38 @@ MS_OneDrive 348 181687 1 ApplePush 8 1118 1 1 TCP 192.168.1.34:51230 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][166 pkts/39042 bytes <-> 182 pkts/142645 bytes][server: *.gateway.messenger.live.com] - 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] - 3 TCP 192.168.1.34:51227 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][38 pkts/9082 bytes <-> 38 pkts/10499 bytes] + 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] + 3 TCP 192.168.1.34:51227 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][38 pkts/9082 bytes <-> 38 pkts/10499 bytes] 4 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][36 pkts/13402 bytes -> 0 pkts/0 bytes] 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] - 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][4 pkts/818 bytes <-> 4 pkts/2172 bytes] + 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][4 pkts/818 bytes <-> 4 pkts/2172 bytes] 10 TCP 192.168.1.34:51295 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/2074 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] - 11 TCP 192.168.1.34:51238 <-> 157.55.235.147:443 [proto: 91.125/SSL.Skype][13 pkts/1446 bytes <-> 4 pkts/266 bytes] - 12 TCP 192.168.1.34:51262 <-> 213.199.179.176:443 [proto: 91/SSL][13 pkts/1437 bytes <-> 3 pkts/200 bytes] - 13 TCP 192.168.1.34:51241 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][12 pkts/1333 bytes <-> 3 pkts/251 bytes] - 14 TCP 192.168.1.34:51261 <-> 157.55.235.170:443 [proto: 91.125/SSL.Skype][12 pkts/1284 bytes <-> 3 pkts/285 bytes] - 15 TCP 192.168.1.34:51239 <-> 65.55.223.45:443 [proto: 91/SSL][12 pkts/1291 bytes <-> 3 pkts/242 bytes] - 16 TCP 192.168.1.34:51274 <-> 157.55.235.152:443 [proto: 91.125/SSL.Skype][12 pkts/1235 bytes <-> 3 pkts/285 bytes] - 17 TCP 192.168.1.34:51260 <-> 157.55.130.142:443 [proto: 91.125/SSL.Skype][12 pkts/1249 bytes <-> 3 pkts/265 bytes] + 11 TCP 192.168.1.34:51238 <-> 157.55.235.147:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1446 bytes <-> 4 pkts/266 bytes] + 12 TCP 192.168.1.34:51262 <-> 213.199.179.176:443 [proto: 91/SSL][cat: Web/5][13 pkts/1437 bytes <-> 3 pkts/200 bytes] + 13 TCP 192.168.1.34:51241 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1333 bytes <-> 3 pkts/251 bytes] + 14 TCP 192.168.1.34:51261 <-> 157.55.235.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1284 bytes <-> 3 pkts/285 bytes] + 15 TCP 192.168.1.34:51239 <-> 65.55.223.45:443 [proto: 91/SSL][cat: Web/5][12 pkts/1291 bytes <-> 3 pkts/242 bytes] + 16 TCP 192.168.1.34:51274 <-> 157.55.235.152:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1235 bytes <-> 3 pkts/285 bytes] + 17 TCP 192.168.1.34:51260 <-> 157.55.130.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/265 bytes] 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125/Skype][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125/Skype][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] - 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][11 pkts/1164 bytes <-> 3 pkts/268 bytes] - 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][10 pkts/1077 bytes <-> 4 pkts/351 bytes] + 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][11 pkts/1164 bytes <-> 3 pkts/268 bytes] + 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1077 bytes <-> 4 pkts/351 bytes] 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] - 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][12 pkts/1130 bytes <-> 3 pkts/285 bytes] - 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][12 pkts/1130 bytes <-> 3 pkts/285 bytes] - 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][12 pkts/1095 bytes <-> 3 pkts/285 bytes] - 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][10 pkts/1022 bytes <-> 4 pkts/351 bytes] + 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][12 pkts/1130 bytes <-> 3 pkts/285 bytes] + 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1130 bytes <-> 3 pkts/285 bytes] + 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1095 bytes <-> 3 pkts/285 bytes] + 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1022 bytes <-> 4 pkts/351 bytes] 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] - 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][10 pkts/1012 bytes <-> 4 pkts/351 bytes] + 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1012 bytes <-> 4 pkts/351 bytes] 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125/Skype][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] @@ -55,16 +55,16 @@ ApplePush 8 1118 1 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] - 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][10 pkts/972 bytes <-> 3 pkts/285 bytes] - 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][10 pkts/902 bytes <-> 4 pkts/351 bytes] + 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][cat: Web/5][10 pkts/972 bytes <-> 3 pkts/285 bytes] + 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/902 bytes <-> 4 pkts/351 bytes] 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] - 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][10 pkts/852 bytes <-> 4 pkts/351 bytes] + 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/852 bytes <-> 4 pkts/351 bytes] 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] - 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][10 pkts/872 bytes <-> 3 pkts/285 bytes] + 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/285 bytes] 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125/Skype][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/958 bytes <-> 2 pkts/184 bytes] @@ -76,7 +76,7 @@ ApplePush 8 1118 1 62 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] 64 UDP 192.168.1.34:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][7 pkts/680 bytes -> 0 pkts/0 bytes] - 65 TCP 192.168.1.34:51299 <-> 91.190.216.125:12350 [proto: 125/Skype][6 pkts/353 bytes <-> 5 pkts/306 bytes] + 65 TCP 192.168.1.34:51299 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/353 bytes <-> 5 pkts/306 bytes] 66 UDP 192.168.1.34:58631 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] 67 UDP 192.168.1.34:60688 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] 68 UDP 192.168.1.34:50055 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] @@ -87,7 +87,7 @@ ApplePush 8 1118 1 73 UDP 192.168.1.34:61095 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/623 bytes -> 0 pkts/0 bytes][Host: pipe.prd.skypedata.akadns.net] 74 UDP 192.168.1.34:60413 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] 75 UDP 192.168.1.34:64364 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/616 bytes -> 0 pkts/0 bytes][Host: 335.0.7.7.3.rst0.r.skype.net] - 76 TCP 192.168.1.34:51302 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][6 pkts/353 bytes <-> 4 pkts/246 bytes] + 76 TCP 192.168.1.34:51302 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][6 pkts/353 bytes <-> 4 pkts/246 bytes] 77 UDP 192.168.1.34:63514 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/576 bytes -> 0 pkts/0 bytes][Host: ui.skype.com] 78 UDP 192.168.1.34:55028 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: a.config.skype.com] 79 UDP 192.168.1.34:63342 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/546 bytes -> 0 pkts/0 bytes][Host: b.config.skype.com] @@ -97,13 +97,13 @@ ApplePush 8 1118 1 83 UDP 192.168.1.34:62875 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/539 bytes -> 0 pkts/0 bytes][Host: dsn13.d.skype.net] 84 UDP 192.168.1.34:49864 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] 85 UDP 192.168.1.34:64240 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][7 pkts/511 bytes -> 0 pkts/0 bytes][Host: api.skype.com] - 86 TCP 192.168.1.34:51296 <-> 91.190.216.125:12350 [proto: 125/Skype][3 pkts/293 bytes <-> 3 pkts/186 bytes] - 87 TCP 192.168.1.34:51308 -> 80.121.84.93:443 [proto: 91/SSL][6 pkts/468 bytes -> 0 pkts/0 bytes] - 88 UDP 192.168.1.1:138 -> 192.168.1.34:138 [proto: 10/NetBIOS][2 pkts/452 bytes -> 0 pkts/0 bytes] + 86 TCP 192.168.1.34:51296 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][3 pkts/293 bytes <-> 3 pkts/186 bytes] + 87 TCP 192.168.1.34:51308 -> 80.121.84.93:443 [proto: 91/SSL][cat: Web/5][6 pkts/468 bytes -> 0 pkts/0 bytes] + 88 UDP 192.168.1.1:138 -> 192.168.1.34:138 [proto: 10/NetBIOS][cat: System/18][2 pkts/452 bytes -> 0 pkts/0 bytes] 89 UDP 192.168.1.34:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][2 pkts/432 bytes -> 0 pkts/0 bytes] - 90 TCP 192.168.1.34:51284 <-> 91.190.218.125:12350 [proto: 125/Skype][3 pkts/237 bytes <-> 3 pkts/186 bytes] - 91 TCP 192.168.1.34:51285 <-> 91.190.218.125:12350 [proto: 125/Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] - 92 TCP 192.168.1.34:51286 <-> 91.190.218.125:443 [proto: 91.125/SSL.Skype][3 pkts/191 bytes <-> 3 pkts/186 bytes] + 90 TCP 192.168.1.34:51284 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][3 pkts/237 bytes <-> 3 pkts/186 bytes] + 91 TCP 192.168.1.34:51285 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][3 pkts/191 bytes <-> 3 pkts/186 bytes] + 92 TCP 192.168.1.34:51286 <-> 91.190.218.125:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][3 pkts/191 bytes <-> 3 pkts/186 bytes] 93 UDP 192.168.1.34:58061 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 94 UDP 192.168.1.34:59237 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 95 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][4 pkts/328 bytes -> 0 pkts/0 bytes] @@ -112,7 +112,7 @@ ApplePush 8 1118 1 98 UDP 192.168.1.34:57694 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/216 bytes -> 0 pkts/0 bytes] - 101 TCP 192.168.1.34:51283 <-> 111.221.74.48:443 [proto: 91.125/SSL.Skype][2 pkts/132 bytes <-> 1 pkts/74 bytes] + 101 TCP 192.168.1.34:51283 <-> 111.221.74.48:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][2 pkts/132 bytes <-> 1 pkts/74 bytes] 102 UDP 192.168.1.34:59788 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 103 UDP 192.168.1.34:63661 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 104 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/142 bytes -> 0 pkts/0 bytes][Lucas-iMac.local] diff --git a/tests/result/starcraft_battle.pcap.out b/tests/result/starcraft_battle.pcap.out index ee66db4dd16..c385561d739 100644 --- a/tests/result/starcraft_battle.pcap.out +++ b/tests/result/starcraft_battle.pcap.out @@ -29,7 +29,7 @@ Starcraft 236 51494 6 17 TCP 192.168.1.100:3524 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/481 bytes <-> 4 pkts/733 bytes][Host: nydus.battle.net] 18 TCP 192.168.1.100:3523 <-> 80.239.186.26:80 [proto: 7/HTTP][cat: Web/5][6 pkts/483 bytes <-> 4 pkts/725 bytes][Host: nydus.battle.net] 19 TCP 192.168.1.100:3519 <-> 80.239.186.21:80 [proto: 7/HTTP][cat: Web/5][5 pkts/482 bytes <-> 4 pkts/497 bytes][Host: eu.launcher.battle.net] - 20 TCP 192.168.1.100:3427 <-> 80.239.208.193:1119 [proto: 213/Starcraft][6 pkts/376 bytes <-> 7 pkts/526 bytes] + 20 TCP 192.168.1.100:3427 <-> 80.239.208.193:1119 [proto: 213/Starcraft][cat: Game/8][6 pkts/376 bytes <-> 7 pkts/526 bytes] 21 TCP 192.168.1.100:3512 <-> 12.129.222.54:80 [proto: 7.76/HTTP.WorldOfWarcraft][cat: Game/8][5 pkts/367 bytes <-> 4 pkts/513 bytes][Host: us.scan.worldofwarcraft.com] 22 UDP 192.168.1.100:55468 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/168 bytes <-> 2 pkts/388 bytes][Host: bnetcmsus-a.akamaihd.net] 23 UDP 173.194.40.22:443 <-> 192.168.1.100:53568 [proto: 188/QUIC][cat: Web/5][3 pkts/243 bytes <-> 3 pkts/232 bytes] @@ -37,28 +37,28 @@ Starcraft 236 51494 6 25 UDP 192.168.1.100:60026 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/154 bytes <-> 2 pkts/288 bytes][Host: llnw.blizzard.com] 26 UDP 192.168.1.100:58818 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/172 bytes <-> 2 pkts/260 bytes][Host: 91.252.30.192.in-addr.arpa] 27 UDP 192.168.1.100:58831 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/172 bytes <-> 2 pkts/245 bytes][Host: 254.1.168.192.in-addr.arpa] - 28 TCP 192.168.1.100:3532 <-> 2.228.46.112:80 [proto: 7/HTTP][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] - 29 TCP 192.168.1.100:3533 <-> 2.228.46.112:80 [proto: 7/HTTP][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] + 28 TCP 192.168.1.100:3532 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] + 29 TCP 192.168.1.100:3533 <-> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][3 pkts/320 bytes <-> 1 pkts/66 bytes][Host: bnetcmsus-a.akamaihd.net] 30 UDP 192.168.1.100:53145 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/152 bytes <-> 2 pkts/184 bytes][Host: nydus.battle.net] - 31 TCP 192.168.1.100:3479 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 32 TCP 192.168.1.100:3480 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 33 TCP 192.168.1.100:3481 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 34 TCP 192.168.1.100:3482 <-> 2.228.46.114:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 35 TCP 192.168.1.100:3489 <-> 2.228.46.104:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 36 TCP 192.168.1.100:3490 <-> 2.228.46.104:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 37 TCP 192.168.1.100:3491 <-> 2.228.46.104:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 38 TCP 192.168.1.100:3492 <-> 2.228.46.104:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/167 bytes] - 39 TCP 192.30.252.91:443 <-> 192.168.1.100:3213 [proto: 91.203/SSL.Github][2 pkts/145 bytes <-> 1 pkts/89 bytes] - 40 TCP 192.168.1.100:3486 <-> 199.38.164.156:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/120 bytes] + 31 TCP 192.168.1.100:3479 <-> 2.228.46.114:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 32 TCP 192.168.1.100:3480 <-> 2.228.46.114:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 33 TCP 192.168.1.100:3481 <-> 2.228.46.114:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 34 TCP 192.168.1.100:3482 <-> 2.228.46.114:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 35 TCP 192.168.1.100:3489 <-> 2.228.46.104:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 36 TCP 192.168.1.100:3490 <-> 2.228.46.104:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 37 TCP 192.168.1.100:3491 <-> 2.228.46.104:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 38 TCP 192.168.1.100:3492 <-> 2.228.46.104:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/167 bytes] + 39 TCP 192.30.252.91:443 <-> 192.168.1.100:3213 [proto: 91.203/SSL.Github][cat: Collaborative/15][2 pkts/145 bytes <-> 1 pkts/89 bytes] + 40 TCP 192.168.1.100:3486 <-> 199.38.164.156:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/120 bytes] 41 UDP 192.168.1.100:58844 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][1 pkts/86 bytes <-> 1 pkts/124 bytes][Host: 40.186.239.80.in-addr.arpa] - 42 TCP 192.168.1.100:3484 <-> 173.194.113.224:443 [proto: 91.126/SSL.Google][2 pkts/108 bytes <-> 1 pkts/60 bytes] - 43 TCP 192.168.1.100:2759 <-> 64.233.184.188:5228 [proto: 126/Google][1 pkts/55 bytes <-> 1 pkts/66 bytes] - 44 TCP 192.168.1.100:3052 <-> 216.58.212.110:443 [proto: 91.126/SSL.Google][1 pkts/55 bytes <-> 1 pkts/66 bytes] + 42 TCP 192.168.1.100:3484 <-> 173.194.113.224:443 [proto: 91.126/SSL.Google][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] + 43 TCP 192.168.1.100:2759 <-> 64.233.184.188:5228 [proto: 126/Google][cat: Web/5][1 pkts/55 bytes <-> 1 pkts/66 bytes] + 44 TCP 192.168.1.100:3052 <-> 216.58.212.110:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/55 bytes <-> 1 pkts/66 bytes] 45 IGMP 192.168.1.107:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][2 pkts/120 bytes -> 0 pkts/0 bytes] - 46 UDP 192.168.1.100:53146 <-> 5.42.180.154:1119 [proto: 213/Starcraft][1 pkts/44 bytes <-> 1 pkts/60 bytes] - 47 UDP 192.168.1.100:53146 <-> 62.115.246.51:1119 [proto: 213/Starcraft][1 pkts/44 bytes <-> 1 pkts/60 bytes] - 48 UDP 192.168.1.100:6113 <-> 213.248.127.166:1119 [proto: 213/Starcraft][1 pkts/43 bytes <-> 1 pkts/60 bytes] - 49 UDP 192.168.1.100:6113 <-> 213.248.127.212:1119 [proto: 213/Starcraft][1 pkts/43 bytes <-> 1 pkts/60 bytes] - 50 TCP 192.168.1.100:3534 -> 2.228.46.112:80 [proto: 7/HTTP][1 pkts/66 bytes -> 0 pkts/0 bytes] - 51 TCP 80.239.186.26:443 -> 192.168.1.100:3476 [proto: 91/SSL][1 pkts/60 bytes -> 0 pkts/0 bytes] - 52 TCP 80.239.186.40:443 -> 192.168.1.100:3478 [proto: 91/SSL][1 pkts/60 bytes -> 0 pkts/0 bytes] + 46 UDP 192.168.1.100:53146 <-> 5.42.180.154:1119 [proto: 213/Starcraft][cat: Game/8][1 pkts/44 bytes <-> 1 pkts/60 bytes] + 47 UDP 192.168.1.100:53146 <-> 62.115.246.51:1119 [proto: 213/Starcraft][cat: Game/8][1 pkts/44 bytes <-> 1 pkts/60 bytes] + 48 UDP 192.168.1.100:6113 <-> 213.248.127.166:1119 [proto: 213/Starcraft][cat: Game/8][1 pkts/43 bytes <-> 1 pkts/60 bytes] + 49 UDP 192.168.1.100:6113 <-> 213.248.127.212:1119 [proto: 213/Starcraft][cat: Game/8][1 pkts/43 bytes <-> 1 pkts/60 bytes] + 50 TCP 192.168.1.100:3534 -> 2.228.46.112:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] + 51 TCP 80.239.186.26:443 -> 192.168.1.100:3476 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes -> 0 pkts/0 bytes] + 52 TCP 80.239.186.40:443 -> 192.168.1.100:3478 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/teredo.pcap.out b/tests/result/teredo.pcap.out index 55dc2932c5f..24be9ebb204 100644 --- a/tests/result/teredo.pcap.out +++ b/tests/result/teredo.pcap.out @@ -1,7 +1,7 @@ Teredo 24 2574 5 - 1 UDP 10.112.16.67:51812 <-> 194.136.28.76:3544 [proto: 214/Teredo][10 pkts/930 bytes <-> 4 pkts/374 bytes] - 2 UDP 10.112.16.106:52513 <-> 194.136.28.76:3544 [proto: 214/Teredo][2 pkts/206 bytes <-> 2 pkts/302 bytes] - 3 UDP 10.112.16.64:56154 <-> 194.136.28.76:3544 [proto: 214/Teredo][1 pkts/103 bytes <-> 1 pkts/151 bytes] - 4 UDP 10.112.16.89:60381 <-> 194.136.28.76:3544 [proto: 214/Teredo][1 pkts/103 bytes <-> 1 pkts/151 bytes] - 5 UDP 10.112.16.92:63448 <-> 194.136.28.76:3544 [proto: 214/Teredo][1 pkts/103 bytes <-> 1 pkts/151 bytes] + 1 UDP 10.112.16.67:51812 <-> 194.136.28.76:3544 [proto: 214/Teredo][cat: Network/14][10 pkts/930 bytes <-> 4 pkts/374 bytes] + 2 UDP 10.112.16.106:52513 <-> 194.136.28.76:3544 [proto: 214/Teredo][cat: Network/14][2 pkts/206 bytes <-> 2 pkts/302 bytes] + 3 UDP 10.112.16.64:56154 <-> 194.136.28.76:3544 [proto: 214/Teredo][cat: Network/14][1 pkts/103 bytes <-> 1 pkts/151 bytes] + 4 UDP 10.112.16.89:60381 <-> 194.136.28.76:3544 [proto: 214/Teredo][cat: Network/14][1 pkts/103 bytes <-> 1 pkts/151 bytes] + 5 UDP 10.112.16.92:63448 <-> 194.136.28.76:3544 [proto: 214/Teredo][cat: Network/14][1 pkts/103 bytes <-> 1 pkts/151 bytes] diff --git a/tests/result/tor.pcap.out b/tests/result/tor.pcap.out index 2cd7fd1da65..69b7d3e7156 100644 --- a/tests/result/tor.pcap.out +++ b/tests/result/tor.pcap.out @@ -14,4 +14,4 @@ Tor 3676 3014362 7 8 UDP 192.168.1.1:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][10 pkts/1860 bytes -> 0 pkts/0 bytes] 9 UDP [fe80::c583:1972:5728:7323]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][6 pkts/906 bytes -> 0 pkts/0 bytes] 10 UDP 192.168.1.252:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/252 bytes -> 0 pkts/0 bytes] - 11 TCP 192.168.1.252:51104 -> 157.56.30.46:443 [proto: 91/SSL][1 pkts/60 bytes -> 0 pkts/0 bytes] + 11 TCP 192.168.1.252:51104 -> 157.56.30.46:443 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/viber.pcap.out b/tests/result/viber.pcap.out index 5d2f07f1077..73816982736 100644 --- a/tests/result/viber.pcap.out +++ b/tests/result/viber.pcap.out @@ -11,17 +11,17 @@ QUIC 3 194 1 1 TCP 192.168.0.17:53934 <-> 54.230.93.53:443 [proto: 91.144/SSL.Viber][cat: Chat/9][43 pkts/4571 bytes <-> 46 pkts/60087 bytes][client: dl-media.viber.com][server: *.viber.com] 2 TCP 192.168.0.17:57520 <-> 54.230.93.96:443 [proto: 91.144/SSL.Viber][cat: Chat/9][12 pkts/1848 bytes <-> 12 pkts/9317 bytes][client: media.cdn.viber.com][server: *.cdn.viber.com] 3 TCP 192.168.0.17:49048 <-> 54.187.91.182:443 [proto: 91/SSL][cat: Web/5][13 pkts/2823 bytes <-> 14 pkts/6552 bytes][client: brahe.apptimize.com][server: *.apptimize.com] - 4 TCP 192.168.0.17:33208 <-> 52.0.253.101:4244 [proto: 144/Viber][32 pkts/6563 bytes <-> 26 pkts/2782 bytes] + 4 TCP 192.168.0.17:33208 <-> 52.0.253.101:4244 [proto: 144/Viber][cat: Chat/9][32 pkts/6563 bytes <-> 26 pkts/2782 bytes] 5 TCP 192.168.0.17:43702 <-> 172.217.23.78:443 [proto: 91/SSL][cat: Web/5][15 pkts/5339 bytes <-> 12 pkts/3436 bytes][client: app-measurement.com] 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] 7 TCP 192.168.0.17:55746 <-> 151.101.1.130:443 [proto: 91/SSL][cat: Web/5][10 pkts/1534 bytes <-> 9 pkts/6239 bytes][client: venetia.iad.appboy.com][server: y.ssl.fastly.net] 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] - 9 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 144/Viber][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] - 10 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 144/Viber][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] + 9 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 144/Viber][cat: Chat/9][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] + 10 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 144/Viber][cat: Chat/9][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] 11 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] 12 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] - 13 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 14 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 13 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 14 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] 15 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] 16 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] 17 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] @@ -32,5 +32,5 @@ QUIC 3 194 1 22 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] 23 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] 24 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 144/Viber][1 pkts/76 bytes <-> 1 pkts/62 bytes] - 26 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 144/Viber][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 25 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 26 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] diff --git a/tests/result/waze.pcap.out b/tests/result/waze.pcap.out index 8bf4d88fc71..5b183ea2cd4 100644 --- a/tests/result/waze.pcap.out +++ b/tests/result/waze.pcap.out @@ -29,15 +29,15 @@ WhatsApp 15 1341 1 20 TCP 10.8.0.1:45552 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/552 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] 21 TCP 10.8.0.1:45554 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/550 bytes <-> 7 pkts/769 bytes][Host: cres.waze.com] 22 TCP 10.8.0.1:45540 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/553 bytes <-> 7 pkts/733 bytes][Host: roadshields.waze.com] - 23 TCP 10.16.37.157:41823 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 24 TCP 10.16.37.157:43991 <-> 200.160.4.31:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 25 TCP 10.16.37.157:46473 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 26 TCP 10.16.37.157:52746 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 27 TCP 10.16.37.157:52953 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 28 TCP 10.8.0.1:43089 <-> 200.160.4.198:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 29 TCP 10.8.0.1:45169 <-> 200.160.4.198:80 [proto: 7/HTTP][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 30 TCP 10.8.0.1:60479 <-> 200.160.4.49:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 31 TCP 10.8.0.1:60574 <-> 200.160.4.49:80 [proto: 7/HTTP][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 23 TCP 10.16.37.157:41823 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 24 TCP 10.16.37.157:43991 <-> 200.160.4.31:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 25 TCP 10.16.37.157:46473 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 26 TCP 10.16.37.157:52746 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 27 TCP 10.16.37.157:52953 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 28 TCP 10.8.0.1:43089 <-> 200.160.4.198:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 29 TCP 10.8.0.1:45169 <-> 200.160.4.198:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 30 TCP 10.8.0.1:60479 <-> 200.160.4.49:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 31 TCP 10.8.0.1:60574 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] 32 UDP 10.8.0.1:46214 <-> 200.89.75.198:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] diff --git a/tests/result/webex.pcap.out b/tests/result/webex.pcap.out index ecd0f6432b9..71fb528d18e 100644 --- a/tests/result/webex.pcap.out +++ b/tests/result/webex.pcap.out @@ -43,23 +43,23 @@ Amazon 3 174 1 35 TCP 10.8.0.1:59756 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web/5][6 pkts/970 bytes <-> 6 pkts/821 bytes][Host: cp.pushwoosh.com] 36 TCP 10.8.0.1:33559 <-> 80.74.110.68:443 [proto: 64/SSL_No_Cert][cat: Web/5][7 pkts/1280 bytes <-> 6 pkts/453 bytes] 37 TCP 10.8.0.1:59757 <-> 78.46.237.91:80 [proto: 7/HTTP][cat: Web/5][5 pkts/624 bytes <-> 5 pkts/767 bytes][Host: cp.pushwoosh.com] - 38 UDP 10.8.0.1:51772 <-> 62.109.229.158:9000 [proto: 141/Webex][14 pkts/1071 bytes <-> 2 pkts/100 bytes] + 38 UDP 10.8.0.1:51772 <-> 62.109.229.158:9000 [proto: 141/Webex][cat: VoIP/10][14 pkts/1071 bytes <-> 2 pkts/100 bytes] 39 TCP 10.8.0.1:41350 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/614 bytes <-> 5 pkts/399 bytes][client: radcom.webex.com] 40 TCP 10.8.0.1:41351 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][5 pkts/560 bytes <-> 4 pkts/345 bytes][client: radcom.webex.com] - 41 TCP 10.8.0.1:51190 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][7 pkts/501 bytes <-> 4 pkts/216 bytes] - 42 TCP 10.8.0.1:37139 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 43 TCP 10.8.0.1:41394 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 44 TCP 10.8.0.1:41757 <-> 114.29.213.212:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 45 TCP 10.8.0.1:47135 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 46 TCP 10.8.0.1:51134 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 47 TCP 10.8.0.1:51135 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 48 TCP 10.8.0.1:51676 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][6 pkts/427 bytes <-> 5 pkts/270 bytes] - 49 TCP 10.8.0.1:33511 <-> 80.74.110.68:443 [proto: 91/SSL][4 pkts/452 bytes <-> 4 pkts/216 bytes] - 50 TCP 10.8.0.1:51833 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][4 pkts/423 bytes <-> 4 pkts/216 bytes] - 51 TCP 10.8.0.1:51839 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][4 pkts/423 bytes <-> 4 pkts/216 bytes] - 52 TCP 10.8.0.1:41726 <-> 114.29.213.212:443 [proto: 91.141/SSL.Webex][4 pkts/299 bytes <-> 4 pkts/216 bytes] - 53 TCP 10.8.0.1:51195 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][3 pkts/245 bytes <-> 2 pkts/108 bytes] - 54 TCP 10.133.206.47:33459 <-> 80.74.110.68:443 [proto: 91/SSL][3 pkts/209 bytes <-> 2 pkts/108 bytes] - 55 TCP 10.8.0.1:51859 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][2 pkts/128 bytes <-> 1 pkts/54 bytes] - 56 TCP 10.133.206.47:54651 <-> 185.63.147.10:443 [proto: 91/SSL][1 pkts/66 bytes <-> 2 pkts/108 bytes] - 57 TCP 10.133.206.47:59447 <-> 107.20.242.44:443 [proto: 91.178/SSL.Amazon][1 pkts/66 bytes <-> 2 pkts/108 bytes] + 41 TCP 10.8.0.1:51190 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/501 bytes <-> 4 pkts/216 bytes] + 42 TCP 10.8.0.1:37139 <-> 64.68.105.98:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 43 TCP 10.8.0.1:41394 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 44 TCP 10.8.0.1:41757 <-> 114.29.213.212:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 45 TCP 10.8.0.1:47135 <-> 114.29.202.139:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 46 TCP 10.8.0.1:51134 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 47 TCP 10.8.0.1:51135 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 48 TCP 10.8.0.1:51676 <-> 114.29.204.49:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][6 pkts/427 bytes <-> 5 pkts/270 bytes] + 49 TCP 10.8.0.1:33511 <-> 80.74.110.68:443 [proto: 91/SSL][cat: Web/5][4 pkts/452 bytes <-> 4 pkts/216 bytes] + 50 TCP 10.8.0.1:51833 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][4 pkts/423 bytes <-> 4 pkts/216 bytes] + 51 TCP 10.8.0.1:51839 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][4 pkts/423 bytes <-> 4 pkts/216 bytes] + 52 TCP 10.8.0.1:41726 <-> 114.29.213.212:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][4 pkts/299 bytes <-> 4 pkts/216 bytes] + 53 TCP 10.8.0.1:51195 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][3 pkts/245 bytes <-> 2 pkts/108 bytes] + 54 TCP 10.133.206.47:33459 <-> 80.74.110.68:443 [proto: 91/SSL][cat: Web/5][3 pkts/209 bytes <-> 2 pkts/108 bytes] + 55 TCP 10.8.0.1:51859 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][2 pkts/128 bytes <-> 1 pkts/54 bytes] + 56 TCP 10.133.206.47:54651 <-> 185.63.147.10:443 [proto: 91/SSL][cat: Web/5][1 pkts/66 bytes <-> 2 pkts/108 bytes] + 57 TCP 10.133.206.47:59447 <-> 107.20.242.44:443 [proto: 91.178/SSL.Amazon][cat: Web/5][1 pkts/66 bytes <-> 2 pkts/108 bytes] diff --git a/tests/result/wechat.pcap.out b/tests/result/wechat.pcap.out index b9c7c3de062..92c6852e07e 100644 --- a/tests/result/wechat.pcap.out +++ b/tests/result/wechat.pcap.out @@ -13,7 +13,7 @@ LLMNR 12 944 6 WeChat 1251 606425 49 GoogleDocs 15 5114 2 - 1 TCP 203.205.151.162:443 <-> 192.168.1.103:54058 [proto: 91.197/SSL.WeChat][88 pkts/15114 bytes <-> 91 pkts/61842 bytes] + 1 TCP 203.205.151.162:443 <-> 192.168.1.103:54058 [proto: 91.197/SSL.WeChat][cat: Chat/9][88 pkts/15114 bytes <-> 91 pkts/61842 bytes] 2 TCP 192.168.1.103:54101 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][46 pkts/12575 bytes <-> 40 pkts/53424 bytes][client: web.wechat.com][server: web.wechat.com] 3 TCP 192.168.1.103:54103 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][50 pkts/23958 bytes <-> 46 pkts/39684 bytes][client: web.wechat.com][server: web.wechat.com] 4 TCP 192.168.1.103:54113 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][38 pkts/8933 bytes <-> 35 pkts/35112 bytes][client: web.wechat.com][server: web.wechat.com] @@ -47,46 +47,46 @@ GoogleDocs 15 5114 2 32 UDP [fe80::7a92:9cff:fe0f:a88e]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/4488 bytes -> 0 pkts/0 bytes] 33 UDP 192.168.1.103:35601 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web/5][5 pkts/2035 bytes <-> 5 pkts/1937 bytes][Host: ssl.gstatic.com] 34 UDP 192.168.1.103:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/3608 bytes -> 0 pkts/0 bytes] - 35 TCP 192.168.1.103:54183 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/2508 bytes -> 0 pkts/0 bytes] + 35 TCP 192.168.1.103:54183 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/2508 bytes -> 0 pkts/0 bytes] 36 UDP [fe80::91f9:3df3:7436:6cd6]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1428 bytes -> 0 pkts/0 bytes] - 37 TCP 192.168.1.103:36017 <-> 64.233.167.188:5228 [proto: 126/Google][10 pkts/660 bytes <-> 10 pkts/660 bytes] + 37 TCP 192.168.1.103:36017 <-> 64.233.167.188:5228 [proto: 126/Google][cat: Web/5][10 pkts/660 bytes <-> 10 pkts/660 bytes] 38 UDP 192.168.1.100:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1148 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.1.103:58039 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][13 pkts/866 bytes <-> 4 pkts/280 bytes] - 40 TCP 192.168.1.103:58143 -> 216.58.205.131:443 [proto: 91.126/SSL.Google][3 pkts/1078 bytes -> 0 pkts/0 bytes] - 41 TCP 203.205.151.162:443 <-> 192.168.1.103:54084 [proto: 91.197/SSL.WeChat][3 pkts/802 bytes <-> 3 pkts/198 bytes] + 39 TCP 192.168.1.103:58039 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][13 pkts/866 bytes <-> 4 pkts/280 bytes] + 40 TCP 192.168.1.103:58143 -> 216.58.205.131:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/1078 bytes -> 0 pkts/0 bytes] + 41 TCP 203.205.151.162:443 <-> 192.168.1.103:54084 [proto: 91.197/SSL.WeChat][cat: Chat/9][3 pkts/802 bytes <-> 3 pkts/198 bytes] 42 UDP 192.168.1.100:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][9 pkts/828 bytes -> 0 pkts/0 bytes] 43 IGMP 192.168.1.100:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][15 pkts/810 bytes -> 0 pkts/0 bytes] 44 UDP 192.168.1.100:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][3 pkts/751 bytes -> 0 pkts/0 bytes] - 45 TCP 192.168.1.103:54112 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 4 pkts/280 bytes] - 46 TCP 192.168.1.103:54114 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 4 pkts/280 bytes] + 45 TCP 192.168.1.103:54112 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 4 pkts/280 bytes] + 46 TCP 192.168.1.103:54114 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 4 pkts/280 bytes] 47 UDP 192.168.1.103:19041 <-> 192.168.1.254:53 [proto: 5.48/DNS.QQ][cat: Chat/9][1 pkts/73 bytes <-> 1 pkts/537 bytes][Host: res.wx.qq.com] - 48 TCP 192.168.1.103:34981 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 49 TCP 192.168.1.103:34996 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 50 TCP 192.168.1.103:34999 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 51 TCP 192.168.1.103:35000 -> 95.101.34.33:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 52 TCP 192.168.1.103:39207 -> 95.101.34.34:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 53 TCP 192.168.1.103:39231 -> 95.101.34.34:80 [proto: 7/HTTP][9 pkts/594 bytes -> 0 pkts/0 bytes] - 54 TCP 192.168.1.103:53220 <-> 172.217.23.78:443 [proto: 91.126/SSL.Google][4 pkts/264 bytes <-> 4 pkts/319 bytes] - 55 TCP 192.168.1.103:54093 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 3 pkts/214 bytes] - 56 TCP 192.168.1.103:58037 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][5 pkts/338 bytes <-> 3 pkts/214 bytes] - 57 TCP 192.168.1.103:39195 -> 95.101.34.34:80 [proto: 7/HTTP][8 pkts/528 bytes -> 0 pkts/0 bytes] - 58 TCP 192.168.1.103:52020 -> 95.101.180.179:80 [proto: 7/HTTP][8 pkts/528 bytes -> 0 pkts/0 bytes] - 59 TCP 192.168.1.103:43851 <-> 203.205.158.34:443 [proto: 91/SSL][5 pkts/290 bytes <-> 4 pkts/234 bytes] - 60 TCP 192.168.1.103:47627 <-> 216.58.205.78:443 [proto: 91.126/SSL.Google][3 pkts/198 bytes <-> 4 pkts/319 bytes] - 61 TCP 192.168.1.103:40740 <-> 203.205.151.211:443 [proto: 91/SSL][4 pkts/216 bytes <-> 4 pkts/253 bytes] + 48 TCP 192.168.1.103:34981 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 49 TCP 192.168.1.103:34996 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 50 TCP 192.168.1.103:34999 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 51 TCP 192.168.1.103:35000 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 52 TCP 192.168.1.103:39207 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 53 TCP 192.168.1.103:39231 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] + 54 TCP 192.168.1.103:53220 <-> 172.217.23.78:443 [proto: 91.126/SSL.Google][cat: Web/5][4 pkts/264 bytes <-> 4 pkts/319 bytes] + 55 TCP 192.168.1.103:54093 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 3 pkts/214 bytes] + 56 TCP 192.168.1.103:58037 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 3 pkts/214 bytes] + 57 TCP 192.168.1.103:39195 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][8 pkts/528 bytes -> 0 pkts/0 bytes] + 58 TCP 192.168.1.103:52020 -> 95.101.180.179:80 [proto: 7/HTTP][cat: Web/5][8 pkts/528 bytes -> 0 pkts/0 bytes] + 59 TCP 192.168.1.103:43851 <-> 203.205.158.34:443 [proto: 91/SSL][cat: Web/5][5 pkts/290 bytes <-> 4 pkts/234 bytes] + 60 TCP 192.168.1.103:47627 <-> 216.58.205.78:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/198 bytes <-> 4 pkts/319 bytes] + 61 TCP 192.168.1.103:40740 <-> 203.205.151.211:443 [proto: 91/SSL][cat: Web/5][4 pkts/216 bytes <-> 4 pkts/253 bytes] 62 UDP 192.168.1.103:60356 <-> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/74 bytes <-> 1 pkts/391 bytes][Host: web.wechat.com] - 63 TCP 192.168.1.103:49787 <-> 216.58.205.142:443 [proto: 91.126/SSL.Google][3 pkts/198 bytes <-> 3 pkts/198 bytes] - 64 TCP 192.168.1.103:58226 -> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][6 pkts/396 bytes -> 0 pkts/0 bytes] + 63 TCP 192.168.1.103:49787 <-> 216.58.205.142:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/198 bytes <-> 3 pkts/198 bytes] + 64 TCP 192.168.1.103:58226 -> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][6 pkts/396 bytes -> 0 pkts/0 bytes] 65 UDP 192.168.1.103:53734 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/94 bytes <-> 1 pkts/272 bytes][Host: safebrowsing.googleusercontent.com] - 66 TCP 192.168.1.103:58043 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][3 pkts/206 bytes <-> 2 pkts/148 bytes] + 66 TCP 192.168.1.103:58043 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][3 pkts/206 bytes <-> 2 pkts/148 bytes] 67 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: iphonedimonica] 68 UDP 192.168.1.103:46078 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] 69 UDP 192.168.1.103:60562 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] 70 UDP 192.168.1.103:55862 <-> 192.168.1.254:53 [proto: 5.241/DNS.GoogleDocs][cat: Media/1][1 pkts/75 bytes <-> 1 pkts/227 bytes][Host: docs.google.com] 71 IGMP 192.168.1.103:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][4 pkts/216 bytes -> 0 pkts/0 bytes] - 72 TCP 192.168.1.103:40741 <-> 203.205.151.211:443 [proto: 91/SSL][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 72 TCP 192.168.1.103:40741 <-> 203.205.151.211:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] 73 IGMP 192.168.1.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][4 pkts/200 bytes -> 0 pkts/0 bytes] - 74 TCP 192.168.1.103:54085 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 74 TCP 192.168.1.103:54085 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/132 bytes <-> 1 pkts/66 bytes] 75 UDP [fe80::91f9:3df3:7436:6cd6]:50440 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/180 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] 76 UDP [fe80::91f9:3df3:7436:6cd6]:49195 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: cansaqcq] 77 UDP [fe80::91f9:3df3:7436:6cd6]:50577 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] @@ -100,10 +100,10 @@ GoogleDocs 15 5114 2 85 UDP 192.168.1.100:54124 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] 86 UDP 192.168.1.100:49832 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: cansaqcq] 87 UDP 192.168.1.100:57401 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] - 88 TCP 192.168.1.103:54106 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][2 pkts/132 bytes -> 0 pkts/0 bytes] - 89 TCP 192.168.1.103:54109 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 90 TCP 192.168.1.103:54110 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 91 TCP 192.168.1.103:54205 -> 64.233.167.188:443 [proto: 91.126/SSL.Google][2 pkts/132 bytes -> 0 pkts/0 bytes] + 88 TCP 192.168.1.103:54106 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/132 bytes -> 0 pkts/0 bytes] + 89 TCP 192.168.1.103:54109 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 90 TCP 192.168.1.103:54110 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 91 TCP 192.168.1.103:54205 -> 64.233.167.188:443 [proto: 91.126/SSL.Google][cat: Web/5][2 pkts/132 bytes -> 0 pkts/0 bytes] 92 ICMPV6 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes] 93 0 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::16]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/110 bytes -> 0 pkts/0 bytes] 94 UDP 192.168.1.103:37578 -> 193.204.114.233:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/weibo.pcap.out b/tests/result/weibo.pcap.out index befa40beae0..f6c618bcf89 100644 --- a/tests/result/weibo.pcap.out +++ b/tests/result/weibo.pcap.out @@ -18,7 +18,7 @@ Sina(Weibo) 419 258077 16 10 TCP 192.168.1.105:59119 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web/5][5 pkts/736 bytes <-> 4 pkts/863 bytes][Host: weibo.com] 11 TCP 192.168.1.105:35811 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/604 bytes <-> 2 pkts/140 bytes][Host: js.t.sinajs.cn] 12 TCP 192.168.1.105:42275 <-> 222.73.28.96:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/610 bytes <-> 1 pkts/66 bytes][Host: u1.img.mobile.sina.cn] - 13 TCP 192.168.1.105:50827 <-> 47.89.65.229:443 [proto: 91/SSL][3 pkts/382 bytes <-> 1 pkts/66 bytes][client: g.alicdn.com] + 13 TCP 192.168.1.105:50827 <-> 47.89.65.229:443 [proto: 91/SSL][cat: Web/5][3 pkts/382 bytes <-> 1 pkts/66 bytes][client: g.alicdn.com] 14 UDP 192.168.1.105:53543 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/75 bytes <-> 1 pkts/191 bytes][Host: img.t.sinajs.cn] 15 UDP 192.168.1.105:41352 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/74 bytes <-> 1 pkts/190 bytes][Host: js.t.sinajs.cn] 16 UDP 192.168.1.105:51440 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/72 bytes <-> 1 pkts/171 bytes][Host: g.alicdn.com] @@ -26,27 +26,27 @@ Sina(Weibo) 419 258077 16 18 UDP 192.168.1.105:18035 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/81 bytes <-> 1 pkts/159 bytes][Host: u1.img.mobile.sina.cn] 19 UDP 192.168.1.105:50640 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/77 bytes <-> 1 pkts/157 bytes][Host: acjstb.aliyun.com] 20 UDP 192.168.1.105:7148 <-> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/73 bytes <-> 1 pkts/142 bytes][Host: www.weibo.com] - 21 TCP 192.168.1.105:35808 <-> 93.188.134.246:80 [proto: 7/HTTP][2 pkts/140 bytes <-> 1 pkts/74 bytes] - 22 TCP 192.168.1.105:50831 <-> 47.89.65.229:443 [proto: 91/SSL][2 pkts/128 bytes <-> 1 pkts/66 bytes] - 23 TCP 192.168.1.105:59120 <-> 114.134.80.162:80 [proto: 7/HTTP][2 pkts/128 bytes <-> 1 pkts/66 bytes] - 24 TCP 192.168.1.105:59121 <-> 114.134.80.162:80 [proto: 7/HTTP][2 pkts/128 bytes <-> 1 pkts/66 bytes] + 21 TCP 192.168.1.105:35808 <-> 93.188.134.246:80 [proto: 7/HTTP][cat: Web/5][2 pkts/140 bytes <-> 1 pkts/74 bytes] + 22 TCP 192.168.1.105:50831 <-> 47.89.65.229:443 [proto: 91/SSL][cat: Web/5][2 pkts/128 bytes <-> 1 pkts/66 bytes] + 23 TCP 192.168.1.105:59120 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web/5][2 pkts/128 bytes <-> 1 pkts/66 bytes] + 24 TCP 192.168.1.105:59121 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web/5][2 pkts/128 bytes <-> 1 pkts/66 bytes] 25 UDP 192.168.1.105:53466 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/112 bytes][Host: log.mmstat.com] 26 UDP 192.168.1.105:54988 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/69 bytes <-> 1 pkts/85 bytes][Host: weibo.com] - 27 TCP 192.168.1.105:34699 <-> 216.58.212.65:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 28 TCP 192.168.1.105:35154 <-> 216.58.210.206:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 29 TCP 192.168.1.105:37802 <-> 216.58.212.69:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 30 TCP 192.168.1.105:40440 <-> 54.225.163.210:443 [proto: 91.178/SSL.Amazon][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 31 TCP 192.168.1.105:58480 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 32 TCP 192.168.1.105:58481 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 27 TCP 192.168.1.105:34699 <-> 216.58.212.65:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 28 TCP 192.168.1.105:35154 <-> 216.58.210.206:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 29 TCP 192.168.1.105:37802 <-> 216.58.212.69:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 30 TCP 192.168.1.105:40440 <-> 54.225.163.210:443 [proto: 91.178/SSL.Amazon][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 31 TCP 192.168.1.105:58480 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 32 TCP 192.168.1.105:58481 <-> 216.58.214.78:443 [proto: 91.126/SSL.Google][cat: Web/5][1 pkts/66 bytes <-> 1 pkts/66 bytes] 33 UDP 192.168.1.105:11798 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: account.weibo.com] - 34 TCP 192.168.1.105:42280 -> 222.73.28.96:80 [proto: 7/HTTP][1 pkts/74 bytes -> 0 pkts/0 bytes] - 35 TCP 192.168.1.105:47721 -> 140.205.170.63:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 36 TCP 192.168.1.105:47723 -> 140.205.170.63:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 37 TCP 192.168.1.105:48352 -> 140.205.174.1:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 38 TCP 192.168.1.105:48353 -> 140.205.174.1:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.1.105:48356 -> 140.205.174.1:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 40 TCP 192.168.1.105:52271 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 41 TCP 192.168.1.105:52272 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] - 42 TCP 192.168.1.105:52274 -> 42.156.184.19:443 [proto: 91/SSL][1 pkts/74 bytes -> 0 pkts/0 bytes] + 34 TCP 192.168.1.105:42280 -> 222.73.28.96:80 [proto: 7/HTTP][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 35 TCP 192.168.1.105:47721 -> 140.205.170.63:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 36 TCP 192.168.1.105:47723 -> 140.205.170.63:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 37 TCP 192.168.1.105:48352 -> 140.205.174.1:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 38 TCP 192.168.1.105:48353 -> 140.205.174.1:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 39 TCP 192.168.1.105:48356 -> 140.205.174.1:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 40 TCP 192.168.1.105:52271 -> 42.156.184.19:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 41 TCP 192.168.1.105:52272 -> 42.156.184.19:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] + 42 TCP 192.168.1.105:52274 -> 42.156.184.19:443 [proto: 91/SSL][cat: Web/5][1 pkts/74 bytes -> 0 pkts/0 bytes] 43 UDP 192.168.1.105:50533 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/74 bytes -> 0 pkts/0 bytes][Host: data.weibo.com] 44 UDP 192.168.1.105:16804 -> 192.168.1.1:53 [proto: 5.200/DNS.Sina(Weibo)][cat: SocialNetwork/6][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: c.weibo.cn] diff --git a/tests/result/whatsapp_login_call.pcap.out b/tests/result/whatsapp_login_call.pcap.out index f6250fa6747..0fa82a7df93 100644 --- a/tests/result/whatsapp_login_call.pcap.out +++ b/tests/result/whatsapp_login_call.pcap.out @@ -24,24 +24,24 @@ ApplePush 22 5926 1 9 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][10 pkts/3420 bytes -> 0 pkts/0 bytes][Host: lucas-imac] 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/2176 bytes -> 0 pkts/0 bytes] - 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][9 pkts/1130 bytes <-> 8 pkts/868 bytes] + 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][cat: Web/5][9 pkts/1130 bytes <-> 8 pkts/868 bytes] 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network/14][10 pkts/700 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.2.4:51518 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 15 UDP 192.168.2.4:51518 <-> 31.13.70.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 16 UDP 192.168.2.4:51518 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 17 UDP 192.168.2.4:51518 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 18 UDP 192.168.2.4:51518 <-> 31.13.85.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 19 UDP 192.168.2.4:51518 <-> 31.13.91.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 20 UDP 192.168.2.4:51518 <-> 31.13.100.14:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 21 UDP 192.168.2.4:52794 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 22 UDP 192.168.2.4:52794 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 23 UDP 192.168.2.4:52794 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 24 UDP 192.168.2.4:52794 <-> 31.13.90.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 25 UDP 192.168.2.4:52794 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 26 UDP 192.168.2.4:52794 <-> 173.252.114.1:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 27 UDP 192.168.2.4:52794 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 28 TCP 192.168.2.4:49172 <-> 23.50.148.228:443 [proto: 91/SSL][3 pkts/174 bytes <-> 2 pkts/217 bytes] - 29 TCP 192.168.2.4:49192 <-> 93.186.135.8:80 [proto: 7/HTTP][3 pkts/198 bytes <-> 2 pkts/132 bytes] + 14 UDP 192.168.2.4:51518 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 15 UDP 192.168.2.4:51518 <-> 31.13.70.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 16 UDP 192.168.2.4:51518 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 17 UDP 192.168.2.4:51518 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 18 UDP 192.168.2.4:51518 <-> 31.13.85.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 19 UDP 192.168.2.4:51518 <-> 31.13.91.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 20 UDP 192.168.2.4:51518 <-> 31.13.100.14:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 21 UDP 192.168.2.4:52794 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 22 UDP 192.168.2.4:52794 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 23 UDP 192.168.2.4:52794 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 24 UDP 192.168.2.4:52794 <-> 31.13.90.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 25 UDP 192.168.2.4:52794 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 26 UDP 192.168.2.4:52794 <-> 173.252.114.1:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 27 UDP 192.168.2.4:52794 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 28 TCP 192.168.2.4:49172 <-> 23.50.148.228:443 [proto: 91/SSL][cat: Web/5][3 pkts/174 bytes <-> 2 pkts/217 bytes] + 29 TCP 192.168.2.4:49192 <-> 93.186.135.8:80 [proto: 7/HTTP][cat: Web/5][3 pkts/198 bytes <-> 2 pkts/132 bytes] 30 UDP 192.168.2.4:51897 <-> 192.168.2.1:53 [proto: 5.140/DNS.Apple][cat: Web/5][1 pkts/79 bytes <-> 1 pkts/251 bytes][Host: query.ess.apple.com] 31 UDP 192.168.2.4:52190 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e13.whatsapp.net] 32 UDP 192.168.2.1:57621 -> 192.168.2.255:57621 [proto: 156/Spotify][cat: Streaming/17][3 pkts/258 bytes -> 0 pkts/0 bytes] @@ -49,25 +49,25 @@ ApplePush 22 5926 1 34 UDP [fe80::da30:62ff:fe56:1c]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] 35 UDP 169.254.166.207:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/218 bytes -> 0 pkts/0 bytes] 36 UDP 192.168.2.1:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/218 bytes -> 0 pkts/0 bytes] - 37 TCP 192.168.2.4:49173 <-> 93.186.135.82:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 38 TCP 192.168.2.4:49174 <-> 5.178.42.26:80 [proto: 7/HTTP][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 39 TCP 192.168.2.4:49194 <-> 93.62.150.157:443 [proto: 91/SSL][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 40 TCP 192.168.2.4:49203 <-> 17.178.104.14:443 [proto: 91.140/SSL.Apple][2 pkts/132 bytes <-> 1 pkts/66 bytes] - 41 TCP 192.168.2.4:49163 <-> 17.154.66.111:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 42 TCP 192.168.2.4:49164 <-> 17.167.142.31:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 43 TCP 192.168.2.4:49165 <-> 17.172.100.55:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 44 TCP 192.168.2.4:49166 <-> 17.154.66.121:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 45 TCP 192.168.2.4:49167 <-> 17.172.100.8:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 46 TCP 192.168.2.4:49169 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 47 TCP 192.168.2.4:49175 <-> 17.172.100.53:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 48 TCP 192.168.2.4:49176 <-> 17.130.137.77:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 49 TCP 192.168.2.4:49180 <-> 17.172.100.59:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 50 TCP 192.168.2.4:49181 <-> 17.172.100.37:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 51 TCP 192.168.2.4:49182 <-> 17.172.100.52:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 52 TCP 192.168.2.4:49191 <-> 17.172.100.49:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 53 TCP 192.168.2.4:49197 <-> 17.167.142.39:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 54 TCP 192.168.2.4:49198 <-> 17.167.142.13:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] - 55 TCP 192.168.2.4:49200 <-> 17.167.142.13:443 [proto: 91.140/SSL.Apple][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 37 TCP 192.168.2.4:49173 <-> 93.186.135.82:80 [proto: 7/HTTP][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 38 TCP 192.168.2.4:49174 <-> 5.178.42.26:80 [proto: 7/HTTP][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 39 TCP 192.168.2.4:49194 <-> 93.62.150.157:443 [proto: 91/SSL][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 40 TCP 192.168.2.4:49203 <-> 17.178.104.14:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 41 TCP 192.168.2.4:49163 <-> 17.154.66.111:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 42 TCP 192.168.2.4:49164 <-> 17.167.142.31:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 43 TCP 192.168.2.4:49165 <-> 17.172.100.55:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 44 TCP 192.168.2.4:49166 <-> 17.154.66.121:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 45 TCP 192.168.2.4:49167 <-> 17.172.100.8:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 46 TCP 192.168.2.4:49169 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 47 TCP 192.168.2.4:49175 <-> 17.172.100.53:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 48 TCP 192.168.2.4:49176 <-> 17.130.137.77:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 49 TCP 192.168.2.4:49180 <-> 17.172.100.59:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 50 TCP 192.168.2.4:49181 <-> 17.172.100.37:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 51 TCP 192.168.2.4:49182 <-> 17.172.100.52:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 52 TCP 192.168.2.4:49191 <-> 17.172.100.49:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 53 TCP 192.168.2.4:49197 <-> 17.167.142.39:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 54 TCP 192.168.2.4:49198 <-> 17.167.142.13:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] + 55 TCP 192.168.2.4:49200 <-> 17.167.142.13:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/54 bytes] Undetected flows: diff --git a/tests/result/whatsapp_login_chat.pcap.out b/tests/result/whatsapp_login_chat.pcap.out index c3aab5c2dfd..324b0cd4cbf 100644 --- a/tests/result/whatsapp_login_chat.pcap.out +++ b/tests/result/whatsapp_login_chat.pcap.out @@ -6,7 +6,7 @@ WhatsApp 32 3243 2 Spotify 1 86 1 ApplePush 6 2095 1 - 1 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][24 pkts/15117 bytes <-> 20 pkts/6254 bytes] + 1 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][cat: Web/5][24 pkts/15117 bytes <-> 20 pkts/6254 bytes] 2 TCP 192.168.2.4:49206 <-> 158.85.58.15:5222 [proto: 142/WhatsApp][cat: Chat/9][17 pkts/1794 bytes <-> 13 pkts/1169 bytes] 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/2095 bytes -> 0 pkts/0 bytes] 4 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][6 pkts/2052 bytes -> 0 pkts/0 bytes][Host: lucas-imac] diff --git a/tests/result/whatsapp_voice_and_message.pcap.out b/tests/result/whatsapp_voice_and_message.pcap.out index df4f997e198..e14163cbd2d 100644 --- a/tests/result/whatsapp_voice_and_message.pcap.out +++ b/tests/result/whatsapp_voice_and_message.pcap.out @@ -7,11 +7,11 @@ WhatsApp 217 22139 5 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat/9][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat/9][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat/9][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] - 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][5 pkts/840 bytes <-> 4 pkts/344 bytes] - 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 10 UDP 10.8.0.1:53620 <-> 31.13.84.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 11 UDP 10.8.0.1:53620 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 12 UDP 10.8.0.1:53620 <-> 173.252.121.1:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 13 UDP 10.8.0.1:53620 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/840 bytes <-> 4 pkts/344 bytes] + 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 10 UDP 10.8.0.1:53620 <-> 31.13.84.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 11 UDP 10.8.0.1:53620 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 12 UDP 10.8.0.1:53620 <-> 173.252.121.1:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 13 UDP 10.8.0.1:53620 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] From 33d6f2d52fe38d9fa305bc67a8678567c759b414 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 11:17:19 +0200 Subject: [PATCH 056/147] Added missing file --- example/Makefile.in | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 example/Makefile.in diff --git a/example/Makefile.in b/example/Makefile.in new file mode 100644 index 00000000000..5aa175309b9 --- /dev/null +++ b/example/Makefile.in @@ -0,0 +1,20 @@ +CC=@CC@ +CFLAGS=-g -I../src/include @CFLAGS@ +LIBNDPI=../src/lib/libndpi.a +LDFLAGS=$(LIBNDPI) -lpcap @LDFLAGS@ +OBJS=ndpiReader.o ndpi_util.o + +all: ndpiReader + +ndpiReader: $(OBJS) $(LIBNDPI) + $(CC) $(CFLAGS) $(OBJS) -o $@ $(LDFLAGS) + +%.o: %.c $(HEADERS) Makefile + $(CC) $(CFLAGS) -c $< -o $@ + +install: + cp ndpiReader /usr/local/bin + +clean: + /bin/rm *.o ndpiReader + From 71b28e0774f65b5c11fd7121d1a20a4cc38d89ca Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 11:19:09 +0200 Subject: [PATCH 057/147] Cleanup --- lib | 1 - 1 file changed, 1 deletion(-) delete mode 120000 lib diff --git a/lib b/lib deleted file mode 120000 index d049b7c465a..00000000000 --- a/lib +++ /dev/null @@ -1 +0,0 @@ -src/lib/.libs \ No newline at end of file From ed5b04791ef1e8910fcdae7c6787510ad1cd287c Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 30 Aug 2018 11:26:49 +0200 Subject: [PATCH 058/147] Added missing -lpthread --- example/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/Makefile.in b/example/Makefile.in index 5aa175309b9..b515fa42a9c 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -1,7 +1,7 @@ CC=@CC@ CFLAGS=-g -I../src/include @CFLAGS@ LIBNDPI=../src/lib/libndpi.a -LDFLAGS=$(LIBNDPI) -lpcap @LDFLAGS@ +LDFLAGS=$(LIBNDPI) -lpcap -lpthread @LDFLAGS@ OBJS=ndpiReader.o ndpi_util.o all: ndpiReader From 225826ce83c224000a8c5f8e72cb33a1f2559fd9 Mon Sep 17 00:00:00 2001 From: Campus Date: Wed, 5 Sep 2018 16:10:07 +0200 Subject: [PATCH 059/147] FIX: dropbox dissector. UPD: updated pcap file with new dropbox pkts --- src/lib/protocols/dropbox.c | 2 +- tests/pcap/dropbox.pcap | Bin 329062 -> 104124 bytes tests/result/dropbox.pcap.out | 58 ++++++++++------------------------ 3 files changed, 17 insertions(+), 43 deletions(-) diff --git a/src/lib/protocols/dropbox.c b/src/lib/protocols/dropbox.c index b987ba253e3..d981c76b3dd 100644 --- a/src/lib/protocols/dropbox.c +++ b/src/lib/protocols/dropbox.c @@ -51,7 +51,7 @@ static void ndpi_check_dropbox(struct ndpi_detection_module_struct *ndpi_struct, if((packet->udp->source == dropbox_port) && (packet->udp->dest == dropbox_port)) { if(payload_len > 2) { - if(strncmp((const char *)packet->payload, "{\"host_int\"", 11) == 0) { + if(strstr((const char *)packet->payload, "\"host_int\"") != NULL) { NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); diff --git a/tests/pcap/dropbox.pcap b/tests/pcap/dropbox.pcap index 6e950826ecbf6d8fbd7fb04d8af6e4e64b9f9cf8..9824eb6ed2d137e9d35d79c0e1feb4eda1cbb72e 100644 GIT binary patch delta 2338 zcmd6nUr19?9LLWY$GM_Etc@N*a|uz%g!AX#bMHyTp%xWUiO|coL~`J$?#3n+nAO8f z2=Xbqy+}qr1Sb8#xCslF^w5h?5o%8nMBuX}^pJMWoZ%Aod@uYC_nrfX&*%5!et+Bv z<|nuUY`sMbikX4dsuX2w>wULYVHdmBLo>vmPYu!5u zCDG7QQKF?zNnD$9?<5XNiN(%}5?3uH0e8B05=uhvswi>ln371|b?+n|ONo8=JYY_S z(;Tp8b11-OM$RhirC$;|@-L4jzK#z3mmx%8gJTVcL-vO~D0o_B2h%abaTzz8Q%ins ziY&$$VS)=ot~w{!#6)L8Mwm$`5!?`z$_-wOy8TxYnQSs;smP+?5RMNj;`dFq! lO5pZ|a^Q#C74VlPS9VwdA6hI2?&S)&v(E(`_HX&={sNVSxEufg literal 329062 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

4; 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 54.240.174.31:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][64 pkts/12228 bytes <-> 74 pkts/85074 bytes][client: client-cf.dropbox.com][server: client-cf.dropbox.com] - 2 TCP 192.168.1.105:47747 <-> 108.160.172.225:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][28 pkts/12486 bytes <-> 26 pkts/14946 bytes][client: d.dropbox.com] - 3 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] - 4 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] - 5 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] - 6 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] - 7 UDP 192.168.1.254:50828 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][44 pkts/19936 bytes -> 0 pkts/0 bytes] - 8 TCP 192.168.1.105:59975 <-> 108.160.172.204:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][18 pkts/3562 bytes <-> 16 pkts/14464 bytes][client: client.dropbox.com][server: *.dropbox.com] - 9 TCP 192.168.1.105:46394 <-> 162.125.17.131:443 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][12 pkts/2338 bytes <-> 10 pkts/9054 bytes][client: notify.dropbox.com][server: *.dropbox.com] - 10 TCP 192.168.1.105:36226 <-> 108.160.172.195:80 [proto: 7.121/HTTP.Dropbox][cat: Cloud/13][10 pkts/2170 bytes <-> 10 pkts/1758 bytes][Host: log.getdropbox.com] - 11 UDP 192.168.1.101:1650 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.1.101:2141 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 13 UDP 192.168.1.101:2873 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.1.101:3412 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 15 UDP 192.168.1.101:3547 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.1.101:3959 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 17 UDP 192.168.1.101:4169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.1.101:4171 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.1.101:4625 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 20 UDP 192.168.1.101:4974 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/2836 bytes -> 0 pkts/0 bytes] - 21 UDP 192.168.1.106:57268 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][16 pkts/2632 bytes -> 0 pkts/0 bytes] - 22 UDP 192.168.1.106:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][16 pkts/1648 bytes -> 0 pkts/0 bytes] - 23 UDP 192.168.1.105:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] - 24 UDP 192.168.1.105:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.1.105:36173 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][4 pkts/312 bytes <-> 4 pkts/1078 bytes][Host: log.getdropbox.com] - 26 UDP 192.168.1.101:1280 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 27 UDP 192.168.1.101:1346 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 28 UDP 192.168.1.101:1908 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.1.101:2159 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 30 UDP 192.168.1.101:2169 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 31 UDP 192.168.1.101:2544 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 32 UDP 192.168.1.101:2604 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.1.101:2991 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 34 UDP 192.168.1.101:3731 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 35 UDP 192.168.1.101:3777 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/1018 bytes -> 0 pkts/0 bytes] - 36 UDP 192.168.1.105:55407 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/666 bytes][Host: client.dropbox.com] - 37 UDP 192.168.1.105:50789 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/146 bytes <-> 2 pkts/646 bytes][Host: d.dropbox.com] - 38 UDP 192.168.1.105:49112 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/162 bytes <-> 2 pkts/612 bytes][Host: client-cf.dropbox.com] - 39 UDP 192.168.1.105:33189 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/588 bytes][Host: notify.dropbox.com] + 1 UDP 192.168.56.1:50318 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13960 bytes <-> 100 pkts/6260 bytes] + 2 UDP 192.168.56.1:50312 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13947 bytes <-> 100 pkts/6247 bytes] + 3 UDP 192.168.56.1:50319 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13921 bytes <-> 100 pkts/6221 bytes] + 4 UDP 192.168.56.1:50311 <-> 192.168.56.101:17500 [proto: 121/Dropbox][cat: Cloud/13][100 pkts/13910 bytes <-> 100 pkts/6210 bytes] + 5 UDP 192.168.1.105:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] + 6 UDP 192.168.1.105:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/1422 bytes -> 0 pkts/0 bytes] + 7 UDP 192.168.1.105:36173 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][4 pkts/312 bytes <-> 4 pkts/1078 bytes][Host: log.getdropbox.com] + 8 UDP 192.168.1.105:55407 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/666 bytes][Host: client.dropbox.com] + 9 UDP 192.168.1.105:50789 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/146 bytes <-> 2 pkts/646 bytes][Host: d.dropbox.com] + 10 UDP 192.168.1.105:49112 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/162 bytes <-> 2 pkts/612 bytes][Host: client-cf.dropbox.com] + 11 UDP 192.168.1.105:33189 <-> 192.168.1.254:53 [proto: 5.121/DNS.Dropbox][cat: Cloud/13][2 pkts/156 bytes <-> 2 pkts/588 bytes][Host: notify.dropbox.com] + 12 UDP 192.168.1.6:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][3 pkts/630 bytes -> 0 pkts/0 bytes] + 13 UDP 192.168.1.6:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][3 pkts/630 bytes -> 0 pkts/0 bytes] + 14 UDP 192.168.1.64:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][3 pkts/615 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.1.64:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][3 pkts/615 bytes -> 0 pkts/0 bytes] From 6373c355cfd497d57609b8ecfc62717758ac7154 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 5 Sep 2018 23:23:54 +0200 Subject: [PATCH 060/147] Added fix for out of boundary memory access Fixes warning --- src/lib/ndpi_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 557c5b4557a..ebc209f687c 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1935,7 +1935,7 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp static int ac_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, AC_REP_t *match) { int min_len = (txt->length < m->patterns->length) ? txt->length : m->patterns->length; - char buf[64]; + char buf[64] = { '\0' }; int min_buf_len = (txt->length > 63 /* sizeof(buf)-1 */) ? 63 : txt->length; u_int buf_len = strlen(buf); @@ -4607,7 +4607,7 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc packet->line[packet->parsed_lines].ptr = packet->payload; packet->line[packet->parsed_lines].len = 0; - for(a = 0; a < packet->payload_packet_len; a++) { + for(a = 0; a < packet->payload_packet_len-2; a++) { if(get_u_int16_t(packet->payload, a) == ntohs(0x0d0a)) { /* If end of line char sequence CR+NL "\r\n", process line */ packet->line[packet->parsed_lines].len = (u_int16_t)(((unsigned long) &packet->payload[a]) - ((unsigned long) packet->line[packet->parsed_lines].ptr)); From 77ea1c25bd423b4d4e2cf455fdb686c2204276aa Mon Sep 17 00:00:00 2001 From: Pavlos Antoniou Date: Sun, 9 Sep 2018 08:20:54 +0000 Subject: [PATCH 061/147] Avoid possible NULL pointer dereference in ndpi_detection_process_packet --- src/lib/ndpi_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index ebc209f687c..b00225c7c74 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4228,14 +4228,14 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct u_int32_t a; ndpi_protocol ret = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED }; - flow->num_processed_pkts++; - if(ndpi_struct->ndpi_log_level >= NDPI_LOG_TRACE) NDPI_LOG(flow ? flow->detected_protocol_stack[0]:NDPI_PROTOCOL_UNKNOWN, ndpi_struct, NDPI_LOG_TRACE, "START packet processing\n"); if(flow == NULL) return(ret); + flow->num_processed_pkts++; + if(flow->server_id == NULL) flow->server_id = dst; /* Default */ if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_UNKNOWN) goto ret_protocols; From 1075283d8e273d3971fc5c48f442ed8723a7db15 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 11 Sep 2018 09:26:01 +0300 Subject: [PATCH 062/147] Fixes #601 --- src/lib/Makefile.in | 2 +- src/lib/protocols/ssl.c | 36 ++++++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index a0ac4a574ab..ca290017176 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -14,7 +14,7 @@ prefix = /usr/local libdir = ${prefix}/lib includedir = ${prefix}/include/ndpi CC = @CC@ -CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -g +CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -O2 # -g RANLIB = ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index b8c36976b6b..59aedcb457e 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -27,7 +27,7 @@ #include "ndpi_api.h" -/* #define CERTIFICATE_DEBUG 1 */ +// #define CERTIFICATE_DEBUG 1 #define NDPI_MAX_SSL_REQUEST_SIZE 10000 /* Skype.c */ @@ -246,28 +246,43 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, u_int16_t compression_len; u_int16_t extensions_len; - compression_len = packet->payload[offset+1]; - offset += compression_len + 3; + offset++; + compression_len = packet->payload[offset]; + offset++; + +#ifdef CERTIFICATE_DEBUG + printf("SSL [compression_len: %u]\n", compression_len); +#endif + + // offset += compression_len + 3; + offset += compression_len; if(offset < total_len) { - extensions_len = packet->payload[offset]; + extensions_len = ntohs(*((u_int16_t*)&packet->payload[offset])); + offset += 2; + +#ifdef CERTIFICATE_DEBUG + printf("SSL [extensions_len: %u]\n", extensions_len); +#endif - if((extensions_len+offset) < total_len) { + if((extensions_len+offset) <= total_len) { /* Move to the first extension Type is u_int to avoid possible overflow on extension_len addition */ - u_int extension_offset = 1; + u_int extension_offset = 0; while(extension_offset < extensions_len) { u_int16_t extension_id, extension_len; - memcpy(&extension_id, &packet->payload[offset+extension_offset], 2); + extension_id = ntohs(*((u_int16_t*)&packet->payload[offset+extension_offset])); extension_offset += 2; - memcpy(&extension_len, &packet->payload[offset+extension_offset], 2); + extension_len = ntohs(*((u_int16_t*)&packet->payload[offset+extension_offset])); extension_offset += 2; - extension_id = ntohs(extension_id), extension_len = ntohs(extension_len); - +#ifdef CERTIFICATE_DEBUG + printf("SSL [extension_id: %u][extension_len: %u]\n", extension_id, extension_len); +#endif + if(extension_id == 0) { u_int begin = 0,len; char *server_name = (char*)&packet->payload[offset+extension_offset]; @@ -316,6 +331,7 @@ int sslTryAndRetrieveServerCertificate(struct ndpi_detection_module_struct *ndpi if((packet->payload_packet_len > 9) && (packet->payload[0] == 0x16)) { char certificate[64]; int rc; + certificate[0] = '\0'; rc = getSSLcertificate(ndpi_struct, flow, certificate, sizeof(certificate)); packet->ssl_certificate_num_checks++; From 9bf05c35345af7d161301bf5144b854ee5d1da70 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 11 Sep 2018 09:33:09 +0300 Subject: [PATCH 063/147] Indentation fix --- configure.seed | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.seed b/configure.seed index 3863cda5177..8f8817f248a 100644 --- a/configure.seed +++ b/configure.seed @@ -61,7 +61,7 @@ fi HS_LIB= HS_INC= -AC_ARG_WITH(hyperscan, [ --with-hyperscan Enable nDPI build with Intel Hyperscan]) +AC_ARG_WITH(hyperscan, [ --with-hyperscan Enable nDPI build with Intel Hyperscan]) if test "${with_hyperscan+set}" = set; then BKP=$LIBS From b9ae0f8888da758f93aa6ed2033b614926a4e3d8 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 11 Sep 2018 10:07:39 +0300 Subject: [PATCH 064/147] Fixes #578 --- src/lib/ndpi_content_match.c.inc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 60bc3498f46..c2b6dec4193 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8541,12 +8541,13 @@ static const char *ndpi_en_bigrams[] = { static const char *ndpi_en_impossible_bigrams[] = { "bk", "bq", "bx", "cb", "cf", "cg", "cj", "cp", "cv", "cw", "cx", "dx", "fk", "fq", "fv", "fx", /* "ee", removed it can be found in 'meeting' */ - "fz", "gq", "gv", "gx", "hh", "hk", "hv", "hx", "hz", "iy", "jb", "jc", "jd", "jf", "jg", "jh", "jk", + "fz", "gq", "gv", "gx", "hh", "hk", "hv", "hx", "hz", "iy", "jb", /* "jc", jcrew.com */ "jd", "jf", "jg", "jh", "jk", "jl", "jm", "jn", "jp", "jq", "jr", /* "js", */ "jt", "jv", "jw", "jx", "jy", "jz", "kg", "kq", "kv", "kx", - "kz", "lq", "lx", "mg", "mj", "mq", "mx", "mz", "pq", "pv", "px", "qb", "qc", "qd", "qe", "qf", "ii", + "kz", "lq", "lx", /* "mg" tamgrt.com , */ "mj", "mq", "mx", "mz", "pq", "pv", "px", "qb", "qc", "qd", "qe", "qf", "ii", "qg", "qh", "qj", "qk", "ql", "qm", "qn", "qo", "qp", "qr", "qs", "qt", "qv", "qw", "qx", "qy", "uu", "qz", "sx", "sz", "tq", "tx", "vb", "vc", "vd", "vf", "vg", "vh", "vj", "vm", "vn", "vp", "bw", /* "vk", "zr" Removed for kavkazr */ - "vq", "vt", "vw", "vx", "vz", "wq", "wv", "wx", "wz", "xb", "xg", "xj", "xk", "xv", "xz", "xw", "yd", /*"yp", Removed for paypal */ + "vq", "vt", "vw", "vx", "vz", "wq", "wv", "wx", "wz", /* "xb", foxbusiness.com */ + "xg", "xj", "xk", "xv", "xz", "xw", "yd", /*"yp", Removed for paypal */ "yj", "yq", "yv", "yz", "yw", "zb", "zc", "zg", "zh", "zj", "zn", "zq", "zs", "zx", "wh", "wk", "wb", "zk", "kp", "zk", "xy", NULL }; From 6ac83ce7eb9961785bb2b7ba4c3788524591b30f Mon Sep 17 00:00:00 2001 From: Simone Mainardi Date: Tue, 11 Sep 2018 10:43:04 +0200 Subject: [PATCH 065/147] Fixes broken hyperscan compilation --- configure.seed | 1 + example/Makefile.in | 2 +- src/include/ndpi_typedefs.h | 2 ++ src/lib/ndpi_main.c | 4 ---- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/configure.seed b/configure.seed index 8f8817f248a..548cffc83fa 100644 --- a/configure.seed +++ b/configure.seed @@ -74,6 +74,7 @@ if test "${with_hyperscan+set}" = set; then AC_CHECK_LIB([stdc++], [main]) HS_INC=`pkg-config --cflags libhs` HS_LIB=`pkg-config --libs libhs` + LDFLAGS="$LDFLAGS $HS_LIB" else AC_MSG_RESULT([Intel Hyperscan not found, exiting. See https://github.com/intel/hyperscan/blob/master/doc/dev-reference/getting_started.rst for install/build instructions]) exit 1 diff --git a/example/Makefile.in b/example/Makefile.in index b515fa42a9c..7f465bddeae 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -7,7 +7,7 @@ OBJS=ndpiReader.o ndpi_util.o all: ndpiReader ndpiReader: $(OBJS) $(LIBNDPI) - $(CC) $(CFLAGS) $(OBJS) -o $@ $(LDFLAGS) + $(CXX) $(CFLAGS) $(OBJS) -o $@ $(LDFLAGS) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index c4df5b030c3..385c330f42c 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -858,6 +858,8 @@ typedef struct ndpi_proto { #include "ndpi_config.h" #ifdef HAVE_HYPERSCAN +#include + struct hs_list { char *expression; unsigned int id; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b00225c7c74..b4fa7a9bcec 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -47,10 +47,6 @@ #include "third_party/include/hash.h" /* #include "third_party/src/hash.c" */ -#ifdef HAVE_HYPERSCAN -#include -#endif - #define NDPI_CONST_GENERIC_PROTOCOL_NAME "GenericProtocol" static int _ndpi_debug_callbacks = 0; From adcb82d2b528a24d834c6b9ebb183a7261401afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AF=9F=E5=B1=8D?= Date: Tue, 11 Sep 2018 16:46:13 +0800 Subject: [PATCH 066/147] parse protocol's string_to_match into hex which could be match by hyperscan (#589) * if one protocol do not have it's regex (pattern_to_match) then parse it's string (string_to_match) into hex so we can match every protocol with hyperscan * fix string2hex() * fix init_hyperscan(): check return value of string2hex() --- src/lib/ndpi_main.c | 68 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b4fa7a9bcec..722fdb68f1e 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -800,10 +800,27 @@ static int hyperscan_load_patterns(struct hs *hs, u_int num_patterns, /* ******************************************************************** */ +static char* string2hex(const char *pat) { + u_int patlen, i; + char *hexbuf, *buf; + + patlen = strlen(pat); + hexbuf = (char*)calloc(sizeof(char), patlen * 4 + 1); + if(!hexbuf) return(NULL); + + for (i = 0, buf = hexbuf; i < patlen; i++, buf += 4) { + snprintf(buf, 5, "\\x%02x", (unsigned char)pat[i]); + } + *buf = '\0'; + + return hexbuf; +} + static int init_hyperscan(struct ndpi_detection_module_struct *ndpi_mod) { - u_int num_patterns = 0, i; - const char **expressions; + u_int num_patterns = 0, i, j; + char **expressions; unsigned int *ids; + unsigned char *need_to_be_free; struct hs *hs; int rc; @@ -811,31 +828,52 @@ static int init_hyperscan(struct ndpi_detection_module_struct *ndpi_mod) { if(!ndpi_mod->hyperscan) return(-1); hs = (struct hs*)ndpi_mod->hyperscan; - for(i=0; host_match[i].string_to_match != NULL; i++) { - if(host_match[i].pattern_to_match) { - /* printf("[DEBUG] %s\n", host_match[i].pattern_to_match); */ - num_patterns++; - } + for(i = 0; host_match[i].string_to_match != NULL || host_match[i].pattern_to_match != NULL; i++) { + num_patterns++; } - expressions = (const char**)calloc(sizeof(char*), num_patterns+1); + expressions = (char**)calloc(sizeof(char*), num_patterns + 1); if(!expressions) return(-1); - ids = (unsigned int*)calloc(sizeof(unsigned int), num_patterns+1); + ids = (unsigned int*)calloc(sizeof(unsigned int), num_patterns + 1); if(!ids) { free(expressions); return(-1); } - for(i=0, num_patterns=0; host_match[i].string_to_match != NULL; i++) { - if(host_match[i].pattern_to_match) { - expressions[num_patterns] = host_match[i].pattern_to_match; - ids[num_patterns] = host_match[i].protocol_id; - num_patterns++; + need_to_be_free = (unsigned char*)calloc(sizeof(unsigned char), num_patterns + 1); + if (!need_to_be_free) { + free(expressions); + free(ids); + return(-1); + } + + for (i = 0, j = 0; host_match[i].string_to_match != NULL || host_match[i].pattern_to_match != NULL; i++) { + if (host_match[i].pattern_to_match) { + expressions[j] = host_match[i].pattern_to_match; + ids[j] = host_match[i].protocol_id; + need_to_be_free[j] = 0; + ++j; + } else { + expressions[j] = string2hex(host_match[i].string_to_match); + if (expressions[j] != NULL) { + ids[j] = host_match[i].protocol_id; + need_to_be_free[j] = 1; + ++j; + } else { +#ifdef DEBUG + printf("Fail to calloc memory for %s\n", host_match[i].string_to_match); +#endif + } } + /*printf("[DEBUG] %s\n", j ? expressions[j - 1] : "No Expression");*/ } - rc = hyperscan_load_patterns(hs, num_patterns, expressions, ids); + rc = hyperscan_load_patterns(hs, j, (const char**)expressions, ids); + + for (i = 0; i < j; ++i) + if (need_to_be_free[i]) + free(expressions[i]); free(expressions), free(ids); return(rc); From f48c7ab8e6b0a6848aaab28ec56212787b41defa Mon Sep 17 00:00:00 2001 From: Daniele De Sensi Date: Tue, 11 Sep 2018 12:41:05 +0200 Subject: [PATCH 067/147] Fixed bug in spotify dissector (subnet /24 was matched as /22). Slight performance improvements in spotify dissector (avoid doing ntohl and masking in each and all if conditions). --- src/lib/protocols/spotify.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lib/protocols/spotify.c b/src/lib/protocols/spotify.c index 699d8f34631..a180a1ea728 100644 --- a/src/lib/protocols/spotify.c +++ b/src/lib/protocols/spotify.c @@ -88,17 +88,25 @@ static void ndpi_check_spotify(struct ndpi_detection_module_struct *ndpi_struct, */ //printf("%08X - %08X\n", ntohl(packet->iph->saddr), ntohl(packet->iph->daddr)); - if(((ntohl(packet->iph->saddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0x4E1F0800 /* 78.31.8.0 */) - || ((ntohl(packet->iph->daddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0x4E1F0800 /* 78.31.8.0 */) + + long src_addr = ntohl(packet->iph->saddr); + long dst_addr = ntohl(packet->iph->daddr); + long src_addr_masked_22 = src_addr & 0xFFFFFC00; // */22 + long dst_addr_masked_22 = dst_addr & 0xFFFFFC00; // */22 + long src_addr_masked_24 = src_addr & 0xFFFFFF00; // */24 + long dst_addr_masked_24 = dst_addr & 0xFFFFFF00; // */24 + + if( src_addr_masked_22 == 0x4E1F0800 /* 78.31.8.0 */ + || dst_addr_masked_22 == 0x4E1F0800 /* 78.31.8.0 */ /* **** */ - || ((ntohl(packet->iph->saddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC1EBE800 /* 193.235.232.0 */) - || ((ntohl(packet->iph->daddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC1EBE800 /* 193.235.232.0 */) - /* **** */ - || ((ntohl(packet->iph->saddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC284C400 /* 194.132.196.0 */) - || ((ntohl(packet->iph->daddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC284C400 /* 194.132.196.0 */) - /* **** */ - || ((ntohl(packet->iph->saddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC284A200 /* 194.132.162.0 */) - || ((ntohl(packet->iph->daddr) & 0xFFFFFC00 /* 255.255.252.0 */) == 0xC284A200 /* 194.132.162.0 */) + || src_addr_masked_22 == 0xC1EBE800 /* 193.235.232.0 */ + || dst_addr_masked_22 == 0xC1EBE800 /* 193.235.232.0 */ + /* **** */ + || src_addr_masked_22 == 0xC284C400 /* 194.132.196.0 */ + || dst_addr_masked_22 == 0xC284C400 /* 194.132.196.0 */ + /* **** */ + || src_addr_masked_24 == 0xC284A200 /* 194.132.162.0 */ + || dst_addr_masked_24 == 0xC284A200 /* 194.132.162.0 */ ) { NDPI_LOG_INFO(ndpi_struct, "found spotify via ip range\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_UNKNOWN); From c0ed50d5b002838ded46ee22852404998389f9b7 Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Tue, 11 Sep 2018 17:16:12 -0400 Subject: [PATCH 068/147] Prevent invalid reads past end-of-buffer. The recent revert commit applied to ndpi_parse_packet_line_info resurrects an old bug where the last lines in packets that end with a CR+NL will not be parsed. This revert commit is an attempt to prevent invalid reads past the end of the packet buffer. This PR moves the end-of-bounds test to before the 16-bit read and returns if true. This fixes the case where a text line ends aligned to the buffer-end boundary, and it fixes the invalid read issue. Signed-off-by: Darryl Sokoloski --- src/lib/ndpi_main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 722fdb68f1e..b904bbefc9f 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4641,7 +4641,11 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc packet->line[packet->parsed_lines].ptr = packet->payload; packet->line[packet->parsed_lines].len = 0; - for(a = 0; a < packet->payload_packet_len-2; a++) { + for(a = 0; a < packet->payload_packet_len; a++) { + + if((a + 1) == packet->payload_packet_len) + return; /* Return if only one byte remains (prevent invalid reads past end-of-buffer) */ + if(get_u_int16_t(packet->payload, a) == ntohs(0x0d0a)) { /* If end of line char sequence CR+NL "\r\n", process line */ packet->line[packet->parsed_lines].len = (u_int16_t)(((unsigned long) &packet->payload[a]) - ((unsigned long) packet->line[packet->parsed_lines].ptr)); @@ -4821,9 +4825,6 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_struc packet->line[packet->parsed_lines].ptr = &packet->payload[a + 2]; packet->line[packet->parsed_lines].len = 0; - if((a + 2) >= packet->payload_packet_len) - return; - a++; /* next char in the payload */ } } From e8c738282d99f4bcb056d81211e331ca9db8d7bf Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 13 Sep 2018 00:04:19 +0200 Subject: [PATCH 069/147] Improved Facebook Messenger support --- src/lib/ndpi_content_match.c.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index c2b6dec4193..57c53872c32 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8225,6 +8225,7 @@ ndpi_protocol_match host_match[] = { { "audio-fa.scdn.co", NULL, "audio-fa\\.scdn" TLD, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "edge-mqtt.facebook.com", NULL, "edge-mqtt\\.facebook" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { "messenger.com", NULL, "messenger\\.com" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".pandora.com", NULL, "\\.pandora" TLD, "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, From 8689d3293ab7b09b84395d5351f7f3901db78653 Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 17 Sep 2018 17:57:47 +0200 Subject: [PATCH 070/147] Added ndpi_protocol2id() API call --- src/include/ndpi_api.h | 14 ++++++++++++++ src/lib/ndpi_main.c | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 3fefc8e4b52..0409cb8c454 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -432,6 +432,20 @@ extern "C" { char* ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol proto, char *buf, u_int buf_len); + /** + * Same as ndpi_protocol2name() with the difference that the numeric protocol + * name is returned + * + * @par ndpi_mod = the detection module + * @par proto = the struct ndpi_protocol contain the protocols name + * @par buf = the buffer to write the name of the protocols + * @par buf_len = the length of the buffer + * @return the buffer contains the master_protocol and protocol name + * + */ + char* ndpi_protocol2id(struct ndpi_detection_module_struct *ndpi_mod, + ndpi_protocol proto, char *buf, u_int buf_len); + /** * Find out if a given category is custom/user-defined * diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b904bbefc9f..dcf14653874 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5363,6 +5363,23 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct /* ****************************************************** */ +char* ndpi_protocol2id(struct ndpi_detection_module_struct *ndpi_mod, + ndpi_protocol proto, char *buf, u_int buf_len) { + if((proto.master_protocol != NDPI_PROTOCOL_UNKNOWN) + && (proto.master_protocol != proto.app_protocol)) { + if(proto.app_protocol != NDPI_PROTOCOL_UNKNOWN) + snprintf(buf, buf_len, "%u.%u", + proto.master_protocol, proto.app_protocol); + else + snprintf(buf, buf_len, "%u", proto.master_protocol); + } else + snprintf(buf, buf_len, "%u", proto.app_protocol); + + return(buf); +} + +/* ****************************************************** */ + char* ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol proto, char *buf, u_int buf_len) { if((proto.master_protocol != NDPI_PROTOCOL_UNKNOWN) From b0f9f76b798dad7f63999537df8918885fbd37ac Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 17 Sep 2018 23:15:44 +0200 Subject: [PATCH 071/147] Addes support for SMBv1 traffic that has been split from SMBv23 --- src/include/ndpi_protocol_ids.h | 6 +++--- src/lib/ndpi_main.c | 14 ++++++-------- src/lib/protocols/smb.c | 12 +++++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index f3e100d64ba..7b4961a0eb4 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -50,7 +50,7 @@ typedef enum { NDPI_PROTOCOL_BGP = 13, NDPI_PROTOCOL_SNMP = 14, NDPI_PROTOCOL_XDMCP = 15, - NDPI_PROTOCOL_SMB = 16, + NDPI_PROTOCOL_SMBV1 = 16, /* SMB version 1 */ NDPI_PROTOCOL_SYSLOG = 17, NDPI_PROTOCOL_DHCP = 18, NDPI_PROTOCOL_POSTGRES = 19, @@ -75,8 +75,8 @@ typedef enum { NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, NDPI_PROTOCOL_MUSICALLY = 39, NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ - - NDPI_PROTOCOL_FREE_41 = 41, /* Free */ + NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ + NDPI_PROTOCOL_FREE_42 = 42, /* Free */ NDPI_PROTOCOL_FREE_43 = 43, /* Free */ NDPI_PROTOCOL_FREE_44 = 44, /* Free */ diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index dcf14653874..8fed1ebf163 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -43,9 +43,7 @@ #include "ndpi_content_match.c.inc" #include "third_party/include/ndpi_patricia.h" -/* #include "third_party/src/ndpi_patricia.c" */ #include "third_party/include/hash.h" -/* #include "third_party/src/hash.c" */ #define NDPI_CONST_GENERIC_PROTOCOL_NAME "GenericProtocol" @@ -1104,10 +1102,10 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "XDMCP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 177, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 177, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMB, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV1, no_master, - no_master, "SMB", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, - ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */, + no_master, "SMBv1", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SYSLOG, no_master, @@ -1219,10 +1217,10 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Memcached", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 11211, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 11211, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_41, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV23, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + no_master, "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_42, no_master, diff --git a/src/lib/protocols/smb.c b/src/lib/protocols/smb.c index fa684eb6637..c6b0676b6be 100644 --- a/src/lib/protocols/smb.c +++ b/src/lib/protocols/smb.c @@ -22,8 +22,6 @@ */ #include "ndpi_protocol_ids.h" -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SMB - #include "ndpi_api.h" @@ -43,19 +41,23 @@ void ndpi_search_smb_tcp(struct ndpi_detection_module_struct *ndpi_struct, struc NDPI_LOG_INFO(ndpi_struct, "found SMB\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SMB, NDPI_PROTOCOL_UNKNOWN); + if(packet->payload[8] == 0x72) + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SMBV1, NDPI_PROTOCOL_UNKNOWN); + else + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SMBV23, NDPI_PROTOCOL_UNKNOWN); return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + ndpi_exclude_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SMBV1, __FILE__, __FUNCTION__, __LINE__); + ndpi_exclude_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SMBV23, __FILE__, __FUNCTION__, __LINE__); } void init_smb_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { ndpi_set_bitmask_protocol_detection("SMB", ndpi_struct, detection_bitmask, *id, - NDPI_PROTOCOL_SMB, + NDPI_PROTOCOL_SMBV23, ndpi_search_smb_tcp, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, SAVE_DETECTION_BITMASK_AS_UNKNOWN, From c6b427c2521c0916866f932ea1db43334a01b2f4 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 18 Sep 2018 18:13:04 +0200 Subject: [PATCH 072/147] Implementation of Bitcoin, Ethereum, ZCash, Monero dissectors all identified as mining Implements #503 --- src/include/ndpi_protocol_ids.h | 4 +- src/include/ndpi_protocols.h | 1 + src/lib/ndpi_main.c | 9 ++- src/lib/protocols/mining.c | 94 ++++++++++++++++++++++++++++++++ tests/pcap/bitcoin.pcap | Bin 0 -> 591290 bytes tests/pcap/ethereum.pcap | Bin 0 -> 147293 bytes tests/pcap/monero.pcap | Bin 0 -> 171804 bytes tests/pcap/zcash.pcap | Bin 0 -> 22988 bytes tests/result/bitcoin.pcap.out | 8 +++ tests/result/ethereum.pcap.out | 4 ++ tests/result/monero.pcap.out | 4 ++ tests/result/zcash.pcap.out | 3 + 12 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 src/lib/protocols/mining.c create mode 100644 tests/pcap/bitcoin.pcap create mode 100644 tests/pcap/ethereum.pcap create mode 100644 tests/pcap/monero.pcap create mode 100644 tests/pcap/zcash.pcap create mode 100644 tests/result/bitcoin.pcap.out create mode 100644 tests/result/ethereum.pcap.out create mode 100644 tests/result/monero.pcap.out create mode 100644 tests/result/zcash.pcap.out diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 7b4961a0eb4..607e8deef5c 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -75,9 +75,9 @@ typedef enum { NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, NDPI_PROTOCOL_MUSICALLY = 39, NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ - NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ + NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ + NDPI_PROTOCOL_MINING = 42, /* Bitcoin, Ethereum, ZCash, Monero */ - NDPI_PROTOCOL_FREE_42 = 42, /* Free */ NDPI_PROTOCOL_FREE_43 = 43, /* Free */ NDPI_PROTOCOL_FREE_44 = 44, /* Free */ NDPI_PROTOCOL_FREE_45 = 45, /* Free */ diff --git a/src/include/ndpi_protocols.h b/src/include/ndpi_protocols.h index 5c08f85f5cc..e1f3af4fb7d 100644 --- a/src/include/ndpi_protocols.h +++ b/src/include/ndpi_protocols.h @@ -260,6 +260,7 @@ void init_maplestory_dissector(struct ndpi_detection_module_struct *ndpi_struct, void init_mdns_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_megaco_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_mgpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); +void init_mining_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_mms_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_msn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_mpegts_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 8fed1ebf163..9b6501d9bb3 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1222,10 +1222,10 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_42, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MINING, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + no_master, "Mining", CUSTOM_CATEGORY_MINING /* dummy */, + ndpi_build_default_ports(ports_a, 8333, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_43, no_master, @@ -2929,6 +2929,9 @@ void ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *n /* SMB */ init_smb_dissector(ndpi_struct, &a, detection_bitmask); + /* MINING */ + init_mining_dissector(ndpi_struct, &a, detection_bitmask); + /* TELNET */ init_telnet_dissector(ndpi_struct, &a, detection_bitmask); diff --git a/src/lib/protocols/mining.c b/src/lib/protocols/mining.c new file mode 100644 index 00000000000..ec094e7d34b --- /dev/null +++ b/src/lib/protocols/mining.c @@ -0,0 +1,94 @@ +/* + * mining.c [Bitcoin, Ethereum, ZCash, Monero] + * + * Copyright (C) 2018 - ntop.org + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ +#include "ndpi_protocol_ids.h" + +#include "ndpi_api.h" + +void ndpi_search_mining_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &flow->packet; + + NDPI_LOG_DBG(ndpi_struct, "search MINING\n"); + + /* Check connection over TCP */ + if(packet->tcp && (packet->payload_packet_len > 10)) { + + if(packet->tcp->source == htons(8333)) { + /* + Bitcoin + + bitcoin.magic == 0xf9beb4d9 || bitcoin.magic == 0xfabfb5da + */ + u_int32_t magic = htonl(0xf9beb4d9), magic1 = htonl(0xfabfb5da), *to_match = (u_int32_t*)packet->payload; + + if((*to_match == magic) || (*to_match == magic1)) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MINING, NDPI_PROTOCOL_UNKNOWN); + } + } if(ndpi_strnstr((const char *)packet->payload, "\"eth1.0\"", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "\"worker\"", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "\"id\"", packet->payload_packet_len)) { + /* + Ethereum + + {"worker": "eth1.0", "jsonrpc": "2.0", "params": ["0x0fccfff9e61a230ff380530c6827caf4759337c6.rig2", "x"], "id": 2, "method": "eth_submitLogin"} + { "id": 2, "jsonrpc":"2.0","result":true} + {"worker": "", "jsonrpc": "2.0", "params": [], "id": 3, "method": "eth_getWork"} + */ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MINING, NDPI_PROTOCOL_UNKNOWN); + } else if(ndpi_strnstr((const char *)packet->payload, "\"method\"", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "\"blob\"", packet->payload_packet_len) + || ndpi_strnstr((const char *)packet->payload, "\"id\"", packet->payload_packet_len)) { + /* + ZCash + + {"method":"login","params":{"login":"4BCeEPhodgPMbPWFN1dPwhWXdRX8q4mhhdZdA1dtSMLTLCEYvAj9QXjXAfF7CugEbmfBhgkqHbdgK9b2wKA6nqRZQCgvCDm.cb2b73415c4faf214035a73b9d947c202342f3bf3bdf632132bd6d7af98cb257.ryzen","pass":"x","agent":"xmr-stak-cpu/1.3.0-1.5.0"},"id":1} + {"id":1,"jsonrpc":"2.0","error":null,"result":{"id":"479059546883218","job":{"blob":"0606e89883d205a65d8ee78991838a1cf3ec2ebbc5fb1fa43dec5fa1cd2bee4069212a549cd731000000005a88235653097aa3e97ef2ceef4aee610751a828f9be1a0758a78365fb0a4c8c05","job_id":"722134174127131","target":"dc460300"},"status":"OK"}} + {"method":"submit","params":{"id":"479059546883218","job_id":"722134174127131","nonce":"98024001","result":"c9be9381a68d533c059d614d961e0534d7d8785dd5c339c2f9596eb95f320100"},"id":1} + + Monero + + {"method":"login","params":{"login":"4BCeEPhodgPMbPWFN1dPwhWXdRX8q4mhhdZdA1dtSMLTLCEYvAj9QXjXAfF7CugEbmfBhgkqHbdgK9b2wKA6nqRZQCgvCDm.cb2b73415c4faf214035a73b9d947c202342f3bf3bdf632132bd6d7af98cb257.ryzen","pass":"x","agent":"xmr-stak-cpu/1.3.0-1.5.0"},"id":1} + {"id":1,"jsonrpc":"2.0","error":null,"result":{"id":"479059546883218","job":{"blob":"0606e89883d205a65d8ee78991838a1cf3ec2ebbc5fb1fa43dec5fa1cd2bee4069212a549cd731000000005a88235653097aa3e97ef2ceef4aee610751a828f9be1a0758a78365fb0a4c8c05","job_id":"722134174127131","target":"dc460300"},"status":"OK"}} + {"method":"submit","params":{"id":"479059546883218","job_id":"722134174127131","nonce":"98024001","result":"c9be9381a68d533c059d614d961e0534d7d8785dd5c339c2f9596eb95f320100"},"id":1} + */ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MINING, NDPI_PROTOCOL_UNKNOWN); + } + } + + ndpi_exclude_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MINING, __FILE__, __FUNCTION__, __LINE__); +} + + +void init_mining_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +{ + ndpi_set_bitmask_protocol_detection("Mining", ndpi_struct, detection_bitmask, *id, + NDPI_PROTOCOL_MINING, + ndpi_search_mining_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/tests/pcap/bitcoin.pcap b/tests/pcap/bitcoin.pcap new file mode 100644 index 0000000000000000000000000000000000000000..ce62ed779251d022ff818d8a2f186d97d207e437 GIT binary patch literal 591290 zcmeF4Wmpzn+wU(@It4^hQbHs}Kw7%HL%IYB>F$s&=|;M{yF;WK>5>ismCc3s{mkX_ zKKnlQhxfz&@XT>sqRfx~dCr=({_C7I!#L4dkpT^Y1^vC<-hx0-cmLooi;$whKn4}w z{T=)Pk?)bkRDsAX{6oGXfP_Gx6svc9AU=3|!?rxAu%?{J{23h5P(|E0zq55w2hT^h zx6|!+N>B($)Xekxj8TpBS1nbu_J%gLrdF0btH1NN{5y4-<(f{0TZ^8Pc zq5o+QI67(QEFdCG^s%HO?I+d<3@eIy?O8xgiNj~duE4jss1HpIxPJQVG z8i?-hgn&Q)-s-SK214LgcgOg*RzJ8)e+As?{rJCAzf0TjE`5o=Qh%dw4zwxwd&Y)# zZww4<{`F0*ij!tr)>a(8#?_x=bienM$K_N?-!aL|IOtIUf5YorkqUoledf`hk)%tI5rFSRbM zUBQ8NsE+0uLqaAD9_T;WD1PrZ;@VUvg26d5v~Vz&cplu%&(3-?sna3h@$~opm|xGh zGS=`qmNk2ljtf;9Gr5YlW;MyctMqbh$v z)zYN5MTd)&!yLTb62JFXl{4^7^w)X7IrI;Io~U1}2g zZnJKUi;LI1$1i-~dSa}lI)48=ubwhpoeV3<@_Qpp6%Xk_s`N#gZRHVq? zKM%_o9>uQi^@H`{ZUCQ1B)(5HzTn5N(z920V-dWG9KNS8Onen$6XTXSxq^kgu4qXG zJ#o3-!25f@s5oD~#j7ZGiVv@(S_4QPU&A}(AX>2fj_ ziSAZ~A-vkz1OM>f`zPbE2DT4gvhBm^&|`ha)*AkhY*ojlM#Y=|d+ZhjUgso>M-oWa zYw=CSP|@%#;k{-fP#=~21Rkd#&}}~YqrUmZK*jGyQm5~lbut#F`Wh@hdBneea=%}^ zQ?##0PK7GXgqJupgfk%i<58%?P%w9Fkqs#ruv-0qRC8Qu)1I3tT%vy|6HV-6_*ESt z*<|W&ME^f*VEd$%LIWw^vEa{dtA=nr(NorY*E|0=*IT)By#ui8;gSB!^(^k}!{9$z zhrnGF6$cp5E*$9o^Y2mM7EZaqQLfbgjAHmo5jSz#69dG(c4tK3Y2nVCs_vo~`#xO{ z{b^wE>e{?oHeI4FDHxnP2n2oineY#FX~r-fo}Kr`iC6ogm|`x5JhcDqi2~t0a?em8 zv{R@eh8+A9t7#6k6D%8gcM!+#RWF2s1u!CAbCx?hKBp>6s?;wx3owEQf`$d{=>6YX z0gN(AL}Omx1e7?VAI^8U<|(2K>NhBGaCR)&0MnTW_lWans)<>zk9y{$8d|i5MR0-~ zqXNq$!2ICwQ6h0melvuQhG6&E+p0}(f4Gg|l{rffz|;}Vd0z;%5PZ|0L8&u8g`u3b znc^q8c)QpIFb1(+I!>QBh}{BbId^4+YI9b^iXUdB|9n^vFlis$c4uOEK91ys6QgCc zi$7{p>HHosyr%rS$KAJ&wTkk|@bJ{b)#lDv)h8>9PP>ey@)z(Z?JmwNNSt z_iQ_??@#~7GS_9;+NVoUKfVCWK%^0y^dXKRixvvgGUvN~i=MYvW~xi|?;ZjSv?D_8 zcv1jV#w!kI^9m0TW_mJ9A&Jwm-3x%3D#q~poG&4?F0ze1BKLx#%R92P8EIQ^Z46*w z_31EuPJ@xyZu-Mrh5Z7G2%PuoT1n^<1ptQ6a=ozCo!9YQL2HXORMQ^W_tyt6cLS#t zAY%2&4IS8J;&Kr8OcS;qh^+ijn6~%KtL}(%0CZA@d>H4Q$SCW_$YLc>nRT3KEG^qo zV`ivLPCrBM&OkQsr$W(vCV(yV&g3TW z>hAGhU$V5nGWQ~7q z3N#4GhHYQTPFH_#0~q&9)Q_SzcBd3}ONfW=@V-(JE9z8}-99?607fW?16x13zn)OV zx$_GaT$E}8nn&H+BEIfKfax>fdYeP0pK#UxVJ)U4eD&KDV=ZBd_WFPvz=-)NbPS6o zf2Vz+G~&lYp!Qg<-a_eBMN@YR(6JhjIiO`mXKXLKE z&X0eA0O9<9UJ$@71iA6um8L5Af0m|+(`W19KAsr2w~-kCDori!+<*J8a?{|A-JAQk z4#FVND~^ZfKhL4SJuiV_3)BwV+&;oObkTLdQ9y=rX_uFeEN;uT6uS zZy$1Rrkxk#d?TGx3Bn{LN3guBfWaF$pK$7`2^Q&T>3rHOiU$nDLqCd)U)>N+CU>IW zBlpa_;)w>1D9kgyHk#unydf2NX_r2njiOAch5&OmI7(zO!t3FI2=^6p5IVtoJo7c96x8D+1(*!qhh%Z&fc@E${QFo z2A_z5>o0bB03%p~uyIv)ePHctd_$Gf|9*`M{!_rH$|KeRfYI+D37rWH=Z9Gp@T(lJ z>_ej6@eHqN{yvljFi*JCWwW`7vApfYwggolRfxdzpK{Q@DKU9Xp%bCMBN=56$m zt_*=mQP!p}&F)tON@X!q>2?{wv?dZLiduaQqGF7|Ru7_LEor=hvW>clb!efDZSkG|_jR9{Z#PmzGT3 z>B5?y&`_vi#C`_r0t{v|>_ZN8L)MWXlyu32hFO0QkCbOMBg0pS3d1%{Jlp=O9}he1 z2#3b(oC2O{c_xlk2=4(zl~%YsS{$|S{*x^#fvnp16)3b*vhjOH(5u=|AXdi)HR@P5 z#;hY_XK=y}E9cK6iHs3@{73tC0Ar5S7IVAysG0A3(^H+%+uTa|d1$5GWj+pw%E>ZB zU9;92)h5^S#HRMh={9r*9 zVAO=nQ!8tD*T9+^!+bTl1EyhV=&gk(rtq$t=&XJtvX zt^i_IyJSd`;`Mp^oWs^#MT(tndgsR@t(eU;?F5Lvx}3Ub_eQ3{mLAFOK~XjPkKFkR z=4O=B)I}#CpP#yOi@JU=;X=f-PW0L(GtBTiS7@GT!*Yo?z$SI6?Xc=TD~sJ3rsMKb=3_<8SA0 zrT>@nzh#VSqRz*u6DE=Q_)Ip(p%0?gcyKl7`(+^rYACm$7XkH6zH~9%w@21rbyFV! znLWM=9o1MGGKA?*!CHXv%&?NlnKhNhc8a+R0p7qPZMPtDrvH5ejN2m-jgL9VnIZ*) z)udOHN-C-M$UOrq>hQ(4X;^pg=Oj*#k|T%oLj)>3F|4f-W`F^SvfMt5MlCh*Ud>wg zm33q<*Tv=e2*+7k5ny^AI9sg>I9>NMH|}NK8j#G=T1V7>{<@4~0x)qho>Fa$61)cU z8%(&cYY*6J0*Q8+jVxCGS{ec8e40sth=+4YN?u}>+>yTTiyWiv`LMSG*T4(VnIfOE zed3g*uR$Vbz_|TQ>dTl}g%SDrr3XYljD8x9LbMnYRC#p8iL`QDyS6%TVpjchqYyO< z3FA>;ef_o?-{7e`L+!I{sBjb8XBI6VMLmF6hM#AKa541TyI(qIF=cR_T1$&sU<-aisj><#3j+jLs^E6~BtU6xc^w5M0@ z^ouSj!NxLeX13Qg{j7TfpAzcx7XVl(sRB=I+j)yFgXj*x7TCJ2H&zRAo^;|%*FwF)?|=_ zJz|2x4W*)E8d*bl@=-CY6cFoWLFc=HdRjx0@0T^$=P%J)geD!Y{7aW86NckMZe_) zVx~9L_Io}nGaufSmym}%^H|! z!b0{sxd~%Kt<0S>HrG1H_sBgHQ0TPA_#|rbGwF@(*4WyNQOEUJ9?zy@p#;Db7U(#S zC9E5h)M#aEmG}&{h^f^GKnZ!PK~#Y}x8cM(L&nd-pu{Aaj3S2KZ0yI5^EPEn2LL(< z(N-Nw&$%ZbJ%){-Y_~bYT~p1f<|;f zPqC(gxJLPmw>>4a-Bp_U&W|l~5G#J=?Fkw>9jz=L#7x$3Dmz+AY~TppR@@yC`^L5t z9)At_lT~06HV`X9@$tvfUriXjaVYA6LX5mh_9Zn9JL@kMXaOeuSf}jmO#@kN8UE&R zXk>z&bJX^0u=69H{*&{!5%S$RKdJMd&Yw&DxAVI+{OSBmKj77TfvDE$elutxX3-#& zx~a~jA_fo9jt<4YkID0;M&ZpMC`yj(dna<^qVF zSKaiM4_<@2+1&>I!qpw!aA^$v6=`t@2DVouuPhwza=@rRDvjVCxo6Imayksp`*hyp zpI@aAHi@0GGi5UL$`GzU2bk$#4tBLn$;&Pd9T%t*T(@LBr`r- z%0$!ff0h%cp|*lWKR8+Fj=qtI?+3nXeK%1RWzW}{msCe=#}o&l|geM-ovivGn+GEg zlg3+__%U7@M2J~xlX`K^X7dC!D3x$%irOLWY8apVla0I}RSKX}`0MKotgguC51$Wq zM8;eri$3wIlat;Gxk6kY3rZY|=@CSPr|K@JBGWeEhBNzXjyFP9H;le>1943KM6h3q9Ho`^52yfeH#> z6qf zJ5h25x0?ZswzM40#oB-(rZ!rXfRY8`RvvONH;lnFGAzLO4P9 zRg;2owTXMHiUcq#@mFnl^e+;ud#w>aIxF}^ILKf{NdyP_K&%Zs!ecQJnw+2+Esc&( z5z;eQRpk?^ZkpYdfH*F~p|^6l%{tAIKOM0OVV*RWNt z*gbT()yn?rR0eO)$@OX35bhYT^E0xc{6o$E`W@K$ld1l6{=(6}oqy`Ci~V)`*Yd9B z7q}AzJCRue0Vg(!5e+;I9`ub)@QCPhr{pqym~nfEH7r)B4%q}QuSQ`kJe2ccQc+3Q^ z)0eIHmBP`@eM-m|;yNJCGIm}JyMTm<16pzj%cyy`tsH(mt#Q2!qP}1)p*qioLwk#x zKC>Djd_q{ueW~v@i#q)j;!2rV@56W+2Kt)<>8nHbIGf!CX$v)ZLZf483m_kmyzx)i z*ZN$+B$^jah(m*4ZHcvs+d3+)@d3u8f_7qkw%9;mU-Q7W^QHaG27}$P6$AbZ#Aqyj zW=mqHq)u@8I$>((`x5r_TzaXdSUpRjXI=GGX48I14h~G#c^mBP*t9p* zxXXtNQRgnSG<2PiaMql&mRcxm9bNV_@wAf)MQU}P zwf#sk<5ZVQFik0mC5j;x1?ViXtVE*`Aj8aW>jms28*d}I<8dV(NgH1=0*nGd@1Cd6 zMHtqt8`9t=4;=yf3H%fB^Kye+fT8dgz&m?jVZ16Qa3JmG?mAkTdx-jwuk6MEV5;+8 z@H~7?h=?Xbr*SBRDa)JR&O>DKUDFMs|9t2iEZ__iGdCM2+|ohaMI7|}-cl++SZxF0 z_;OTvcH-3e@rzQo8}POAc{g7UX{0MXh-V?Hlhv3HMc(X9o_5_AuvHPHNjh007~aN% z(0mYe?x|0ml5_YgWIIC6@WprPj6BV>K8x8q&ixS8(&vU&D(rbZi<4Wu7o0!aT2wRO zoIbI7^T>i9?YP^(<9!p`_9kc3=qW+FQ!$VESyzfdP`RD;w#`WGJ#x>Wx4!DbU9hOA ze;4;_Wi`UW_4`q;1yfp)Gyvm<(V{ zPtt!ZP;d!PxOQWgy3UA1k)K)ie0GmOgSfug$U@Skh?$}aEB!LU+hq`@>tj7hL(l)F zat_dee}fN?t2HSXQC;xa9JzjwK+`{FrmGz)2I6`v30K!l6;$}FVCMKmk5r^(?`99Y zH%^I^0~(;ykSp#wFNHZ+ za{tr$%N_o9{_*%fou4-rO42b0URI7O3iRF~_+$2$E;?Svs&@iFR3;Q_eD?OBeJX^m zx;V4sn#h;fpCr$fU3tv`M)1iHYN`9Ht(Z+p# zAbyFvvxjb4fO!4n$Ix9{M^nTfu;BoqVCQj)0RT8 zaGs)U8n(aMq9d^;%)kIWZD2d20(6X6j=c;R@ex~vj*V*!#_G;pTY)H#11#{ylgt!2)xW0 zR$?LsbV#9e;y5T3kjzWgS&r$`~$x%xdNfNV;XSIg+h0f|kD@1L66!j!?${l-Plf2vH z1M1>Vx%9O`q6XpBFNh}>3_Ty6?O*8j;SKFqgwbizoKbr|;!-qhdKU`BLW_!o-xly_ zwQq#IbkU-cD1aFe`$cXZb|MQf(%aD%HF>yCGWpwif_EjzWF%C24(ykclJQ>0(%I<4(-tHGCZTFnAFYRW1o?O(>a->!LxZa6m&e)M}#2g~mS>Qx7r zJq7b`Q>53=M&qas^OX*BzxqqQT6u1rtN9zb@6WCAs4xt<&uDfR4iyFDG%N%MhF`PH z?%qm3TxSR2sl5-+{V9B^OrO5TkTh?$e@)vs6fkcIalZ67=b^YXP!&jyhib9$nb2!n z@}OSGK8Bj20rKho7NebIkjs+ACDUx?Gbh96S(DYc)KRq#F$UEwg-fF((=pJ5e2(S> zMAd^O_(66!w{kMdfX)a05qE{_WSl`ir*=O3O6EXv^+%{Llb&rste)W~t~iYp52S84 zKU+$g7x0p#h^0eR)UA=K26V#K)TEl+m8i{#a=guy}xYWQk0>!1DL(fRF-v> z7=tQc=T{Z{r<(tVGT)u^uk-%t{Iw*1JAbmzAI>lM-)DRN`)tpDpY6FHYTz0Azt8sk z_t~ERZ=daP{YU3twE{c;uYX(ZY3lvk`AhDWR3KJ+1fQJeVUb$VjsKoz?&sli=h2!v zQg%yMBz{Lf#TB)qUz$3a%w$OV5Le}*G>7A!yRc2RmRir2qwz#4)U~EK9}oHUS_AWy z(KE8|T1;4fW zci8|s2MFywyV(u~Sfsr(wdk(8cuVn!&T@*39uQaD3H>;XD=y8PMea0{q@QMT^s<|b zx$_!?#~|imVI*xYeX8DgN}(SZr8OZL6qZPmp{JD}I%R-ZTuLckABBiV#Q5mEUgA#0 zR2`q2jkyiL)F491W>r4QQoAkHq$1h3UI>~jID(29(HfbKBAFGspwT7sdH^kJu*tE!h zz?juzTYJQ>w*@!TKCB%_MuS-Sk&Ty0EN0oXSbKkYpuWrTdJ)07CVIC0W`+fbWiFq9 zA+U1GoSPt~(p)07wz=PJMTYLeS&IWOTR+&K+ryV_L!Zp^s@DDV=zMI5LtJ=4Z)zq(}Fy+edFoP@_^ z%v%A7r7qgiZ;GLAEMx@#J*w5UcV$VPwFQozHbEC)XolrCG5dvDS4hYGp-p|`6oQWj z$Y|Qqr7-~Jp+j$x`&!EP^PhV!TMAyxXuU#@zpxHlhn)c!br?QfUJ;uu;+ed1sPYox z##QY%#a1sw)`|coC;(paU889JTX9EVB=2CuMo z_rku#d^3(!t_9;((BB8>eEhy_hl&eV^|s>qm5gwmoYOa6oTS*ZX(U*Hk$KNy$EIa# z)L(DUr9$g(YWTMZAF&Z*!Yxo3!4z9|2=aI1=bRRT?>$9drXQ$77l z9iIbjH^4038ot+xdhQuBqkfznWBL>|=6tkGjIwA9q8}R73>!zue%&V4`o>hOyM#lO z>NC`ko_t`?1?c$qvyM0sI~nKF!GF@`lnQ8VQmQeHFfH`u2AHqeTeRvi;%g!y@FmZS zYH`sY?msfeVWlCNQJ4i|nung6?;UlWpMXuwezY4n*@J_GeWhuz|pEV&T-2oG`W z-!4|ml$cdm&(s@{r1FKfT;0;CSFBgjYarGSHf3Q>vGVe?2eoZkk}X)Q=fg<%F9OqR zLX3cX?7VJ0aMub`i9e+DKk>j~3QYeH?*sGIpc!2ApUj~C!#e+^2-x{|r2nk>JFNb8 zerDZ&IltB2I=@;T5LF}e6B<`-24z&NlCEV(w;Bc954a)jCvbxhBUYbwAJrN`GB5HZpW8eeJ)RoFIQdCTKZx)aV0yc# zAI2yhPPq#I6g!XQIh8{>H-(Se6Wfag7`?$8dUBqZBxHw(WK}Svb_vxagi6y`XN|-P8!Zym0r_8WY&**Vbl8 zDpeqy@rO94ZTz+Bm9=~p94nXiF|Eho83BrBAvMIhXA_QKz)#g78NBcSPntm7B3Nfi zCjsasg9q+FEULGOAIscGrDfOME(fMy-szcmgm%W}#Y5!-O#4W+{;FHJnx;5U#^+S+ zb(g?FyOo~aCY4Hn`KHf>rH5`yeZZHxd`PZUL46!@%}azCuNDC?kvtaj!5gn%t73CI zq%8Q3qR}vX&Ef*#+Cz+d!Ko+{SgKDxUapCz${h&AavzJ*e$-C0I|~9jj6G%tkzXF# zXf_zAZ1J(aF$&@KnJ=rQaE8da3gh$H;GmU%+UP>>XgWHQk?@R?w?Ml}?ngjpdbY*- zd^4%(qqLapOIE{QQDze~lw8W{OW08m9UhuDpQG%eoy0bT=UuMZVQ9##-O%#_NTFln20^kSM;m*nJBtAaiBO$nENJUe3;i zb|eig{1{+v=>^mM#{*e;da_)sdB zHrZ$SZxMYMy&&39RerWFu(pwzzr9YGRVD}ijZ+M$a5Ib8S{#TK93AFaEkUFz96+&G zlb*+Ehy+(0CSIMTr2;Ut%Wzs-!#`IQHIE$~t?IAX#>JOo1AZ93)dLu)^TGYeRc$sN zrM*lO6w7azdSMw5cf;m-mRPH-~Ga<>(dD)V*)M*9;7)nh7tv1_gX+FKX_az zfnonqYvgzo&)RVkzxAO zYs9_*Qr%tWVlDIzc30F=DlCq#SO?!NWgup|BL3ilmG8=F3@$4KMd@EPDjp9$a$dvD z+N=k3n#u^JTOOmgKR)+eW-mUgdzBJ|S;l|#W?Kkg)Ss($dp>1beqlB199cTYIcR*W zQM};e5)83=wo~@p(Dnh@%r(_dbMcHLnG{pYR>9SG3w02c$A>+O!)^`khPAyCi2+_H zreFoPlKuCl34>38SR6ZLkNhs`$Zke#s2TmeBfXg~PV{}pTfeVU9r~KA zK&;T2)?4}f?c}4>?m^P(H;Hobg8pV*9qDWk&j4_>Zv@_|IJZTe?7%}EiFVSbTrzsi z-Y^UZtmBeKicm3b2kt5DsBZ~woQho-(ZH29h50#li%)Y`T5!&M3n33X_ zYg)NDN+$7sPKtAoJC$6S*5o9{mtQ>sRQt&8>6x1D5qKAH;0H$n-4+_=0 z@Omyy1CbJWWmQy{I+d8_q|^}NymP;-5`ABau_ZRxMIQ1?ti$G*|NJxZ;8Zvtpfk$b zK-M=i5v*+CHG`fiR8hy1qk&#xSWF91RS0RBeOA8Me<8L%TT<0)h-K$Ri-|K&v3m$H zPPv-V_%plFiak@CnYG}$H57y=WKqZmuaKOmk1SLhmKF&j zUH@ccy&&|Ld_o84=%^xk$zC0NN=zb2MYRhbQ(N*TIZn~8w1DV8JF(neR*2H*>J}%$ z%6pNwD=t~fZwZRFOdw{>5>C27oKEy?n8_k>7=;1ja>M#t8jO*S@NOU$wJ471JlOds zmj224Be}rNFQf6N^AETF?fg}DL+!8C9&pXCuIZdGL8w3^f0bwKVf%?MmvFB{a0-YT z^+vjOKIegS(oF%jC6}JM@cY0nGkMZ&M2M@-vlQ2BYl@*4`NG_6mpGV47@Yj6PTwxa zy@&vvhU-imyupKL3s#|)MasfX*6fD!iZyey>N$Yv;xM?-M`W`pZ+}27J*-iNI+$dG zV|N^m1~KQOi5|R_fuG;rAKvyzEnyo}uf3RoS&ZlEa|3j?2c8oNz4k1BFXXBHa~dfG zlx2WfuBsNBowa0$KLjgV%(PN33;-RIcB9q_{RjM? zGp~avA6ap6%V0iPKdJDi9R?V0J#0@W%rdy8Os^d(ZIfBS*(+~Durd$cMmk(h=tFay*Kfj>9AoAuM2&C1N=Lqjc7#qXmn!Y19>2G2_$JPbn7!tp z4A6<`2f+`_O=x>%xtcmy{>1W^nUy=mE74PewOllmu3!8aZSJi0f(jhuNR%1^|r30dax~To;p$U<}F)NLHBv z&p(olVsD@u;<*>+fR#0(c21+O6uoo=K{g@}SsC^gUD78YSG|(E&2N}cF^5{E)7d#%yyLxh?&Fvfw*S545G|J z;KjDW#q!$-bM_Ek+OymUh#DV0nKEfP=|!luotvJIFDe$hRj%p}qHY`ND&V+`I!)rB zdvY>5WV9^?`K{ynGnhvC2pWbxN&&``6)qKeL$v&c1uf(TIWSg6rGQ+&UnqQu3}CQ@ zO|K0=47cg3=;C$0U{~Y;!&2Rgs^N$<y+O_R;cVV)2`fR#?Ob zK=wri>^F=%J@OaHg13u{CK59xHS>i!o=$TR>-a)H);h?Sj72sQQHUQKUR1@(wzZ

VXE2ee-RRw&#*9z;W60S;XKYg*>}uFtEWX_+I$Ej&z zq!2DW@_H{oHD(Gq6EPyTxidi@!eLkD;4P--R%(hmlF*>hs1n0qK?XG$0lkJ=PAcRfX;p(`V4OK@aVKD>=P& zlzl}5#4OIuW=rwLQHJ)|D+deF1F>QG&@SDk9>MTY2cXlDCXm!-uTciG<+W;(79_lS zk}6A{@$AQE5`eLNOMtUkC@!2&1-nu?o$R2=pNUFfZ{C^c05Hup31`W*&s(@2btHNf zqmJi{cUFj_QrOmu0!+vI=w};k^oUoTDK&-T*SdUp3!h@0zPUs91Iz^~ckUCMr1>We zmT|o|(^@ze?*kVMagFWK0mf2YrHSJFtdA?bLy`6!hZDnxB1bmNTsC|bfT=OC6x|lb z-~GAUg0;SHn``0c^w7Ah&aiR@V8(6E1I13!vD|e|-anUa+P&Pz$|U>Ztv>xYaH}6cz;SjrH;mBe#HPy9~jLB zFgqWFMrj2LP79b#!{!HK5|XUh;vZvON|i%6QJA^3bE??DFXax{eali`HoDXo{ji}j zJEIMNjz=-JcyJd9G0ULqQ{cU@5c^ZD#B5H({=758%l*3_!`ej9EG zW^;m-&>M)EzBKd{rE-4F=GC)W>!RCl z)XzDGB^Y$nGJpldLcv=XFXeSo&@XDy_e;Y)**-SaIDkSZkb3G5_Ghbu#OBcGft*w20V))%GZ8KL}h3QM~1#`>TT^ZcW*tr z-@w(0M8j!8uLi+v|&wroo`TzFW9&eU^a{e@Uu=Ddr{OSC&=zrJz z5|Mv6za7Y=t-%?XZxV^4(B7noCUwMFswL^kxO#Th~}_W zh3fG7b?=?<+?tixX`&5jAP0VclP z5tCG7WsG+w<;3jRU9c(4X;QO&*X-cPV4ikZRLUJ}I)3R1V9CESAKvV2 zK@WZHelm*)F#V1AY1GPbc^ab;Bw^%gX_ukN?E-YZQKEPN!%`9#K&(CK^i%hyZ@CPy zBbZ1qGCmIDkv~M8q3HOAMWXda8h=Wy&6zRr{o^cq$M>#%n;vn14o;r29Vym84c@m` zlAeBn7-|*rgBGi{iuhsxLwy2G&06=3`xkK$yulUGTrdAYJn1CW$BKslv*5P?h0(S( zO}dBLl7vv}B_@RYQh4OJ<~c+xr%8;G&}gKmXRu4eW9oIe>xdtXH+7!2b{YaY2(V~- zgU_WO;fp#QBbr-OH7tuF&|@RNc>e)lX4)jnR`KCh)T0M1UGSuDZ$|aAG9L>|-4X)K zaVJ_j!#aV2KVDESm;C3~R5r=zTqhFnZV>fuDzbt4>NZVDFLh0a>{+CN(&L+PuF#sKXBIe2)Pnsv#E^K4|5{TSoUWIXt*o9A_iUFpnR+tu+ zZb4<@@)NS7#fyfl@>CtXuBIE9M1Xlt#rdU(8iu_a%fE1|RWfZS&OVP$-TdzNN&u!j z-(bKtMIL#MSjmtOF{H5uW32)!t!{Wr5@1YBF=bvt=cPG4X8l!wKc_OYjD~KkV4Bc= zx8wodz_s6V_S>C7F+0iJOqHsNu$Ra+o zK~S(yo2_Ngi@uk+*QqMX2fa6B#(T-+oTSbgHnxRE_I=E&X6^)Hh4t~d^1|@Y!F9%o zu%zC+z={x&0Bz9qcS1FR!Z%A85pgovjg;cYu8 z+eJ?Pxai&LWHgbI`rXdE4a{KUC#U$zElIb$?3;Jb*6TmRGv(1-JPqW7=mDE!we}+G z3fFA#^r?gjq;5MlQ*~E)l?1OKRvkE6^)L6osei70p71r(lo0j-1*?uT{?QGy?R}{G zSY4H5h~+I5c5l^RxMhvyyH5$^L@$5QlVhF)m`}{r*UXrh~;&NPs|suLox9^bBjVY$)1`$YIxSha<9vt z3u)qYP)Vf0KC2}*+Q7vJbclC3Jv3{Fbn%W)cFmJ=GcU1*2Z{0CYLD98S6JB@g4GT}WJ~UJ6e~ESNbnE~a zy^O)a?`Vw_*7^FDxFjJa4OIHx=F9Rm^$`6B@7T2c)$!xT^SbxkN!Hl)xGnDc@cZ;H ztpED0ui3i+@O1<>r>UU`) zQZs*5{71n1fSKb0W zojQf^zf#AzOI_)&)c<&g`LDYuZCcPEkGr-3fBr`USO$wbQRW8&X1TzQ04 z#0eD0>F%H4&;LlrTs8ol&imzmOK1M?bSCd^hJx>@g18ZfshL+>zy}TahIa7E=VMu( za;TKMBmYmQ!nK?6iZoR6E|J;!e`*&w)%!#c{!HWy>+eLUVE;~pGL@Qn?Y__dd%JKa zYi>Y+lfY3s6d+xwNLdkSS4E5aDRFapFBz+(f-LV?@aNy> zAdqgAJ$ML;-2B@RoEMTmlK~Gw`MbgV`(E?rJcyez^*?n6@b~`H3++wrqR+X*L#%rJ z`9A@`Ey#TZH-^>2e`^dG4BD@Jo)}QDN6-Fl48{U#=FR(8*a$EW}S2`u1ffBkuTw>^Lb{|uBN`0r4l8v$DI zPYLqF=4D>B1@QaJC@foaV~AY&!ZO)%tD{yK4saRo{gctFX##O7r>W zx)v*eEZmhE+?5#dtUCYN`66%>uofJ0T=MEmTizyz<@!k{1@&*v@eJnC#IBb^jGK* zQdh%s*|i@p#bLGZ-Z52Y{Pcv=RL{pdA6bLqhh@%CVpkpGM3_i8j0shy@;EjK8Tgi- z%Ykj%!SuwWoJW+ftX+(vcj(+ZNz3+<7yYrt?7rA*^V)HweG024A5(BkM8vg9KWtF; zej-rGW9tptiXO|H)`26p(o--eUGvMmpJ+aaF$&*hG@JaqiWJkABn&5CG@m_(^sBau z=8vWa^RAKg-w}Lj9PW?_QIlwo5T_eb<-o66ntte&;fV}sepj?m7Z1lST?eZFmy)hE zkG(lm?_FOs!}CRXE-7_Fxe1D!j(JE(hi#+qf#v@C>~}*y!X}^ZAUe2h4bHF}uM2)z z?DCO7zaQbTZ9})evNS>OUCw(cKdyOM+4Ad9oI?#cZ9=*jPL{&2nE4zc<8$HFRb~E{ za;8AUpqQ21c=1pQ!Ah8w(&MO4JXYJbCv2W1DSC+PBmvxme&;OdS8U*`IGKz3Q2&v( zUa0hhXjXUMfwB=hC^xO#_4e^y&Uxzom_(*N*SI9VX7r^z3K(`C#DtwZc&+%kBsqi{ zHRpdRXZ<*Wm#{^=Oc~M)>T;dVt@Ku-`Ael_PtK71k_gRb;J_U^ScLI4G%1c8hQzTg zex$&A#Ph?j@s)R+ec!3e1BKno$5f1#`(2<(m7;hqDRyzcV85~V4ZVAinJ!Ehb!5I| z1BaJs#W~T6>whU_D3B6U0k{L;+vh+0w3bxZN$n`%y*nlw`k|cBwzKME;J?NzCbTJ8 z$`;yu%hWb$0!RUc`vD%5eYyHYj34wCv=@l!zTmw-B~L)paDFCpYWuWCJ8DO;%x@}v zNJh@_S{^PY-UYq$<=4x{^{=c zI-PiTu(jAM-r(%2=is0x=eEtFN}jjORp}DX*7K%At0tO8h0KC{cxKc?Tk?cbC9}Ic zD-Q$eCqV)Ai{udH=GGllAO7w8r{Ps0UU-`vlFCAhq^*_0e#u>|uThii9fy`* z2TFIrtq5W-zMda3V{T-VIaFO;GYVn=EbNTuXL19s+ z$3>A+VbL?bhmWz?tdJ`+oAb_JP)UN1kuaG5H0Z2fs`uQq=6CbAGeRIi%Pu8pC_DtprG;o!{}2cZx#+372IIk9UMkf)y>*| zG+e*5T=?aHAC`Jgr*61zw2m)g?CKpAIo3SB$plwcnJx9( zC%X9Ii__pPcw1d8#yjP1WtX*z?cIG}?R}NB(Qh zj9;Nat+n;Cz=zSnfT6-(xi!Rgg#kihdJLjI9+Kc zCox^`UpbHCsrNQ-l#$79^*CX7RNcG&(%XX%jCn2E7Fs!6RA@K$Yv*GOTjTYMt`$b! z*%vtZ>HB1N8(UqsK4&cJ`CR9{TCEuIU&-0QZ=az}vc*&V&(k!Gc15pN&%e50--fVh zey+FdhPJf6pr1wE zoP5&M;Ox{rT;%WI{1y2dJCT2IPvqwu=|cVtD&GIf#AK3*^Ec`oe5YhDmGhzQQqucj zEpqD`7KJQ&zT-bqo!i@IQ-n{7-CHy*vEPDTb+S99^|O#`Zoj-* zwL|Rgrrp_L%$Owtd7|@#Kq5r^{83C`HSi z`%QC6B8=srBth9t2XEe4zOpfI(xHaS)0E7DnqQllpW3?r4r#8^J@In7{dtx*M!_bgp^Vk2Xv@E;9&^Krk*$PbRgo;2qz5j|#qPU_kDpV_<%UaY%S z+B~M#qjL@A7r}6}S#mUk-J`sEdW7FNR#U3@gU*-!LpO*@*RBW&8T+}4#+-k%>FlR_ zK@QX843cMVG2p14n0(W-KKkganXgy!B?eBTG5;5&=ttV4#UF(4uyqrxGaRqlpP%FW z?BS1RW#^M`%dF#Bk$swL8~?b-sqN)`M@vP0P?w%2baTy%Bd-I^yv8P7%sBRnFZQLf zuni5mW`B^xPW!#bJO`HyTRzDC`SB|YPaEnQkD2>^;+kIX-MHlXzZkTvx|IFmw#7E( z6Z+OP7Rj|On0I%_&ZLoBCieCp_${S4MU4jiOVCbwTi@urF0;B@9r@6cBZSi!g*mL2rkLR9Ky%6btaPQ@J&gb_3N5(P# z;9dE~dwphv3$#uP54*oQHsbV*J8B1}|LkXI*mgE9h5(^U(3Lmt*F~SSXqbI%z1z`6 zQSvLc-|Bd)`*ZIwzF@;;W7lQTpi>r&xuR0Mdu8v>x-!?}$6W3^<;#q0)$DB=PlUfp z&lQXQj|Lqj{lQRDFn{m<{n?-9xsKd6>Q9_sJ%`W8sOznKXBfp+A|N2kXK@P3z6PLz*{rn>0F?Z#ydxu3JX z56YiCd{#o$*$$Dr-{tZ+qm1=3h8}uOLVf8F5k7g5_RewH{Yxs9=a$W`?5{oW`pf<5 zvdTN3Pi{*lp>}xQ_HBEhyiA0r`E}6`Te(jLX?J2j@3*`!r!_F>sx|LUgI3d&o4k4N z`8ciC*R@$bYWe0SwOH*M%ChW{P(Z{dHd&#e^Ej_{Qu;w~l_T#V;^ z^g8~?D$CHuK~05sJp5Y3`53Lwdb6DRzE^WTy(zP7qQvcw)frhkY+k4P3C+Ge_H#J5 zZXmuaV(hxMPo)b?Vs>uVRStjsF2y4C8~@8qYpg_^!~+`cx)$tJ(|arP+~Jj{Lq7kw zPcJej?OndzjWv8MY%Tr$3U|zWN}+utxC7&=d5G#N>DJY0*W9MhofIHA&{VJ1IVdza z=*gD5U3ZLXGp~89IN4`uVzcYeo11qHeAAxUZ3w*a3u@!T#CknfI3x99LgzRcd*jSoa-M;d zg3NmV@Qt>ln`|~GTBxad%km@_Y3JwbyoOA#Z|_)_WI+O`OXRuNNA~i-RUy4U7&~7b z(7$}SZmF?L>gAoMwtwrbJ>vDj%ReNC=S(fudlSavy5!XKV8hIXZ$kx_&YNlzGxFW# zUjk71)jY}-z*yPGVMW)6hx2XyexZQ>;|Af-=*ZCI+;NeueE*23kba_r^Llp3borB- zX>7;)FTI8;bqj#6QtaE-(-jk6^%-I?ib=e^A%! zP=dBqKyVWO{+hMP2Y$wiEm7P*ZJS~;Z&K*XOQs4IWVRPQMNTEnFx_2cI{%}x{|qJR zX9accW5gahshU|Ii`)}L64-e|X1!O*xXp2wL*kaiRjnT_c_6wq@9)8ymH!r>jVci06U*byO|2Jl?(*8-pG6J?-{UQ=4 z7vcX}H|j;}$3e(?)Z}JKWlYnY&##^| zPFqVXD5Z2*I<-@4JZ>+mxx(aX&BLI>7vXE;YHL|yU=9AIgpjwnsL;`rC@3~mC>7(_j zZ(iE`86oikrz(a8XRZ~MDS0nEddJUxDeuap7d_8Y)tjBEDLHM>tv%&?Ua(1{K5Q8? zD<~(v+3%MCDx$Ny1aK|+c6vd1?ul^{wRLL-*JQt#_x^KevXbtvRdue2G{P*NjJtU9 zdVorTcFJIB4zhYU|KGjJuq-u%zo3^99z)+ub-v-X3|qJ?5d)N$z*L z;I?D5{IaocBP{AS%Rk7wo4QUl`rN=H>o-617HeP3MScN7eo0c3@(aH0M1EQ=J9xAw^79YbkxHJx-Wqq{dsXAmZFz2|P71xx@LePo8lIOU*~FLm zMgA~rM?#IgsW1N^^ys}Y8y-s}X0M!|IV?Qm2HbVKv`ugq3iFT^0 zCf~HZhSgcBC&`cKmy!1V>#FNc7B@SEn)|%GbN2*SWWyqE)U&U5FJxus3#6(S?K@gK zPNAnzUp7hn(3Dv;l^tdMFyi2zsB>n;*M1Xfai;8!6Q|>(=lJrZM5~ekuA^#@+=d#U#F%IUfn4H zC2QY*B@iz^VZVf+V#Ns_KB>A1&ks$h*WK4s0@XvCliue?Hpf2*D7##cAv$UA$l%{3 zAg4bm=h^d3IqB}P0Wl-ZH2X|A+8Xt=`RvDGgX#^B<+X4n@XN2%h2t!GZ~3};o7_c{ zgq;o@v^2l$(VgM`U!2Y#nH#{n zIAz+#QWC&R)h+rXblev^>CHYpyV)ps`qbh=gGv6k8zsEA0(OTu9>eYBr3pmwzR@ zQ?l4MamC!%6YVeQeDoaeSI&9!z`01M^QK>d8N5BpfA&^cmDjc>XZg5z8FpjTpRWq&wZ$;(AuuX|#3M2cs~qv?XZw!aEX=T;k$=7_B;e1-upV*X zs%=UH!`6g@s|RXT=(}J>LP_ls44Vk93g0Y|V_540e}3~|Z(di1og0I$j$O>K?~bFZ z%XTvCL-4E^&$A?k4cPPNXT|uZuVYv@U>jn+51BITDIjOM`i@4m54^db?k$F`LT~P0 zn9s0R(WrzJ$1`j>(7u>(1WDu0Uhv()b4?ibHhOk&&;XLv4)E--t?3N=1XzyP@X(hG zD~rZFqE3-v%h0GsI-F$KN5HPcCR?QDsJ{q&)u_%V!fxf$_d>F&-L^{&4y3Md^NRs-) zt~2bX-C$H^!V4JoC%me0>MwG(=<}WM3TfZ=i9f@J0lX5kZyv$0D(G2{p9&1Sz56N` z`M3TZ`CB@Xzkg5UAG)Fo`9Iz6qKChbpBrud`QvcJJQww0*v|lK#JqH;GVB?o8}E|! zbQMW(?N&90E!YL5A6U%GuyO~%)u2y=_?bw8!5TgcYlv(yI5?MK=OL^K;S@7$DVoua zbtH}D=)2*3gBbQ3@~%CX7cwlvf*D1LZ)MmC0GGvLj6O2#q;9QuDTw}`bQELPz_2fo zj*i=_Gi(X+u2b0p49kfIqe{u72=@}nDvigOVPAomEq3MVUWWZ}47@q_+H!_fMAFEu zPhi+>=-KPvoEg>u$*R(tV&^u5Vvh`;Gpqs9QDdzv!|pYc@~VgMf}`Wz!p)*DD; z;>O7?3|kGPA+>ke3W_CQR8nc;@(k+-^ea^@Ot|q4*re1;ZxOSwcGzMB5{#_``?lORVVTb_C)@X)D8Ko0kGiB{~$kyBj0bvZicM{_O!rp za2vyZ2Y9g{Vb>Xkl>&CWAR*t8t^x@v$hi11>@X0k739P>5mN(}s_@P`kzp+WPARlW zxe>O4F)Os)AI-3jflVm9{~*P%(?OI{6lozeS-1bszNaXDPm*jASgN8-31KTAkh9{< zdmkt|f>9}&%5k{~kd>lk?ka}O269$B*qlo756vj|eLseM2IQ>xP*Oj0^9q@U@_6pLV3*h*R0=4K_PvBjPPQ{T;`UB)u8fe@~OdN1erD2|TNg6=T zO2b~25sCo>R2mUaS<5jnDy7*$#PLH9|JgQ_H2kIzn?~RD$|bAYeFQw~RhLhg4zdR& ze~T>?S%GaRZPS>+ue&+%_UWawFF#2d6W_1vI+1(<T;vb^JMy=7B7eW0$S;1S3;F#Ndm{ft zVgbO)l~orI6W0cQt8C{~N*)4yPuVg29L)sD$XkUZxD9+)rSE=!hK&OjqcS4+2E(QS zt*eYGA@tl1B&agBzZS!O1zJ~;3L*a%Mq04sKS;3? zJ!{_}$guTjR31AW7>nkJG^}v))-xlNTO=Pe&7o#rxb*!0*1z%`04<|=Ax@f65q%s(beST%?zs!GFp`k zhoKA`30R2A`M@T!SY+)NmBv%P3nGn5&Yoh1?FS;d%GG8=hE+iRTOoImVZ{NzQMosn zYy)cHaX8g`(?F)B@}#dK!wMiBwG^2!tP-#d)!zM2GprMkhHBp#0StQp)Yeq{t5X)9 z1M+OuVV|i=c?d{DRj!;yl>t0Ob>W3KRAm8nrMl=kRVh=rQJIVUJN}ORuRD>y=ME@S zNtZ6VA3R7ad4Oho6=ZM*z%J^{53g2z7MzbSPy22hevDd0DC^0j8#!C_!0E zGSYg|qcseB1LS?GXSU9#`UzlLs%LV?5mN(*pqeZ~aR}AoRg=FCVps`)+N#Ol*HVN- zl02)q3ujBJ=L+3vbpc?yYTCG;44VKl57kV+ARHZ4ub8(oYzrFm)tgQXYlL)^ceRm_ z7mccvcMp9RY5$J$3*wI;4yjfPQq{W+#9h^Tv37>-k91V;M}GSpM0C~1jc)WT(!$dn zdl_~Pz;xB-dt|ZEfOV<1>|e^TNdO;J+xCwo1VmTg-=>O?HJZ`qsiF+qik|(F@PuK< zB2W2RNSQ|@LQl?IVlept@zwYjo}`r+fGTPN9+a18psT%YiG!kQl3JgXWej^5Se;s* z>tq{lKu2nVPae}s46r&iq2YrWRuWjO+CXa$TK@y_Ky92b<&J#6%ZiKq^M(G}`u(O8 z`TO+b{8I$GkpJgwfczYenuKWrc?gKrYLd!N8TJB_(G&rSY>$AItIcvDJ6;H{o}w(c z3D~ikT5&Mdnvi@=Y#EHpYD>!qiNXM{QCs>wo^oU~s^$8}h?xRRS6h)m*^&&BhI`Xn z@*jXEYTm_UF$|ioPtI9lOn|wl`JN`OEev9b+Ug%v5wZe)tF}jp?07%$OtrnYC_2sq zUab~+htOmx$cNOT1nJpeB&&T_dXpqUgj0(yq&#drx|%(byjl)*gqX-B5SAF%HPvi?|RAHZ}uHXXfSv@k} z1=rTp53+4k;{sNve&{LjS6!sR!y~+?zKuq8@;=G=%b$FZi~JS(e?|Vcoygz2C-Tdr zcOkz5H8uXj`BzeJ&lg%VR6qHXSnYY>A?k_Ss75>t#4h#ZYB|id)X$xwYQt=RHR|a$ zG|zniJ=M<(45Dfsz(@7-MI(tL08XTSDYBJeZ9uG6FHZ};3H?1R%9|#aZ{l&cN)F*)6{K`CpVb391eb{?~bOf+f{Yx6fgE%Cs zb|d0(uh5vk?zl?q1B^;TY&kzgWnifqQe~6{e+F96n5A36up7`-gczTHmH*JmjK()2oj*`*+wME z9d0)$(*ki#}3(z>sd!6P|m`%y%9N7~N`%D`O=8dnp(Q7;y< zx>v(!M!Ep&G}?3~(RV@Y)cCGciM#1Ed*uwJ>>=gPbx6&=MG6ed52T?f%zK4lQ-S4Z zGA4HzF7h`R{1y4%bt1n&PvoCt(}nz-{@w05vlIE*4ZvbF$3?#*#0T6{bAs4xicWwd zXiA>8p=W`IXiBH+(K-ph8qL{Hb}(!>hzFVrFHz5oA9}O#L}DL-=vlLV#1S;nd@WZ| zoeFgyX~1D>hr-9QxsJ>UbHKBI)Gmjmg@=YSuvJf!_qCj*Gbp&9uK*3ilx8kMi2 zFV)A8oc$zJX;lMh-)|QA{3lQo*IdsM8_0rJ&lga?0GjWHL({1{1+Yuaz#Y3N8wUA- z<_;+b>hVIhaq_hQ)#Z?vof^J`VQ+y9PczYySo{w(=A^VH;u!$7H7_a?daeRYT=Q}W z`N9!^fSOrSlxO!tSFi1*cpm^_iDs_f5r!>9SM#pZn*RlakNFQMO7#Pnu30GghUAQV z;X1cdYY>v;^@o=!mLLrlZKN1>A8D{8djv%|z%n(<BtcHyw+(s${sw>m=jeFQ^z4de63Vz!t`qNY+4whCqL5fg}2m! zeh-Z*lZO~0@(``;0|}Hpp!w!4oKGG-e0?FzS#78Lf^(+CJhLz}j`( z4ib}S>8S-S@}GD5EAqeZME+hqkzYBf3;7LA{)qe>j*e#^(oG-W13KQP@8Go#oz-!~ zALk+|Z2m$LTn)I1PH-7T;|TzHbwWBwH&2i~ZIz{HJQV4bbtfk71`uB-Z6tRc8|2qI zY1yjOSKCwi{{%^r)s+M@>Q6v3s!%+ND~vi-LrST;3(e?u5LGr2%hRbfpqkHW5dU-@ zxTjOy6I69{nhp^ANI)}czNgQyBS9?DX^DPDD-!_YblT^&QEeJ9ab3QU6xu_8t`4xu zX4po6fVv_9|iMx{IS4UO3aXkS-6pR~^crlvd5f!OpMfUUanSH@E=1$;qQU7a{e zHn1yQjWQvI^#)abT`kc;RP_cL)YXbMq|Q#@N4om_TPbD(1k|-@CKiv@40WAX&ScmX z0JU|UH=m*G0r;SVR`yMdtMP%*UqE9pI z8^9xVx9fePe#k#R%SC>{J%2_151q)**Aw|QO}dc(=kA`!&(RH=LV8sKyhb;?rHv#A zVzutBcf^;6psTwzeHr#7vee!7)ZLYat2)(inR z(Ytx^IIW=}&n%xQK>dhlCe;hB6Wc;QP>yt)U@{dH#A6?b!pUt@o~k z)(ndgihUVePkm#^=f6!Ljz0|9#7{Y5TMv9-}<(BBXEYN@8lRn+!JIi`is4Z!33dE#oLhYSp)Rc zKV_uGu%U)qCB z&lN%yVC@D=hVU_LUo_?w2E;No(0tu_22hO)Se?P{aLVB#fSe5?nh7WEfc6a{zVgz_ zB0zkDSnH>F*R;VQEn<6BUC(lnzii)Mk^fUC^7s6u7gLjCUC2N4XHVqsQRe4x405NE z^qY}hUldUWAO+CVP{WjLaVLnkh8j)f)aL^tjo}ieonaSs&GY|^%5dov9=rx%=wnY@ zdlSHAL*Fyi#HWB>4OjE_rJfn!A%+_iO=v9|pqOEx?oeV|z^e@d?JiMnjz+aJY6#f` z@M^++YS^)w!X{3Ek zoGLTGHjE6aDNAz%C}w0m`6aE)gNSZqtw)yA4j7`5&4%Z6(h0CSBbT?a^wV4Ds@pcQ z*crf&jND?ZDWaoiH!(|zrvsZbN{bxNu=0SX8Qn^bE8sBQE>wgT@@HhMUm*iR9f(ZdOpl~w>gXY?qTSV$r86r)G)2h(mu^z7r? z=NWc9z$@bsvlkGm0Aw(pKbJgZ1Ng47$&WMCAMt->#YKMgYkx)l&s^m9>iliBe}4qc z)Jmrd`OW@4(Dzqw&p+$B#-@D45S@X=7`sQ44+Mj_XB-+vXtEFZym8ET${B~Dc^>JT zLOV7Awi+KXAxm`uh+upwNr7Rb(6b5S7E_-9$N-GbhESwg2x^zcSMRpcu1lo3yzjke zy%Ej#x(eZxKN{7|`JyCAB#n}_&luJRjrndM;e{{YM8=OegxazIAC13FcBK^pFe(!| z50O>{|F5YwP@wzVV;FTmJL+OiJdJt8LWmro`(0N9VIz#*Cu>Qpx6BLBJ{e?|T;oyh;Q zXSK)veHZel=k?_L!rW?IHt<{1fskJASdG##Bux_OD- zEbBIx>KMQ#OlOUzICKldThqBiiRIM+wqnrRNDgq>bor!A;!}W|n0o4yoKcO-G=$sBXb0k-={DyC+F1^`iD~%BdfJ}_u*P)v zYd)$!qG$Js`q4@ZV0os|tI0EYk>wm$^2MvKrpN0@Rs{gXOcUJ1sGALNPt#=EBI?{l z(#RNpk@_)^oC|GBXrDdOeqAnCgXp`>!ah|0MEZTF@PJqzlE%9=6gyP`PMLntq(~D0 z(8TmZD6LHFL-TDPl}a6A$YR?ys~A=kdFXe$PZaOLn9T$)2GEXr;74X6l{+cp0Ul~L zQPh-Hn*onBld>kBVFfVVOm^)z>LviVY$kiDftWbR!^~!BlJENi4Vul>Al!Hbkk@SC znhO-Ofqu<=1c*76pc(C}B~OV5Xl54YIuD-%W|qiBq)9;gW*6;A8b6};aFPE-@4xfM_1+k+^Z{O&JrmQQ z-JT#Gm^HN#i`NCL$LvM=eX5xPuQqFUNu+f!^yY8k8>o{9`OkL)x;hb{w%PYp$4Cnx z9+(d=Rw8B!zH6@GqD*HCqi6Me-%~vSAcDExp%-LV0H@521*GVN6ZB>?S3^202H2H( z+*6v-WAtp?2PcLd4p^=E2~T^<9)Pu*pB1N!7In~?-`GN{RzHDlm=~Y!AgcpjZCoaxPF=(|nZzfkoIcU#`-H{0sK>69Ov#^QIegN^- zB52}x>ia~R+bp_>PGUm#v{SyBc0wV0Vk2lpUJ+oN#lbTa!!qF2a+XexL$-Kgu_N{Q zfGA~=peR7+RRD~$IQ_E^ol}pVJ)$ z+0yAbA3h(-(&;6AR}A=o<=WH4J;MR=TCN*Oc(D{n(lVU;djN;Pm@N-%^B}(klC(Uq zeG+*WV5XKw_tfHZK`isj(kX)mmSb6X+?b>R;*e!w5>;3HL1eWoH6i_~1B7F5!x~RRRA@>eT_>WmU*h9NGf12df*aDJz@? zaLVdt!VX+dx4Pe3fpRy%AFW!szaUYHq|wpvnkweNGpz?qB`($u#%wK?E=V>3tj&7V z1S{G%1nkLLr_W|u=LG0!trJs1l^KAK)_OUV(^#Qrje@+Xo&YSzdadpj_#=3PJWjqp~24el)otUXFuvofE zd3Gl7Bl>;!ScZKHqLfYMnlkG606Ma{mPipU9=$og&sM5&0gJV%im#{cLG;XC3_8;R#{qeviZG}uIXT1Qd z&US|3dFt{4@!odkWiIj$nDAHR|K5rG-+CgyUql!3kN)s4^80en?Fl3)0FG~~niWA> zM>EksS3pb+Ad#*9JqxmOpgCKE2&$jFMG|ysYbTZm^lIxdnk;4;@DSSo;Z1Ni1jlyM z))Ca(2e8$4M>uhlNPuy+;pODFw~#bq^^+-UL2r(2An$sKq;bGx6!B$XskR5xlW0@` ziEIxR(u&9!5KC<1mYgFG0d{N~=N(Dw2T0CwvDb;G0}ru{J4I-663Ob?n(wsg3%G*q z4O8NA*8mdPR>>V8W{T|U_MxZ5Q9xw16IgVDb~b=f+4XNsqb@qY0qy#8*-rl0DfdQ=n>^Z=+sra!FMf5M`%={>^;gIfz{cGnUSZo0v*|n$RH+u z5O|8+m>cUU!$Z&NCJdq~C9pcX#V@U?wgwoR-O{oKihoFw?t{rg7Xyp6E77O?PY3C@ zTw(>)BmhUTdonJAeh&wYs`&!N`#4Ymvuh1pOIbKzsCI9@>r>qoN#myu#oc4TkL(9X z=hI0T=&JO7En1}mI zaya%z`OE0ERe;O(=J$V6{|Sg)_SRorD1!zFXz!Fn{1NTRw09Qgp&g7s>-Ns)C|alk zOSN~tKyRJ}IuPs^>(T0sHn2AP#fHR9t^)6}Upk9Jx4C>GTdDNe3Yps=c6oe1{YP zj8C0&7(0bV6@$hs9yFg}&jOy|pfYO_t)GK9fjmp)sFnK2Fb~QKeeYm_>o_J7nw)pw&U(DGnLO3AF{$o6q~DFzgk;Bpj~h z@lkynL^y|BeTutZ(RcF(P~~kUdNxmHTz9I0sDn7H-=FL*(&6D5DJ4?d z5y*EFiDJ)u3Sb?;#T+Ack}+RErhc%6lzR`UKK^DCEtVir9PP(Y%M%Duj*0V44l?!mKQC~Tn2&KX;w}FSqyLM9k^w@%X=J z?&Vrqj-QeG=K$u^KG=Xt&mgQiD?6u?YXPl0>v_EMtluw~%H?3p&id<#c$R`7 z>Ytyz@GlPt+g_h#N zld1eQ5I~sAz=#<%BapJVh{Y0Q7lQA)s9bQMVgj%n7uDOov_%eR!9{(P0R7+z2+1z` zDMS=P(2UHZwMddcRxb7vG|3l$23;Jo8gZMW%SwkbDi@&du6%4t8&iPgxU3p8o_rsm zw#%wCJ0eC%l4}xAQn44zEt6#Kyno+%AgHa06kp?4I_q#Hom$Jo^Xmb{(u>|j)^1+?+jRot9W4=@f(nK zxQgE~qgE^QW@Zer+Jyj3TqnfRq6I>H*Gb>i=qm69*M;BO@lS-iE|M%H`k(S=-*;7Q z75a;;wDa~-N(yYl)#2n1x(b+ttHXJUQg_jqT`LFC;t=p7*Tr*XXfYYthR1G-Lsx*c zyL$f2p-6+C^|B73=1cUfcQ_S4>j2MiUA?4@761U&xvus&ONbBhA=kC4`1#pr7WZ2(0zX?w#@_*`y{CggBA-}v&Pvrj>I_V!Aj_aQM2Nb)IjE)_bB(?=O zk!wmQE$axw1*)e+dUEU5_ctCRg%v(>T22c`p z{kn|2x(!4N*NzF4wV)PB_kKqpmL%?}pr-Du1lapDTsfNgkkW{x7u0UGoQTR(@6jRQLJN-avHA1?vk?VbP9n3jA2 zn)wt*6EoiNKlaQ;exriFB0p~@@_+1!{L#T($S-aGzsS$w_>}k&J`O{px&2m|VK;-g zw=&sy5B`~sl|^L~*~S7^yDF+UkhX~e39kB7$+Za}ec!P&1ZjH?h_}8ft+bG3^gj~h zMmi41SFf0ms1{(WZ>DcFW$wTxeD9cx5+_2>-Z7s-MQwndzIV7dH51Htb)MdE+BOM1 zWOd=TUbJNlApYu#Tt3<~1Z1_w=@C`!e86|tgw~!QYXjc3CiLebs+j^gucXloOrg38k2yB zt{?jI8bwx+X|2Cw^@ge(AhNE1vwkb(oxq+qOkt$SHb9oPA;6xp(t40dZ%FjnMzvF* zqYY_0qG+Qp`tEfedD?Ib{3vLltvW5>0WAcX%)Lp+x1pkH7K8p{Lv5piv0YY$lulz`H$Z2LVnS< zf02JJx7x$|JL&KIH;1!pL4pe{*8)4*6>~g*a zoHq|x_pXGZ_tY*6uzXiS@n>oc0Y10u+#X`!2-|jLTp}chK%=@FSWZn_pxV7#rhgM{ zrUcU16SDdM)x|*E+w0eFGu|E=nf;SEi65vGL>Y(iQ-dn7&={Ge0i;1NqnJX);|%)@ z=y$)ea{v+M@UCN2`#?u49Dfs3OfeJ0fs-5VQ^t;J z;it;_4k88)zMD|4dW;SP0Jf3X5=?f5eljib=MZ8L4gjr_c3yL)?*d6Ci~J;6p+@@T zp(`tC5gCjsd92$&s(XSNC5wwuL>&saSW3SJs*1`1t4k3a!AtGfK+Y-s1;|rsfwiXy z`xEQQ0Jf1bIE}2X4pf3thIvtSG8Dw0l(8F)sJ#SOdx}g5Va{ZLnkjOD#HS1ZZluim z8cgk+Ai|`~{z%pR&ww$d%;mdHSp(oTDRWa=XrnFgvJ?fW=_E;jS1F3h4z%(EkUm8z z{UbFI|Mn~w`6U|uiu?kd$p5Y<@+SmzA%B`wPvq|gehw!^(`*jqA-{dE$5ow4X|(o? zw60@FTvrSDK#ET5V3Go|HoY5EXXPOI8h+bK&mt=~zA=)ju%J~UWuwR>iU$B6Q;vPR zPAdb*o=%P?4mK5i_vCUyPZS+fPR3FeIt0n;;?@4TC+pPxTN+P zO7<)R&?I%p?4@LrK!d46CwS0ySP*GaMek2#*!e(`sbXT}Dg0o*sUrrN;sY~NM~tG_ zsRn#Mbj}54$H6?Uau0L_IpJ2r{RnA?Deh>=HcUHs#LSA4SsS6H1q>V7Z zHc}Pe=F^%ih@Gh#Q*9};L$cDeCk9@PW~ALOk6PK#o2_R1($+YDIjPnjloy;s8no@R zj%M_S7{*2ZgPgx2fA3D@f7=uJQ^t28|BUVv+d4TvxAu{0zr7!|Mgkv5b>7yWd=H>W zs`IhCRKr8Mapq#WBgmXnJx5YLUyP*SxwMG7LqL@wb@d}|dBXtm zri+c&CKivbj!Pm0JOJ!Cedea|^ur%OlIfb3=jr$uprdrdNLQ+EpfNj+A$(j3ygJ=+ z5+ScU&~Lh<(GH4XAnv9+u6a%ko4{|=*NG4lmj_srzH{+H;!}WUr0;xcO_?P?lk}aO zddkCq&!-=G-b$_VpvIJ5c$FA&Z}jG>lf>~K0Ue#cl(~kq0AzJBZS*Eue*<#9nC82O z*4%+KE}0A?1grr5n>qLd@eCP&44H#-DGv(hY2G-vK6`ssH>4{&DI|gF_S#Rs);N zG#O??><8pSnO5dh3*iMendvCu%|(7)iM~87)RoWuk7t6%w(uuB6JCvvI^UN^okyVF zq)#XEzv+qm=_OsrU$L|&=cj|6fVE{hXHmrq^|)oaa1R{HMbh6JMU~?VNWQNhlh3CC zYr8VoT8ttpu<|QnJX`2lU~N~7{SMHk4uF7H?iNriNe6np@^A*>aw0(OtOdICU9^oa z%T_yrR(kI$Ao?j-FsiIjQOa6qL(m_O*2~JZ`a*R_;F;OO^=Zsw z04`^Xxl7RMHqd_d2v(IM9FRu#w9z!*STNu08BYvoR3LU{Yq=7~--X_6{EU2F6wS!7 zn2&11AWCKXX!_8Y0h(m5oJQaE1a_4j@O(2NAkac~z)RAR6{vw^2kLGlyZ|Xru; z>zqMHcG21>@ZTJlOZRDo4a_KKX##oZRKUq{w(}F~x(Kw8!;T^UeT1$aob?X(Am_yU z%TTW8_A^-ECJ(0h=p7ZNp9M07?zEQ-~z)W&S?0Q107=S_K zPPC!?;55)pu1p5`z$$=5xw;i($6L^|CSqe~#Rni@UjI$6X!R3#SDsLB@*h5cad{D* zC#kvuW|Ws8#Y>whLGG4!SMaOsouARU4 z_)zNF1AHn!;=Tw~Du4#_4`k7sN1|sFpY$Q`0&BAQS#pZ_sQ&!Y0aC>B03s9&ks(9~ z1d=Qm7D1dS8{kyIoEM~pg+R^)D^F6iI1BuzAWV(w7)#Kb--VjccY*c`zOAsQhz_Df z;qASY@88%QjL4%nOXU=tKPjIy?wy;pWtP0<@YBxZq9wUZd$q z2f!q5T0A8=KLwt0(^{QyV?Ky9H`fKl($8Q5OfT*yPI<{nFy`WZ%H&6SAbThl_G+ht zM1ZFhPrOUH6k07Sw*Epn90S--ag5?E+Jn=>f4Rs%+~Kdt->(z-TYDn^)sbDuf9}|y zk)OjUK6CjHZDU7LXo@BlV1UN@^1L4%umn7$__f}6!VB!q&W=G z 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�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 t;{_CcEk)E86Y8(ngOD{Fo#MM-EP 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 literal 0 HcmV?d00001 diff --git a/tests/pcap/monero.pcap b/tests/pcap/monero.pcap new file mode 100644 index 0000000000000000000000000000000000000000..67d796882e90cbb77a65052f6926c3cbeed47f11 GIT binary patch literal 171804 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 z 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 69.118.54.122:8333 [proto: 42/Mining][cat: Unspecified/99][2 pkts/281 bytes <-> 137 pkts/191029 bytes] + 2 TCP 192.168.1.142:55348 <-> 74.89.181.229:8333 [proto: 42/Mining][cat: Unspecified/99][55 pkts/28663 bytes <-> 117 pkts/134830 bytes] + 3 TCP 192.168.1.142:55383 <-> 66.68.83.22:8333 [proto: 42/Mining][cat: Unspecified/99][65 pkts/45271 bytes <-> 96 pkts/70339 bytes] + 4 TCP 192.168.1.142:55400 <-> 195.218.16.178:8333 [proto: 42/Mining][cat: Unspecified/99][47 pkts/26824 bytes <-> 72 pkts/55927 bytes] + 5 TCP 192.168.1.142:55317 <-> 188.165.213.169:8333 [proto: 42/Mining][cat: Unspecified/99][16 pkts/21673 bytes <-> 3 pkts/1771 bytes] + 6 TCP 192.168.1.142:55487 <-> 184.58.165.119:8333 [proto: 42/Mining][cat: Unspecified/99][24 pkts/3082 bytes <-> 3 pkts/1384 bytes] diff --git a/tests/result/ethereum.pcap.out b/tests/result/ethereum.pcap.out new file mode 100644 index 00000000000..a4c607d2d01 --- /dev/null +++ b/tests/result/ethereum.pcap.out @@ -0,0 +1,4 @@ +Mining 819 134165 2 + + 1 TCP 192.168.2.92:57726 <-> 94.23.36.128:4444 [proto: 42/Mining][cat: Unspecified/99][478 pkts/52883 bytes <-> 308 pkts/76667 bytes] + 2 TCP 192.168.2.92:41680 <-> 91.121.222.33:4444 [proto: 42/Mining][cat: Unspecified/99][20 pkts/2159 bytes <-> 13 pkts/2456 bytes] diff --git a/tests/result/monero.pcap.out b/tests/result/monero.pcap.out new file mode 100644 index 00000000000..732ada2edc4 --- /dev/null +++ b/tests/result/monero.pcap.out @@ -0,0 +1,4 @@ +Mining 319 166676 2 + + 1 TCP 192.168.2.148:46838 <-> 94.23.199.191:3333 [proto: 42/Mining][cat: Unspecified/99][159 pkts/143155 bytes <-> 113 pkts/13204 bytes] + 2 TCP 192.168.2.148:53846 <-> 116.211.167.195:3333 [proto: 42/Mining][cat: Unspecified/99][24 pkts/4455 bytes <-> 23 pkts/5862 bytes] diff --git a/tests/result/zcash.pcap.out b/tests/result/zcash.pcap.out new file mode 100644 index 00000000000..eb3e155eeb1 --- /dev/null +++ b/tests/result/zcash.pcap.out @@ -0,0 +1,3 @@ +Mining 145 20644 1 + + 1 TCP 192.168.2.92:55190 <-> 178.32.196.217:9050 [proto: 42/Mining][cat: Unspecified/99][83 pkts/11785 bytes <-> 62 pkts/8859 bytes] From 7117f0532c6229a2057d5f7cf1f0aa23abeb0ec8 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 18 Sep 2018 18:32:08 +0200 Subject: [PATCH 073/147] Mapped the mining category in ndpi_category_get_name() --- src/include/ndpi_typedefs.h | 12 ++++- src/lib/ndpi_main.c | 89 ++++++++++++++++++++++++++++++++++--- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 385c330f42c..52da6195dc6 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -800,7 +800,17 @@ typedef enum { CUSTOM_CATEGORY_ADVERTISEMENT = 101, CUSTOM_CATEGORY_BANNED_SITE = 102, CUSTOM_CATEGORY_SITE_UNAVAILABLE = 103, - + + /* + IMPORTANT + + Please keep in sync with + + static const char* categories[] = { ..} + + in ndpi_main.c + */ + NDPI_PROTOCOL_NUM_CATEGORIES /* NOTE: Keep this as last member Unused as value but useful to getting the number of elements diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 9b6501d9bb3..84a1de40068 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1222,9 +1222,9 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MINING, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MINING, no_master, - no_master, "Mining", CUSTOM_CATEGORY_MINING /* dummy */, + no_master, "Mining", CUSTOM_CATEGORY_MINING, ndpi_build_default_ports(ports_a, 8333, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_43, @@ -5486,14 +5486,93 @@ static const char* categories[] = { "QuickTime", "RealMedia", "WindowsMedia", - "Webm", + "Webm", /* 32 */ + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + + "", + "", + "", + "", + "", + "", + "", + "", + + "Mining", /* 99 */ + "Malware", + "Advertisement", + "Banned_Site", + "Site_Unavailable" }; const char* ndpi_category_get_name(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol_category_t category) { - if(!ndpi_mod) return(NULL); + if((!ndpi_mod) || (category >= NDPI_PROTOCOL_NUM_CATEGORIES)) + return(NULL); - if(category < NDPI_PROTOCOL_CATEGORY_CUSTOM_1) + if((category < NDPI_PROTOCOL_CATEGORY_CUSTOM_1) || (category >= CUSTOM_CATEGORY_MINING)) return(categories[category]); else { switch(category) { From 31f62c5cf54c41fcd73ed3d7862e37277f5449ea Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Wed, 19 Sep 2018 21:25:16 -0400 Subject: [PATCH 074/147] New dissector: Nest Log Sink This is a dissector for the Nest Log Sink protocol which is used by the Nest Protect (https://nest.com/ca/smoke-co-alarm/overview/). Signed-off-by: Darryl Sokoloski --- src/include/ndpi_protocol_ids.h | 2 +- src/include/ndpi_typedefs.h | 3 ++ src/lib/ndpi_main.c | 9 ++-- src/lib/protocols/nest_log_sink.c | 81 ++++++++++++++++++++++++++++++ tests/pcap/nest_log_sink.pcap | Bin 0 -> 146010 bytes 5 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 src/lib/protocols/nest_log_sink.c create mode 100644 tests/pcap/nest_log_sink.pcap diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 607e8deef5c..0d2712d207f 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -77,8 +77,8 @@ typedef enum { NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ NDPI_PROTOCOL_MINING = 42, /* Bitcoin, Ethereum, ZCash, Monero */ + NDPI_PROTOCOL_NEST_LOG_SINK = 43, /* Nest Log Sink (Nest Protect) - Darryl Sokoloski */ - NDPI_PROTOCOL_FREE_43 = 43, /* Free */ NDPI_PROTOCOL_FREE_44 = 44, /* Free */ NDPI_PROTOCOL_FREE_45 = 45, /* Free */ NDPI_PROTOCOL_FREE_46 = 46, /* Free */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 52da6195dc6..f0b47b358e6 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -596,6 +596,9 @@ struct ndpi_flow_tcp_struct { /* NDPI_PROTOCOL_MEMCACHED */ u_int8_t memcached_matches; + +/* NDPI_PROTOCOL_NEST_LOG_SINK */ + u_int8_t nest_log_sink_matches; } #ifndef WIN32 __attribute__ ((__packed__)) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 84a1de40068..83094602dba 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1227,10 +1227,10 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Mining", CUSTOM_CATEGORY_MINING, ndpi_build_default_ports(ports_a, 8333, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_43, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NEST_LOG_SINK, no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + no_master, "NestLogSink", NDPI_PROTOCOL_CATEGORY_CLOUD, + ndpi_build_default_ports(ports_a, 11095, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_44, no_master, @@ -3228,6 +3228,9 @@ void ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *n /* Memcached */ init_memcached_dissector(ndpi_struct, &a, detection_bitmask); + /* Nest Log Sink */ + init_nest_log_sink_dissector(ndpi_struct, &a, detection_bitmask); + /* ----------------------------------------------------------------- */ ndpi_struct->callback_buffer_size = a; diff --git a/src/lib/protocols/nest_log_sink.c b/src/lib/protocols/nest_log_sink.c new file mode 100644 index 00000000000..47cc65dc8a6 --- /dev/null +++ b/src/lib/protocols/nest_log_sink.c @@ -0,0 +1,81 @@ +/* + * nest_log_sink.c + * + * Copyright (C) 2009-2011 by ipoque GmbH + * Copyright (C) 2011-18 - ntop.org + * Copyright (C) 2018 - eGloo Incorporated + * + * This file is part of nDPI, an open source deep packet inspection + * library based on the OpenDPI and PACE technology by ipoque GmbH + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NEST_LOG_SINK + +#include "ndpi_api.h" + +#define NEST_LOG_SINK_PORT 11095 +#define NEST_LOG_SINK_MIN_LEN 8 +#define NEST_LOG_SINK_MIN_MATCH 3 + +void ndpi_search_nest_log_sink( + struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &flow->packet; + const u_int8_t *offset = packet->payload; + u_int8_t *matches; + + NDPI_LOG_DBG(ndpi_struct, "search nest_log_sink\n"); + + if (packet->payload_packet_len < NEST_LOG_SINK_MIN_LEN) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (ntohs(packet->tcp->source) != NEST_LOG_SINK_PORT && + ntohs(packet->tcp->dest) != NEST_LOG_SINK_PORT) { + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + return; + } + + if (packet->payload[1] <= 0x02 && + (packet->payload[2] == 0x00 || packet->payload[2] == 0x10) && + packet->payload[3] == 0x13) + flow->l4.tcp.nest_log_sink_matches++; + + if (flow->l4.tcp.nest_log_sink_matches == NEST_LOG_SINK_MIN_MATCH) { + NDPI_LOG_INFO(ndpi_struct, "found nest_log_sink\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_NEST_LOG_SINK, NDPI_PROTOCOL_UNKNOWN); + } +} + +void init_nest_log_sink_dissector( + struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) +{ + ndpi_set_bitmask_protocol_detection("NEST_LOG_SINK", + ndpi_struct, detection_bitmask, *id, + NDPI_PROTOCOL_NEST_LOG_SINK, + ndpi_search_nest_log_sink, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} diff --git a/tests/pcap/nest_log_sink.pcap b/tests/pcap/nest_log_sink.pcap new file mode 100644 index 0000000000000000000000000000000000000000..2cf286d22617f79a1729710d0e4ba8b9ecbc1b1a GIT binary patch literal 146010 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�Ut7*tUwfjys{W4nOp21LK?Gj^RruqB{H+lBN8H3iw-d`1lmTS%69# z0qh_61-z4z>Vn$&mwp)sv`CMRmo@N%olMx_ReFo#=!tw>)1M%IIUa|A>K9P!=?+x( zSRj5;gyt7e1^EDKBxi-FD4bC_MKGwc4-d6v0;7UJeP{eL!P9`21P$s*qLo9l8#-eiw2DO;Op^X6*vq5|;f5ykB2&Mv5UcHC^1HXWG z-s!#|Bl?$qxd&*85L}>j>=)p(Hc->A|Jg5~RuLuC?1~-Ym)p?%0;)*Op+buf91s<` zGb*PD236R0p=O{%5WCXP*mX_})&aCe#r`DU1MmE1a6yjtFKa3a(9*7gnima2EJ{0L z(K!TzT5DtI(0qIy;$zt}K0ZZoJfPx_f$;|fgLl5C#`qs;**$>PVH5iKTE_%`f%ql$ zpZx-AIhR455_<#U7a3@N=>=3SIYaH?I3X(1XH-rR45}1)K>BeV-LqJP=4r2#GH&rrXNe1-TW>7V@~189weLuHQ};ulG1egRcN)uCn) zHz6t#XH-rR45~;yfcoAu2C?ha8N1FQSOL(o2BvW{0ZA5koq9t(@i**o{spLkV_v`y z)CKRXX}q8vo!kj`tOx%6S&d_*<9|N`v^eH3&^jjg8^ofQXDm90U{H%S3)*V#VjhT( z#n1To6u|+23T)n=WLMywVr3U(ME}w+jer*K@C7;bv0ug^eo6dizkpisU!nTt7Q`=N z(EI|byyJtKMessYM9-+4A{bQZ7KfTeOhD{PIAhm21iuHgk{AD^rocNXw*O~p>L;KT z@CvF$-ys&gIAhT{1cO?;l~Bif_#i$OIpgC~1jAVXBdA+wf6%hQJHH}d(DVOGf^Pv@ zGxkukt4WAo;{Vw%pjPF5sM!@i#4p0o`~s?EkYhpX;RGNmLT6M?5e%xlxpqN6b=)$i zAa=!_vFjXy1p%#HTl7DuDe%sT@c)^bassqkLod)ewrCn+QS2Fu&LJ4o63K#^?+HSD zEO^GprwDchRE}o$|-0I@6Lj9upt%m!#RMgGaSCwOPt%L{U}e_2x|fL78j)bEwRH$(y1NP0$Kntl^PKVVDS|Bk6$J{^KWN$DoncHDWJLecFR6eQ3;G3G$2GkK z@yp*^5<%9%oaYx%>(U<73|0c-mz&W10;<6HLXG5-5Ebq-DyIkrRpx`CMl4|Z1W@0h z|4eWOpd~^4C;1+D=O)z!IoiLhsWCtc9rpsQkP-b$zo-FP#0(c`9s6Ys;+LR*_6w-RB?Pri%0m2d9hzUX zK)*=*NiGB4c~|j**8DI15&>x4WWGS_*e~l4zXblXUqCHh3aD>9auC08K=Vr^pmG%r zYJYMYqQZVg)o{HrmK4v@P<5Lmu6QJ_T5BU%JZ17IQ z@C)*ff9V%A>o~1^hYPfh{jvq|i{C%{1=MmavZLy#I-IaW);56vx@O&+v{>k1?NRc;G01Sp8izL0bV2iz)g4UGe&VY{jcb z?QIVFXA_^crQ43$PzLemG3T)K=Jg65G*O8IYp<|3kj+@0DZEMcb9+21VXoOg65um^##VkXnlmF{_NPt)<8Q0_Gt7XScuqU77fQ$;!kl1dOE- zK3}($cP5Z4ykV>lRV4l2Al(#MDltC90=N5Ht}ZXke3tLV?EAwp#I&83c>Aprk3=hx zfIG)5QH>Wz?km1#9}%mO6g{b4G#no_Q;_v;6)1fT1KS}asvpk{`%hnk)k?P^u??(e2A z84?lIwHm~v5;33ap%$y@e9(;kDhiYwkX|(BrCWw@vis9D-#Eq1RnawBYo}0K)_fQ%n8@AQC7}vgwvnSa!!8jSFraILGLY$_g%t!?bNgK&yhzu-U@YW-s3g9C!)ew<8##g zk!F|qCi>gXcb-mJnM+&xl`S|h{pq~~I9D7WekJD#Gty$-eWY;Rgl@Oj?Pd|p%3axT zO%R3-UX%cZ!01}PCm5KPu$0Wi5kABjXpEQU; zCQk(P!WK%;HG%FBUc_6qqHfXz1MR_FCcRZbxox$Q!`^;OmJ~%-H zah8tf+qz)e)YR!9H1u3|yY8U)V;N6M){~>oqdr_!=f3X`+Y-9Y$L94b_2l;Ejcud* zw{K10#&m6O9Po~?-9Ycf%F_FcEf!28jS}Us&u;n3pt}f1;6}%1UoFe@lq?yQBdQ*1 zVu64-OU@$W{g9A5Z;)jY8j#m+v^-!!3v)vC=Th|c7^`Khh<|D!LNJ-8vV*s4zllR* zw*gx?ZbUc8Iz)k)>Mkqm`Xw37-NBgBqx%*;(h5J%KTdmCw5C**Zd^t_x!(7fj;sa5}UY0(KFQVTj2@%M{teCl=GGBWkpEsk0l7MS8Y0RSOuY5D;tl5nHp+% ztf%Mio9Tw7^a-n=8j~=6>R$>GZb{JRq1Yx$Ofas>+BEVPc!$k1f4}CsV>#XMfRn=W zQvDXxO57Y7!W(AIBiqDf58a$F?KxLoVz|3XM8CD`h3vE*I|_O-7Lk(L{f95^W_J~749k3Sy=)NK zgc931lAs&gjA5j6qnneTh_B8LZgS_wC{qW1@jyzCC}VK1-H-LRRQk6*WC^i z410AwLR6XEjQc5EZyr4ONUejas@NEdyo0G=d9(cX1Eia%RHL!a*6Ew7whk$Ny+?Re zG+)rp+A^&7Ik=GqiMa7;zc6dKe8rXEyg8#Vi#)g?-J@0el<)x$n!E=wK@ss{Bu4Ax zFNpF6Jvx0-Z@Oh3>?~t%Hxx7KwUjIPRA@7a@4VnoiWoodzr%hXmT`>FmJJ z1wi8PX%g{c0TO||V=*7QB_5Lq7JO3Z$wLe>)jzU-N$^zb()9Hx7O^2u%xN~g%I(km zKj_I0sE$G<@rzo-+}u+#ZZ)e6J^Co*`d|y?mLP%{y%_%7`y$-6uH;W+a*w-}epGns z@S|V`9<}#9sTjIO*iYUNq)Bj9mifn>OBv4}qB>;^W6mTZO?mp6FB{4RFqbJh{v6CM zkr;UF-HH66Pe%bqUA}7NzF?u>y+z-*^?epIEw_LE4BL(}2yvjePS{hCZ>Bn<-ExB_ z0<8eutxhvu>xt>C{Jcx6ld~ca(lcUc_(*EQ+JiM*2P@Ck2&qoE}jS(xAvnh;i1EAR!gMz=CDV(UGn|L zT}G;7U)8W@qff3YSZ8xwBF%fvbwBQD~Mvy?=NAk0k@BrN5XEwEFlzPW3sgW z)=8-=E{?zFBf8`&TmdeUOc0*iM5F6v+Q+UV#r7uFMEqTLjCgYP`J{gd-m6l z$>&&2ERV7JDUR-zhfPJib=zf1q1d|8?m(lh@<`y-Mru5@aEJ^P%i68(c5S&0U$aEiO{|y3RD)D3$}{lh5uNqH$h{sd&Dxs z&GDy`?dnFpt-U_=`UW3;m)?Mp7cZ$g%Yzq~P__5?UBv0>|Zlsi9A7HM-O9f#N8@&WACU!zde0iEgDOBVMVqguoFO0L$F^M1yzmr(b zbzl$oYc?Uwg3l%$Nz-ZTsjx9z$*P?jvYr4RShxxfwA0hsfk+FGICwfH64L=BiU1^H zDgndr;9e@1&LuHm9+d)-MP!M8z!G)r$UHcj)!oxq{*K5fXOw*0!FM?d1?GFr@OqVt z_T3AL_0NPP+yZH4>IB?|wF?N0I_uZcluEzvl6OVJM1QL2G?@4np##Ttn0@^z7eUy~ zFnSqB^q3bORfVG|xAS8}IQy{z!$0xj^E~v)hrPiQJjc?e+~+W8iO=J#8MA(MsAYKA z2L;c5n(e+GA-3?tAXC-b8#x99LJS(Uul1MV%<~fC*#bsN->H?WZ?qzPv7yj#X6|S% z6vq`8QrU0TkVD*xZ?s$(ag%J>QJ8z?`8i+!PFq90f%H`c$xByQT!hA~54RNSF2 zZAjqxQ+l>&CCamoy<@a*gyZ-2(Y%WErbp+J`MZ`dER1ho%$fV(%?L*~M1qOu=#w z*>O#D%HXLvHHUR)ve48jivA=MPAhk4on=aV%n=9!Oh2?OF(SGkBqp9AQ3QE{WJ!rA zfSmxy<-jd5Kp1`}F`0Q$2uB~0udDEdw3%0B3*{=2wp#5cuMn7D2VcR$A0s0}i-~|D zK;qxqB0ypy$r3=~LnR`NL0jOXJV+waxg=ismR6}a4>uj!2ItrU5PTZ`Ed~k(WhWr3`}1V zVcZ$juP+o3e`PvE?D*QdaF6)BT7p~MTPrS zc9JeH_&1d1O$T8M_p%;(KIea1_UQ)#7x{O)&q4`b!mCkHdwXb*+441w-%PFtY1~jk zA;qa8Z}GL`c7H-CkBVAeG8L7+t%E}3Ks~^R2D>$7{)vl|(yX_1We4@4#@nCWI1N~| z-$btsY<_)l123-678c}lL?MQ0 zLMoEYdu=p1TeB6GSPG3r=qkSu!s{%z@b7YV1K+s5Z&th-Odx-dRyjq5NL`{0!Z6v1 z3@s*hLr6?GL*hf^i7O>aL?L=Xz>5LoVk*!!_ZmvCdm~3 z+Xt2kpALf9`1+52YSB)sI6fqbPFf==Z*F~9Ul!b&WS#TFpb6#gmh1FuW+&1%jdpG9mZm5omDis_Y6O??-=7= zzjsX~*i`6V2wq%KF(qD@b_J0{0YcKjSH^JMj!5EX@n$i+_X?YnlTgQkS(q|vSD8Yp zijv`{-q6P^Z`Rykp2C^)4=LETTqt|i`L1*mAN>|JE*kNXAdOvJPk*l84uN*_RCBeE z;Ft|ApQ|=mTaQy>LR@4k`(eB3whUc@J0?;{%%Z1fX>qbQ<#ieu5!7o!&NUtZJI=SR zHST>kr;-zVo86yY8X#8RJr^r0P{7>&B+xfpsH33Fpr$)OB7bQ>X~vE*?KWL@WS-_+ zE#tcf0Vxeh&O4pES*Y6@7$RI+>XY#F%L&5p>JBrzt_IGqws}gYXLFIsrqrU znC_f4wxT--1J(x=Xe9PPNPKaI!~*0Aa#tmyh_GqyV-i6aekW02*A7$C>P?G@JEo7p zL^rxHWtC=Ge(<Qia@Vx2>yX2(G%}5@ z96ELw8I1_9P1rwf5WA+HOQ74JCNhKA87}{cwY2xHp2n=%LznTpFkAzhb0WD^0SDqs zw%Z@-P~6owv~wi<_MeQvkYYRiG8_7Fm)TsD69xCO9Cvi+YU&5@W;>9D>q7k|`*C1mDfUhVyvV)-^=wki^LMbc2>~1?@=I)=W_E5+(3lH6I(%P5 z5N9es*hb_}VnjNF=A16^Jk{+{-17ilr%HVJqFtO&CaoK(+gwr(Gp-Jegry&M>B zDA&}?ee=EjQ7-X27h!RI+W=--{U`LB>KNkp(YJzb+i|b>Jg<~B-V4DJWRO<*S-SU3 zduviQn)d09+l9|HnpD)5I!iY*o18ZJ$gy<^9L9py_aD0b&~V6`kYJdnqL>Y(j~u-X ztM%fhz%|sL*keTw`+A96q|L+kyx#oy(DilhyO#-sM#N+-7pW`~xbq z&#~hB9wo64iz}_kTR<3m8_}SV*asmo?lg(gWXKcL$Vx;n*82W>`vGD2oy1FMmCwqE zzw6|quSY(pPkG*gOX-%dU3W`i!`~DgEIeul4O&bD_y$PqJxwAtGC-m#Kw<>q&0`YL z&Lt5wjlJkdslfL=uPG{?pWCZ-<=w~p6^XWWO;Xf#N!^05sxR++LYBg3@*MtdFX-W5 z&suqX`m;kj?)J89>XXI{Ec}BH!a~Tc7}LG(i8qyt-tU)Nl7hVqw@{ti{$!Z#6e$22Eq_I(D!JD8xkY@&tIe2b*raq4`!(HIw#= z;)S)~*Q&ak1^DtXn<_MGN_-|ix|TaWMlv0V1_yjGfi-x2OS~X& z58dEhdZ=svtHHK!92QErdE1m6p#hRBoU^VfU*qkaxgO|U&yS}SoYI-#9uSl^x5Gi% z|Ax`~E*0OmmUVeln9OGUCeBf}o4YLtgL@S^G!pwEB*va0Q5AWDrdx?9iBcNqAi%u@#Yf^rYy?!dVT7! z(9tJe)Y8t3ez|A-xr~%#t;%1WwpA$okSJArwb(v+LDRC`>5(4tu47Dn9Bej3 z9Dcj~EQhxA`V*A+)DQRTZ2TkGKN|DlaB+J4oQNFz7<9=m(&-f?^u=N>fryJ|+=_;dc`0Wvw`TP3ILZ)q5K{d?;ROxfJNas(J_`=qENk3l=^*g8_|1 zfNy}r?$adF#Q-EW0VL8kSv|JJm0Q5*zwu+5{Rs<30sSdze>rm>*>h$}v|s zwaEPFuxt(2mVcA5Zn!R#nm;vn%w2~* z13vnRi9d(S+qgK-fI%9}_&41@3Ki;19GtLZu40-|HHXGkO5c=U-TZJvUP9zqRb*XA z`n0!$tTt5Yz%_|H!8U&wq(}WU)=^@Kk&xKe-rgev|}MFynpC(S|-L1PjfE! z;N?6U#fM+-tELh}&mO%%Qcb@sR31+vV(>cMqBVd18;ugjgj2FjU;T^?-3LW7?d|t? z2hpr0nzvWvpGtBLV~DvX==4T9T)hmxk>v|;L?VLD=^4eFq@W21!&)&WG!h3O zBu1Yhu?cyCUPp;2!!yL`m_!hU-$}eqn%FN+h}tTv)gaw2O4;zVu`|7kB`ccZ#EApH?A10aOR4qMQVH8tDnYM)*fZz-5=AYGrKyo#T))ARCdo-+^_F_|BaV8*7HwT zCY;|0({Qm|WB(}TiY&U~^&(ko?Wl3Lb%{{@t1fl$vOT6J4$SrGZ2R#?+xt{_MC%q; zhPqWpN74p38xQxZ#`I#EuV3f#lW4i~i3rhwMc{62RxaQA7^ibR(`XUDgR6c9hwn}t z+RNvN^=t$io*14MHaV6F$SsA@`_;(Le06y>!zu<=?2uUQZMS(iETphR2_*{Y496Ae zOf8V(-!d{F8749yDi1jjW$oK!OJh|U5bA#OyvUXF2kBRlJU_?y;ojvbDgUEa#i4TR z`yYi0UU0o%-^!#PrXDmG4O3?z1X5JkU(%yT9k#XHFatE$AUDcemGk_^rO z3?$aaGbt{ZP4O8*V$>ND_mL+UX_bg_3N^cqNd#f|oy3?=2)rBE(?aOfjqfZ~vPlCs zLkC1xxV^l>mPKg5!W+_Ippgjh4UqWvfi;k^Nk&?_4HC2_p)6LNxD z=16QgD~2IKB?dQp^8_{0E(P3%{y^{}w8|AnY****{bzFow!@y+D=f)^pQ&jm9?*qT zs?q64t#ZIs|JpH&b$lJUdGux<3%j(1>k-8`n-#5Q)`}f1yRQ5D;97y<*QLwo`+j6y z!&Z)Djnh579lY>IYU0C3(n6&8z3;Zg*Xo|Kq3mB{B3m}%Odv78M`89gD&|-JmG#kg zC?l&3-D!LbMTCY-aA|p;vnwljK6=oItKA%BO%&qW*ZH+WL6`9J8&*Nv+6sm5c+P`8 zB>fm(;xN*A*_JsE<#t2lj}^CcixIDsxWuRmncV%7?!i2G@Okd~9F^0JYR=V{{I|OB zGI`%V=>GPst&IjcxY;#eiO$Ld9nQ3(&t0NojYIhzE2GXiPhQO z5sbX2Z5m04sh~CXR@2YHKOgH;Jtr+m?yr=VpF{&qpU|HljHu8r4KI$nS9}e<{FT~K zde?KbtdT~C2+IPliYu}$*>u^)^43@;we+RQjL~)Wp;sK!+ZkQm&KOwlBc+&%2(C%t z6}`tMd+;Ie(u<6i?T;p9APgpEu+U=SAcVxo(6>s@=x8BmZ}~o?`R;{Ln6!!0o4@f(tw_!^;=4oK&Dq(P zWNjffg<38*NtF@M$FV)0r95CF+v8)}-Mra4EmA=~hC3}sOdMRJ>%Hi&sPXh5INPP~ zz_4GpF>j_9e|8fg2j_~a%Fd`iWiDCWl-}K|lSmI6abrrwX!x3=;F}^C9WA8cg%7JO zY6DqUamz4QZKQ@qa+2Rs$zM0C1jf$Crp5%Jt1GthC*4JPu*Kz(y6FCa zpq61Mfc;9$_j#LievC@k>?X&hU;A7L?9V7FzIba7ER8cbGx-&Hj1nj@VGq}sI8*b9 zJik3(dF2_S6#NRwZF&<^FIup=`f0$;!CD>i6AQLZ6xP5+Q{)BbxOY5Z7Egn%KP4dWovgyJ5P5GY>{B5h{d336CJYLw6 z2z)FP?Z0O_reD)5Fg6oEv7FmOJ+5^JlQDGIx-4RGK{OAMC5g&8v|{#BK7vBieC=*Q zerHIn^ZTUj*&zNNSgPBDcOH{`YaBUHd8C+xz(^OYfLO+;d565c#&@PSnYe%t~7rGHhit9F^<@XR(^*T(#d8 zp8ujfeNVoiFiA9YLH=3qPGaV}z&8v(YtL%~Ed#aF-X1t%`yj!G|tQKGm z2lowa|6XiTD!o?A><>(a-JZCTr7;?(!I_TKpQAaG&pY||a20Eef7MtwU#Cqncc zLAReQYky^3uaeUKi;K1E)TT%1i&%_UBoeWzwMf&Fm&5L%M>uSYCALVaDK~B2EjLZO z=3QaHztQt0_~|^YQ#5Y?6#=KA+^({x*v-R1U0HMrt{=$Djk#ncD>}5X#`JjZN)?|h z3Fgycn6NJg&EdA91$m6q-;yn))OV17I#`C=V@RmS{;I)m?_tn$d&_1=xb7(N`}zyc z3;Y}j64;8jf6+VDvlLyDyZjSP8NPI2;d8nmBjw{zCb_v=>rF91f!ne6w_}+JvPE#< zxFwgn7h#F|!VFiso@_UL84CB@eO}bZ5uBUmi)!qA%kwMC{#9AsI}E0{UfH#gf%N88 z!5@)2f0o|MXFSrIm*s_j9M>7Fn-@fMgM3?Wov-?%nbzG9%Ep}90S8P^5QaPIP-mEZ zfshz>hQtBn33g#6q8i((zrGxTF#JxUzLS$h#2f-YY(iMpfwq){H$ruWT`BrI#0dwa z0I=}EAgFU40loneKb|I$U6^h|79E)X{Y5$Km_%^?`N?ql$wLe>y{#hH#_JfXdH+-n zA!Vm7NR!j1%JzliDdr{W|ZTW#0f zc#PWk#AzVxvT8Rw>__jbjsf2EBik<-k~t7qo2w#!t}%UgyE){5z@hNe&tcKRw1=NG zl+s%jiHC-swmvHfb(@|vCXn1VR0Rq1UBuOEPvNx1cm^WY(EHI52;Vd|Ba@Ty>NS>99oJL*vm~EC^sQKf*ETCX;=sH~SNo}W_uk{}E7YxX zoycZE>fF;f!DhY_Q^^rnP0w~0NQ`^GZ`EDyDxkCGWL|!x%^_xL*7MeyIWytOHHK-D z@1t8x2x#?O*i9~6%RVfQX!#VC=?Rz=tsH8CR(rFB)@e1-3ux{(Ul zQ`*3)Rpc2AfH2%vf;z)&1VUoyX%c18ktePrDG@a!GXWHU)ClH)KF~|fXDULH6RSt?vq+j5+smM_{TDGm(WKc^b&uk)iOp^#8!5e= z;4M?$GO%k7EID`!96lc$a6d3T`GY`?${P8O_>|Vln9tY6uM)~tK@?sgqDRH4fsa=> zB4a$O97R?wzK6QF%FnOff@ghPTe<1}BP{Ec3?KK^1DQG0tpLrJtB5;0)T_#I`47}+ zP(7V(+|j}o{~z|=Ix4HJ>;Jy!R=T@EM7l$ikPZP!mF`X{>Fy3CC8QJ(L{UK+0ciy( zDM12yUDQF$?iEdIc`gW-zYqDx*u@L8BIO-V`OdA06| zbA16}pp=IhVKxROG5Q>dH&Lg!KdKNn_htftuONva48N0D(fI90Rg~8zq8MjRCy%@k z;WZ^CA8Yq7UBBL@K^LhAzA$4Q0lone+s=~6{ShD$c!7S|8i;U%?ralWNaFVOTDCba zY$nZ)L?Kdz$e}26A7X0Za2%lzh;T$xdr9f7+3Z?4A+z0p*dOw@Y&WLUj1@E-g~VqNMg!#$PS0 z4o27?m)1838{(36yNBx&?^N(&(dB%hE{``<7|Ct_TDpqVVH^0~;#Kzk>SmhVTPsIN zmRD{+w;Uc5wxXr27_S_Q&ktJ0rgKW&f9LZ8L*vP6YE!u>^T(W$AAuM#DsckO2)>Uj zpg%#1K}ZlIFU(b`GLI&FHBSG&G&aGbjF)D^uD-dR?%9#sEzvDi9Xu-TzDjqh9Xjqr z!v*>9AsYp^@B;dekP*YB%RNFO3{MFuU4Nkad0+jxOY3Uh_kCv_i!TU4T|CuB9t+h) zZNOs^|6#j5{ouWqk%{s?Y~&Vq?j&A~p)i}7@9WZP>Q|^A&J4Be`L!>=Bj2S)4W}ky z%lI?S0^zHfqAan457Q{G^_v?3hR(aK11=-(w3)OkNurHjRfob1NA=EJ^M)axZ-_m$ zL6eRp{Yi#7?#!$`;sTOL3LKUU?%@1k7iSzwV$?YjJy553lT?U1AfECkB!V#fPU6x) z$He}w04nb`y6lTfpS8FycgzQ*;sCp-wfe8X!a2QQ#ySFg10=SdC6PA?Ah7}4LKg`^tD^(20@yu0RQ!0ZC zB<)yg^%V%2edSGMi&m)+kK^}&<4(WH5p<50qI)ByH3kbs=nj&R&)61zwWhE_||H1S6FK# zP*>qSGG63CAEu{vqhb$}<8E~6KosAyI`h}QqM70MyEXNR>T-QUiLbX4t)s8;;37pZ zt9|9cqS+u#KwI&S{m_sapXEz_c@;6Ee3T}wh$YS|>&iQbFH6()H|9lOUOf|4lV7}| zkX$-%yQDOCeN;sRmG^K%)K8aOGgMWgQ(ZjA|1nGA%dXN{i)#_@V%z%*4<*-MPal-b z1$|9j*vD?*!_r*lYy5V*M#;`ild@_eMZ~rk!vtA5$tRP_MXx!|s3JKmdU!cv?P{dh~R3YQGtk#v>6D4%MF+jW)n~nBhQgofjY&nr$XG#aRtb; z0FH?u48M~|7Bn5PlsNkqDG){cL&$@bsl1Ir&W++Y=dy=W&%naJyTOcg1o#F>Y&lCJ zzaBv10uXh3G;sTbM4}5xtl{zeR3pKaAsRdIGGW+RD1C<37&k_lBH85b^(EJQlpp$6 z112UgrFNPdA4RfSn&KaGD*{g5B z@jl`w=Va@$+YCum_1@--peY?$r1s5mu)Dn_QF5!3SlYvaD%&6onSW4%{KITgcYD3j ztIE=uH+6xw0%j~GKks=JGh~J_GrbZT7)SMv>8{-+N0w3h>|D`l&5^gQ9EShluJ_6y zN~h6Wjw~z!QKOVKxaRG2$GF z3#e0qbSlJs_n-QlkO;!?JBj69dIz1{@XYRn&WVOqQi9^bh7!T;$xnRXP)J3=!dGly z#ySFg10*(|B~g%$VN;$8AhFGZ`h-N{3rRdmtDE;8%5-|puP>R-;y7PT$Q9miOgKX! zTz4$ATNYy6W#VjvRJb$zGMD<{Jx5=0HTVEC*@2r19nAWn4>7_-4TWqjjf`2R2+LuP z?*?aDO=W9G>^LId?#|;TIhF`sHWzv$BFd(bGB9`>PIq2MV0h@&V5mBiEYY9{qx|e+ zon=eM*Uyv4F>r4@y8lAjFv0eqwOT)$cX-ud%W-^VRBG8ws%1kNBU66TY; z{XTIBS!8IwphSI+DVfewae-77PE4V8ybr`IwEk>}wF*D?ui9K<7w|WQz&zUu0hg|9p4PbbnQQ2_@t35g&Kzmv$#Noyq^E`?>b-M+Cos#JaxWpz@u^8FkVtYNi4#>j4OcQyY;9XV`Ec^9 z>siJrh5rncmTOn7c$L5}I>LaTKu4=o+0l9<%_nqpgT_MsrpYZ0mrc8S-i%St1#dns zqhXD9X<8>!lC0IUzeHVwo1MjPANYdUQ*Vt~rmnB}@m~P(PLj7*B#3tS=_$g-g>(fz5#?|KtTWybxJN({6 zJ*q*J4PH8ydNTh&qpA5Ov(O6!sdOV_vQ-glZ!}@Tn^jaE+>aujS=+`7JS&%fe5t(H zACIkWdv=A9_owTVnVG1ng0UsCezDnz{>jn==ju^rPE0t@kYV;+-YQi&6Ni51t5u)y zam>5sYrXOBeqgMm-uiHa(!SzO+gjKSe^UVRIwG_PzWu#J(0Jv7z^IuP70Hf)KfJ_P z?S?wRU_1!Jci^ma80*9-D2abPD;>ydBCm-$B?2tfMjE)fPe=q|_?<+Y!lmil+;6zT zlRIDI9ogUtWZ~mbGBRx%mlXpZf`#Mj!;A_8_y$O9JWHZT1yF$~fJE&Wz7rBjFC=lp zzau6>MSZQvwO1rM1V^Ro1D|1oA>u*o%-~J5vUjt1%QwGT)Ge8}n71@#X<}}KKfU=* zhCvWlUoMwc@r~!@T}qKqv#PxG);CMW@8V>$xW3}BWSKILmGx%VQOkWzU*c|Ns9mH? zo)c)OF!4st5RLJWYd_9Srn<}fs66n|)X2i|o+p0)%Lo-o#KvmXmtS8zMAi=I>{5uj zU1!TDjGv1zzKi)uXZQW(j^k*Xt#-nvs+xp1yn1+1(q)ZLl>>1yGv8{ACtR=Jx4Oo#Cu=i{7 zk<6wSaICor8bwivs{M#T)PMIW;?rcg6^nxQg6Pn$(eR4P8=JjM%I*4Tt2M8;G^+Ah zw-NFJgB=B-;-jsc%(phK>xzOl{@q+2tbH$Qjqz+JOF3Qi zXRm2v;~5fN&qw=$GG$0!B~D2XAM;SUk8zNH+K!`hfY@QAID5b6+qB2E$fp`+n+S`G z)HO@TY^kPgQW?r>$+Re8d?J`244SEFAb-;6IUaZzZ4I-nX|fcTCNRmYe!(o&Itd!5TmUQcUHlBx zv+vG%wi$Iw{IUx6G_^0VNCs6n>S4x8%|cazFH|9(rnUq=)&SS>po@NQA2`CRg*?PE zOdkrg$V=20Dl2qzt!sw2Nj@&!-x;o3%E{_`Q5zxl#34T z-^u(?j66(DI5~JxOdaiPojEv>EDVe}IMMAL?TlTFoGt8Z&*t|74S=A-%Cu8I47$|# z$vKxA11Glv&H!9maN<(@b~wmWpw{5^TXvI-2i0JfKwTlQ+FOkT^Bxrg;cL+0%i4oUTZr-b${5)3$xUO<>^P?Hr+1R@{n_T5YGq5r6u(LIA zb86sfkbx!}L|tJ4k_`f_0h<4O@DHic!Sse~9MsVE1HPIB)|p`YIReQBmu;QE3WLc8 zo5sNefr!2*PLTf$|6h^~UPY#V@E2D)W-XEm1A5N)aV-!k>_9D~7htWvPyON87ihXm z4jO2!bkEhw8Bh}ezx1Kz0P6?-K&=-V|0KCIcxNwgn8}4~|II{|pq6GlCPWr!Xz)7E zHoPzgEojkwnF}ofzBgKTgFt|@B=N9;LG1i^hJ&7ZVamfEcEr_kn_BKK8(*G|3m4^j z33X1P6TW^MX1KBZ;;2FVCWBVx*FCikEC~M0W|N;D@A&WpIsu#`sdL}|r9Av!OL=In zOw}>p3a4IA@^e{n8*fs&J~S^1vOcV@bVCZv>bAa;(CNgJ{XoNI=;lNH!5HT2wE1y) z=Jm0Ru5`p8SY$D<)(u>C;P|zPb*|Hipf1~os9;-vZ36fPRfIaRAfo`9;B|idg74t15{)!7coaFrr&(mr46jN-B6Fhwdmw<5^u_1b&^yAfKc*lF!Nrmxmggx+? zYs0bFj8AK&Hnp{<RtM2C(8T@Vqi_>pKv zq(Jy2?U3W!h?~1H=^BMc)NSD&_4#p^ZK*E(ZeGV^9HiO@xdd)Bf=3A^ZIeXquzQtH5Jh}T1?FA3;f%44pv_rwmU|| zyqFwt)*@Z#Vy7aA|n*|4hn5hih8(Icqafb7BwfY3TJu z8IX*;LiqAaOicbe*f}22n;iX&#aGE*E82>6!}<7P)5JZoWo9WY!MT)}G2DiEW`ClW zf-cZ6=Chld@2FX!JAnEEHjEjMnS%~Gw`iXoiS0wO7Rjf8)sHSEusS;VJpi;4WDsGb zJmjE|y1Vt?p z!IFiiVI5P*%eZ`U<84HDyHj5kPkq&1h4b665JaO2I#DGvdi@E z+26hn>IhJI7$syl%G&-YZx_!s65kxs63kLT87BY2 zZc1K#D1td`!2Zk)ziKANfU#Ou_EnWjhy zkgl@K9oSmjDf$}X_6vtL#gj4!znNj~D_2u=*U=5qgA(~{5yrRug~~4JZ?6&l+}Xlk zUXm>jbNFJ{KTH;)K zgSw3Sq*ZsHnNihzTV1j)Vn`|^h`7=bljdl2KTax%hCcqMcud(LZi|wEO7ply_blta z*9TUt4Q$D^qTTF{*;igImGcvlLkAfPf)Ywm<*WLv<{zf;6Mb`X*|<#=Y?)oQ3`a75 zd}0)G+7raIw%-^Gm9}U>AdQlV{r;sa?7+3fwzDWOS6P-mI@KW5t)x5)9>j(t$0zhym+RcrHgM zALzgH;RvK_cEEm}b;3usA_~M2XkG9+KP^Cvxtu_ijqVFofCQ3^x1RBxwOYK=YE zRlm}zHy}b}AwJAqlSsqNuotd-+fjYWG$n{M!0RAQnSexLn2ZF=6x+nx0*f#xG_#2L zmd`r!tq@VjHd}OyerQmXBgsg^o$Q4_$w+TFldts^ zMAI)1j_MNhZ{4M@XK5ms%f>T~Y>n6txl>|Ho}QKGzv8o-e<=G^rZIr^>Sj;DZPdG2 zPe;*484oqEByHp)5pL$uJQbU;jvvVL6_|*dFF*DQ(4dcOb*fy)8XCP)FrvKJ|EQ{d zO=6Ad2w5up_>NaVN2Q{VLGM=Q1DuSHizIohm#O@*$HQ+%-jOaS_N9$Rz{)dLVEEi2 z?lthVwD$$wWsQByM<(OfgERbQ5KVusuA&Xg#=d0R{#voZIinm-(>#!! zCK-A;XNw}-cy&fh!}RVYQkh(mF5+QgJLQ0~yZ5@$%XIQn+Jvz7PT+eGd1?-o)Y1O$hV>Cp2Y{0D6sFm_o2on>fw<$V^?-Ky>ZHV4V)Z!33S$G|oWw`kT2IlIm(G0Yx`r6P_ zmym^?q9!4dcAdC)I`q5X4?n!%0c={$H#XCd5QVKEcxljbavqJnD^9U2goM=FUx-)0JvW%tUOqyQN%9Sn(Wr-#dtLvTe_gAjqr=H z@zc?g$m>#6f}@PdI^)|{vgay8g6UCEtBEQI=o$%lX4U;NP%je{X_0qp(2#DlvItLY zT{oHgX{xY0l7AcJj_zq!s`^mek>{Ica6k&eK8e)aD-c zhHi3`ZHs^inzA2z4VO^gmR$1X_d(2K;VtF*$ZW(n?JezZvJcMB z>wuOAenE$H0rdv2-&*+{mn*cD?a#I{wE*g}Gbfl+R38TdNd#IMwD#2EQxEj8zi6%r zNQ%sRKRJIpxzlII{hdzvolNw%9WM-fpD(?1=;5v$JSfx;jC`9+`7mSUQKRh2fSUuR zi|2T(N8(b7n2eLdl%zJ5wv5TqBi4PdNO5rYfAK*%k)=kul#JLQ7 z^CEUa2t>T`{fC-TW5`=h2Q@d)Hp(M(SgpzmZPovrWesgrXHKA1fp|IW=EqYftqSfZ zpW1Y4V-I`dT}t^~8U`CqX%ma#UxTF*|I|h2DZhYcC&!Yf_iqMvVsSqvQ;pEPZd-ovm_9>jk!rgt7T;6yb z>@6K~IiEnwf1+SQJ_Gdzuisj=gUb!ts>bJ9^&`-#b6|c>(Etb}3usl)@>7dXJ=)p{?L}ga!!lQ!<8fkQ#E6if1 zg&P{T^tBfpZh1NxaiCQoSkbWyFY=WNU;7eg_$fxhsMt703_q5cH|`_*Q7t_g{7^n` zf7S2~3#n}ik9+XA49@s$T8aSO&1%Mxed<(!n=nvFl2fp0DaL?>yKama8B6Wajf$spEfc?as9#Qaia6gd@`0pqC ziJ(^O=-)iN#7RJYw;9kA0}n5W1a_0b!%ILVV&E(8Kh}zw<0`aP&gW_+2B@`wQyI`V z|Ml|#v>aVfA#%V>1YYN-GI$XVc2JA>WcU0(7M^GUQ&|#_q5~J$DgieqPGJB6IXS!} z^TM6H0(QhY^jY+Mm;HDie@+H+kAO=Z9~(u>E1f%6jm!<~F0tF!IruTP7b!BDD$l*z ziQ43Pt`qh-Kl@ke|Lx@cZ|&q!K%USz$)9C_$oS&Fpi9<dRVhgdipOyDvPjg!XN9Td1^5F|h>5f`R-?IiZrXa>`-q|c-H8=kr4Kv3z=)mrHc3|&Q6OiAx1~&7wj~<>5?4E#@3Gi~&68H=7IzO;O^f-W* zO2E`5dZ8BaW$nEmC!2ZTBJQ-qoOU1_%#)78?HKmf-%-tOf@X5JcVP4x-6tvsFQDXS z;jrF8GIK&ZzWv!QyKfD2{9v%-KLVyFP~|8I*7+qIoY4BSo~wT_)E7Yg8G+S`B(Pcm zjXz)i0(M;vwL_Ct2 zbtE<@*B=;zFtD>GEzBi?V7a<2y}`@l4jQps0rQ()F6d1EpCiwpYni?-z@hoT-V-%$ z^hxB?U-zC)fhb^S*z4S<&?>BGs2=p1wO@^=e=GOeP3#M|2nCA(7qMjon=$ zQQ7qBEFuQuvWP!`H%julV6kk zIBz8a#1yy}yv`3za9SMPAc-VmXS?=50#Jc5AoA(E8L(Bu4(!wab^GMB5(Vt|HPk#9 z6mF%V2Zz}!$g(qYLh7FL+)uv{T<-X#a;f*)cfURl%q`D-IJ@wsSWW+3P*CSbYK)?C>%4GY2k}LR)Gj^|*@k!cD@*6Ye~njh4DTyqkSi zDY{p*9*)81#LXY9LMp!5y?=p6TQ?9}I7POuS7mz`9tdBGMYAekLPXJ{*|SwF%(1nU zo!mQW{i=*5K3MBcQH9Ha$(!{iS=#9V++((V) zwgl|E_2o4*4w#Rt_=q7dLMxWvE51-9crzO29SkItLO=vQ684bkDtI#TN}k~{%{4jZ zpm%$ATp!VRI*6FGZ8$xz{&ESQZ2QwTKV_hYz3w^Tui1~pd8}FX;-nt}sOQ5s zcNoJy4o%3CZ#C5BwPm7S3jn<$qy=-W#}C?LC-sP(SU7=GGMJYhbILT4*k^v zS}n~;uzVu`)sj4?h5BzT>Az|{_=F5&t;6*I^vx#1Ip35)eFH?0+P`}*#?|uQbWO`t}g7kp;1s;}PK$YP*nDH&1 zP!+gyDy9GSt_}nOsUK?{fBeN|7J^Z*rn>0 zeEx&hNlOVsEs{8A(FFv9T9X~H&Q0a=g8CS8&c|m6<^@#RzWtLk&A~fq#s84l`)~Ti z8qk{Ag89}8*aZYeiR=H}FQ8W0Jgjk;%Nz8|#xX3v*Z?XxKVUrzarr=1j?Sr^AsAHg z!9ajDVgXyIfL-F}?7Dzp2SDpO75YCQ7`&68+W(B_ z7Z40;@iHO68iOA~eSCP%$7cvG2ULz(5dMK*z&ovV|Ij*r(=T&?RyOG$v`%_9uz?J; z^vOO1Ouv9y5M)?OST0|vUk+gT1yq?Gf;p1=K~?t8shlAgRKfZNbHut1wM*o`6TAp$ z9aA9vgO&pCtYrJc%>OrAipD-wxAqz$tUf6LwMh7!MHdhZYS{x80ZTII_1g-InadyQ z<6q}|e1>2~K;;tUKk*BAXAbNCj9>HtEhp1IXq^yz1L_wr8vZXq<*pa_1=O-Mg1Nd1 zfcj+*mR~@X_8LrB-VKDR?4DCOLoldf4@BL=c#U)uYM0ODj4dQpRoM$1yB(KqH%y%?a=GY z_;6|++{rUJP$%&D9Qc8?1Mgf*{KJaq^iKE_J@EfOuW_Pu@+Xc%s;;2ZAGA*V0z4N1 ze&PG?egU=M9bm4mLZN=yg5?)NK!ra5?H~9Byt5$Ue`eLG2xw6&{z2=+FEUWS@cwtd zfLap@=&;7BFsNUC!19X{ppwN8vp0rARW{G5oEh;z6$@#Y{ooeVE}nCCT`=OQ0a_66 zf3oTX?-UOCpILQ=16mvDFjt+jP>X;q&Hpwxfm)q$Fjt)sP#`4<3TSPO|3T}7U^%E?xc<9eKrPG(L*%qqB6$ACl3M{{XD$H%L-s^J3LRFT}shlAgR8fTW zi6%1#u-gj|%znJRHOjs6Kd|@gzuy`bQb?i(lk5u>N2v&@X6g<1j22H-*Cb@xi5deRn*1$FfvAp(t)rqtbTN>8$%RevVK9dho$)P`65f7rOnCJ73^aDWTgZBXaRSDE ziF+A1Qm3$Yhm4v(l_&zO! z<1g>iK-xvn5N=R|(I~n>Cv>(=VnW6MI>GCFkB9##?+B^{{xu8Fe^h{Il)FF}?Gu1b zQ-!Bdr&OL&ij8qX=f48$B<|@5N6PgHyvqN@_O6L_GmkVYUOf4Lr^hNnp*loCg3$@AvteM0Qi<%1)`c z!Atw!JF0d8dd%9lKg{+gYbkZ;sIGW+RKGzTFzY`Jyld5Yodg}yfj?XUtrjN)SaEe4 zP%YvMwTLh4e6u`>t0TB*RL4B&Hxkzqn^1c^28?orw1+-6=TpOJ`G6%OkHdNnk#~aj zd-k*a-hUeC_v&E3*D5)wzv(wbh!AhsNu(E1~ttG_zb7eM{{fH!e}imRid z(+z&80i211%JilT_eYJJq6H_aFlVW6w%8QpD8n21b{57otxt%mgqdg zPNHm$`g`uE)OERmnpBfTUhh>Khg_|uKqHJcU}odK1D)mr&N(zaU^ajZh^wP%k@|C7 z9TnYB)9`G**L3y#n7QeGS*?N$?!qmxRGDjJX=<(d;{yStxHwfm-akHmJ?dT4=0wf$ zxYeaf{sY>!c)D`Os;NRdi-xWg#jIH<@~4hvDO|_Y+go+!sZ$;;^yF@14+}XJ3&O&d znmc0?DD4K3?{iGm%EcKyzIlrSS6_HzwxIImd`zwEoq$ml{D25U#n*Rf6G*yT$B6X3 z2#ftuZuEN)D){n!`ZV%s{?+0AJ|H{x+@xi?*@xH8Usfp-)_hnSD{>tZ=j-mR9v6D5 zwM3R#-ryiwZ3y&NX7f?G^u$6gShJ})Cr75IH*XewMhu5^9-hBPn^E;K`Izi%ZqTnG z=O@UnE1ov9Db4*f3aTlIN_WwM${pYuJc5XOI0V?dH*{)yu5V^xKn z8?${nKU+|}Ff<)&D#p-!`o)qB_BZK|jOC|1;_i3p5bwRH9=Ve`h0xd5J$mGCneoiA zuf~9dKOkJ*@afXH&TX=KUB=Y!sue#kn|*ghv*L<;J^VoLu_>~_y4Wt!rN?WD--7e1 z+-Y(fMzozDrr&>jNqe}L5l_!oc?D?lr#WH zR0HDb7L(tdkO-^?ep_%-(UCXy_wptbH1%D&YqWGYs9j`q{J8DW)zXwst*1E=CIK@) z5_^arbefq=r?{K9d!P#zeUf?=S@}u(_LZNUXg};mR7AC~+97u(u8g`n%8Q%#VevUQ zLUN*VRo-VO@ZVzTQ9;~xl8NcUozr%u;@K^_0oSZQklL0dVXk5PA)DITW=-px<<;!4 zL&2p@ig*;Ndqh^Hq%m^>!kC9Tx{YtXup<>`f8ZioK%M4|42epA)os?L-o$^LLgvfm zsQj?}d4;q?rg{dSsAr|`gXAsKCq5R>zG6H_{(w8ow$9Cjx{x^c!sgdEgu~fuA>@yS zzC}p6v?E@MPHYd~1iYQ2*mS(x}z#HD9j)d}`BT{xznGhqZN| zdPwvl`iA9Wvip3aD#I|sCEUAMuTN;_X1BC`ArZoGLAf8_raN}vkX2Il*?!!Z!K2QV zMS7KQV+V0)Cdcm3`D?)U&-t}omerI;1#>JYKZ--=%52cy=c_Bdj2z_rob;0gSGlbm z1M#lHod%X>Bf+HEq`l#%=ynl7%c+oWs*lvam?JMBk%<0&qQo7yu7c6GVl>@;>=im|$twO!NU9w= zs`*|_@LEqfsKOWCs^9ZyCs*kB>D5@|G)ru!mel#!y_h>=C5a$tO%h`|oQaC-I9=k7 zB#_6I0_(`LkAJ(!Zi7#)xrMSnfgaD;ib#m*OH@%BeSJ&#Wuaw;R>ssC?Sspiwicb6 z1_HD0c%OxJbjW=7%zJyO;)i3W<5_QZ?-DaJa?AFF9 z;j7xXjx>j~dhX;GVU@(M=kQEahQXCvB;0J?E@BHy6tQrbp%8nG$DtZqJog@#YO+Rc zgD4xXg5=1S)R;t5%WdEQ?Ty9WH&%|fk7(-+!|uGKVp7|0dKkQOs0J^~tx zl8`P?%IDkAmRwUbg%Yk_8vGNZ`vOfRn~Zjvs_8*bkCG`3=nx2SatKvH7(5GLW#g6y zqV0hBdGp+u7>0%*vj%>5NDq8O2ZoG-Fr0tVprV7f@!OlS%j`gLs(!5YQ3~=vf7C=Cl%2bm7eegGP9q&L{j$FETdALoyRWb52>e3?J58ElhEE|`Ef&x)V+|amcj2M z(k2b@K49)-4x%I!*Cb|fPb_I@JeKyZc^|Ygo*9Blc#mhPGT6lFx*+o>KR<5kQVf<< zJ5^5=jHd3Q)mbFU5Ylj_=EVJkYB5&nK%H{&yn;%%m}Pi1%%(lXw17vS!?cPO1p7v6 z&6=vEo=!w$tnavCpo(41qI3$E`(7h-+~KLbVT(7S%4$vX9wD#q3ddwR>i}5`7Nv-d z`rxQfUtGeo4Ol3}!c>i`PjOwN{Uter|E(l`^DwG{ zGq6Eiw$6GJ0S+rdyl&|``V(EbuVQ(_L3D$czQ+{5V&V@HOT|DBC}2$dsDIDL!qySa zaQc|$Hm&Dfo`V+-&0Gtny$4=Kgy)PJ#&bLapb#qX5EY9|7@LNnTZR<47 z5K}KvroOt+#*`av-fvVkX>{nP#4-5I8^4_4`oO!Ct=Go-(nJV(%~s16N>T5akZ_7d zFoxgJf2gI72uC}%yaMw>%I{3Xr&dj>H`_1bHBjLNJ8w z_=H3dhTlni#}AJ_Uu32GW}&y}hLEFs$XBAG90KBJ162Zwp@BMIZL9v zcff2QJ3!*4)YcOckuM~%Ki$}dNlX$uc6_*zS$ArZQcu?H;hyUZ-*NH?u3j+nd%;jR z-?i5dnB0#H@CWo=c-L)KpEFTz%Mh>JutRO&YEQ>mAvv4x}jQPCjN8x>KMb25{V_~ZWjv9d)SEa| zkhD~?T#D@v--i9&O~~n;xK7FYk*la{aWd$E&+{nKOO)6iv2l;idb!Uj#-NA-O+2;mfZX%(2|6i%)pl_#=%t@kQ^) zw0Jb?K1W&#iMh3RKdRA`06(FG&0Kr2d4Hw={?pp!L#xZSel~tF8{Ks%%%c_a`yo7Q zfvH%r{q3s15-xM5m%hIHd@-TXo=dmho#3)B#M&nlwTt14em6^01ZB}i&`*v}xd`t* z6)N2JjJK_}doe?~`gG0X&^-7lmaKJ}@>`s!xsTYs-^siYrB$BkcOkrWANuLbmYqz{ zE9H|NADzjVg(LJ1m3V)*Us&$5 z7|4!>peU(A9L|v#eL^A#!|x>C&o?xCe^aRqZBQ;@R8Qfczec5r=22w3>5 zd6?O_^`RtspCwUI5+Kn;g&6DeeVY>!Q7$A=VeB#5^Mhjzz39HWS4=Sr1YXw76{eiILIM3tU6qeL(Z(iVTKe>9HDVC73kLl^Nx|!_Y!tK4u=>4Xn9Jy+!wfV0#x$unNnC ziOepxKksQ$=KlrbecFRjaBG3U$CbcmiR=T< zdcr3vVSN&u5Gs}zn-h{(yHgUIo^;o$q3W9<-ul4$G%wyo`H?DtX^?~U)v2~o*C3z9 z(9V^eBo(e@Yr3?E(mtdhW<(jd*2YV}*p5hV*d~O^JkaW5nHC({8m#Rsl2;nS zJ@>M=z-EmrMh-!c;AMNm=s_aIk1#%qW3$7tWh6Wq=;-6eR%X%UV^ zA%$G*T(xs+F7n;WH@9#z+^dtW<~)kH-LPWfIr-c+BPzj-aX3=!HKEC42QTAUTJo*S@tei&S>Z zXJf^sU3Q*Nl zA(PL1rVt<64(!|wH5}CpxrK*JU0U!dt!oGld7N+x#Xu>&Km@I8nc92`vZ}n(C15hH)>JwtCa z&e}ax+98{r6`T=YZUfQlo|<`C0dzmC?gcjZB1?7MH;oo!FZMR4!G8D1zPqa@%1akd zf-<9>;->aSM8jk3?^_@5JY#QWwY(Z#gejgcco0YB=9-jkT~2lU^rLa_gm>Xxzg?d+ zseySj^muVNrl4k?9D)Nf3xcIZKI@1WD+`_5m1-6J<&4`z(LrLdMT^32oQh$Ta&-Ip zHvL(SAPfnQF2Oi=L*55U_3}BY2hb4I(o~3(8yJ8$7vOU^2*W7^r%+JQB^3Ag;pqi? z5p?H0W0OUu6Zf;dvALIG+s<{>yaX(qy8jX^5`pJz;5q!kSrXOK0%n8Ifn-`8j=;t! zNFw@$BvNM40Y`fJkRPxvpZh9i5lb_bg3jy?M}IQ(;B}oVGl-rZH<$<4Z``dWK;c;)GMY`R-l8V zq{Yqq>FRRYe)BS`w}t0nWbAyO;HDb=4cn)s*Lj=zzt&dBQB0Pm+{22 zg^J=b*v%U=IyT;v7DFyPvT`&3!N!PA>juDJ3B*1CYd7fi+Z&sE@(-aTE}bPY2ptVU z{k{ru`g)V$35g&KzmrI;Yw^g-t=)C}vyEI7b&JpGq@Y$}n?CahrB71I~!L za~CfJQvJ-Z1BqxM7n^zeMa@HI=C-hcU$>q>wx>6q%`}$|b(?4q#*L*o8ie|Bs}Jrq zt)>W~Gdq4G{`ko5=zCxT&AVIo(uadLQrg zjy=*D87uWhJZD|?rg)8Ub0F zlvmrAtD}My+T&iDo2A5QV+Gy0^#u z#>DNp^`;%rEfHUGqumX%t$w^+73#BkrTFcqdbHjm2Gj=-+ERgJ z^l7Z)$re}EX)F5ja~?t%ZWrp8;SD?&h(3y3V3%xtIZw=i2=U4IaqWH5RRk@gboU*; zqM2*c^!}vY!?C#oY`nLXv#puJgMIU-d&+8Y->@UJyHBHZt`I#GyTJ5lZRJ6M3;n&tgC%;k> zx>Uo7@ILh?Gttp?4b7aUSyZ*%s7#Iq9{g|!Lf??x70$t#W1{b^hlii$(&QM71}(jN zZe$3)&BhZ`eTQjo!h`iIA+OcgV!8@mmc}|xKdvi=J3=h<4f0DR4YSvz=vr5y%Pw0TD6!l?%M)0K|lMnay1bN(h zCES*`;G-2vjXt7vMk~I>{AT3dctD*Wpg3fN?A>&1m9L@p!!A;F!1&Ex4C?)CRl-0yD7;r5`{Al)^P0rh!vr=uTD*CC9I=xR)?^;Kso95o*bL?*Kpxe@^TRh15 zYst~=z>M9F+qY+9GVZQOn20!8g0hjwSaI?~)3Uhfr@Wi)eG(t=JNFpBK1#A0-0MU; zgpWpQ9r^G{-~n3l8k5o5)!doLYDB3LNZZ|IbV`z1be_gaMXp|I2Q!2i4a%XQTY*w( zEK_l%Mf5BKwZzD;%&)bHi&dn}D1|zfua~Oc92>Ow(I94vG@+qw6U9&_gOX`_`Vp;1N6Wd2)aI{0NXbh7f9$<=R8?EsK1{==Ly(e^4hd-qX$)Fg zBm_~qOIo@FDQQXR4iQ8|q#Fq(q`L*A`PSMT&pC2%Kfm*gZ@mA!?;c}0)G^jI=Y7v> z&bj72??`#8DBXV*{_XKKZ+`j?<1aXeTG0Y=U8W%gdh$&v$*^q;tNhjHs&6n2?(g53t_Nz{4wk5=@`abo3Bbk;Ll9xDiGa%oushrT%0$fyfQfTJdd^k4!ZRjfU&zGU z>8-iVU!r!5pW{CHcq}aYs3<$LA-7rpW^7{Sl&2J&J|Kx%ku@eh90`KOrfNfPZ;% zJ??$?Q|kp8Et(sb!ZutQ2E`&?7ZBX1d^vxgX(5F3I;Tu)A-agQ!j>qT_EoE{lhfz1 zs-`AIzQz0fQ!xg9E1mXio3C2DIo*bFzLdosPPoSe2PN_4C0=dua^H28e?0PDQms&W z#OO;0@c^EVsSf_sJ*pv-rGZg9|RZNaOlroh>*@euFt%!3Qb z3$G^I4(#>XO#DvVk2r62>@S+XR#1phIl09mTPw6@`DpiXLm-_bf)YHC%cQVoUrX64 z(n{NxG{N6{%buXUpnAcenlrAJx6^Z2s&qglNM(R62fLG?ECJ;q$1ZmRd`ngAH4|9{ zX%U+_59(0IAYZ2&^~y6xC~F`YRF#ont%=W|Oq@T*#5o9}wyPp>UhyWdfr4uyNQQqh zaqP{GTvnN^*!tM5d*UhI9Y3L#Ni>FdC6Cp-(YXsYUKW4^i;0h*O#Ca$Ce%S$+x6Lu z-xYv~l?W4OOvJg6i5eZ@o*$2`FbEx|DpuBqMWQn!@$|1F41VOl{=E%hRam&T-AQkh zOtO3}xF*=P`^8D9pADp|*pN{8?qb65_B#Sc1~cBzSq*)!ONs3I%O`bFdWrMVEIa&| zuAHFOmnPMIP*s4ydlmQSX-&JcXy^;5hYrix$YQ!o+Onx8J-(s1x==3Dd-)rgHT923 z2?b@`TE?h@E6Api%EQ5{s3?B*ui&_u5SChq!yVlXX?)7zLOh-?rW?k|ZZ(!uJe%I9 zE^=VJJrYi1gp?vcS2WCnL(j>@vmqQM&B39Al%D5i#)8mnX-uy|xFGbxMUMc7_npho zpv&PNF>9GPDGICNe0m|Vo&QvPMwHl(p@!$&c}Sg_E^7l3kVF@;tM2RHWLnkl5=1@2 zK9-@Yc(1f%^u>v*MFX`+NR;gQp6t{;M&&H}?o5XTk++D|7s@sfA-wN{Ouq*ugVb$gSWNVRGI8!#Ci-20AnHgc z5*JMXHXA4tK{EW4iM7>Ut6_wux+|iHWM#`8SCR3mM_xtcS5Ufr>TU#?XlacM#|fNP zz~>()ma81bAQMT>k|q3U5z>(Wn0OChqQ@za4rCvg2Dle8aUv8`KXfnKnjUT6KC-ll zwRY?gPKui?Ipxikz%_LnO0xO~f!SpYMo5Srmt35VEf1)uZligPWvI#mC86I9bv)<6 z*-G*+!&_yvB6%aT_Y&E9_``!o=9e8revjTQeoaqYxx6+B z)xO#WjY5i|sP45~#&e9=dI$NdJBC4B5t0=)kXWCQw+(6d>1N3~+-xj+NlIlx2=d$p zCJ1ClZdF*bVh5$<1?ux`*`LIww_lz3wn!Sfmi1_Gw_m=#c*U7=v0kVcoz}Uz+w0&2Qtj#f(TVMcgm>f>kKofB{~==$uzJmQ{M51s)O{LAi;n-L>2J>br7DZV-$AEmM732 zodsL})gw`$MpFx`YrK#2_Sq2C@bQ&oUi9q}-Or6QogQp@LprG5!T3j|Oeb7TFPsOtR8hkL{U z_(=gt%KFds=qy+Ys2izm2+DJD-N^215ICIV$lTjXG#X|}m1%GL?o8~O#}7QlLyLse z-%8L<0}{ojf_<20hE+F`>jhMjr3)mH0jo5olET4(C{jEy>qeSEb&GpW5*Z*xRUzPl zJwpKA>Og-WR=faAEWok^j1w4a_4kAfXIMa$Mraw$Ke1}Wv0+tdv;eU1=stm1!1G6y zMs`pAyTDQmuExOcUzR!q1uzwbRroR&A5^J}$vKr40$HGB!77cZByey+07{nztSXJC zufUkC0eP_7VE2DkY1F^#1;%V4{1;vSvr41mzpv7`NOV@E5$rgh;cw(1FMx&(-n&Sag8c)3AQpcMCalmeYYO$S52h!Foe zPXmAbBlIid!qBf_2BcwJre%x-(&yi2V_Sy#e#^4>t4tZO8r z&so21b11q7OgDr zy8$5d>rv}EqptD0qsxx*kCVPwVE3hbP1wV96Xx13CnN@WwE)z&1cP|N=a+pF8px75 z1TGxjnSWb2K(=E;u*-mj!)#*y{TVy&U}HnWzAg^^N*xAKJpP`->n{|bJYqY|S?CwY z&Y!IOdBDfTIAiA@91y1M}V$ocA-caBv_BO(F^$0`S!WKL7Zd+~%-@_W!SxWzc=M%oVB&p#K9CKxIYX zYZ6q)&-wmy{tq*(uRI+RY4A0$^nHJA_3(>cQkTokCrQV%50TYX?vwtQn~TIIu#dYI zp>qaY-m4*Ls~V z8P6IRsB!E1aJ<5!xo$jH4z^z3p`-2Gd<$LYyqhe_Fn zbQ5L{7Kp9=Xf4cuUVVohZ%@JK3o~G49y+q2zcRBNWcdaVgGTWfh{yO{UBO`n z|EG>4?;a;H9Z)mRXsueUrEz}eLU9lz4KTe__Ez)dfD0VSWhdO;`*}1b{(hl}1z#e& zN7ZLL0<=@VR-#48bc^vAu%~QsU|1JoXwfa;hx(dZQzKCj9ZbGs4v@;r=mPscKLe|- zVCpESLC?Qef(Lda-wg`Ei@XgWh>k1AtJn<}ly7Vy6zdsR<=&o4eL&wazsX)Uw zX$ZtiNLM^r)|NwQU7TZ#l*Jn6Q&rFxe$XbhpKx0`YMz`b?ckTcGO*)`?pi{noGQZP z5q(P78^Z;JwVANBTz4%*r^LL)TR#5mSZ?&v17%ToN1( zzK!f3Zt$0x`q!DS@lA~ji|WWQWs8Il57Bc^A-@stuhh5_m?Alkx)%{mwoGMkXh%xl zg-#^3?&~4FS0W^|e2+6LihTCQSJr!kE;y-|Y-TwRFPqhiSzWRdXNNmn{4%Q7!@<&=qn$7X5^g~tJ2Vn@G6hoq!$c7bddMtMY$!&9gDp9n3f22_l@04k1@H}=$nL^ zCO@7#B`(*OIdtp9Aj{pjahn>|VEl%}To3tG{OY}ZCXxp1PHlSP$x1PaGOO(=GG(+o z#QK-yhKjM3A+om>(b?NxxhH&uNbrB5v=95p-8Hv%1yN->zS$kkm&N7dpd4y~b85Xw zI@RU4Z#Ca#ZBnq+d^>25`qm*YSg=IwKHt2h|7lswlN~{B<7Uh;uUKj7MjMUF6aN_{ zYKm5dL%9>}GA93*3QnI9DMhk)!v(&FNsNR!m)#7ZBP?>~jE;1c8(N#FgSX>t_qT^T z@FX&m&KOfv*4cH(Rm__tJfKe|o3S+3y5dBjH>^X%vmLkLgk;k6NzX#jDSD1+EToCc z);Xr3_J@9c-ezQfMEP+qNZl43n7OhXpc@RzxvAICT^L{l9vg0SgUc!S1F@u8U{;)S zgihnXN>@P_=<+ix;MnjHm%%MlN>W^mHT+qjn$=iMK_UAelPXZ>@>9a!gbO81mRgZ0=pHf~=Yu#LkX{@g41(EUoudUq8+ z-Tc_KxuG7%#Q=f%wCgIPWDmS0R*mm# zc77{F%Qt@W5=v5BkB_f&9BfQp%jVQ90VQ{0fmLxXbqu;9%_GXNk6x!VTO@K30laH$;p`&O69+AdE>$;Z6{Mzk>FY+X#=M~ zJd5OZlv(|GRst1!mn1-h^)12mRzg<+m-vGl`duTEWud~K4EVe7U-KOJDU0ba^P6-+ zj2;~yU$T$ks3jvON^MkIq5W}txr5%C(7pbf)_bYY3L?u))gvA(GP_L{2F|ZV9bP59 z)IqGE1`@rZl6x zB9A#++;E9R7EPxb%JEHKj0CT`=mn$UgQh64-K%@X#YFdlxMR5O4F`+X4(~HKHDf>O zUM|Pm*HV#tjzd7k>G1)_LNTDZ{t<~CWd$gvHc+GwMp*(EaDes3e{wdy1afcZ;dbQk1{Yv@JVtSr>O%_BOWtZcU|IbAm)j z5jf^7UjLS=U?b%U&jaqL8*jRTOf8xcbatlvBfdZR2PHA7s9mbmG)PH3gJC$T#7~<;G6RmWvd0gYV^}PeakvZ z-_bOpcL~^QJ)%n@hkQUK*#lA`w9<1<*suT4*6# zEZB$d6fjRGPoYZ#)O-i_#7U%0%GBa!Ahx_ItkTF z0xZ2i0F+*x|0aPY_~y~$-)w0AQZF|FtWzKmP6!xu@cGA?l##<7s+W`htQQaqBNqdf zb!-}{mpE8@kpfWg1~C4Mc?7=MJC1R&EdNq3t^gLbHq5k$9#Fj;|7X2`So4-Jt%fsD zy}X2_7dHR};rPt%_#4~fEEFa79LkqJXCtsPfhd$XFl_&f9G+0Qj?T$-!HVYvV9f;m zH;Ed-H*;ct6Jzl&N9qlLMF!j;!CgC`+>jlIrU4wO-nmP~FOEfIK zfGGOou+j~sEV3n% z(awKnFoIziH;pcSx3xf**l$hK9O@e#y%^Hp0d_n(9z03euW!9Lm{6_+y zdZ|38m$Q*3#tlxJIXmMZgF8|(0~{PjIq}c44q#T<64c*0{u0#JGe+?0qjl0Ijd<%F z!d||Ojmt==gStD(P6@$QUxR}KQS7mCVC^P>P)WX@ zlOzNvmhcrASgahuP^{HIu^a$j22vIv zwJRLdmjOlgr!T`S&@bX?Si66V7pN)izZa$fOdNqDz!z4iB5>YmUxkB%qRfN$31`ng z&b2_y2#7-K{5O3>v|>1HBpsJt9PaJ^*#*%RwZ%9hf_K2voL>bFvKsXeyv-vmpJa zorOn(DN?zh^VGQ%FPxf zHXkxBuOrd8LW`+7s;*uU^sKg*R-#leNlE2?wDDuc_K2!EQR2IWU#7RMRv9T{u3N60 zSpJ_!#Q&H_#Ff1@aoIMnN~7r^K==q0BMBk@c(V});!qr=< zuLK#&L$stQw+<`#Lv-%UbS3&>Rh)!wWTogx*H)}|@nLDnoZ5d$)Crrf#Ov^$TbX8ybbtPt7 z4sV^<13V(M^TL0w>hk~=k_!SXkBH|`tm+G~h;g(pe?0SuAh~E&$2^-h?}iQ>?jtEP zE5Q-$Fqt2I(la-s16$s^3@aIK$qsbd`~Ny&C-xwu*C@ehF9+$-e0PfX)=Mhm&#n1^+vW(>&ZRQf6RT*EQMtxUaa7uTmt-HgIShUMq zrgRg>+B^BlBO>|FS)}xPHJ^&sMH#g$YxSPAy1a4VY283)Q15#{gBNmV(eo%d+O7FB z!Pw`-cbfT1#MP6s{!;jNX<~1d5u({pQyci-ds>3|s`k^uCnWjU?)PdnY;zp-$Qnrd ziIek@0T7DT9LSZMQ%A8c#ke1jhuA#s68>cUhVE&`M^Zd9V=DNSIqBubx2B**q}X7c zkxO==diA?NufTF@jVn8Hrq{Q&$S^!2N`635Ze551+~=zT6#Jb=L^ahDNjpLz)%ld! zaBkOjKc3mAA|i%)29obL@pQ5d#BPtY^?-8ZMIgfgYdiEg|Gfd1#t{J>S?hBn3$T2W z8}Nvri~>C6e&-QUO-0-|-mtufJ#N1*Lu0(K*zVbR@az+u=sk+ zL(>oHxFqIa|7Uzr;PQaY2z>srAtjaUff}@e`p1GYu&Dn4zTzgiA*Ad^phv{5?caMu zR8vhQn*?=g`X0}A++B{d?yC!|+ebyLOvOtJxcQZ3wL1knyv(XHIp{?&rv9T(fjI*^ zjtu=)c`Vu}g8A!0hhNHWg&gu%nc9W+#gMp!D;h~g?}Ym^EOs2}jvps0 z_9A%r^E7O=z1s*J7MiWac_(A;s=5o0}}JG7c#kZf0;6h>c}idCo8 ziZJ!RQ|h4e)I|6FV1w3a%`^Y<5X#D$HqFg!xEEL7e2l;{PgcU?Nhi0gvK1iCbZKL_ zL#Xd(ceAC^Mtsn&Mn_S)&E=L`*kb498rvp@mp9k=b-mQ!c&E4(F?xMhZm(aVi(9L( zV^dM=$6w4>{Sx$j7oxpoFI6a?OhX_U(!pMnVId0Xn@jW~3Vw3yYDz>a`E^AL}Vr{MdzLhoRNNeY7X1GmpX=Lpn;>YbjpPAqRckxSd;ZvV$W?b_GLgu_q`WtC@e( z@b+tKA2`V`%R3SXk##-%ceQrNZaJ3u6P0{xzp9;w{Z#sO=xyL*<6j)Q_!l(S6?@u6K6T3Rr_$7dSDQGUGS-V^=B@dh&HVng zEMcpP?9B(shO3K3@%YY)ii`Im-ib0f7-}4A&7Gzp6SBJFl04fA5Ss$2>jYF*hhg}8 z0iAkFzfL`Nqwv=09PrqXQUCW1#<&>;ZVC7g@cG9y9_5IHV*OQ#40^o!0}D7dK=yy{ z5m8O$daIK03k%0gbqe0yUU)r|EwV1+>)y+YRfgZ(2bo`>^vOt!hfmd_VvYUas8JtJ zYSH{UrsAQ+pCH8lb&M$Fl||vGF+rXU+O|Pd6fq0ot7jr#rFxUGCn#)Aosb)5?geRn zrMdGo^#jc-mkDnERTBgFHsoTT#yd=vl6Xn>2rR{9_SpT)-`?q<`e^VP%5C8rOU0Nh z#}|3pfm-ygLxt-Aga)7U3jkbQ$v(IMSpU6d53m4C=Rim~NI;JW74F}AL{w9u;4dL& ztP$KME1r`>cjD;%6c@W@M?pT<@p!=|=q(wVBhhQY(L(Ozrrj=9eut`hdum#(BsVH% zlE?o1q+E`WkWXvb_X3&C5HfcANBd{YS%OQ0%TQZ29n<+42*NQ7DUx|k9v2J432|>q z`nwN2BZsq>cr3=@RwInb1IqSs0TtG$MnOmQuR3hdQRN^BZ=DeZ!p%*{fc@cjUJTV# zf{UZ~O)ajD#z1KDe&DmXe4%{)WYxH4h0-pfxhnI`tHglEFCu*68^5R`U<=1CHK1t+ z^V;vAk#088jdoTSgl8VSXwmk09sZpB3vJ&quk%Xa{%nH6TE&Fn_z(G4xo8xPF;I9_G=!>eA>$Tv z7btoCG8zmohLQv5s80U6G0unrquL32F}zp&y%$3@Ra+;Lre?+H)51WopY9pL$2mjI4VV1Oq8YfWpq1~}WnABc6W5(3L3 zA_m0LYq$^#@QB#9`n^X)HI>fmS4o97JVWtn=?{IstBmaK3k_t~bv9jpl0&W>Gq~H{ zewo#VJc5(q==x!;4N2YomvCv-4+Can2i;`@4Px*ZsY;BMo>|E?EzVz!`y!5IMNU_@ zb-1-mSy!$)EQ7Fi;6qf)ropN~d^d4_ivkbNeRMQ>93@WYlq##ToTjrWyYhV@SSgTZHT3%={D!2Cr-J)crinB0lNUMU@2e$(1JRPR1U*wk)?N8JT)b;vIs6mG#Dc(ztJ=qwf*o z=mNT0`Q`fTWJ2%w%1af+gI3s=UT*dC5lvZunjS4g|I=Fdk0s|($szQsP2wCmCm^Jp zo1jMo9uT(!Mw@}=vGa%EYO33G2Ih0#C=U_6X@uU#Ti2Uj_wc>z_z49+Lfazf!xkK^ zlFDPS54kfiPbaZZ=FI*&+MJu=t+N!MM?@O1?4A7<0jzc)%!(QKC;0p#&reJ0g;9k| zz?)Zr2%HP~`}58J$Ed=q_P~8IAxw#0LM56xC(*{A67l>Y5FChQj|1x_x8w*qLY}{l z&@2UXga8X64<#HNBY@(_`rq7}f^Smr|NnDustaJjZ^D%27%Gd$Ia#j!DGL=G9Eg&7 z@S7f;-Ce~&wL5)IyBF}q5Wotg|8G2Kz&AHIesc%>FZtpEU^!&KEGHKaNQ6h14@v|) zf0UEk%xy>jocck(e&7eI6dTwAQzkZyVsDnwVBnxpDu@oY^0U}mLxL9=I0$V6Rtx8g zy@4%K00rzWoKN5=v2rAUqeO}TwgyHW|8NAXJX1Gwr-EY+tUz@PQ_9~=NQ|?!VWqU|#(NU!RpMCp( z%)U+b++IfEQ-abSSKL$CC&X7R@`VGKT0S|y1S-1$5r6DE4V9OrXzs}!vRACATT&)5 ze@&2jV1L8$16(yR$g5-tSmtfJaWGb2=i}dE^+C4JL+ElBKzob~Fi}7hh#>~t7+^^N zpI>%DfawU`c7U%VABr~Fg(!eEfer9V$pp;XG0DxfKUw*gdHal=e-wK=cuUvK{@iNv zChL_UK~B+uydJs)8k#-fSX5RdL+2QfUES#r)0Ktd?*a~Kf6Lqi;6&xMhB;L zl>=P>Y0*1su#)|lHILDF#gBBvU15lv=gIg&J^s9CTf3`yzYx|Hq)*?9xQepjZ5YB< zr0?Mtxr9aZ(C|ECf+yzjW`d_hKqlt#VS?vHKte!*Cno0c;y^%CFwkKYr*Z5f=J5pn zb(4eH6OUE>Au$go2mBSd-5eIQ6F2I#^*hlg#-sXVs-}q(!nhPgnZvrpz!;k;nREuV zd@*2H5Z-^x&%=sQxH70=9%FdqsNPOY%!de-9sYk|v9~L586uaa_9)rc;ncYKPJAuB zsq5?Pr52OdS6_2ifd=lT7nzYhlJ-Zhs=ONu`VS^uxvO}rtAi|ySK)wt90y znWd^&D?@gjHjrrNK(c=~g!#dh3|-a{f8A_y7aC($!vF)fX4Y-!nhyNo24IaM!ZdKF zfLJ757h)0PX!2*D8Mw(VTGlboCXPg%{Q7Q-Rw|*DM$ZkOTBZuk&=>MZ1zpwVz$|x_;M$s`o z?BQN1h5f@NiuFK*G@r+P@G_y?CmC@64hTI zkpWa9k~4`I0Tke*0e#LdWpMg-Q&1GY3sHcj3_B0*x7FTS8E;BEceWWvy&kH`3iF}c zCedH(Ag~i5Rbp`IRK8ka2MY130A^OGR8XPBf8}9;elz45019me?8;Q0l4n_=z>lb( zE9lQwCo^L~^HWEut2^ivIUk1BlqWdu!}Z~s z%Jd*dFbWNkM_qc*M_ICGc-$X$bc*RFUDGD|#$n~jo@ z0w0oa3U(_!LzaiyhAI!AA~Rb`mPi>&D7P1UyrbxzGx?RcB!|B!$Pld}TT`lsYZ=9K zxL`Syj`X``gJN7|=>Fqd1#eldEv_nIN)>&(C#%u*%5v%&DUZz(f6~WXozno{Av?L@ zg)7gHO{L!-!3Su$u^`da8NS0<$GgO3uOpHEj>8fC?oCqty0vV9af0->>POk-ytaz@ zD%#Qf>g1cIADwPkynT@%o^*$sZ@twCtD1Gn(8;09*;v)>eef*H;Hty1+TaFl02*s0 zo9sy#jZVtuZOu9n;s+Z-O08TICUT*Xz8a(>>^k^y&sQ5$TPZ6ij3f@pab98Xz&(B5 zZ8%$Xz0+``Yu`Es8<7^Zk|RN0Vjs_z@&l9%WKUsbg|eH5a?$@B7n>n;1x%og&er8D zBM?Z2pCtH6idM!~RaDj|vMSm%u*cS2XLj~yW>HWqBgC|^@IH$Ca82& z^C)!?zIsn$`BkQwk>@gfw&w?`m5zy03x=W}<5?L`#EP6wi?V6qpB7391&x|0_RvMy z2=M*bxyFq{lYeb10n_}I58m+yWS1kJUeDy2nHT;BU{!x|Z1|z+E|8vnFhwRQrrX!hdN?wf3X}3&###36cC9pQqnEEv7=Xn`297_T@ z`itLrAn;)~f-aK1eGZS+>;Xb>!#=70=zC9{-uj!ze1{#v9yj#@80aSbuEmz?jLlQd zd`a7+=U@!ZUwJq0#;5FN0_nEhC5T!zR@)I@T#tUs7~@shemHHmIP@4KgNFmG+*Ede zi#PC@cz#tpfzTBK0l>~ySAEZz2$JESOe9yn!={{jXT7Jt{v=nDk^cSC;;8EhzH7?? z>yKoxanVMYbqCX-Oyv7@lPTP2j9KFWm{{5f_#1+GY=J%U0w$s)tI`hv5wEqQgWKac zjcXbDKrun}m{JpGA9K5kr#VMP$aPbl`O*!KoJAY$xyI4e<--H+?UDr+GBx8HE;67! zFXqu2GLRtJ8z>(XPCD?NIlZJJ6r^S8r@cXUcMs{=6%Sn4Y~JkZnjg;x5YQ_6R5&&hrf$qWcITPBP&ATSh}CD{^Z6} zpCbh^>1mJ*krA-!4%z`>0ss?ze_a#Tcp!AeRiF_OjqHqxAQ}G2#Fr27u&(O*kZFzU z%kxAdh{@Nq1n5K*!1#(F|bX(>fs91Y{!E@Xv+# zXD3=2!;{&Tcm)npm9BHEt?yl5-0&Y`|9DJoOt$B6yVFl+Lj6IN{rU^^*2K64>5=Mz zxGpLr6j_6E*(xt3J5>Jc4_f(ek3D>1$vief77?VkLuHJoIuT4wxd z-~8o7eXM06=e5(MP^n?_er5zp(fIEx85=_y1>%{=-ys|LHt8J-#E#yQ`m9+SDO7DN z3)O{o8ap{G6dVgVZTWkJMHD<6kBK00iDFipd`pEEbJr+T9>&K}Uk{3R*mUwDhtR07 ztU9wlgPgt_N^gLO%8KvZnGjt%WY+45eqBOxuIT2;>kwSfu;}&F% zwb1y{$Sq0RlBfO*Qs_@G6cNU+bRvReFbjfJchGJQ%0!=YOf-YgmAZq~-h6>`0GK@# zB*0G+{3JyyBa=D}8j;x(IRqXxnQvL>la)l57AdtgQST{q#@_=QPicZ#cQ6ym#IuXb zKkY%K?f?_h0VYb8emr9$@`X&yNvz$8&Ape5M3JSz8Xv{mFDIMcQgMnOp2g}}!-vE9 zWN!VsflM=<@n_a>I+|k=3=M&G7e*z|sm0Ol1(q#QFaLHV#?q#q#D-!)%#xv9_k%$+ zr&58fJJ)Tye&kvP=Fhw|vFdb9kQ(N%JdIRPMf2AP7IFCLMeV<-CP5$--K@ zpemE(w4mi^Ez5e+>N>Yhyr#f`3lY^0*Pm(0^0)pW;wx3V4`>T~HP;^jVr`0pNKSgRg7Q>3bcng=wXF**u?x5W~l!?#I zF)zXD9eItIei!8H-(LMHYo%D^))thoDqxv_ghESiKCzvM<# zs=?0lhGTnO7(%UH&2N1adb0?^9~|^p$zEyB>w{k10XDIG0Aw1&N+TK*tL>q*;&ki1 zg`nwYt)W_Dv-(t=cRww4JYXGDZm#WS>L}OO&>~1K&&F2C4)%*B=@(z8#!uS)$p5~Q zB90#^G4bn63yZ&qji4%D0;W9+cl5kf5Gj5a3TeaLcRUq-3T$c)GLhP*({{+d-15C} z!ZOoc6b7W_%e#F)$Q$1ug>lOZy{sUir5Ia)FktF(b-c`bl#p7$&~oy;K)g*JBj$@* zxrAG%368YI;PdU29!doyoydpyg!U;{_KOu zHOy0@rZKUydH#rNtuC&$y?GgPM6G1ZklZi^TiQJzqqak=9nlnl*71NETZ0n7(H&$W>V-@c?pqNbU^$u( z>uZ(tfiRn<-BOyog?2@SYOhL-nle>?wkU|6D~QcG{L#p><(tB3YHwDuSWGqcU*(Wc z-CkCDog$BVd3>k%e(`PcGy&NVgRK<*xL(I5&cKC!5#5NGi140#{xM^rFx)wQpX$dm z><{Z!gjfZY-w}7^i%5nv_>!mOB-y-3r@hYi4RicK%5jS9lp?K>liSrVg3`&GWm@l`y$!=~fv8%D|Ws@-Z? zTy&EKV4SH5&(i3frs)Y1er3dwQ%BNF>0#do_ zrd!B#^~{9EWn9v+Rg>a7JyHyVi zz0}Ph#_7l=6%u-$g}A|5LRw}x!xFbIP_v#&6U@4UfY}bP;&A=S#HxOPiLw9_Q@GL3 zml{06Mv1Txlm3FV69W+k zzL=avoY5;-*X;S13QVN0xEGLrK#3&_XP%!TK3ynIu3Ia>pSKqwstG3-xi){;Qj;y} zy{i10`C+tRhbR)2@*||td?JO<5)p@4M!6H8@}!!4UQ>MS;0;$9RyMX8inQQ)|)uBjDo;)pX@0L|&xEZV8&3bv@Q62w)49wTDI$={6xgU zc&g4c!Yi8T$(A!o#q%#eRRRSFjKgPWXHCJ%IXW)ImZ>oFI;3cgr>06AIfTfECHYvy3%v#`Cfb3i7NoW)-L zxjR?K15ES)?;rvHw?BR$7Ckb|YHztvR&)Hy>OZi6JIG0jGgdQ|7#V9Js%o(?V&c%epD%w|+w)cF#$B@k zUIvQ6L)?rie3K=G>gS}&dC?k3sc!{8$TjPqYkvqv!&bHhFBrApg}mK;y83y{$VEXn^ntoDG=)#!uO-o(n!SPhclCkcL% zqLne8B)>e@{=r_MAO7RnfocU4#1S8>&-ktI-|LI=z{X#|!L0TM?Bu}u%Kj@8YxDtD z1BJHnT04Z#m+BQU~`qG1x)vDI2PlmkYl26behxxQlFQJ8cBAS$BZ(tFb4MaTtiOiT9%|w56 zuqmeiCy=gw#5!cN)NL%hxnAE@i--wM<^lSp8IBgGnvlzLrmdJ|&)bz=soxS8L1Y^G z{Ou9l%nLhRp)4|ZcRio_0if`n1WmRsIiDj(aP|5`PK-uUpBKvmk|b7@pqZOneJTE1 z$F)d@A!TrTj;WsYOYXwG;!oe-VCPcti9&dz-`y#gcIOV=cYC${+`?;j(m5^(h}*xP z!+G_pyY(f3r190g)h5@EArA~MD`CHBJGd)_8AEJY_yaCzMdAHwL2z)AUQnM8`o6xt%s2eq?fVu??F}r~@1v~Dn(j~8QeRhqAD-Zw%pX(C^XBwdJ>d6e z+L4^4RB!6peGcBCec118W_J#j& z3-VXY-pL?}=;t4&Q_-JlD_CCk#NKJBn2ndxO_x7F`veb?L81v(-9bAbpcY`F`#C07 zLg?Nxg4Ny{fa_6keFe$zPbR8WdYF!hhOV2E-HtG@|Kv2oVO%v>T)_T3lhhJ=^g23( z$;5mp6R-Ws#CMDU6ITHyzTm%c#zc$@nMjp=IH0bIsjKX9i5*=x(51|(kf>1N*mhzT zOQ~a_X9shR=*0-z zdYHS#2Om~a6Pp=T%{Tc~qsa+TQSMuIjTO36a@WA3?CI#n8nZs-`xdu*eH4U>OFi%n zfRX?9^)S6*v#cx1QoFa=ksV_%h8swYbW+t?hk9k|dh! z6fRd;98{~Tztz;abmNXsGRasmFYzet`cu`LE^dJXYhg<5yxd)fz7$N}iSm($ZMIon zk)zJ*tT{uM1C%`jY`tc7JlO&l`4hiIym+d>+ny^N6w2Ek&E$T|qffWU!h`I&;8#=o z^eNY!W82w92r9&wD&D+wSSx-J%jor6%e?X0h0ibNP=kYNeV#2|R#>@P=ngP(!4+2B zK|3H68DOH@IVP?`=<3$NYHxJGXG{di@J}WRErf&)d`KL>Tu&^uxb=EpBNK?8D%Yx$_eBpV;T0Jf3u|huuw~Ntmbho>qRVEhS5ER)f-9H>%g605 z9~Pl^^c)`YAo|Ai)~i;>1R8uy22`pap$%;I!D^yt6pJ6$A?Av*Xd3AYd>#X)icSaz zo=s{|>!x;G3}{F;lR_~nT{nF)wH{*gDP^mw(m)zFHdNw2N8uG+e$FZXNaV@~Ep~PG z554Vck@*YewGS$shhDF?5mzi?eVh%kLcJ`ag^2pKQa;mCN`6;Pv^G)sRbx(Ylk?)$ z48;3l$xO7`a$5R&!rE)u&u1#XCmRgY(7V=hW~XGXY@G6{6)bhXAn^%}Jxwu*tJ=BK zFB=Myq0k;y-9fuGC=*?OW#R@cgsvXgAk!6tfxt9yO$5pCPbOAqk}`?gwYdKnnXB!d zQ^j%m@_My3z0=#20x|6w*tlUX%({bxP$she%EbCgfQi}w6KNa0&zOjHArmD6%XF7k zk_j4b9CQi!ZlGTipt9JNU-_mTrEWV~GwlxlS~;1m?>bF?6w-}G%M#Iujm_A5$Ncp} z2ZLJeXtbo;9pCV;ca`?L^vB1{OWajdW_X(MneM?e3bFfUKITWO96ub*=u0Bn=)>#b z9zMpjUkk1kU&uRZ+E|51}a1Hmt0EOPZf$x3^QSynVH#Ylks&S7`Idr9RAnHLslf?#QR5Lp+mD zT@;MBkv?0k^j_y_e5~Rq?;2EZ^g-`C9&){?U2=H%T<-0Dv(zbS3XehNLpG@43AvpiE@>m5B{*025z;)!s_U&zOjP zArs+aq!ynUx^PP)kWFIt9I3|L@*#s%ZQVGe-RRICul}Tey`ctD(w@)#j@+*}EyP}a zzdxR3;F0sj!mfQl2^*&UjP3JSES~Zy>5x_R{erez9|beZUbB`FnbqK{I<+y{yutfg zi6q~3)9=X*=X&-G>LlOilXv@S$EkASMX;YvnN6d&V?=2B1(ou)ObEEPK7V!MO&af< zFjL(ci+On}-gSVj9!C`o`6M<%iGf(Oy!tT%Ipwx&nr7nt>Y@h7#{5b*; zPd76;#LaA;ar6$j3cRJz5U5>0KFD}`N&g$=n*D2`6G0Y*nAgdub7;>{P`P-U1fCYz z#6PUQjj4GJC+o4%l8V5lwk*Oe0s^!VF@}yOin(H&^*s@b(YQrQBUfKRE?IF$P?;;X za7)mnRfgLR$O~iJc}klNx8mdk8tU8~Ogkm+p1VHI=}rRoX^w+AWt92;&Yl-_lRmwQ zltHT?&&1#}YJm-Bi3ZY9619cP{=sTtLsG;uJhCYV&X;DNGtch5NNI}c;zTQU&CC|i zZnSXx&O7#2k;rvIdarL?B2)N~85tx)ehjR-gLWHGCc2zs;tL2}qa;}EttIG;i69yN z$;76G?;GDub!4@Kvb|G6T{Zn=;8f;@>=y^Cd_L?6`!=2^p=_50b3Hyu>BoocDJ^a18|BM%KI(+~8uAcses4(G^XkY^ zTb#12n=OBM3&(SDgpt>c25!?Xv)us2FI4U1(Pt$bCV<&NP7mfQ*8NIBhaMb&O{ZDbI3aL8kq35eX`dHHVL zwyirKbAQjO8ZjcLlP_R-Jxza0*-!7Y#q=vGk%{ZC;56@7FUzbPpAtC7qES6T?=*$i z{h^z9tyuztHsFeBl06z4Z`1OL#x{3Z4YMN)>Odk$hKO)jbqDP>p-gl>$HZ0$T@waa z?G649D>+Dpe=>2YHwItuX?cixCgGs9fwWqTD@(;Gv5cpR)m^^#VB_>y$Z#2ePZ0Q= z4|#--;V6MJ(fd~>HeoczY{G%n-ip@X;LHFkIqro_9JvJP4(n;A-7aS1-V`sG)+=$* zzQ173j(QY)Yo%a&C7`YtH&Ai?K4*+iL^J%1QH8{*?}pNA`54Yu{Ql+nCDoP4sUfFA zxrNl;n5*%xvJueiRGtmu_ZSNz<9yGaF-5MK5fASsA`gSTW@N!$q{B z8QsiG+s^tytPx-A5vDb1Oi-ajmB_WKEb4*pB+5!2oTwP|2OcC{nOi!lq>s>0sWz7^ zu-f9(cN}XR)s_fUn=C!jDkv#m43kg?cSn$o;8SA+dki<2AqYi#3P~bfTi8iJmeXp8 zwX{~F6JEGyB~1f&D_>o8xXd?TnyfhcowFkL5rR3^aj z#PLEDpun8@Wo00ielQdZOq>Rd@BAZ( z3rIUf&T$q<_V>$g&>sX0hNz}$w|#&w*^aew6eSp=wQPr5z~XRZV7Gt}reEEfOg`Q$ zK3Sy?_8~+DRvIt6ZKyH}&MA`*7!nt-$lavc*^nHm{w5jMS%?T=B?Gi_mfq=4^K7#V zpcQ@~98Km|tq^6x>QTuFG~mhoT)-0$yv4;1Cc@&LIO|bnAh9SnonZx*!NjVBVl`ce1th{s-T6C~!aEpPtQ=KPtPg);IRPO)oOF{Q0vO_h zN%u3v2OPVNB3Oxk2g5*3$*rB!6eXZ34lofG_qQ|YoNFQfAyDXCA}pu5&8M3{ucp96 zSc*XGIG6|v><=7ph5rAwcje(wc42>PS+iCYMToH#B`Jv#i4-cy7DAC!lr>Yb6+*T| zStF5(D3z$JWl1U`OO|Ad$j zgC~XGf9V-3orBm`NMc(nKpTWf`uxYR8T_0BSi)OqF&bc_9sH7FQE!$8{}&X(x+m6O)Zakt?q?OLMky4biRnS--bB|lUnI3#FF?Ea1lQk|_nw2Uc6t^G>}MXce|`+jOuvFJ{{Y zJ&V2sfyt^J`7Ti@_pbFRWC-3LUo0q~6=e9X3^^|I-{oNczbav|VtoRF?$fVu&o#^) z4p^++!N%A_&!+1>;I!%tIAXQ?eYo*n`jHbU=}T78Xk2c%mu4WC&7>)NTYYCd&xxH^ z!ZJ1-aJ~A&q~k|3zr$N*v(;3B{|A){wW$dLYX zRPTB@pQFR@DV)px&e7rX0BhKc8Lb@GQ^can#B<9}i+I?KoWas!Ee6B2oZQ^PLg>4e z2jf24@cLv2I{I|K*Vw_u*&~t(f4O>)1*LE`?ie!ma1f6gxCllWtT-Hd4t>L5APSac zA?7t$_P{Uc+(?xxoeQ7el#rN&aUSnQ)i4 zld|;5ZV#y$SwEED{$t!FSy*6+X|$b<;T7xmR{8s0-*rA5W!F>bvTVEcZJ}OTcV8^0ar?+8Up2iUF1}>0QynK#1fS8Z_0_uZWyp}5dh^5~gL3@W z9dBp6ud#VKkqaXNFT%2y3|XGjRGZ)a31D9vz|w=S?Q#s`}E4d*?! zsm9P{-vOXsP^iX+n+{PJd~lYRvnW% z5!kZW=Gx6XZ}X#BGv!?3;s#}ln9OrxCHEt^sxP*mjF#@idQAS)I zmKEy(uR|TE*|}i%ob6e&Jq?d7{-oQo^6rRGqRivrb8fvwc5h7Ab8nlGwo= zx02~KYmDruf@#JfhVDtutsFbM4rSbq&|1THvrcEYHao#Be{F6uzfPH*wanpkVI zZ*j3rhLUvLP7Qp#^n(R%6BFLG_ES%pd(~o{W&JILZm#FOwp?#-`tH`O27TB1_q#G^ z*z34E&c28m2)roNnetGdPDmAV_dtzhMHA~=b%v*bJEYxgI@g{*aza5Id(c`~j>=fZ zN^Sbo?O|PUzi1Ifk0|-FwVefhbsKy6684s|$lSRqwRG1wjq>ubk4v9)P5$RGphr_Eh}%fl*vZAwjQ6k=)bp|mTAV%L-GBlM_%lST^kn^AFmJ}%UE&L ziUFfCvMP%8`#8g!t}w>{{j!mDA9)1aM9emFDtB86ydOE`8a#Z@a|<7}sd{L__Dqqs zjYs2#V)a!UV?GKEP2Re$*e)LF_44>mhxd0|SGo@S6nL9SMcfVlR->{_L$vH-f8VjD z=d%01U$N2Sj9A%k>zRBf@Ws2AOVV?;J-2_D<|47tiCR_Bbg7f*loW?1&4$TLO=AVQ zbghf~Qqqop;;tty-!b5^11`cI!n`o@fmpt_gpy+2 z@Lz%_MMRGgLR|*9tZ$IcN3ed~K#fc^Ke50fY-26uvSN7bq_6C!(9|>&OdYBzOh z%=o`=-gbAD(do6-uFFiPgs-G@vM{aMut(P~Bw=;5Vvx}?YVY`1qpfSOPxal$+@39Z z=<=9zKs;@!dRc=}@a{I7>BPsjj*k5*0jsz6#XS9%ngD7_weML}8ulfgjaq)>;v#c) zHhqcAhKaz2<1E^yt40sqa^}G&t;9QcSeB*U0Oam|)eo4c7 zOeO9FGK3x>9zs2KfB~Qv9$B3B0(nXB;t{T0|2+UyGPUx~47u@_)|B+r_uLTQ*{q@_ z@1^3)R`tN;c}CDavoCvRJ>MBz=j?3lZIe z$DdYx!srfHAJ{Vd?h$`@wDhYbjgQ@JCG;26X&z|heZAiG{<`&dQWU?Izdj>Zr*=|Q zrK{IB?PA-Jk`|3_FNtqUI_jBApsm~mRA^DrVelFlNU6*i9$PjV zplokZy;>ry`EJWT{I;!Z?s^&fbAx#srq}ssWiN>COA>ezzv99A*3LaRLp=t^4igi9 zQwF-_JGzYTQTs;NIAo4xtPOE`g|cDtfUsIM<(5AN>c)yj$>I~ zs&b*Sf~Uf{xxa``a-K{mDw4`RcwMffGT1X)rA*HIA#R z*f;4buM4DQxD%2QtrOYns~vT@Eu&)BuEh7L%l26sUon)o-{$UgxLc#~#-b19^`$#- z8Y({PRV}{aSA31S{*Cp7WTGwhL_@)px!$UP2TN!RV@A(j62XL}6_3B$t!cY`chqqg zu`NGJ%O!h+Ex)-k^&jSCKK!Odt&qvLl(@RHbKR21WfNu4@`XQW zP>RRlP9a{kA@=G8PevKZeeh^qzZ#)<9JGAa;#mgpSoMLXM=P0FZqfT~!1g34jtqUk z7kNAoyjJJ7F?95@K;rUyDhh{RVShfnIW7$AG6W$d(E{7=)YVv`RRYU9TrR69#huVC?{Df0TS8$m)Q?L#1S~ zz*MFRwvfPl;tHUMSusF?5DE`HA)8OM7oshT)5I$^_N`#om2m$OSg#ux<~woT>4Cg+ zx|Q~`ldl4p!Wh3zDQR~Xb{UxuU0^9_XNqOs!`3_UUq12wE}!UMyeV|yH!r#7y8AUk z9j}HGrpF)B!6>%(Ops4S%b zv`d$23g8=*$;RK_pg_G>GHy;{fonDe@b&Gfn}?>3-pmzlP<(m0DV@6G4(&y~ z$e_GX;k5ALTSJF$=bbbhY}gybO2be#V`X^a_k7}irH6hNU4kpTpGB9vG?pwAq4Q#x z+zE;kjQ^4yK2EiR+Wr$0W7*CM*Xwwk}09o(y!u5u+)-@>?mjRp(}5YQcHZC-9;`2 zmz6Y(k9cfoo651XUcNi3W;|tDYBcgC)N}y<*$;|K>@&L*E_W zS_2;VL43^sN-ZtN-0Ks!Gi5q6&NC*p?U=nttyN2IeoWsnMdMD#0gzFY-SbGcW@dX@ z1@~#?i>Ey~6+c=DTrTwYs=&T9;b9$cspi7#alUEsiIuvy^3+a_I5DVooo3Y8rkLE! zmBeB)YH=E56b+)l-w7X2fW>M+kCw|TL9mjE$Mv6BJZuK4iwL` zhmt(MGQtITex44>m51zwR6k9;Tv^}C4NVH$xfDyn>G8o5xQdH6 zRVafL$UIZy-<nLz{;dZIfkj*tzAfUysYZ5ub&+1za&j8=_L`+S1)Fbc&YP7YDI=^$v~)v`eIw z-EQ7v+W1b_^pdWn=iO}Mgij?k%A4+VN@r!nOWGw)cJhr)I9^=SP`>`N!itg z;l-sJngY}EKJT44)<$R5Ha1bYef2?iob7V4u>-zJE4TzQO`mB#XfDqh`f+6J(dQNx zi{+a5f;DgbUUsuNI`0Zt)SasF`6yLg?BWX7+Y)IrI=Kos*|wGMeY}iK7tlBKOX)p| z>NMDT&1S*yKugBf1S;v12T!QpeI%~lXEz?McIf!4)oP!M_uxZH7P~XW8Ewy9T`n&+ zX6X@g4$rZVeoHRrw?Ub6){dg;W2XE;He$xr#szm6n&mn9^#nx}23_rT(G?o;_=rt$ zU{|z9q|>T3EQ?u~JlJsqhzb-pEa1>oZ-XCGAhH zx!sp!_$l|H_nUYHs^gg5llHP&=~ora^4jY5pK_38y1(fD$ha!?QQ;8wIO|;71S6!Kc>K zd%cbdPTDfnuh+wuQ%NvLov!bOKhD_2jIjc3;g>XfLZvVL8d2gcVkO?v0!nNLC(66E zK=`^Er0HP}VfII7AHrT}qZj*QB|rS>0)Y=%Yjr+-RbDHQCO^S1S?2xi);{}@Q_-s)u?6|3VCEq>biD`4jg@uYt1vF*gU;mwyCP&R48kO_qihxt5+>%zpvYAvP@MVVchPqJM)D_ zO5H{pxCE@D+03JutSXahvIn@5g=Ll{-HYDy?B4oJ<*bG7To+quYztduS-o zAug{aad|uA<`j2rc9)ZqZwP~!U<}%^u$tEhN-S9vkQqqUBM1ljZq{eBKC~A~|7vah zM9}hRWW4Kw0~>$nhdC%N(^4$V6Es{`yAGO=oPk=bw+xvRYKVoC;%+i($*ax5`rzt5 z@T#B8%^EPfD8^$qIee#)>{3ch z$qx$IDoR_nVya3eo>m%{W&dH!_I;?~6aEkT^QkVd8mu`XFVlR#3Nxy6Mt0<~$@Z;_ zL%903UyTVH9nTGnnJQkr?bd_TI4tk@yMa6D9pAqS$kb_!KI;v7+qYSfHYp&1|8@#i zKfb)+>X@MTF)BXilI;7_Ib}+6hgO*vT{Uq2QFP=x)zQ8FZ_HmT6uDzos4II#SYt#% z;r*OF>A@+m&46wAB^@*{Sm_GH_wPx3 zj|093^$b}viG3fwjP0NOW&fIqt#I~8BBY!+5#lM#C?n+zE4v5`|Jq+R>+@L+;ITT9 zmORt%186@jbXAPbl=k1t7;JfN*t0G=z1y3+I^{>I%Ih94pg+3>s23SmLVL{a66;S2 zyiM^0)ePCbWP-mFKKTGkrWchP&~*V;ItiB3KUm=JgwJz;wf7+*&XEKE^e=9(I0wj0 zG9w8$<_I_J9#zV1AWQ%#N?>2VI6#13B9z&J)?`bk!swE&rFL)29HI$Zph& zX{!)k?);e-h;>At8YKqAoknJ^8iuy!vkta$cc_K1ihge%x(JFl6 z&LB@jPx3@Wo}zM$G|as`pDTo6%PeqZ9oZf^M^DKEEOGQaTQ$N2vC$a%;#cS*z)!^3isE{k(bi|%LRwJC(8-3g^t7)BGo|@sX)|xAy`>} z@!>WJyJS@70|Dh-4+X=P z>}x6PZ=Pe%wg6ZmX%w&s3I=fn;N|9@d4X5~(`d!-ac2=;FlfA30u+^>>ZPDycZiZS zLxMu2V2HxXNFlBv*j0zvl}KV283kJdEDdmScka;@Z0RdVp|<%PJrxJAVox%Y?+pZt zz%m_pDuKizGGh(IdSHpV{||?7JWawek%E%|ibe2zc!4dcqy7#r4FF3=3U!qVUXBA^ z;PoiT^^1gEh~&m#h_y`)ZS90Rhwy?&piGgV5Gfd5%p|{67w8&hVw*F#z|0!6bw-+%2DSQaP9~6%o`+jkx{S#z!FTK&$iTFvN;6L>+^@5RS)4I41H`1VCXwHJ>pUwv2H7 zJ7aJKz*0`2fJIPn3&KnEpLu~;cXH4Yr#Nqfmr*ocAPPe~>PYT`pp1~95Gfd@co{(B1)@yyqec+{2+DU76e0yfl(nl- zqliw#t}qh2$SAk~U~Mj+PZR-LPSpOLC}IL&;nY#HD_w|1guNEOvMXd146(+1QPk5foWE89buzcsW=7ufr z#ZZXR=IAMVfaUp`0v5qjy@*A@Bo>kJ6vPsHhstp?4yGS@D8iT(B6u*J_L=mv1{S1Yfe~!F}x%Q zmHZC%ZCV(@OD7sH5M|T@tquz=96|X?fA2U{}qQg~l9M^7CFSf&1`eG;6702cX?^hq*f@c#e}dDw{n literal 0 HcmV?d00001 From 53910f07370fac9ef7c341c16aef505fc2f691d6 Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Wed, 19 Sep 2018 22:05:03 -0400 Subject: [PATCH 075/147] Added missing declarations for nest_log_sink dissector. Signed-off-by: Darryl Sokoloski --- src/include/ndpi_protocols.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/include/ndpi_protocols.h b/src/include/ndpi_protocols.h index e1f3af4fb7d..48e005ce193 100644 --- a/src/include/ndpi_protocols.h +++ b/src/include/ndpi_protocols.h @@ -204,6 +204,7 @@ void ndpi_search_fix(struct ndpi_detection_module_struct *ndpi_struct, struct nd void ndpi_search_csgo(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); void ndpi_search_ajp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); +void ndpi_search_nest_log_sink(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); /* --- INIT FUNCTIONS --- */ void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); @@ -359,4 +360,5 @@ void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_fbzero_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_memcached_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); +void init_nest_log_sink_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); #endif /* __NDPI_PROTOCOLS_H__ */ From 46ebf541e147924209174b655fad6a72e172fd6c Mon Sep 17 00:00:00 2001 From: Darryl Sokoloski Date: Wed, 19 Sep 2018 22:05:39 -0400 Subject: [PATCH 076/147] Removed unused varaibles. Signed-off-by: Darryl Sokoloski --- src/lib/protocols/nest_log_sink.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/protocols/nest_log_sink.c b/src/lib/protocols/nest_log_sink.c index 47cc65dc8a6..62e8fa75f24 100644 --- a/src/lib/protocols/nest_log_sink.c +++ b/src/lib/protocols/nest_log_sink.c @@ -38,8 +38,6 @@ void ndpi_search_nest_log_sink( struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; - const u_int8_t *offset = packet->payload; - u_int8_t *matches; NDPI_LOG_DBG(ndpi_struct, "search nest_log_sink\n"); From f639c237a19cb79c39af1fc552e336d504af0bad Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 24 Sep 2018 09:57:51 +0200 Subject: [PATCH 077/147] Added check for not going beyond the string lenght --- src/lib/ndpi_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 84a1de40068..2c546d47d07 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5703,7 +5703,7 @@ char* ndpi_strnstr(const char *s, const char *find, size_t slen) { size_t len; if((c = *find++) != '\0') { - len = strlen(find); + len = strnlen(find, slen); do { do { if(slen-- < 1 || (sc = *s++) == '\0') @@ -5711,10 +5711,11 @@ char* ndpi_strnstr(const char *s, const char *find, size_t slen) { } while (sc != c); if(len > slen) return (NULL); - } while (strncmp(s, find, len) != 0); + } while(strncmp(s, find, len) != 0); s--; } - return ((char *)s); + + return((char *)s); } /* ****************************************************** */ From a1f7ab776e7c130d234bee0d90459ef7b5301c19 Mon Sep 17 00:00:00 2001 From: Xavier RENE-CORAIL Date: Thu, 27 Sep 2018 13:00:00 +0200 Subject: [PATCH 078/147] Add LGTM.com code quality badges --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6b5a20a11fb..3a62c217c85 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # nDPI [![Build Status](https://travis-ci.org/ntop/nDPI.png?branch=dev)](https://travis-ci.org/ntop/nDPI) +[![Code Quality: Cpp](https://img.shields.io/lgtm/grade/cpp/g/ntop/nDPI.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/ntop/nDPI/context:cpp) +[![Total Alerts](https://img.shields.io/lgtm/alerts/g/ntop/nDPI.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/ntop/nDPI/alerts) ## What is nDPI ? From 1f24adc9cd90f05a463a71e7c2d14c1863ccba00 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sat, 29 Sep 2018 08:28:26 +0200 Subject: [PATCH 079/147] Renamed source files to avoid clashes --- src/lib/ndpi_main.c | 2 +- src/lib/third_party/include/{hash.h => ht_hash.h} | 0 src/lib/third_party/src/{hash.c => ht_hash.c} | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/lib/third_party/include/{hash.h => ht_hash.h} (100%) rename src/lib/third_party/src/{hash.c => ht_hash.c} (99%) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 2c546d47d07..a199ebcd0ce 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -43,7 +43,7 @@ #include "ndpi_content_match.c.inc" #include "third_party/include/ndpi_patricia.h" -#include "third_party/include/hash.h" +#include "third_party/include/ht_hash.h" #define NDPI_CONST_GENERIC_PROTOCOL_NAME "GenericProtocol" diff --git a/src/lib/third_party/include/hash.h b/src/lib/third_party/include/ht_hash.h similarity index 100% rename from src/lib/third_party/include/hash.h rename to src/lib/third_party/include/ht_hash.h diff --git a/src/lib/third_party/src/hash.c b/src/lib/third_party/src/ht_hash.c similarity index 99% rename from src/lib/third_party/src/hash.c rename to src/lib/third_party/src/ht_hash.c index 61ba9fbf618..4eaac9bcb4e 100644 --- a/src/lib/third_party/src/hash.c +++ b/src/lib/third_party/src/ht_hash.c @@ -7,7 +7,7 @@ #include #include -#include "hash.h" +#include "ht_hash.h" /* #define HASH_DEBUG 1 */ From 90ca91caa85dcd4d7e7223f80b532db42b1f2c2b Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sat, 29 Sep 2018 08:38:00 +0200 Subject: [PATCH 080/147] Renamed files to avoid name clashes during compilation with other libs --- src/lib/ndpi_main.c | 2 -- src/lib/protocols/{mdns.c => mdns_proto.c} | 0 src/lib/protocols/{snmp.c => snmp_proto.c} | 0 src/lib/third_party/include/ndpi_patricia.h | 2 +- 4 files changed, 1 insertion(+), 3 deletions(-) rename src/lib/protocols/{mdns.c => mdns_proto.c} (100%) rename src/lib/protocols/{snmp.c => snmp_proto.c} (100%) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index a199ebcd0ce..3f5db625df8 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -741,7 +741,6 @@ void ndpi_init_protocol_match(struct ndpi_detection_module_struct *ndpi_mod, u_int16_t no_master[2] = { NDPI_PROTOCOL_NO_MASTER_PROTO, NDPI_PROTOCOL_NO_MASTER_PROTO }; ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; static u_int16_t generic_id = NDPI_LAST_IMPLEMENTED_PROTOCOL; - u_int16_t p_id; if(ndpi_mod->proto_defaults[match->protocol_id].protoName == NULL) { if(match->protocol_id == NDPI_PROTOCOL_GENERIC) @@ -989,7 +988,6 @@ static void ndpi_validate_protocol_initialization(struct ndpi_detection_module_s Do NOT add web services (NDPI_SERVICE_xxx) here. */ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndpi_mod) { - int i; ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; u_int16_t no_master[2] = { NDPI_PROTOCOL_NO_MASTER_PROTO, NDPI_PROTOCOL_NO_MASTER_PROTO }, custom_master[2]; diff --git a/src/lib/protocols/mdns.c b/src/lib/protocols/mdns_proto.c similarity index 100% rename from src/lib/protocols/mdns.c rename to src/lib/protocols/mdns_proto.c diff --git a/src/lib/protocols/snmp.c b/src/lib/protocols/snmp_proto.c similarity index 100% rename from src/lib/protocols/snmp.c rename to src/lib/protocols/snmp_proto.c diff --git a/src/lib/third_party/include/ndpi_patricia.h b/src/lib/third_party/include/ndpi_patricia.h index bb180687719..c61513f920e 100644 --- a/src/lib/third_party/include/ndpi_patricia.h +++ b/src/lib/third_party/include/ndpi_patricia.h @@ -102,7 +102,7 @@ typedef struct the_prefix_t { /* pointer to usr data (ex. route flap info) */ union patricia_node_value_t { void *user_data; - u_int32_t user_value; + unsigned int user_value; }; typedef struct _patricia_node_t { From 1d56c9aa1b4d8279a56baa3238f67e61ea901589 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 2 Oct 2018 23:54:01 +0800 Subject: [PATCH 081/147] fix remake --- example/Makefile.in | 2 +- src/lib/Makefile.in | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/example/Makefile.in b/example/Makefile.in index 7f465bddeae..d3d4aed2036 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -16,5 +16,5 @@ install: cp ndpiReader /usr/local/bin clean: - /bin/rm *.o ndpiReader + /bin/rm -f *.o ndpiReader diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index ca290017176..af7206ad06d 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -38,7 +38,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(NDPI_LIB_SHARED): $(OBJECTS) $(CC) -shared -fPIC -o $@ $(OBJECTS) - ln -Fs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) + ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ @@ -49,6 +49,6 @@ clean: install: $(NDPI_LIBS) mkdir -p $(DESTDIR)$(libdir) cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ - ln -Fs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) + ln -Ffs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) mkdir -p $(DESTDIR)$(includedir) cp ../include/*.h $(DESTDIR)$(includedir) From 6ff6c2e5afc13bfaa2422910817a86cc167e2c5b Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 10 Oct 2018 10:43:51 +0200 Subject: [PATCH 082/147] Fix category field not accounted in ndpi_get_proto_category Fixes #627 --- src/lib/ndpi_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 760d29a26c6..dc8443ee8d3 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5599,8 +5599,10 @@ const char* ndpi_category_get_name(struct ndpi_detection_module_struct *ndpi_mod ndpi_protocol_category_t ndpi_get_proto_category(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol proto) { + if(proto.category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) + return proto.category; /* simple rule: sub protocol first, master after */ - if((proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) || + else if((proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) || (ndpi_mod->proto_defaults[proto.app_protocol].protoCategory != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) return ndpi_mod->proto_defaults[proto.app_protocol].protoCategory; else From cdf197ccfeedad29ceeca9b38a188dcdef6b7c06 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 10 Oct 2018 13:29:49 +0200 Subject: [PATCH 083/147] Add function to search host in custom categories --- src/include/ndpi_api.h | 2 ++ src/lib/ndpi_main.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 0409cb8c454..d1e9148b2d4 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -738,6 +738,8 @@ extern "C" { void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, ndpi_protocol *ret); + int ndpi_get_custom_category_match(struct ndpi_detection_module_struct *ndpi_struct, + char *name_or_ip, unsigned long *id); int ndpi_set_detection_preferences(struct ndpi_detection_module_struct *ndpi_mod, ndpi_detection_preference pref, int value); diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index dc8443ee8d3..9b2f80f864a 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2366,6 +2366,42 @@ static int ndpi_match_custom_category(struct ndpi_detection_module_struct *ndpi_ /* *********************************************** */ +int ndpi_get_custom_category_match(struct ndpi_detection_module_struct *ndpi_struct, + char *name_or_ip, unsigned long *id) { + char ipbuf[64]; + struct in_addr pin; + + if(!ndpi_struct->custom_categories.categories_loaded) + return -1; + + strncpy(ipbuf, name_or_ip, sizeof(ipbuf)); + char *ptr = strrchr(ipbuf, '/'); + + if(ptr) + ptr[0] = '\0'; + + if(inet_pton(AF_INET, ipbuf, &pin) == 1) { + /* Search IP */ + prefix_t prefix; + patricia_node_t *node; + + /* Make sure all in network byte order otherwise compares wont work */ + fill_prefix_v4(&prefix, &pin, 32, ((patricia_tree_t*)ndpi_struct->protocols_ptree)->maxbits); + node = ndpi_patricia_search_best(ndpi_struct->custom_categories.ipAddresses, &prefix); + + if(node) { + *id = node->value.user_value; + return 0; + } + + return(-1); + } else + /* Search Host */ + return ndpi_match_custom_category(ndpi_struct, name_or_ip, id); +} + +/* *********************************************** */ + static void free_ptree_data(void *data) { ; } /* ****************************************************** */ From 67a1a07ac1eee40e48f262d17447711cbdf6f148 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 10 Oct 2018 13:33:02 +0200 Subject: [PATCH 084/147] Fix custom categories match by IP not working --- src/lib/ndpi_main.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 9b2f80f864a..b2abe00686d 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4204,18 +4204,15 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) #else /* Free */ ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa); - ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_str->custom_categories.ipAddresses, free_ptree_data); /* Finalize */ ac_automata_finalize((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa); /* Swap */ ndpi_str->custom_categories.hostnames.ac_automa = ndpi_str->custom_categories.hostnames_shadow.ac_automa; - ndpi_str->custom_categories.ipAddresses = ndpi_str->custom_categories.ipAddresses_shadow; /* Realloc */ ndpi_str->custom_categories.hostnames_shadow.ac_automa = ac_automata_init(ac_match_handler); - ndpi_str->custom_categories.ipAddresses_shadow = ndpi_New_Patricia(32 /* IPv4 */); #endif } From 40294f3aed28456332bef71e8cfaea36b2e82a6c Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 10 Oct 2018 15:56:46 +0200 Subject: [PATCH 085/147] Custom categories have now priority over protocol related categories --- src/lib/ndpi_main.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b2abe00686d..7b9205081d3 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4233,11 +4233,6 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, ndpi_protocol *ret) { - if(flow->category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) { - ret->category = flow->category; - return; - } - if(ndpi_struct->custom_categories.categories_loaded) { if(flow->packet.iph) { prefix_t prefix; @@ -5895,7 +5890,9 @@ static int ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_str packet->detected_protocol_stack[0] = matching_protocol_id; flow->detected_protocol_stack[0] = packet->detected_protocol_stack[0], - flow->detected_protocol_stack[1] = packet->detected_protocol_stack[1], + flow->detected_protocol_stack[1] = packet->detected_protocol_stack[1]; + + if(flow->category == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) flow->category = ret_match->protocol_category; return(packet->detected_protocol_stack[0]); From 4b4f4be3a5087eb6f60f1a171547804daccbb749 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Thu, 11 Oct 2018 12:27:13 +0200 Subject: [PATCH 086/147] Add -g flag --- src/lib/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index af7206ad06d..21659543090 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -14,7 +14,7 @@ prefix = /usr/local libdir = ${prefix}/lib includedir = ${prefix}/include/ndpi CC = @CC@ -CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -O2 # -g +CFLAGS += -fPIC -DPIC -I../include -Ithird_party/include -DNDPI_LIB_COMPILATION -O2 -g RANLIB = ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o From 6789d419935534e3b9eafeac8904a28b61e78973 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Thu, 11 Oct 2018 12:40:11 +0200 Subject: [PATCH 087/147] Fix category match not using client certificate --- src/lib/ndpi_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 7b9205081d3..e0e18fc6277 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4265,9 +4265,9 @@ void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struc } } - if(flow->protos.stun_ssl.ssl.server_certificate[0] != '\0') { + if(flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') { unsigned long id; - int rc = ndpi_match_custom_category(ndpi_struct, (char *)flow->protos.stun_ssl.ssl.server_certificate, &id); + int rc = ndpi_match_custom_category(ndpi_struct, (char *)flow->protos.stun_ssl.ssl.client_certificate, &id); if(rc == 0) { flow->category = ret->category = (ndpi_protocol_category_t)id; From a62f90073a01d953d64a49320ba54a2dfd8e987e Mon Sep 17 00:00:00 2001 From: kyrol Date: Thu, 11 Oct 2018 16:16:55 +0200 Subject: [PATCH 088/147] fix domain name checking for https://github.com/ntop/nDPI/issues/617 --- src/lib/ndpi_content_match.c.inc | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 57c53872c32..8814e08defb 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -541,7 +541,7 @@ static ndpi_network host_protocol_list[] = { { 0xC0AD4000 /* 192.173.64.0/18 */, 18, NDPI_PROTOCOL_NETFLIX }, { 0xC6266000 /* 198.38.96.0/19 */, 19, NDPI_PROTOCOL_NETFLIX }, { 0xC62D3000 /* 198.45.48.0/20 */, 20, NDPI_PROTOCOL_NETFLIX }, - { 0xD194D687 /* 209.148.214.135/21 */, 21, NDPI_PROTOCOL_NETFLIX }, + { 0xD194D687 /* 209.148.214.135/21 */, 21, NDPI_PROTOCOL_NETFLIX }, /* Cloudflare, Inc. @@ -7925,7 +7925,7 @@ static ndpi_network host_protocol_list[] = { Valve Corporation (Steam) origin AS32590 */ - + { 0x2D79B800 /* 45.121.184.0/22 */, 22, NDPI_PROTOCOL_STEAM }, { 0x670A7C00 /* 103.10.124.0/23 */, 23, NDPI_PROTOCOL_STEAM }, { 0x671C3600 /* 103.28.54.0/23 */, 23, NDPI_PROTOCOL_STEAM }, @@ -7943,14 +7943,14 @@ static ndpi_network host_protocol_list[] = { { 0xD040C800 /* 208.64.200.0/24 */, 24, NDPI_PROTOCOL_STEAM }, { 0xD040C900 /* 208.64.201.0/22 */, 22, NDPI_PROTOCOL_STEAM }, { 0xD04EA400 /* 208.78.164.0/22 */, 22, NDPI_PROTOCOL_STEAM }, - + /* VidTO - */ + */ { 0x51111030 /* 81.17.16.48/32 */, 32, NDPI_PROTOCOL_VIDTO }, { 0x5fb7329d /* 95.183.50.157/32 */, 32, NDPI_PROTOCOL_VIDTO }, { 0x577824f2 /* 87.120.36.242/32 */, 32, NDPI_PROTOCOL_VIDTO }, - + { 0x0, 0, 0 } }; @@ -8009,7 +8009,7 @@ static ndpi_network host_protocol_list[] = { /* ****************************************************** */ -/* +/* Each part of a domain name can be no longer than 63 characters. There are no single-digit top-level domains and none contain digits. It doesn't look like ICANN will approve such domains either. @@ -8095,7 +8095,6 @@ ndpi_protocol_match host_match[] = { { "ntop.org", NULL, "ntop\\.org$", "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, - { "docs.googleusercontent.com", NULL, "docs\\.googleusercontent" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, { "docs.googleusercontent.com", NULL, "docs.googleusercontent" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, { "docs.google.com", NULL, "docs.google" TLD, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE }, @@ -8103,7 +8102,6 @@ ndpi_protocol_match host_match[] = { { "drive.google.com", NULL, "drive.google" TLD, "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { "android.clients.google.com", NULL, "android\\.clients\\.google" TLD, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, - { "ggpht.com", NULL, "ggpht" TLD, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE }, /* See https://better.fyi/trackers/ @@ -8136,7 +8134,7 @@ ndpi_protocol_match host_match[] = { { "google-analytics.", NULL, "google-analytics\\.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_TRACKER_ADS }, { "gtv1.com", NULL, "gtv1" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE }, - /* Google Hangout */ + /* Google Hangout */ { "images2-hangout-opensocial.googleusercontent.com", NULL, "images2-hangout-opensocial\\.googleusercontent" TLD, "GoogleHangout", NDPI_PROTOCOL_HANGOUT, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, /* Google Services */ @@ -8162,6 +8160,7 @@ ndpi_protocol_match host_match[] = { { "google.", NULL, "google" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".google.", NULL, NULL, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { ".gstatic.com", NULL, "\\.gstatic" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, + { "ggpht.com", NULL, "ggpht" TLD, "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, { "mail.outlook.com", NULL, "mail\\.outlook" TLD, "Hotmail", NDPI_PROTOCOL_HOTMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE }, @@ -8217,7 +8216,6 @@ ndpi_protocol_match host_match[] = { { ".googlevideo.com", NULL, "\\.googlevideo" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { ".ytimg.com", NULL, "\\.ytimg" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "youtube-nocookie.", NULL, "youtube-nocookie" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, - { "ggpht.com", NULL, "ggpht" TLD, "YouTube", NDPI_PROTOCOL_YOUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { ".vevo.com", NULL, "\\.vevo" TLD, "Vevo", NDPI_PROTOCOL_VEVO, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, @@ -8225,7 +8223,7 @@ ndpi_protocol_match host_match[] = { { "audio-fa.scdn.co", NULL, "audio-fa\\.scdn" TLD, "Spotify", NDPI_PROTOCOL_SPOTIFY, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "edge-mqtt.facebook.com", NULL, "edge-mqtt\\.facebook" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, - { "messenger.com", NULL, "messenger\\.com" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, + { "messenger.com", NULL, "messenger\\.com" TLD, "Messenger", NDPI_PROTOCOL_MESSENGER, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_FUN }, { ".pandora.com", NULL, "\\.pandora" TLD, "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, @@ -8332,7 +8330,7 @@ ndpi_protocol_match host_match[] = { { "muscdn.com", NULL, "muscdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { "livelycdn.com", NULL, "livelycdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { "direct.ly", NULL, "direct\\.ly$", "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - + { "github.com", NULL, "github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, { ".github.com", NULL, "\\.github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, { "github.io", NULL, NULL, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, @@ -8395,7 +8393,7 @@ ndpi_protocol_match host_match[] = { than by protocol id. They are bound to a generic protocol (NDPI_PROTOCOL_GENERIC) and placed onto the right category */ { "quickplay.com", NULL, "quickplay" TLD, "QuickPlay", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, - + { ".iqiyi.com", NULL, "\\.iqiyi" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { ".qiyi.com", NULL, "\\.qiyi" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, { ".71.am", NULL, "\\.71" TLD, "iQIYI", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN }, From 3e5db956a8cc97a920741587ad156915d3a59100 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 11 Oct 2018 17:47:00 +0200 Subject: [PATCH 089/147] Added further ubuntu servers --- src/lib/ndpi_content_match.c.inc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 57c53872c32..70e9aca550c 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -812,8 +812,8 @@ static ndpi_network host_protocol_list[] = { origin AS41231 */ - { 0x5BBD5800 /* 91.189.88.0/21 */, 21, NDPI_PROTOCOL_UBUNTUONE }, - { 0xA2D52000 /* 162.213.32.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, + { 0x5BBD5800 /* 91.189.88.0/21 */, 21, NDPI_PROTOCOL_UBUNTUONE }, + { 0xA2D52000 /* 162.213.32.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, { 0xB97DBC00 /* 185.125.188.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, /* @@ -8418,6 +8418,9 @@ ndpi_protocol_match host_match[] = { { "showmax.com", NULL, "showmax" TLD, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, { "showmax.akamaized.net", NULL, "showmax\\.akamaized" TLD, "Showmax", NDPI_PROTOCOL_GENERIC, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN }, + { "snapcraft.io", NULL, "snapcraft\\.io" TLD, "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "ubuntu.com", NULL, "ubuntu\\.com" TLD, "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { NULL, NULL, NULL, 0 } }; From b7b12d5b4eda3433cfbe0ae8c9025a031e79f96e Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Fri, 12 Oct 2018 17:22:13 +0200 Subject: [PATCH 090/147] Make the examples Makefile respect DESTDIR and PREFIX env vars. --- example/Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example/Makefile.in b/example/Makefile.in index d3d4aed2036..8c18f94dc88 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -3,6 +3,7 @@ CFLAGS=-g -I../src/include @CFLAGS@ LIBNDPI=../src/lib/libndpi.a LDFLAGS=$(LIBNDPI) -lpcap -lpthread @LDFLAGS@ OBJS=ndpiReader.o ndpi_util.o +PREFIX?=/usr/local all: ndpiReader @@ -13,7 +14,7 @@ ndpiReader: $(OBJS) $(LIBNDPI) $(CC) $(CFLAGS) -c $< -o $@ install: - cp ndpiReader /usr/local/bin + cp ndpiReader $(DESTDIR)$(PREFIX)/bin clean: /bin/rm -f *.o ndpiReader From b467005fac5081ebc8f276a2359b48b953c62eaa Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Tue, 16 Oct 2018 10:14:09 +0200 Subject: [PATCH 091/147] Fix typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a62c217c85..2b062c1a8be 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ The entire procedure of adding new protocols in detail: ### How to use nDPI to Block Selected Traffic -You can use nDPI to selectively block selected Internet traffic by embedding it onto an application (remember that nDPI us just a library). Both [ntopng](https://github.com/ntop/ntopng) and [nProbe cento](http://www.ntop.org/products/netflow/nprobe-cento/) can do this. +You can use nDPI to selectively block selected Internet traffic by embedding it onto an application (remember that nDPI is just a library). Both [ntopng](https://github.com/ntop/ntopng) and [nProbe cento](http://www.ntop.org/products/netflow/nprobe-cento/) can do this. ### DISCLAIMER While we do our best to detect network protocols, we cannot guarantee that our software is error free and 100% accurate in protocol detection. Please make sure that you respect the privacy of users and you have proper authorization to listen, capture and inspect network traffic. From 01444f79e1a780259090a68fbdb73eacfacd5d5b Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 29 Oct 2018 14:47:53 +0100 Subject: [PATCH 092/147] Added NDPI_MIN_NUM_STUN_DETECTION constant --- src/include/ndpi_define.h.in | 1 + src/lib/ndpi_main.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/include/ndpi_define.h.in b/src/include/ndpi_define.h.in index 37e33a0139a..a73e03bc51c 100644 --- a/src/include/ndpi_define.h.in +++ b/src/include/ndpi_define.h.in @@ -332,6 +332,7 @@ #endif #define NDPI_MAX_DNS_REQUESTS 16 +#define NDPI_MIN_NUM_STUN_DETECTION 8 #define NDPI_MAJOR @NDPI_MAJOR@ #define NDPI_MINOR @NDPI_MINOR@ diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index e0e18fc6277..519d6a1ad8f 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3985,7 +3985,7 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st && (flow->guessed_protocol_id == NDPI_PROTOCOL_STUN)) { check_stun_export: if(flow->protos.stun_ssl.stun.num_processed_pkts > 0) { - if(flow->protos.stun_ssl.stun.num_processed_pkts >= 8) { + if(flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) { u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); From c2169b3dca4e9fb1fc77e23873d9c86a048f540c Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Mon, 29 Oct 2018 17:06:58 +0100 Subject: [PATCH 093/147] Add command line options to correctly populate the shared object SONAME property. --- src/lib/Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 21659543090..6cbe4437c64 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -19,6 +19,7 @@ RANLIB = ranlib OBJECTS = $(patsubst protocols/%.c, protocols/%.o, $(wildcard protocols/*.c)) $(patsubst third_party/src/%.c, third_party/src/%.o, $(wildcard third_party/src/*.c)) ndpi_main.o HEADERS = $(wildcard ../include/*.h) +NDPI_VERSION_MAJOR = @NDPI_MAJOR@ NDPI_LIB_STATIC = libndpi.a NDPI_LIB_SHARED_BASE = libndpi.so NDPI_LIB_SHARED = $(NDPI_LIB_SHARED_BASE).@NDPI_VERSION_SHORT@ @@ -37,7 +38,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(RANLIB) $@ $(NDPI_LIB_SHARED): $(OBJECTS) - $(CC) -shared -fPIC -o $@ $(OBJECTS) + $(CC) -shared -fPIC -Wl,-soname,$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) -o $@ $(OBJECTS) ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile From 023830f5aba7921083d47f250655fac9f65498df Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Mon, 29 Oct 2018 21:24:08 +0100 Subject: [PATCH 094/147] Try to fix build on Mac. --- src/lib/Makefile.in | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 6cbe4437c64..3d53f15c4a3 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -27,6 +27,9 @@ NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED) ifeq ($(OS),Darwin) CC=clang +SONAME_FLAG= +else +SONAME_FLAG=-Wl,-soname,$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) endif all: $(NDPI_LIBS) @@ -38,7 +41,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(RANLIB) $@ $(NDPI_LIB_SHARED): $(OBJECTS) - $(CC) -shared -fPIC -Wl,-soname,$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) -o $@ $(OBJECTS) + $(CC) -shared -fPIC $(SONAME_FLAG) -o $@ $(OBJECTS) ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile From 00827903efe6ab35197e9b17985150e5d28fe8f8 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Mon, 29 Oct 2018 23:15:28 +0100 Subject: [PATCH 095/147] The OS variable was not being populated by default. --- src/lib/Makefile.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 3d53f15c4a3..1f07773e9f3 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -25,6 +25,10 @@ NDPI_LIB_SHARED_BASE = libndpi.so NDPI_LIB_SHARED = $(NDPI_LIB_SHARED_BASE).@NDPI_VERSION_SHORT@ NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED) +ifneq ($(OS),Windows_NT) +OS := $(shell uname) +endif + ifeq ($(OS),Darwin) CC=clang SONAME_FLAG= From 875b1e0dd514d75a373223b5c7d4afe9284f63d0 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 1 Nov 2018 09:36:11 +0100 Subject: [PATCH 096/147] Better clang check --- configure.seed | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/configure.seed b/configure.seed index 548cffc83fa..f3b26790406 100644 --- a/configure.seed +++ b/configure.seed @@ -52,10 +52,14 @@ else AC_CHECK_LIB([numa], [numa_available], [LIBNUMA="-lnuma"]) fi -if test -z `which clang`; then -CC=gcc -else -CC=clang +MACHINE=`uname -m` +SYSTEM=`uname -s` +if test $SYSTEM = "Darwin"; then + CC=clang +fi + +if test $ax_cv_PTHREAD_CLANG = "yes"; then + CC=clang fi HS_LIB= From f7e7ef2f30620e604b3ecaeec1c166ad36da59a9 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sat, 3 Nov 2018 10:05:13 +0100 Subject: [PATCH 097/147] Improved SSL decoding --- example/ndpi_util.h | 2 +- src/include/ndpi_typedefs.h | 2 +- src/lib/protocols/ssl.c | 15 +++++++++++++-- tests/result/bitcoin.pcap.out | 12 ++++++------ tests/result/ethereum.pcap.out | 4 ++-- tests/result/monero.pcap.out | 4 ++-- tests/result/nintendo.pcap.out | 4 ++-- tests/result/pps.pcap.out | 4 ++-- tests/result/zcash.pcap.out | 2 +- 9 files changed, 30 insertions(+), 19 deletions(-) diff --git a/example/ndpi_util.h b/example/ndpi_util.h index 0ea174aa514..d1d461490e4 100644 --- a/example/ndpi_util.h +++ b/example/ndpi_util.h @@ -79,7 +79,7 @@ typedef struct ndpi_flow_info { char bittorent_hash[41]; struct { - char client_info[48], server_info[48]; + char client_info[64], server_info[64]; } ssh_ssl; void *src_id, *dst_id; diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index f0b47b358e6..51681e60e77 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -1080,7 +1080,7 @@ struct ndpi_flow_struct { struct { struct { - char client_certificate[48], server_certificate[48]; + char client_certificate[64], server_certificate[64]; } ssl; struct { diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index 59aedcb457e..979d234b9f2 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -284,9 +284,18 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, #endif if(extension_id == 0) { - u_int begin = 0,len; +#if 1 + u_int16_t len; + + len = (packet->payload[offset+extension_offset+3] << 8) + packet->payload[offset+extension_offset+4]; + len = (u_int)ndpi_min(len, buffer_len-1); + strncpy(buffer, (char*)&packet->payload[offset+extension_offset+5], len); + buffer[len] = '\0'; +#else + /* old code */ + u_int begin = 0; char *server_name = (char*)&packet->payload[offset+extension_offset]; - + while(begin < extension_len) { if((!ndpi_isprint(server_name[begin])) || ndpi_ispunct(server_name[begin]) @@ -299,6 +308,8 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, len = (u_int)ndpi_min(extension_len-begin, buffer_len-1); strncpy(buffer, &server_name[begin], len); buffer[len] = '\0'; +#endif + stripCertificateTrailer(buffer, buffer_len); if(!ndpi_struct->disable_metadata_export) { diff --git a/tests/result/bitcoin.pcap.out b/tests/result/bitcoin.pcap.out index d10fa583d2f..3b0e89dd0cb 100644 --- a/tests/result/bitcoin.pcap.out +++ b/tests/result/bitcoin.pcap.out @@ -1,8 +1,8 @@ Mining 637 581074 6 - 1 TCP 192.168.1.142:55328 <-> 69.118.54.122:8333 [proto: 42/Mining][cat: Unspecified/99][2 pkts/281 bytes <-> 137 pkts/191029 bytes] - 2 TCP 192.168.1.142:55348 <-> 74.89.181.229:8333 [proto: 42/Mining][cat: Unspecified/99][55 pkts/28663 bytes <-> 117 pkts/134830 bytes] - 3 TCP 192.168.1.142:55383 <-> 66.68.83.22:8333 [proto: 42/Mining][cat: Unspecified/99][65 pkts/45271 bytes <-> 96 pkts/70339 bytes] - 4 TCP 192.168.1.142:55400 <-> 195.218.16.178:8333 [proto: 42/Mining][cat: Unspecified/99][47 pkts/26824 bytes <-> 72 pkts/55927 bytes] - 5 TCP 192.168.1.142:55317 <-> 188.165.213.169:8333 [proto: 42/Mining][cat: Unspecified/99][16 pkts/21673 bytes <-> 3 pkts/1771 bytes] - 6 TCP 192.168.1.142:55487 <-> 184.58.165.119:8333 [proto: 42/Mining][cat: Unspecified/99][24 pkts/3082 bytes <-> 3 pkts/1384 bytes] + 1 TCP 192.168.1.142:55328 <-> 69.118.54.122:8333 [proto: 42/Mining][cat: Mining/99][2 pkts/281 bytes <-> 137 pkts/191029 bytes] + 2 TCP 192.168.1.142:55348 <-> 74.89.181.229:8333 [proto: 42/Mining][cat: Mining/99][55 pkts/28663 bytes <-> 117 pkts/134830 bytes] + 3 TCP 192.168.1.142:55383 <-> 66.68.83.22:8333 [proto: 42/Mining][cat: Mining/99][65 pkts/45271 bytes <-> 96 pkts/70339 bytes] + 4 TCP 192.168.1.142:55400 <-> 195.218.16.178:8333 [proto: 42/Mining][cat: Mining/99][47 pkts/26824 bytes <-> 72 pkts/55927 bytes] + 5 TCP 192.168.1.142:55317 <-> 188.165.213.169:8333 [proto: 42/Mining][cat: Mining/99][16 pkts/21673 bytes <-> 3 pkts/1771 bytes] + 6 TCP 192.168.1.142:55487 <-> 184.58.165.119:8333 [proto: 42/Mining][cat: Mining/99][24 pkts/3082 bytes <-> 3 pkts/1384 bytes] diff --git a/tests/result/ethereum.pcap.out b/tests/result/ethereum.pcap.out index a4c607d2d01..2afe0fad1f5 100644 --- a/tests/result/ethereum.pcap.out +++ b/tests/result/ethereum.pcap.out @@ -1,4 +1,4 @@ Mining 819 134165 2 - 1 TCP 192.168.2.92:57726 <-> 94.23.36.128:4444 [proto: 42/Mining][cat: Unspecified/99][478 pkts/52883 bytes <-> 308 pkts/76667 bytes] - 2 TCP 192.168.2.92:41680 <-> 91.121.222.33:4444 [proto: 42/Mining][cat: Unspecified/99][20 pkts/2159 bytes <-> 13 pkts/2456 bytes] + 1 TCP 192.168.2.92:57726 <-> 94.23.36.128:4444 [proto: 42/Mining][cat: Mining/99][478 pkts/52883 bytes <-> 308 pkts/76667 bytes] + 2 TCP 192.168.2.92:41680 <-> 91.121.222.33:4444 [proto: 42/Mining][cat: Mining/99][20 pkts/2159 bytes <-> 13 pkts/2456 bytes] diff --git a/tests/result/monero.pcap.out b/tests/result/monero.pcap.out index 732ada2edc4..d37beae60c6 100644 --- a/tests/result/monero.pcap.out +++ b/tests/result/monero.pcap.out @@ -1,4 +1,4 @@ Mining 319 166676 2 - 1 TCP 192.168.2.148:46838 <-> 94.23.199.191:3333 [proto: 42/Mining][cat: Unspecified/99][159 pkts/143155 bytes <-> 113 pkts/13204 bytes] - 2 TCP 192.168.2.148:53846 <-> 116.211.167.195:3333 [proto: 42/Mining][cat: Unspecified/99][24 pkts/4455 bytes <-> 23 pkts/5862 bytes] + 1 TCP 192.168.2.148:46838 <-> 94.23.199.191:3333 [proto: 42/Mining][cat: Mining/99][159 pkts/143155 bytes <-> 113 pkts/13204 bytes] + 2 TCP 192.168.2.148:53846 <-> 116.211.167.195:3333 [proto: 42/Mining][cat: Mining/99][24 pkts/4455 bytes <-> 23 pkts/5862 bytes] diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index 025c468b3af..e6f3b10fbca 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -6,8 +6,8 @@ Amazon 76 10811 7 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] 3 UDP 192.168.12.114:55915 <-> 81.61.158.138:51769 [proto: 173/Nintendo][cat: Game/8][122 pkts/46476 bytes <-> 38 pkts/5268 bytes] 4 TCP 54.187.10.185:443 <-> 192.168.12.114:48328 [proto: 91.178/SSL.Amazon][cat: Web/5][34 pkts/4466 bytes <-> 20 pkts/4021 bytes] - 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: 5][server: *.baas.nintendo.com] - 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: 5][server: *.baas.nintendo.com] + 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.][server: *.baas.nintendo.com] + 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.][server: *.baas.nintendo.com] 7 UDP 192.168.12.114:52119 <-> 91.8.243.35:49432 [proto: 173/Nintendo][cat: Game/8][23 pkts/2682 bytes <-> 16 pkts/3408 bytes] 8 UDP 192.168.12.114:52119 <-> 109.21.255.11:50251 [proto: 173/Nintendo][cat: Game/8][8 pkts/1024 bytes <-> 8 pkts/1024 bytes] 9 UDP 192.168.12.114:52119 <-> 134.3.248.25:56955 [proto: 173/Nintendo][cat: Game/8][8 pkts/1040 bytes <-> 7 pkts/922 bytes] diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index dd6d1710b6e..778aa1197fe 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -23,11 +23,11 @@ GenericProtocol 1429 1780307 49 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Web/5][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Web/5][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] diff --git a/tests/result/zcash.pcap.out b/tests/result/zcash.pcap.out index eb3e155eeb1..f144e4f2128 100644 --- a/tests/result/zcash.pcap.out +++ b/tests/result/zcash.pcap.out @@ -1,3 +1,3 @@ Mining 145 20644 1 - 1 TCP 192.168.2.92:55190 <-> 178.32.196.217:9050 [proto: 42/Mining][cat: Unspecified/99][83 pkts/11785 bytes <-> 62 pkts/8859 bytes] + 1 TCP 192.168.2.92:55190 <-> 178.32.196.217:9050 [proto: 42/Mining][cat: Mining/99][83 pkts/11785 bytes <-> 62 pkts/8859 bytes] From e240bbd4a4dfa34bd166ed5e9ae19a060ae42981 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 7 Nov 2018 22:43:33 +0100 Subject: [PATCH 098/147] Implemented UPnP dissector --- src/include/ndpi_protocols.h | 1 + src/lib/ndpi_main.c | 3 ++ src/lib/protocols/lisp.c | 22 +++++++++++- src/lib/protocols/upnp.c | 65 ++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/lib/protocols/upnp.c diff --git a/src/include/ndpi_protocols.h b/src/include/ndpi_protocols.h index 48e005ce193..8ac7d72476b 100644 --- a/src/include/ndpi_protocols.h +++ b/src/include/ndpi_protocols.h @@ -325,6 +325,7 @@ void init_tor_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 void init_tvants_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_tvuplayer_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_usenet_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); +void init_upnp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_veohtv_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_vhua_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_viber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 519d6a1ad8f..7dd8777ec80 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3170,6 +3170,9 @@ void ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *n /* REDIS */ init_redis_dissector(ndpi_struct, &a, detection_bitmask); + /* UPnP */ + init_upnp_dissector(ndpi_struct, &a, detection_bitmask); + /* VHUA */ init_vhua_dissector(ndpi_struct, &a, detection_bitmask); diff --git a/src/lib/protocols/lisp.c b/src/lib/protocols/lisp.c index 2c6d7b611dd..7343ca03444 100644 --- a/src/lib/protocols/lisp.c +++ b/src/lib/protocols/lisp.c @@ -1,10 +1,30 @@ +/* + * list.c + * + * Copyright (C) 2017-18 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + #include "ndpi_protocol_ids.h" #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_LISP #include "ndpi_api.h" -#define LISP_PORT 4341 +#define LISP_PORT 4341 #define LISP_PORT1 4342 static void ndpi_int_lisp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, diff --git a/src/lib/protocols/upnp.c b/src/lib/protocols/upnp.c new file mode 100644 index 00000000000..1706d021d77 --- /dev/null +++ b/src/lib/protocols/upnp.c @@ -0,0 +1,65 @@ +/* + * upnp.c + * + * Copyright (C) 2018 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ + +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UPNP + +#include "ndpi_api.h" + +#define UPNP_PORT 3702 + +void ndpi_search_upnp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &flow->packet; + + NDPI_LOG_DBG(ndpi_struct, "search upnp\n"); + + if(packet->udp + && ( + (packet->iph && ((ntohl(packet->iph->daddr) & 0xF0000000) == 0xE0000000 /* A multicast address */)) +#ifdef NDPI_DETECTION_SUPPORT_IPV6 + || + (packet->iphv6 && ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0]) == 0xFF020000) +#endif + ) + && (ntohs(packet->udp->dest) == UPNP_PORT) + && (packet->payload_packet_len >= 40) + && (strncmp((char*)packet->payload, " Date: Wed, 7 Nov 2018 22:45:29 +0100 Subject: [PATCH 099/147] Added UPnP test pcap updated Nintendo test ourcome --- tests/pcap/upnp.pcap | Bin 0 -> 10648 bytes tests/result/nintendo.pcap.out | 4 ++-- tests/result/upnp.pcap.out | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 tests/pcap/upnp.pcap create mode 100644 tests/result/upnp.pcap.out diff --git a/tests/pcap/upnp.pcap b/tests/pcap/upnp.pcap new file mode 100644 index 0000000000000000000000000000000000000000..c1068b04a68b816b1f3297e87cb1232fbab2bfc6 GIT binary patch literal 10648 zcmeI2OKj6f7{@2!RaJBm7Z!S0SrJ01mWjuYII)!k(l$JHRa6xaLMjW6XWCku+EJXu zEr|Ey1mdy>xS>6)IP8%Vht(nw5*JR0XE`9DN*oY~3y1?@#&%nZ+GvmMc1E)7nfU+B z|C@aJ*^;NTtE=-C0AL{Zb9aoMTTzPx4eWL5q>>!!5&GO3Ngf#J5$p_1YX}__`UVdQ zI|VtVq1}6q3rXLuj|uztm(-Np1HdZq6VOyxw(G(n+rh5y2@={alpA&h3sOc>Q~*|k z6zFe^S1q$DBoEm&;*FWL-+Nfdlp-XX!5JbrYHBjkEIC8tvc|kJpM%l4)dC<66foRR znzluT_YLkkdO}im$+DssVP7xOq1vy?P%risp^S>Xs;tX;sid5w0cc}!*3#pBob_ls zz6Shq`3`tU`|MB@I<|iEix1+B&6i#t>w5J^{MyFYmow~E0MufB>o~f(t~H|$hu2T5 zKQ!al&L7F`m>91JO;Yo0*U2ZO6iNuhv0Q9BqxnRmJ_56e9fh3dnpLCZG)cv+5`jt_ z&tPNu#8|yvHAK<({gkhy+}fxpBczBZEwbMsi8P5wyk zbpEt~RAV+oPK-o>xMBcw+EY!VI^!}XrCK@?fdB7|TTQ5%wk%k+wN5t7QLt`kd7Yf(OtH0&)9pRV9H zCPJ&ByYPCZvqa+>EE0A z-gm9m=V^u2_LjeRZF{`7msD-Dn*N^UZw}w(EMM$FFdw3v+xoNDB_wpxyK4{1Crvb|^aF%nHFF%&A+4PXJ zoU?qzuzUl4)Q;uP0+yfWEaxm=ek@n<6lXbS`HErry4P>ovHW?!@^hT!oaM`p<##`Q z;wAIp`G+uE^w PDq#5;&T`K3rO)!O21>ck literal 0 HcmV?d00001 diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index e6f3b10fbca..6535e7cc5ee 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -6,8 +6,8 @@ Amazon 76 10811 7 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] 3 UDP 192.168.12.114:55915 <-> 81.61.158.138:51769 [proto: 173/Nintendo][cat: Game/8][122 pkts/46476 bytes <-> 38 pkts/5268 bytes] 4 TCP 54.187.10.185:443 <-> 192.168.12.114:48328 [proto: 91.178/SSL.Amazon][cat: Web/5][34 pkts/4466 bytes <-> 20 pkts/4021 bytes] - 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.][server: *.baas.nintendo.com] - 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.][server: *.baas.nintendo.com] + 5 TCP 192.168.12.114:41517 <-> 54.192.27.217:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][11 pkts/2898 bytes <-> 10 pkts/4865 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com][server: *.baas.nintendo.com] + 6 TCP 192.168.12.114:31329 <-> 54.192.27.8:443 [proto: 91.173/SSL.Nintendo][cat: Game/8][10 pkts/2833 bytes <-> 10 pkts/4866 bytes][client: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com][server: *.baas.nintendo.com] 7 UDP 192.168.12.114:52119 <-> 91.8.243.35:49432 [proto: 173/Nintendo][cat: Game/8][23 pkts/2682 bytes <-> 16 pkts/3408 bytes] 8 UDP 192.168.12.114:52119 <-> 109.21.255.11:50251 [proto: 173/Nintendo][cat: Game/8][8 pkts/1024 bytes <-> 8 pkts/1024 bytes] 9 UDP 192.168.12.114:52119 <-> 134.3.248.25:56955 [proto: 173/Nintendo][cat: Game/8][8 pkts/1040 bytes <-> 7 pkts/922 bytes] diff --git a/tests/result/upnp.pcap.out b/tests/result/upnp.pcap.out new file mode 100644 index 00000000000..923a6688a6f --- /dev/null +++ b/tests/result/upnp.pcap.out @@ -0,0 +1,4 @@ +UPnP 14 9912 2 + + 1 UDP [fe80::3441:3d24:6d30:a807]:58932 -> [ff02::c]:3702 [proto: 153/UPnP][cat: Network/14][7 pkts/5026 bytes -> 0 pkts/0 bytes] + 2 UDP 192.168.61.66:58931 -> 239.255.255.250:3702 [proto: 153/UPnP][cat: Network/14][7 pkts/4886 bytes -> 0 pkts/0 bytes] From 8e6640605a513ab63c06315525a20b962013c0f3 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 8 Nov 2018 22:13:05 +0100 Subject: [PATCH 100/147] Removed skype false positives better STUP detection --- src/lib/ndpi_main.c | 8 ++++++++ tests/result/whatsapp_voice_and_message.pcap.out | 5 ++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 7dd8777ec80..c099b3a32b1 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3971,6 +3971,12 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) || (guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN)) { + + if((guessed_protocol_id == 0) + && (flow->protos.stun_ssl.stun.num_binding_requests > 0) + && (flow->protos.stun_ssl.stun.num_processed_pkts > 0)) + guessed_protocol_id = NDPI_PROTOCOL_STUN; + ndpi_int_change_protocol(ndpi_struct, flow, guessed_host_protocol_id, guessed_protocol_id); @@ -3988,11 +3994,13 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st && (flow->guessed_protocol_id == NDPI_PROTOCOL_STUN)) { check_stun_export: if(flow->protos.stun_ssl.stun.num_processed_pkts > 0) { +#if 0 if(flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) { u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); } else +#endif ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STUN, flow->guessed_host_protocol_id); } } diff --git a/tests/result/whatsapp_voice_and_message.pcap.out b/tests/result/whatsapp_voice_and_message.pcap.out index e14163cbd2d..18ed7943d99 100644 --- a/tests/result/whatsapp_voice_and_message.pcap.out +++ b/tests/result/whatsapp_voice_and_message.pcap.out @@ -1,5 +1,4 @@ -SkypeCallIn 9 1184 1 -STUN 35 4732 7 +STUN 44 5916 8 WhatsApp 217 22139 5 1 TCP 10.8.0.1:42241 <-> 173.192.222.189:5222 [proto: 142/WhatsApp][cat: Chat/9][30 pkts/2539 bytes <-> 32 pkts/3070 bytes] @@ -7,7 +6,7 @@ WhatsApp 217 22139 5 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat/9][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat/9][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat/9][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] - 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/840 bytes <-> 4 pkts/344 bytes] + 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][5 pkts/840 bytes <-> 4 pkts/344 bytes] 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] From b98373f390aac2b401c667664db1e1a44493c785 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 8 Nov 2018 22:31:58 +0100 Subject: [PATCH 101/147] Improved Messenger/Hangout detection --- src/lib/ndpi_main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index c099b3a32b1..242f7e35eab 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4001,11 +4001,19 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); } else #endif - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STUN, flow->guessed_host_protocol_id); + ndpi_set_detected_protocol(ndpi_struct, flow, flow->guessed_host_protocol_id, NDPI_PROTOCOL_STUN); } } ret.master_protocol = flow->detected_protocol_stack[1], ret.app_protocol = flow->detected_protocol_stack[0]; + + if(ret.master_protocol == NDPI_PROTOCOL_STUN) { + if(ret.app_protocol == NDPI_PROTOCOL_FACEBOOK) + ret.app_protocol = NDPI_PROTOCOL_MESSENGER; + else if(ret.app_protocol == NDPI_PROTOCOL_GOOGLE) + ret.app_protocol = NDPI_PROTOCOL_HANGOUT; + } + ndpi_fill_protocol_category(ndpi_struct, flow, &ret); return(ret); From 8f8ca40f63bb47f337253074f395bc44f3cd6a86 Mon Sep 17 00:00:00 2001 From: Mikhail Smirnov <2miksyn@users.noreply.github.com> Date: Fri, 9 Nov 2018 00:46:25 +0300 Subject: [PATCH 102/147] Improve SSL detection, prevent false positive SSL detection --- src/lib/ndpi_main.c | 4 ++-- src/lib/protocols/ssl.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 7dd8777ec80..6f3d03a489b 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3948,7 +3948,7 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st if(flow->guessed_protocol_id == NDPI_PROTOCOL_STUN) goto check_stun_export; - else if(flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') { + else if((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) { ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL, NDPI_PROTOCOL_UNKNOWN); } else { if((flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN) @@ -4268,7 +4268,7 @@ void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struc } } - if(flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') { + if((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) { unsigned long id; int rc = ndpi_match_custom_category(ndpi_struct, (char *)flow->protos.stun_ssl.ssl.client_certificate, &id); diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index 979d234b9f2..d7f7a968718 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -39,8 +39,8 @@ static u_int32_t ndpi_ssl_refine_master_protocol(struct ndpi_detection_module_st { struct ndpi_packet_struct *packet = &flow->packet; - if((flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') - || (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0') + if(((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) + || ((flow->l4.tcp.ssl_seen_server_cert == 1) && (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0')) || (flow->host_server_name[0] != '\0')) protocol = NDPI_PROTOCOL_SSL; else @@ -348,7 +348,7 @@ int sslTryAndRetrieveServerCertificate(struct ndpi_detection_module_struct *ndpi packet->ssl_certificate_num_checks++; if (rc > 0) { packet->ssl_certificate_detected++; - if (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0') + if ((flow->l4.tcp.ssl_seen_server_cert == 1) && (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0')) /* 0 means we're done processing extra packets (since we found what we wanted) */ return 0; } @@ -405,7 +405,7 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s /* If we've detected the subprotocol from client certificate but haven't had a chance * to see the server certificate yet, set up extra packet processing to wait * a few more packets. */ - if((flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') && (flow->protos.stun_ssl.ssl.server_certificate[0] == '\0')) { + if(((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) && ((flow->l4.tcp.ssl_seen_server_cert != 1) && (flow->protos.stun_ssl.ssl.server_certificate[0] == '\0'))) { sslInitExtraPacketProcessing(0, flow); } @@ -422,8 +422,8 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s && flow->l4.tcp.seen_syn && flow->l4.tcp.seen_syn_ack && flow->l4.tcp.seen_ack /* We have seen the 3-way handshake */) - || (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0') - /* || (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') */ + || ((flow->l4.tcp.ssl_seen_server_cert == 1) && (flow->protos.stun_ssl.ssl.server_certificate[0] != '\0')) + /* || ((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) */ ) { ndpi_int_ssl_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_SSL); } From b31337db4a8fadc90ef6e45d761696d1d0d50182 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Fri, 9 Nov 2018 11:31:08 +0100 Subject: [PATCH 103/147] Improved Skype detection --- src/lib/ndpi_content_match.c.inc | 1 + src/lib/ndpi_main.c | 5 ++-- src/lib/protocols/stun.c | 16 +++++++++- tests/result/whatsapp_login_call.pcap.out | 30 +++++++++---------- .../whatsapp_voice_and_message.pcap.out | 19 ++++++------ 5 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index e39fc393919..71e236d37ff 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -706,6 +706,7 @@ static ndpi_network host_protocol_list[] = { { 0x287F816D /* 40.126.129.109 */, 32, NDPI_PROTOCOL_SKYPE }, { 0x4237DF00 /* 65.55.223.0 */, 26, NDPI_PROTOCOL_SKYPE }, { 0x17600000 /* 23.96.0.0 */, 13, NDPI_PROTOCOL_SKYPE }, + { 0x34724A05 /* 52.114.74.5 */, 32, NDPI_PROTOCOL_SKYPE }, /* Blizzard Entertainment, Inc diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 242f7e35eab..da478cc3b03 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3994,13 +3994,12 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st && (flow->guessed_protocol_id == NDPI_PROTOCOL_STUN)) { check_stun_export: if(flow->protos.stun_ssl.stun.num_processed_pkts > 0) { -#if 0 - if(flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) { + if(/* (flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) */ + flow->protos.stun_ssl.stun.is_skype) { u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); } else -#endif ndpi_set_detected_protocol(ndpi_struct, flow, flow->guessed_host_protocol_id, NDPI_PROTOCOL_STUN); } } diff --git a/src/lib/protocols/stun.c b/src/lib/protocols/stun.c index ad6a585f9b0..cb1322e5eb8 100644 --- a/src/lib/protocols/stun.c +++ b/src/lib/protocols/stun.c @@ -106,7 +106,7 @@ static ndpi_int_stun_t ndpi_int_check_stun(struct ndpi_detection_module_struct * case 0x4002: /* These are the only messages apparently whatsapp voice can use */ break; - + case 0x8054: /* Candidate Identifier */ if((len == 4) && ((offset+7) < payload_length) @@ -119,6 +119,20 @@ static ndpi_int_stun_t ndpi_int_check_stun(struct ndpi_detection_module_struct * } break; + case 0x8055: /* MS Service Quality (skype?) */ + break; + + /* Proprietary fields found on skype calls */ + case 0x24DF: + case 0x3802: + case 0x8036: + case 0x8095: + case 0x0800: + /* printf("====>>>> %04X\n", attribute); */ + flow->protos.stun_ssl.stun.is_skype = 1; + return(NDPI_IS_STUN); + break; + case 0x8070: /* Implementation Version */ if((len == 4) && ((offset+7) < payload_length) diff --git a/tests/result/whatsapp_login_call.pcap.out b/tests/result/whatsapp_login_call.pcap.out index 0fa82a7df93..666b3d70ae4 100644 --- a/tests/result/whatsapp_login_call.pcap.out +++ b/tests/result/whatsapp_login_call.pcap.out @@ -2,13 +2,13 @@ Unknown 27 2322 2 HTTP 11 726 3 MDNS 8 952 4 DHCP 10 3420 1 -STUN 70 9464 14 ICMP 10 700 1 SSL 8 589 2 Dropbox 4 2176 1 Apple 105 22176 19 WhatsApp 182 25154 2 Spotify 3 258 1 +Messenger 70 9464 14 WhatsAppVoice 706 91156 4 AppleStore 85 28087 2 ApplePush 22 5926 1 @@ -26,20 +26,20 @@ ApplePush 22 5926 1 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/2176 bytes -> 0 pkts/0 bytes] 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][cat: Web/5][9 pkts/1130 bytes <-> 8 pkts/868 bytes] 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network/14][10 pkts/700 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.2.4:51518 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 15 UDP 192.168.2.4:51518 <-> 31.13.70.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 16 UDP 192.168.2.4:51518 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 17 UDP 192.168.2.4:51518 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 18 UDP 192.168.2.4:51518 <-> 31.13.85.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 19 UDP 192.168.2.4:51518 <-> 31.13.91.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 20 UDP 192.168.2.4:51518 <-> 31.13.100.14:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 21 UDP 192.168.2.4:52794 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 22 UDP 192.168.2.4:52794 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 23 UDP 192.168.2.4:52794 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 24 UDP 192.168.2.4:52794 <-> 31.13.90.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 25 UDP 192.168.2.4:52794 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 26 UDP 192.168.2.4:52794 <-> 173.252.114.1:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 27 UDP 192.168.2.4:52794 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 14 UDP 192.168.2.4:51518 <-> 31.13.64.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 15 UDP 192.168.2.4:51518 <-> 31.13.70.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 16 UDP 192.168.2.4:51518 <-> 31.13.73.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 17 UDP 192.168.2.4:51518 <-> 31.13.79.192:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 18 UDP 192.168.2.4:51518 <-> 31.13.85.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 19 UDP 192.168.2.4:51518 <-> 31.13.91.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 20 UDP 192.168.2.4:51518 <-> 31.13.100.14:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 21 UDP 192.168.2.4:52794 <-> 31.13.73.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 22 UDP 192.168.2.4:52794 <-> 31.13.74.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 23 UDP 192.168.2.4:52794 <-> 31.13.79.192:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 24 UDP 192.168.2.4:52794 <-> 31.13.90.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 25 UDP 192.168.2.4:52794 <-> 31.13.93.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 26 UDP 192.168.2.4:52794 <-> 173.252.114.1:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 27 UDP 192.168.2.4:52794 <-> 179.60.192.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] 28 TCP 192.168.2.4:49172 <-> 23.50.148.228:443 [proto: 91/SSL][cat: Web/5][3 pkts/174 bytes <-> 2 pkts/217 bytes] 29 TCP 192.168.2.4:49192 <-> 93.186.135.8:80 [proto: 7/HTTP][cat: Web/5][3 pkts/198 bytes <-> 2 pkts/132 bytes] 30 UDP 192.168.2.4:51897 <-> 192.168.2.1:53 [proto: 5.140/DNS.Apple][cat: Web/5][1 pkts/79 bytes <-> 1 pkts/251 bytes][Host: query.ess.apple.com] diff --git a/tests/result/whatsapp_voice_and_message.pcap.out b/tests/result/whatsapp_voice_and_message.pcap.out index 18ed7943d99..2b9ee2e268b 100644 --- a/tests/result/whatsapp_voice_and_message.pcap.out +++ b/tests/result/whatsapp_voice_and_message.pcap.out @@ -1,16 +1,17 @@ -STUN 44 5916 8 +SkypeCallIn 9 1184 1 WhatsApp 217 22139 5 +Messenger 35 4732 7 1 TCP 10.8.0.1:42241 <-> 173.192.222.189:5222 [proto: 142/WhatsApp][cat: Chat/9][30 pkts/2539 bytes <-> 32 pkts/3070 bytes] 2 TCP 10.8.0.1:35480 <-> 184.173.179.46:443 [proto: 142/WhatsApp][cat: Chat/9][24 pkts/3029 bytes <-> 22 pkts/1961 bytes] 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat/9][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat/9][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat/9][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] - 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][5 pkts/840 bytes <-> 4 pkts/344 bytes] - 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 10 UDP 10.8.0.1:53620 <-> 31.13.84.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 11 UDP 10.8.0.1:53620 <-> 31.13.93.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 12 UDP 10.8.0.1:53620 <-> 173.252.121.1:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] - 13 UDP 10.8.0.1:53620 <-> 179.60.192.48:3478 [proto: 119.78/Facebook.STUN][cat: Network/14][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/840 bytes <-> 4 pkts/344 bytes] + 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 10 UDP 10.8.0.1:53620 <-> 31.13.84.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 11 UDP 10.8.0.1:53620 <-> 31.13.93.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 12 UDP 10.8.0.1:53620 <-> 173.252.121.1:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] + 13 UDP 10.8.0.1:53620 <-> 179.60.192.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] From de9b2b202e77ef6a2a4442b293859009f005458c Mon Sep 17 00:00:00 2001 From: kyrol Date: Fri, 9 Nov 2018 14:52:32 +0100 Subject: [PATCH 104/147] FIX missing Application Data pkt for TLS --- src/lib/protocols/ssl.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/lib/protocols/ssl.c b/src/lib/protocols/ssl.c index 59aedcb457e..533bc69aa35 100644 --- a/src/lib/protocols/ssl.c +++ b/src/lib/protocols/ssl.c @@ -249,7 +249,7 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, offset++; compression_len = packet->payload[offset]; offset++; - + #ifdef CERTIFICATE_DEBUG printf("SSL [compression_len: %u]\n", compression_len); #endif @@ -260,7 +260,7 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, if(offset < total_len) { extensions_len = ntohs(*((u_int16_t*)&packet->payload[offset])); offset += 2; - + #ifdef CERTIFICATE_DEBUG printf("SSL [extensions_len: %u]\n", extensions_len); #endif @@ -282,7 +282,7 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, #ifdef CERTIFICATE_DEBUG printf("SSL [extension_id: %u][extension_len: %u]\n", extension_id, extension_len); #endif - + if(extension_id == 0) { u_int begin = 0,len; char *server_name = (char*)&packet->payload[offset+extension_offset]; @@ -305,7 +305,7 @@ int getSSLcertificate(struct ndpi_detection_module_struct *ndpi_struct, snprintf(flow->protos.stun_ssl.ssl.client_certificate, sizeof(flow->protos.stun_ssl.ssl.client_certificate), "%s", buffer); } - + /* We're happy now */ return(2 /* Client Certificate */); } @@ -331,7 +331,7 @@ int sslTryAndRetrieveServerCertificate(struct ndpi_detection_module_struct *ndpi if((packet->payload_packet_len > 9) && (packet->payload[0] == 0x16)) { char certificate[64]; int rc; - + certificate[0] = '\0'; rc = getSSLcertificate(ndpi_struct, flow, certificate, sizeof(certificate)); packet->ssl_certificate_num_checks++; @@ -389,7 +389,7 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s strlen(certificate), &ret_match, NDPI_PROTOCOL_SSL); - + if(subproto != NDPI_PROTOCOL_UNKNOWN) { /* If we've detected the subprotocol from client certificate but haven't had a chance * to see the server certificate yet, set up extra packet processing to wait @@ -397,7 +397,7 @@ int sslDetectProtocolFromCertificate(struct ndpi_detection_module_struct *ndpi_s if((flow->protos.stun_ssl.ssl.client_certificate[0] != '\0') && (flow->protos.stun_ssl.ssl.server_certificate[0] == '\0')) { sslInitExtraPacketProcessing(0, flow); } - + ndpi_set_detected_protocol(ndpi_struct, flow, subproto, ndpi_ssl_refine_master_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL)); return(rc); /* Fix courtesy of Gianluca Costa */ @@ -512,13 +512,10 @@ static u_int8_t ndpi_search_sslv3_direction1(struct ndpi_detection_module_struct struct ndpi_packet_struct *packet = &flow->packet; if((packet->payload_packet_len >= 5) - && (packet->payload[0] == 0x16) + && ((packet->payload[0] == 0x16) || packet->payload[0] == 0x17) && (packet->payload[1] == 0x03) - && ((packet->payload[2] == 0x00) - || (packet->payload[2] == 0x01) - || (packet->payload[2] == 0x02) - || (packet->payload[2] == 0x03) - )) { + && ((packet->payload[2] == 0x00) || (packet->payload[2] == 0x01) || + (packet->payload[2] == 0x02) || (packet->payload[2] == 0x03))) { u_int32_t temp; NDPI_LOG_DBG2(ndpi_struct, "search sslv3\n"); // SSLv3 Record @@ -680,6 +677,17 @@ void ndpi_search_ssl_tcp(struct ndpi_detection_module_struct *ndpi_struct, struc flow->l4.tcp.ssl_stage = 1 + packet->packet_direction; return; } + + // Application Data pkt + if(packet->payload[0] == 0x17 && packet->payload[1] == 0x03 + && (packet->payload[2] == 0x00 || packet->payload[2] == 0x01 || + packet->payload[2] == 0x02 || packet->payload[2] == 0x03)) { + if(packet->payload_packet_len - ntohs(get_u_int16_t(packet->payload, 3)) == 5) { + NDPI_LOG_DBG2(ndpi_struct, "TLS len match\n"); + flow->l4.tcp.ssl_stage = 1 + packet->packet_direction; + return; + } + } } if(packet->payload_packet_len > 40 && From 71b2c19cf28f72ad2e876719af88c7841c2aea84 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sat, 10 Nov 2018 16:10:22 +0100 Subject: [PATCH 105/147] Added DPDK support to ndpiReader --- configure.seed | 11 +++- example/Makefile.dpdk.in | 27 ++++++++++ example/Makefile.in | 5 +- example/README.DPDK | 31 ++++++++++++ example/ndpiReader.c | 106 ++++++++++++++++++++++++++++++++------- example/ndpi_util.c | 78 +++++++++++++++++++++++----- example/ndpi_util.h | 18 +++++++ 7 files changed, 242 insertions(+), 34 deletions(-) create mode 100644 example/Makefile.dpdk.in create mode 100644 example/README.DPDK diff --git a/configure.seed b/configure.seed index f3b26790406..11220f8859f 100644 --- a/configure.seed +++ b/configure.seed @@ -40,6 +40,14 @@ AC_CHECK_HEADERS([netinet/in.h stdint.h stdlib.h string.h unistd.h]) PCAP_HOME=$HOME/PF_RING/userland +DPDK_TARGET= +if test -d $HOME/DPDK; then : + echo "Enabling DPDK support in ndpiReader" + DPDK_TARGET=dpdk +else + echo "DPDK support disabled (missing $HOME/DPDK)" +fi + if test -d $PCAP_HOME; then : echo -n "" else @@ -138,7 +146,7 @@ AC_ARG_ENABLE([debug-messages], AC_CHECK_LIB(pthread, pthread_setaffinity_np, AC_DEFINE_UNQUOTED(HAVE_PTHREAD_SETAFFINITY_NP, 1, [libc has pthread_setaffinity_np])) -AC_CONFIG_FILES([Makefile example/Makefile tests/Makefile libndpi.pc src/include/ndpi_define.h src/lib/Makefile]) +AC_CONFIG_FILES([Makefile example/Makefile example/Makefile.dpdk tests/Makefile libndpi.pc src/include/ndpi_define.h src/lib/Makefile]) AC_CONFIG_HEADERS(src/include/ndpi_config.h) AC_SUBST(GIT_RELEASE) AC_SUBST(NDPI_MAJOR) @@ -152,6 +160,7 @@ AC_SUBST(PCAP_LIB) AC_SUBST(DL_LIB) AC_SUBST(HS_LIB) AC_SUBST(HS_INC) +AC_SUBST(DPDK_TARGET) AC_SUBST(HAVE_PTHREAD_SETAFFINITY_NP) AC_OUTPUT diff --git a/example/Makefile.dpdk.in b/example/Makefile.dpdk.in new file mode 100644 index 00000000000..8519d7d0e11 --- /dev/null +++ b/example/Makefile.dpdk.in @@ -0,0 +1,27 @@ +# +# Run 'make -f Makefile.dpdk' to compile the DPDK examples +# +# See http://core.dpdk.org/doc/quick-start/ for DPDK installation and setup +# +ifeq ($(RTE_SDK),) +#$(error "Please define RTE_SDK environment variable") +RTE_SDK = $(HOME)/DPDK +RTE_TARGET = build +endif + +# Default target, can be overridden by command line or environment +RTE_TARGET ?= x86_64-native-linuxapp-gcc + +include $(RTE_SDK)/mk/rte.vars.mk + +APP = ndpiReader +LIBNDPI = $(PWD)/../src/lib/libndpi.a + +SRCS-y := ndpi_util.c ndpiReader.c + +CFLAGS += -g +CFLAGS += -Wno-strict-prototypes -Wno-missing-prototypes -Wno-missing-declarations -Wno-unused-parameter -I $(PWD)/../src/include @CFLAGS@ -DUSE_DPDK +LDLIBS = $(LIBNDPI) -lpthread @LDFLAGS@ + +include $(RTE_SDK)/mk/rte.extapp.mk + diff --git a/example/Makefile.in b/example/Makefile.in index 8c18f94dc88..a5ca6acce6c 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -5,7 +5,7 @@ LDFLAGS=$(LIBNDPI) -lpcap -lpthread @LDFLAGS@ OBJS=ndpiReader.o ndpi_util.o PREFIX?=/usr/local -all: ndpiReader +all: ndpiReader @DPDK_TARGET@ ndpiReader: $(OBJS) $(LIBNDPI) $(CXX) $(CFLAGS) $(OBJS) -o $@ $(LDFLAGS) @@ -16,6 +16,9 @@ ndpiReader: $(OBJS) $(LIBNDPI) install: cp ndpiReader $(DESTDIR)$(PREFIX)/bin +dpdk: + make -f Makefile.dpdk + clean: /bin/rm -f *.o ndpiReader diff --git a/example/README.DPDK b/example/README.DPDK new file mode 100644 index 00000000000..472597c3f11 --- /dev/null +++ b/example/README.DPDK @@ -0,0 +1,31 @@ +Prerequisites +------------- + +You need to install and compile DPDK in your HOME directory as explained in +See http://core.dpdk.org/doc/quick-start/ for DPDK installation and setup + +Once DPDK is built make sure to create a symbolic link + +$ cd +$ ln -s dpdk-18.08 DPDK + +so the build process will use the DPDK directory letting you have multiple +DPDK versions available on your system + + +Build +----- +Everything will happen automagically but if you want to do it by hand +do: make -f Makefile.dpdk + + +Run Application +--------------- +Supposing to capture packets from device eno1 you can start the +application as follows: + +sudo ./build/ndpiReader -c 1 --vdev=net_pcap0,iface=eno1 -- -v 1 + +NOTE: +- ndpiReader without DPDK support sits in this directory +- ndpiReader with DPDK support can be found inside the ./build directory diff --git a/example/ndpiReader.c b/example/ndpiReader.c index faa453ee2de..89f5714a894 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -204,7 +204,9 @@ typedef struct ndpi_id { // used memory counters u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0; - +#ifdef USE_DPDK +static int dpdk_port_id = 0, dpdk_run_capture = 1; +#endif void test_lib(); /* Forward */ @@ -227,7 +229,11 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle); static void help(u_int long_help) { printf("Welcome to nDPI %s\n\n", ndpi_revision()); - printf("ndpiReader -i [-f ][-s ][-m ]\n" + printf("ndpiReader " +#ifndef USE_DPDK + "-i " +#endif + "[-f ][-s ][-m ]\n" " [-p ][-l [-q][-d][-h][-t][-v ]\n" " [-n ][-w ][-c ][-j ][-x ]\n\n" "Usage:\n" @@ -457,7 +463,18 @@ static void parseOptions(int argc, char **argv) { if(trace) fprintf(trace, " #### %s #### \n", __FUNCTION__); #endif - while ((opt = getopt_long(argc, argv, "c:df:g:i:hp:l:s:tv:V:n:j:rp:w:q0123:456:7:89:m:b:x:", longopts, &option_idx)) != EOF) { +#ifdef USE_DPDK + { + int ret = rte_eal_init(argc, argv); + + if(ret < 0) + rte_exit(EXIT_FAILURE, "Error with EAL initialization\n"); + + argc -= ret, argv += ret; + } +#endif + + while((opt = getopt_long(argc, argv, "c:df:g:i:hp:l:s:tv:V:n:j:rp:w:q0123:456:7:89:m:b:x:", longopts, &option_idx)) != EOF) { #ifdef DEBUG_TRACE if(trace) fprintf(trace, " #### -%c [%s] #### \n", opt, optarg ? optarg : ""); #endif @@ -603,7 +620,7 @@ static void parseOptions(int argc, char **argv) { case '9': extcap_packet_filter = ndpi_get_proto_by_name(ndpi_info_mod, optarg); - if (extcap_packet_filter == NDPI_PROTOCOL_UNKNOWN) extcap_packet_filter = atoi(optarg); + if(extcap_packet_filter == NDPI_PROTOCOL_UNKNOWN) extcap_packet_filter = atoi(optarg); break; case 257: @@ -616,6 +633,7 @@ static void parseOptions(int argc, char **argv) { } } +#ifndef USE_DPDK if(!bpf_filter_flag) { if(do_capture) { quiet_mode = 1; @@ -630,7 +648,7 @@ static void parseOptions(int argc, char **argv) { if(strchr(_pcap_file[0], ',')) { /* multiple ingress interfaces */ num_threads = 0; /* setting number of threads = number of interfaces */ __pcap_file = strtok(_pcap_file[0], ","); - while (__pcap_file != NULL && num_threads < MAX_NUM_READER_THREADS) { + while(__pcap_file != NULL && num_threads < MAX_NUM_READER_THREADS) { _pcap_file[num_threads++] = __pcap_file; __pcap_file = strtok(NULL, ","); } @@ -647,13 +665,14 @@ static void parseOptions(int argc, char **argv) { if(num_cores > 1 && bind_mask != NULL) { char *core_id = strtok(bind_mask, ":"); thread_id = 0; - while (core_id != NULL && thread_id < num_threads) { + while(core_id != NULL && thread_id < num_threads) { core_affinity[thread_id++] = atoi(core_id) % num_cores; core_id = strtok(NULL, ":"); } } #endif } +#endif #ifdef DEBUG_TRACE if(trace) fclose(trace); @@ -719,7 +738,7 @@ char* intoaV4(u_int32_t addr, char* buf, u_int16_t bufLen) { } *--cp = '.'; addr >>= 8; - } while (--n > 0); + } while(--n > 0); /* Convert the string to lowercase */ retStr = (char*)(cp+1); @@ -769,7 +788,7 @@ static void printFlow(u_int16_t id, struct ndpi_flow_info *flow, u_int16_t threa ndpi_get_proto_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, flow->detected_protocol.app_protocol)); if(flow->detected_protocol.category != 0) - fprintf(out, "[cat: %s/%u]", + fprintf(out, "[cat: %s/%u]", ndpi_category_get_name(ndpi_thread_info[thread_id].workflow->ndpi_struct, flow->detected_protocol.category), (unsigned int)flow->detected_protocol.category); @@ -924,7 +943,7 @@ static void node_proto_guess_walker(const void *node, ndpi_VISIT which, int dept } process_ndpi_collected_info(ndpi_thread_info[thread_id].workflow, flow); - + ndpi_thread_info[thread_id].workflow->stats.protocol_counter[flow->detected_protocol.app_protocol] += flow->src2dst_packets + flow->dst2src_packets; ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes[flow->detected_protocol.app_protocol] += flow->src2dst_bytes + flow->dst2src_bytes; ndpi_thread_info[thread_id].workflow->stats.protocol_flows[flow->detected_protocol.app_protocol]++; @@ -985,7 +1004,7 @@ int updateIpTree(u_int32_t key, u_int8_t version, if(rootp == (addr_node **)0) return 0; - while (*rootp != (addr_node *)0) { + while(*rootp != (addr_node *)0) { /* Knuth's T1: */ if((version == (*rootp)->version) && (key == (*rootp)->addr)) { /* T2: */ @@ -1015,7 +1034,7 @@ int updateIpTree(u_int32_t key, u_int8_t version, /* *********************************************** */ void freeIpTree(addr_node *root) { - if (root == NULL) + if(root == NULL) return; freeIpTree(root->left); @@ -1210,9 +1229,9 @@ static void deleteReceivers(struct receiver *receivers) { /* *********************************************** */ /* implementation of: https://jeroen.massar.ch/presentations/files/FloCon2010-TopK.pdf * - * if (table1.size < max1 || acceptable){ + * if(table1.size < max1 || acceptable){ * create new element and add to the table1 - * if (table1.size > max2) { + * if(table1.size > max2) { * cut table1 back to max1 * merge table 1 to table2 * if(table2.size > max1) @@ -2266,9 +2285,13 @@ static void printResults(u_int64_t tot_usec) { * @brief Force a pcap_dispatch() or pcap_loop() call to return */ static void breakPcapLoop(u_int16_t thread_id) { +#ifdef USE_DPDK + dpdk_run_capture = 0; +#else if(ndpi_thread_info[thread_id].workflow->pcap_handle != NULL) { pcap_breakloop(ndpi_thread_info[thread_id].workflow->pcap_handle); } +#endif } /** @@ -2335,15 +2358,26 @@ static void configurePcapHandle(pcap_t * pcap_handle) { * @brief Open a pcap file or a specified device - Always returns a valid pcap_t */ static pcap_t * openPcapFileOrDevice(u_int16_t thread_id, const u_char * pcap_file) { - u_int snaplen = 1536; int promisc = 1; char pcap_error_buffer[PCAP_ERRBUF_SIZE]; pcap_t * pcap_handle = NULL; /* trying to open a live interface */ - if((pcap_handle = pcap_open_live((char*)pcap_file, snaplen, promisc, - 500, pcap_error_buffer)) == NULL) { +#ifdef USE_DPDK + struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL", NUM_MBUFS, + MBUF_CACHE_SIZE, 0, + RTE_MBUF_DEFAULT_BUF_SIZE, + rte_socket_id()); + + if(mbuf_pool == NULL) + rte_exit(EXIT_FAILURE, "Cannot create mbuf pool: are hugepages ok?\n"); + + if(dpdk_port_init(dpdk_port_id, mbuf_pool) != 0) + rte_exit(EXIT_FAILURE, "DPDK: Cannot init port %u: please see README.dpdk\n", dpdk_port_id); +#else + if((pcap_handle = pcap_open_live((char*)pcap_file, snaplen, + promisc, 500, pcap_error_buffer)) == NULL) { capture_for = capture_until = 0; live_capture = 0; @@ -2370,11 +2404,17 @@ static pcap_t * openPcapFileOrDevice(u_int16_t thread_id, const u_char * pcap_fi } else { live_capture = 1; - if((!json_flag) && (!quiet_mode)) + if((!json_flag) && (!quiet_mode)) { +#ifdef USE_DPDK + printf("Capturing from DPDK (port 0)...\n"); +#else printf("Capturing live traffic from device %s...\n", pcap_file); +#endif + } } configurePcapHandle(pcap_handle); +#endif /* !DPDK */ if(capture_for > 0) { if((!json_flag) && (!quiet_mode)) @@ -2520,13 +2560,13 @@ static void runPcapLoop(u_int16_t thread_id) { * @brief Process a running thread */ void * processing_thread(void *_thread_id) { - long thread_id = (long) _thread_id; char pcap_error_buffer[PCAP_ERRBUF_SIZE]; #if defined(linux) && defined(HAVE_PTHREAD_SETAFFINITY_NP) if(core_affinity[thread_id] >= 0) { cpu_set_t cpuset; + CPU_ZERO(&cpuset); CPU_SET(core_affinity[thread_id], &cpuset); @@ -2539,6 +2579,33 @@ void * processing_thread(void *_thread_id) { #endif if((!json_flag) && (!quiet_mode)) printf("Running thread %ld...\n", thread_id); +#ifdef USE_DPDK + while(dpdk_run_capture) { + struct rte_mbuf *bufs[BURST_SIZE]; + u_int16_t num = rte_eth_rx_burst(dpdk_port_id, 0, bufs, BURST_SIZE); + u_int i; + + if(num == 0) { + usleep(1); + continue; + } + + for(i = 0; i < PREFETCH_OFFSET && i < num; i++) + rte_prefetch0(rte_pktmbuf_mtod(bufs[i], void *)); + + for(i = 0; i < num; i++) { + char *data = rte_pktmbuf_mtod(bufs[i], char *); + int len = rte_pktmbuf_pkt_len(bufs[i]); + struct pcap_pkthdr h; + + h.len = h.caplen = len; + gettimeofday(&h.ts, NULL); + + pcap_process_packet((u_char*)&thread_id, &h, (const u_char *)data); + rte_pktmbuf_free(bufs[i]); + } + } +#else pcap_loop: runPcapLoop(thread_id); @@ -2551,6 +2618,7 @@ void * processing_thread(void *_thread_id) { goto pcap_loop; } } +#endif return NULL; } @@ -3239,7 +3307,7 @@ int orginal_main(int argc, char **argv) { automataUnitTest(); ndpi_info_mod = ndpi_init_detection_module(); - if (ndpi_info_mod == NULL) return -1; + if(ndpi_info_mod == NULL) return -1; memset(ndpi_thread_info, 0, sizeof(ndpi_thread_info)); diff --git a/example/ndpi_util.c b/example/ndpi_util.c index 977a246ecac..1a0d4591431 100644 --- a/example/ndpi_util.c +++ b/example/ndpi_util.c @@ -219,7 +219,7 @@ void ndpi_flow_info_freer(void *node) { /* ***************************************************** */ void ndpi_workflow_free(struct ndpi_workflow * workflow) { - int i; + u_int i; for(i=0; iprefs.num_roots; i++) ndpi_tdestroy(workflow->ndpi_flows_root[i], ndpi_flow_info_freer); @@ -232,8 +232,8 @@ void ndpi_workflow_free(struct ndpi_workflow * workflow) { /* ***************************************************** */ int ndpi_workflow_node_cmp(const void *a, const void *b) { - struct ndpi_flow_info *fa = (struct ndpi_flow_info*)a; - struct ndpi_flow_info *fb = (struct ndpi_flow_info*)b; + const struct ndpi_flow_info *fa = (const struct ndpi_flow_info*)a; + const struct ndpi_flow_info *fb = (const struct ndpi_flow_info*)b; if(fa->hashval < fb->hashval) return(-1); else if(fa->hashval > fb->hashval) return(1); @@ -307,7 +307,7 @@ static struct ndpi_flow_info *get_ndpi_flow_info(struct ndpi_workflow * workflow u_int32_t idx, l4_offset, hashval; struct ndpi_flow_info flow; void *ret; - u_int8_t *l3, *l4; + const u_int8_t *l3, *l4; /* Note: to keep things simple (ndpiReader is just a demo app) @@ -322,10 +322,10 @@ static struct ndpi_flow_info *get_ndpi_flow_info(struct ndpi_workflow * workflow return NULL; l4_offset = iph->ihl * 4; - l3 = (u_int8_t*)iph; + l3 = (const u_int8_t*)iph; } else { l4_offset = sizeof(struct ndpi_ipv6hdr); - l3 = (u_int8_t*)iph6; + l3 = (const u_int8_t*)iph6; } if(l4_packet_len < 64) @@ -345,7 +345,7 @@ static struct ndpi_flow_info *get_ndpi_flow_info(struct ndpi_workflow * workflow workflow->stats.max_packet_len = l4_packet_len; *proto = iph->protocol; - l4 = ((u_int8_t *) l3 + l4_offset); + l4 = ((const u_int8_t *) l3 + l4_offset); if(iph->protocol == IPPROTO_TCP && l4_packet_len >= 20) { u_int tcp_len; @@ -355,7 +355,7 @@ static struct ndpi_flow_info *get_ndpi_flow_info(struct ndpi_workflow * workflow *tcph = (struct ndpi_tcphdr *)l4; *sport = ntohs((*tcph)->source), *dport = ntohs((*tcph)->dest); tcp_len = ndpi_min(4*(*tcph)->doff, l4_packet_len); - *payload = &l4[tcp_len]; + *payload = (u_int8_t*)&l4[tcp_len]; *payload_len = ndpi_max(0, l4_packet_len-4*(*tcph)->doff); } else if(iph->protocol == IPPROTO_UDP && l4_packet_len >= 8) { // udp @@ -363,8 +363,8 @@ static struct ndpi_flow_info *get_ndpi_flow_info(struct ndpi_workflow * workflow workflow->stats.udp_count++; *udph = (struct ndpi_udphdr *)l4; *sport = ntohs((*udph)->source), *dport = ntohs((*udph)->dest); - *payload = &l4[sizeof(struct ndpi_udphdr)]; - *payload_len = ndpi_max(0, l4_packet_len-sizeof(struct ndpi_udphdr)); + *payload = (u_int8_t*)&l4[sizeof(struct ndpi_udphdr)]; + *payload_len = (l4_packet_len > sizeof(struct ndpi_udphdr)) ? l4_packet_len-sizeof(struct ndpi_udphdr) : 0; } else { // non tcp/udp protocols *sport = *dport = 0; @@ -507,7 +507,7 @@ static struct ndpi_flow_info *get_ndpi_flow_info6(struct ndpi_workflow * workflo iph.protocol = iph6->ip6_hdr.ip6_un1_nxt; if(iph.protocol == IPPROTO_DSTOPTS /* IPv6 destination option */) { - u_int8_t *options = (u_int8_t*)iph6 + sizeof(const struct ndpi_ipv6hdr); + const u_int8_t *options = (const u_int8_t*)iph6 + sizeof(const struct ndpi_ipv6hdr); iph.protocol = options[0]; } @@ -530,7 +530,7 @@ void process_ndpi_collected_info(struct ndpi_workflow * workflow, struct ndpi_fl /* BITTORRENT */ if(flow->detected_protocol.app_protocol == NDPI_PROTOCOL_BITTORRENT) { - int i, j, n = 0; + u_int i, j, n = 0; for(i=0, j = 0; j < sizeof(flow->bittorent_hash)-1; i++) { sprintf(&flow->bittorent_hash[j], "%02x", @@ -751,8 +751,14 @@ struct ndpi_proto ndpi_workflow_process_packet (struct ndpi_workflow * workflow, workflow->last_time = time; /*** check Data Link type ***/ - const int datalink_type = pcap_datalink(workflow->pcap_handle); + int datalink_type; +#ifdef USE_DPDK + datalink_type = DLT_EN10MB; +#else + datalink_type = (int)pcap_datalink(workflow->pcap_handle); +#endif + datalink_check: switch(datalink_type) { case DLT_NULL: @@ -1076,3 +1082,49 @@ u_int32_t ethernet_crc32(const void* data, size_t n_bytes) { __crc32(data, n_bytes, &crc); return crc; } + +/* *********************************************** */ + +#ifdef USE_DPDK + +static const struct rte_eth_conf port_conf_default = { + .rxmode = { .max_rx_pkt_len = ETHER_MAX_LEN } +}; + +/* ************************************ */ + +int dpdk_port_init(int port, struct rte_mempool *mbuf_pool) { + struct rte_eth_conf port_conf = port_conf_default; + const u_int16_t rx_rings = 1, tx_rings = 1; + int retval; + u_int16_t q; + + /* 1 RX queue */ + retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf); + + if(retval != 0) + return retval; + + for (q = 0; q < rx_rings; q++) { + retval = rte_eth_rx_queue_setup(port, q, RX_RING_SIZE, rte_eth_dev_socket_id(port), NULL, mbuf_pool); + if(retval < 0) + return retval; + } + + for (q = 0; q < tx_rings; q++) { + retval = rte_eth_tx_queue_setup(port, q, TX_RING_SIZE, rte_eth_dev_socket_id(port), NULL); + if(retval < 0) + return retval; + } + + retval = rte_eth_dev_start(port); + + if(retval < 0) + return retval; + + rte_eth_promiscuous_enable(port); + + return 0; +} + +#endif diff --git a/example/ndpi_util.h b/example/ndpi_util.h index d1d461490e4..eb9ab8e65e8 100644 --- a/example/ndpi_util.h +++ b/example/ndpi_util.h @@ -31,6 +31,24 @@ #include +#ifdef USE_DPDK +#include +#include +#include +#include +#include +#include + +#define RX_RING_SIZE 128 +#define TX_RING_SIZE 512 +#define NUM_MBUFS 8191 +#define MBUF_CACHE_SIZE 250 +#define BURST_SIZE 32 +#define PREFETCH_OFFSET 3 + +extern int dpdk_port_init(int port, struct rte_mempool *mbuf_pool); +#endif + #define MAX_NUM_READER_THREADS 16 #define IDLE_SCAN_PERIOD 10 /* msec (use TICK_RESOLUTION = 1000) */ #define MAX_IDLE_TIME 30000 From 9e72884c7b92cc334fd1b58446b56240ab1c848a Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Mon, 12 Nov 2018 12:15:41 +0100 Subject: [PATCH 106/147] Add OpenWrt Makefile --- packages/openwrt/Makefile | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/openwrt/Makefile diff --git a/packages/openwrt/Makefile b/packages/openwrt/Makefile new file mode 100644 index 00000000000..4b8429b59c1 --- /dev/null +++ b/packages/openwrt/Makefile @@ -0,0 +1,59 @@ +# +# Copyright (C) 2018 - ntop.org +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=libndpi +PKG_VERSION:=1333.ab2f3ce +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/ntop/nDPI.git +PKG_SOURCE_VERSION:=ab2f3cefc89017d73e67faa4eb4011e7e3f2044d +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_PROTO:=git + +PKG_MAINTAINER:=Emanuele Faranda +PKG_LICENSE:=GPL3 +PKG_BUILD_DEPENDS:=+libpcap +PKG_BUILD_PARALLEL:=1 + +# autogen fix +PKG_FIXUP:=autoreconf + +include $(INCLUDE_DIR)/package.mk + +define Package/libndpi + SECTION:=network + CATEGORY:=Network + #DEPENDS:=+libc +libjson-c +libpthread + TITLE:=nDPI Deep Packet Inspection Library + URL:=https://www.ntop.org +endef + +define Package/libndpi/description + Open and Extensible GPLv3 Deep Packet Inspection Library +endef + +CONFIGURE_ARGS += \ + --with-pic \ + --disable-json-c \ + +define Build/Prepare + $(call Build/Prepare/Default) +endef + +define Build/Configure + ( cd $(PKG_BUILD_DIR); ./autogen.sh ) + $(call Build/Configure/Default) +endef + +define Build/InstallDev + $(INSTALL_DIR) $(STAGING_DIR)/usr/local/include/libndpi + $(CP) $(PKG_BUILD_DIR)/src/include/* $(STAGING_DIR)/usr/local/include/libndpi + $(INSTALL_DIR) $(STAGING_DIR)/usr/local/lib + $(CP) $(PKG_BUILD_DIR)/src/lib/libndpi.* $(STAGING_DIR)/usr/local/lib +endef + +$(eval $(call BuildPackage,libndpi)) From 2b4554ad44b979a95159ed814d8f7d4a5cb45e36 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 13 Nov 2018 15:35:17 +0100 Subject: [PATCH 107/147] Updated test results --- tests/result/KakaoTalk_chat.pcap.out | 2 +- tests/result/whatsapp_voice_and_message.pcap.out | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/result/KakaoTalk_chat.pcap.out b/tests/result/KakaoTalk_chat.pcap.out index 2648cce2aaa..eedfab56a4f 100644 --- a/tests/result/KakaoTalk_chat.pcap.out +++ b/tests/result/KakaoTalk_chat.pcap.out @@ -40,7 +40,7 @@ KakaoTalk 55 9990 15 30 UDP 10.24.82.188:24596 <-> 10.188.1.1:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/118 bytes][Host: api.facebook.com] 31 UDP 10.24.82.188:38448 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: auth.kakao.com] 32 UDP 10.24.82.188:58810 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/76 bytes <-> 1 pkts/114 bytes][Host: item.kakao.com] - 33 TCP 10.24.82.188:58927 -> 54.255.253.199:5223 [proto: 178/Amazon][cat: Web/5][2 pkts/181 bytes -> 0 pkts/0 bytes] + 33 TCP 10.24.82.188:58927 -> 54.255.253.199:5223 [proto: 64.178/SSL_No_Cert.Amazon][cat: Web/5][2 pkts/181 bytes -> 0 pkts/0 bytes] 34 UDP 10.24.82.188:43077 <-> 10.188.1.1:53 [proto: 5.193/DNS.KakaoTalk][cat: VoIP/10][1 pkts/81 bytes <-> 1 pkts/97 bytes][Host: dn-l.talk.kakao.com] 35 TCP 10.24.82.188:34686 -> 173.194.72.188:5228 [proto: 126/Google][cat: Web/5][1 pkts/164 bytes -> 0 pkts/0 bytes] 36 ICMP 10.24.82.188:0 -> 10.188.191.1:0 [proto: 81/ICMP][cat: Network/14][1 pkts/147 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/whatsapp_voice_and_message.pcap.out b/tests/result/whatsapp_voice_and_message.pcap.out index 2b9ee2e268b..a8bd6e4974b 100644 --- a/tests/result/whatsapp_voice_and_message.pcap.out +++ b/tests/result/whatsapp_voice_and_message.pcap.out @@ -1,13 +1,12 @@ -SkypeCallIn 9 1184 1 WhatsApp 217 22139 5 -Messenger 35 4732 7 +Messenger 44 5916 8 1 TCP 10.8.0.1:42241 <-> 173.192.222.189:5222 [proto: 142/WhatsApp][cat: Chat/9][30 pkts/2539 bytes <-> 32 pkts/3070 bytes] 2 TCP 10.8.0.1:35480 <-> 184.173.179.46:443 [proto: 142/WhatsApp][cat: Chat/9][24 pkts/3029 bytes <-> 22 pkts/1961 bytes] 3 TCP 10.8.0.1:44819 <-> 158.85.58.42:5222 [proto: 142/WhatsApp][cat: Chat/9][15 pkts/2690 bytes <-> 15 pkts/2019 bytes] 4 TCP 10.8.0.1:49721 <-> 158.85.58.109:5222 [proto: 142/WhatsApp][cat: Chat/9][26 pkts/2311 bytes <-> 26 pkts/2300 bytes] 5 TCP 10.8.0.1:51570 <-> 158.85.5.199:443 [proto: 142/WhatsApp][cat: Chat/9][14 pkts/1123 bytes <-> 13 pkts/1097 bytes] - 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/840 bytes <-> 4 pkts/344 bytes] + 6 UDP 10.8.0.1:53620 <-> 31.13.73.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][5 pkts/840 bytes <-> 4 pkts/344 bytes] 7 UDP 10.8.0.1:53620 <-> 31.13.64.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] 8 UDP 10.8.0.1:53620 <-> 31.13.74.48:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] 9 UDP 10.8.0.1:53620 <-> 31.13.79.192:3478 [proto: 78.157/STUN.Messenger][cat: Chat/9][3 pkts/504 bytes <-> 2 pkts/172 bytes] From 977751efdbe61374bbe54f709b3fd6c1b971a9d6 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 14 Nov 2018 15:24:15 +0100 Subject: [PATCH 108/147] Added ndpi_flowv4_flow_hash and ndpi_flowv6_flow_hash skeletons for implementing https://github.com/corelight/community-id-spec --- src/include/ndpi_api.h | 8 ++ src/lib/ndpi_main.c | 24 +++++ src/lib/third_party/src/sha1-fast.c | 148 ++++++++++++++++++++++++++++ 3 files changed, 180 insertions(+) create mode 100644 src/lib/third_party/src/sha1-fast.c diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index d1e9148b2d4..d010577a51f 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -772,6 +772,14 @@ extern "C" { void * ndpi_calloc(unsigned long count, size_t size); void ndpi_free(void *ptr); u_int8_t ndpi_get_api_version(); + + /* https://github.com/corelight/community-id-spec */ + int ndpi_flowv4_flow_hash(u_int8_t l4_proto, u_int32_t src_ip, u_int32_t dst_ip, u_int16_t src_port, u_int16_t dst_port, + u_int8_t icmp_type, u_int8_t icmp_code, u_char *hash_buf, u_int8_t hash_buf_len); + int ndpi_flowv6_flow_hash(u_int8_t l4_proto, struct ndpi_in6_addr *src_ip, struct ndpi_in6_addr *dst_ip, + u_int16_t src_port, u_int16_t dst_port, u_int8_t icmp_type, u_int8_t icmp_code, + u_char *hash_buf, u_int8_t hash_buf_len); + #ifdef __cplusplus } #endif diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 8e9bb53fc24..3a6cd84ef3a 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -6063,3 +6063,27 @@ u_int ndpi_get_ndpi_detection_module_size() { void ndpi_set_log_level(struct ndpi_detection_module_struct *ndpi_mod, u_int l) { ndpi_mod->ndpi_log_level = l; } + +/* ******************************************************************** */ + +/* + NOTE: + - Leave fields empty/zero when information is missing (e.g. with ICMP ports are zero) + - The hash_buf most be 30+1 bits or longer + - Return code: 0 = OK, -1 otherwise + */ + +int ndpi_flowv4_flow_hash(u_int8_t l4_proto, u_int32_t src_ip, + u_int32_t dst_ip, u_int16_t src_port, u_int16_t dst_port, + u_int8_t icmp_type, u_int8_t icmp_code, + u_char *hash_buf, u_int8_t hash_buf_len) { + + return(0); /* OK */ +} + +int ndpi_flowv6_flow_hash(u_int8_t l4_proto, struct ndpi_in6_addr *src_ip, struct ndpi_in6_addr *dst_ip, + u_int16_t src_port, u_int16_t dst_port, u_int8_t icmp_type, u_int8_t icmp_code, + u_char *hash_buf, u_int8_t hash_buf_len) { + + return(0); /* OK */ +} diff --git a/src/lib/third_party/src/sha1-fast.c b/src/lib/third_party/src/sha1-fast.c new file mode 100644 index 00000000000..3e4932147ed --- /dev/null +++ b/src/lib/third_party/src/sha1-fast.c @@ -0,0 +1,148 @@ +/* + * SHA-1 hash in C + * + * Copyright (c) 2017 Project Nayuki. (MIT License) + * https://www.nayuki.io/page/fast-sha1-hash-implementation-in-x86-assembly + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * - The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * - The Software is provided "as is", without warranty of any kind, express or + * implied, including but not limited to the warranties of merchantability, + * fitness for a particular purpose and noninfringement. In no event shall the + * authors or copyright holders be liable for any claim, damages or other + * liability, whether in an action of contract, tort or otherwise, arising from, + * out of or in connection with the Software or the use or other dealings in the + * Software. + */ + +#include + + +void sha1_compress(uint32_t state[5], const uint8_t block[64]) { +#define ROTL32(x, n) (((0U + (x)) << (n)) | ((x) >> (32 - (n)))) // Assumes that x is uint32_t and 0 < n < 32 + +#define LOADSCHEDULE(i) \ + schedule[i] = (uint32_t)block[i * 4 + 0] << 24 \ + | (uint32_t)block[i * 4 + 1] << 16 \ + | (uint32_t)block[i * 4 + 2] << 8 \ + | (uint32_t)block[i * 4 + 3] << 0; + +#define SCHEDULE(i) \ + temp = schedule[(i - 3) & 0xF] ^ schedule[(i - 8) & 0xF] ^ schedule[(i - 14) & 0xF] ^ schedule[(i - 16) & 0xF]; \ + schedule[i & 0xF] = ROTL32(temp, 1); + +#define ROUND0a(a, b, c, d, e, i) LOADSCHEDULE(i) ROUNDTAIL(a, b, e, ((b & c) | (~b & d)) , i, 0x5A827999) +#define ROUND0b(a, b, c, d, e, i) SCHEDULE(i) ROUNDTAIL(a, b, e, ((b & c) | (~b & d)) , i, 0x5A827999) +#define ROUND1(a, b, c, d, e, i) SCHEDULE(i) ROUNDTAIL(a, b, e, (b ^ c ^ d) , i, 0x6ED9EBA1) +#define ROUND2(a, b, c, d, e, i) SCHEDULE(i) ROUNDTAIL(a, b, e, ((b & c) ^ (b & d) ^ (c & d)), i, 0x8F1BBCDC) +#define ROUND3(a, b, c, d, e, i) SCHEDULE(i) ROUNDTAIL(a, b, e, (b ^ c ^ d) , i, 0xCA62C1D6) + +#ifndef UINT32_C +#define UINT32_C(c)c ## U +#endif + +#define ROUNDTAIL(a, b, e, f, i, k) \ + e = 0U + e + ROTL32(a, 5) + f + UINT32_C(k) + schedule[i & 0xF]; \ + b = ROTL32(b, 30); + + uint32_t a = state[0]; + uint32_t b = state[1]; + uint32_t c = state[2]; + uint32_t d = state[3]; + uint32_t e = state[4]; + + uint32_t schedule[16]; + uint32_t temp; + ROUND0a(a, b, c, d, e, 0) + ROUND0a(e, a, b, c, d, 1) + ROUND0a(d, e, a, b, c, 2) + ROUND0a(c, d, e, a, b, 3) + ROUND0a(b, c, d, e, a, 4) + ROUND0a(a, b, c, d, e, 5) + ROUND0a(e, a, b, c, d, 6) + ROUND0a(d, e, a, b, c, 7) + ROUND0a(c, d, e, a, b, 8) + ROUND0a(b, c, d, e, a, 9) + ROUND0a(a, b, c, d, e, 10) + ROUND0a(e, a, b, c, d, 11) + ROUND0a(d, e, a, b, c, 12) + ROUND0a(c, d, e, a, b, 13) + ROUND0a(b, c, d, e, a, 14) + ROUND0a(a, b, c, d, e, 15) + ROUND0b(e, a, b, c, d, 16) + ROUND0b(d, e, a, b, c, 17) + ROUND0b(c, d, e, a, b, 18) + ROUND0b(b, c, d, e, a, 19) + ROUND1(a, b, c, d, e, 20) + ROUND1(e, a, b, c, d, 21) + ROUND1(d, e, a, b, c, 22) + ROUND1(c, d, e, a, b, 23) + ROUND1(b, c, d, e, a, 24) + ROUND1(a, b, c, d, e, 25) + ROUND1(e, a, b, c, d, 26) + ROUND1(d, e, a, b, c, 27) + ROUND1(c, d, e, a, b, 28) + ROUND1(b, c, d, e, a, 29) + ROUND1(a, b, c, d, e, 30) + ROUND1(e, a, b, c, d, 31) + ROUND1(d, e, a, b, c, 32) + ROUND1(c, d, e, a, b, 33) + ROUND1(b, c, d, e, a, 34) + ROUND1(a, b, c, d, e, 35) + ROUND1(e, a, b, c, d, 36) + ROUND1(d, e, a, b, c, 37) + ROUND1(c, d, e, a, b, 38) + ROUND1(b, c, d, e, a, 39) + ROUND2(a, b, c, d, e, 40) + ROUND2(e, a, b, c, d, 41) + ROUND2(d, e, a, b, c, 42) + ROUND2(c, d, e, a, b, 43) + ROUND2(b, c, d, e, a, 44) + ROUND2(a, b, c, d, e, 45) + ROUND2(e, a, b, c, d, 46) + ROUND2(d, e, a, b, c, 47) + ROUND2(c, d, e, a, b, 48) + ROUND2(b, c, d, e, a, 49) + ROUND2(a, b, c, d, e, 50) + ROUND2(e, a, b, c, d, 51) + ROUND2(d, e, a, b, c, 52) + ROUND2(c, d, e, a, b, 53) + ROUND2(b, c, d, e, a, 54) + ROUND2(a, b, c, d, e, 55) + ROUND2(e, a, b, c, d, 56) + ROUND2(d, e, a, b, c, 57) + ROUND2(c, d, e, a, b, 58) + ROUND2(b, c, d, e, a, 59) + ROUND3(a, b, c, d, e, 60) + ROUND3(e, a, b, c, d, 61) + ROUND3(d, e, a, b, c, 62) + ROUND3(c, d, e, a, b, 63) + ROUND3(b, c, d, e, a, 64) + ROUND3(a, b, c, d, e, 65) + ROUND3(e, a, b, c, d, 66) + ROUND3(d, e, a, b, c, 67) + ROUND3(c, d, e, a, b, 68) + ROUND3(b, c, d, e, a, 69) + ROUND3(a, b, c, d, e, 70) + ROUND3(e, a, b, c, d, 71) + ROUND3(d, e, a, b, c, 72) + ROUND3(c, d, e, a, b, 73) + ROUND3(b, c, d, e, a, 74) + ROUND3(a, b, c, d, e, 75) + ROUND3(e, a, b, c, d, 76) + ROUND3(d, e, a, b, c, 77) + ROUND3(c, d, e, a, b, 78) + ROUND3(b, c, d, e, a, 79) + + state[0] = 0U + state[0] + a; + state[1] = 0U + state[1] + b; + state[2] = 0U + state[2] + c; + state[3] = 0U + state[3] + d; + state[4] = 0U + state[4] + e; +} From 8c63f25478ac5883478df769b927f4aaaa050e62 Mon Sep 17 00:00:00 2001 From: Guido Falsi Date: Thu, 15 Nov 2018 09:09:52 +0100 Subject: [PATCH 109/147] Also create the libndpi.so.2 link. This is created bydefault by all build tools for libraries and required in certain cases. FreeBSD linker requires it when using SONAME. --- src/lib/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 1f07773e9f3..273f8e89d9f 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -47,6 +47,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(NDPI_LIB_SHARED): $(OBJECTS) $(CC) -shared -fPIC $(SONAME_FLAG) -o $@ $(OBJECTS) ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) + ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ @@ -58,5 +59,6 @@ install: $(NDPI_LIBS) mkdir -p $(DESTDIR)$(libdir) cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ ln -Ffs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) + ln -Ffs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) mkdir -p $(DESTDIR)$(includedir) cp ../include/*.h $(DESTDIR)$(includedir) From 6e6b825e92367f80b8870791a6a9a0a4ae3d5ead Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Thu, 15 Nov 2018 16:18:45 +0100 Subject: [PATCH 110/147] Improved skype heuristic --- src/lib/protocols/skype.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index 698fff0522d..dbc960b3e68 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -23,9 +23,16 @@ #include "ndpi_api.h" +static void ndpi_skype_report_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; -static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ + printf("-> payload_len=%u\n", flow->packet.payload_packet_len); + + NDPI_LOG_INFO(ndpi_struct, "found skype\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); +} + +static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; // const u_int8_t *packet_payload = packet->payload; u_int32_t payload_len = packet->payload_packet_len; @@ -47,8 +54,7 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s ((payload_len >= 16) && (packet->payload[0] != 0x30) /* Avoid invalid SNMP detection */ && (packet->payload[2] == 0x02))) { - NDPI_LOG_INFO(ndpi_struct, "found skype\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_UNKNOWN); + ndpi_skype_report_protocol(ndpi_struct, flow); } } return; @@ -71,9 +77,9 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s if((payload_len == 8) || (payload_len == 3) || (payload_len == 17)) { // printf("[SKYPE] payload_len=%u\n", payload_len); /* printf("[SKYPE] %u/%u\n", ntohs(packet->tcp->source), ntohs(packet->tcp->dest)); */ - + NDPI_LOG_INFO(ndpi_struct, "found skype\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE, NDPI_PROTOCOL_UNKNOWN); + ndpi_skype_report_protocol(ndpi_struct, flow); } else { // printf("NO [SKYPE] payload_len=%u\n", payload_len); } From 22c2568c276aaa81c6131b3a6a7bc8c0c6cdc5b7 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Fri, 16 Nov 2018 19:21:57 +0100 Subject: [PATCH 111/147] commented out debug print --- src/lib/protocols/skype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index dbc960b3e68..e544724a5f3 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -26,7 +26,7 @@ static void ndpi_skype_report_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; - printf("-> payload_len=%u\n", flow->packet.payload_packet_len); + //printf("-> payload_len=%u\n", flow->packet.payload_packet_len); NDPI_LOG_INFO(ndpi_struct, "found skype\n"); ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); From 0ee451040d57610f1965ef2a78dd4a2e8f5b3442 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Sun, 18 Nov 2018 12:50:53 +0100 Subject: [PATCH 112/147] Warning fix --- example/ndpiReader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 89f5714a894..d9e150be700 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -2703,7 +2703,7 @@ void test_lib() { void automataUnitTest() { void *automa; - assert(automa = ndpi_init_automa()); + assert((automa = ndpi_init_automa())); assert(ndpi_add_string_to_automa(automa, "hello") == 0); assert(ndpi_add_string_to_automa(automa, "world") == 0); ndpi_finalize_automa(automa); From 219951760f35c3defc2d413af667ad155c5faf68 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 11:16:28 +0100 Subject: [PATCH 113/147] ubuntu ndpi/ndpi-dev package (testing) --- packages/debian | 1 + packages/ubuntu/Makefile | 42 --------------------- packages/ubuntu/Makefile.in | 24 ++++++------ packages/ubuntu/configure | 57 +++++++++++++++++++---------- packages/ubuntu/configure.in | 41 +++++++++++++-------- packages/ubuntu/debian/README | 2 +- packages/ubuntu/debian/changelog.in | 2 +- packages/ubuntu/debian/compat | 2 +- packages/ubuntu/debian/control.in | 10 ++--- packages/ubuntu/debian/dirs | 1 - packages/ubuntu/debian/postinst | 11 ------ packages/ubuntu/debian/postrm | 6 --- packages/ubuntu/debian/preinst | 7 +--- packages/ubuntu/debian/prerm | 6 +-- packages/ubuntu/debian/rules | 23 ++++-------- 15 files changed, 92 insertions(+), 143 deletions(-) create mode 120000 packages/debian delete mode 100644 packages/ubuntu/Makefile diff --git a/packages/debian b/packages/debian new file mode 120000 index 00000000000..7d13753d73e --- /dev/null +++ b/packages/debian @@ -0,0 +1 @@ +ubuntu \ No newline at end of file diff --git a/packages/ubuntu/Makefile b/packages/ubuntu/Makefile deleted file mode 100644 index 5f1684155ea..00000000000 --- a/packages/ubuntu/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Change it according to your setup -# -NDPI_HOME=$(PWD)/../.. -NDPI_BUILD=${NDPI_HOME}/packages/ubuntu - -all: clean ndpi - -ndpi: - \rm -rf ./usr ./debian/tmp ./debian/ndpi-dev - mkdir -p ./usr/local ./debian/ndpi-dev - mkdir -p ./usr/local/ndpi/lib ./usr/local/ndpi/bin ./ndpi-dev/usr/local/include/ndpi/ - cd ${NDPI_HOME}; ./autogen.sh; ./configure; make - cp $(NDPI_HOME)/lib/libndpi.a $(NDPI_HOME)/lib/libndpi.so* ./usr/local/ndpi/lib/ - cp $(NDPI_HOME)/example/ndpiReader ./usr/local/ndpi/bin/ - cp $(NDPI_HOME)/src/include/*.h ndpi-dev/usr/local/include/ndpi/ - -rm -fr ndpi-dev/usr/local/include/nprobe/ndpi/.svn ndpi-dev/usr/local/include/ndpi/Makefile* ndpi-dev/usr/local/include/ndpi/ndpi_win32.h* ndpi-dev/usr/local/include/ndpi/include - -find ./usr/local/lib -name "*.la" -exec /bin/rm {} ';' - @echo - @find . -name "*~" -exec /bin/rm {} ';' - dpkg-buildpackage -rfakeroot -d -us -uc - dpkg-sig --sign builder -k 7921DF34 ../ndpi*deb - @\rm -f ../ndpi*dsc ../ndpi*.gz ../ndpi*changes - @/bin/mv ../ndpi*deb . - @echo - @echo "Package built." - @/bin/ls ndpi*deb - @echo "-------------------------------" - -dpkg --contents ndpi*amd64.deb - @echo "-------------------------------" - @echo "-------------------------------" - -dpkg --contents ndpi*all.deb - @echo "-------------------------------" - -distclean: - echo "dummy distclean" - -install: - echo "dummy install" - -clean: - -rm -rf *~ *deb debian/tmp ./usr diff --git a/packages/ubuntu/Makefile.in b/packages/ubuntu/Makefile.in index 5f1684155ea..bff183ebfdf 100644 --- a/packages/ubuntu/Makefile.in +++ b/packages/ubuntu/Makefile.in @@ -7,17 +7,19 @@ NDPI_BUILD=${NDPI_HOME}/packages/ubuntu all: clean ndpi ndpi: - \rm -rf ./usr ./debian/tmp ./debian/ndpi-dev - mkdir -p ./usr/local ./debian/ndpi-dev - mkdir -p ./usr/local/ndpi/lib ./usr/local/ndpi/bin ./ndpi-dev/usr/local/include/ndpi/ + \rm -rf ./debian/ndpi-tmp ./debian/ndpi-dev-tmp ./debian/ndpi ./debian/ndpi-dev + mkdir -p ./debian/ndpi-tmp ./debian/ndpi-dev-tmp + mkdir -p ./debian/ndpi-tmp/usr/local/lib ./debian/ndpi-tmp/usr/local/bin + mkdir -p ./debian/ndpi-dev-tmp/usr/local/lib ./debian/ndpi-dev-tmp/usr/local/include/ndpi cd ${NDPI_HOME}; ./autogen.sh; ./configure; make - cp $(NDPI_HOME)/lib/libndpi.a $(NDPI_HOME)/lib/libndpi.so* ./usr/local/ndpi/lib/ - cp $(NDPI_HOME)/example/ndpiReader ./usr/local/ndpi/bin/ - cp $(NDPI_HOME)/src/include/*.h ndpi-dev/usr/local/include/ndpi/ - -rm -fr ndpi-dev/usr/local/include/nprobe/ndpi/.svn ndpi-dev/usr/local/include/ndpi/Makefile* ndpi-dev/usr/local/include/ndpi/ndpi_win32.h* ndpi-dev/usr/local/include/ndpi/include - -find ./usr/local/lib -name "*.la" -exec /bin/rm {} ';' + cp $(NDPI_HOME)/src/lib/libndpi.so* ./debian/ndpi-tmp/usr/local/lib/ + cp $(NDPI_HOME)/src/lib/libndpi.a ./debian/ndpi-dev-tmp/usr/local/lib/ + cp $(NDPI_HOME)/example/ndpiReader ./debian/ndpi-tmp/usr/local/bin/ + cp $(NDPI_HOME)/src/include/*.h ./debian/ndpi-dev-tmp/usr/local/include/ndpi/ + -rm -fr ./debian/ndpi-dev-tmp/usr/local/include/ndpi/ndpi_win32.h* @echo - @find . -name "*~" -exec /bin/rm {} ';' + @find ./debian/ndpi-tmp -name "*~" -exec /bin/rm {} ';' + @find ./debian/ndpi-dev-tmp -name "*~" -exec /bin/rm {} ';' dpkg-buildpackage -rfakeroot -d -us -uc dpkg-sig --sign builder -k 7921DF34 ../ndpi*deb @\rm -f ../ndpi*dsc ../ndpi*.gz ../ndpi*changes @@ -26,7 +28,7 @@ ndpi: @echo "Package built." @/bin/ls ndpi*deb @echo "-------------------------------" - -dpkg --contents ndpi*amd64.deb + -dpkg --contents ndpi*@EXTN@.deb @echo "-------------------------------" @echo "-------------------------------" -dpkg --contents ndpi*all.deb @@ -39,4 +41,4 @@ install: echo "dummy install" clean: - -rm -rf *~ *deb debian/tmp ./usr + -rm -rf *~ *deb ./usr ./debian/ndpi ./debian/ndpi-dev ./debian/ndpi-tmp ./debian/ndpi-dev-tmp diff --git a/packages/ubuntu/configure b/packages/ubuntu/configure index 857a095ca7a..ab2436b4036 100755 --- a/packages/ubuntu/configure +++ b/packages/ubuntu/configure @@ -583,13 +583,12 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS -PFRING_SVN_RELEASE -SVN_RELEASE +GIT_COMMITS +GIT_RELEASE KERNEL DATE EXTN MACHINE -PFRING_VERS NDPI_VERS target_alias host_alias @@ -610,6 +609,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -674,6 +674,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -926,6 +927,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1063,7 +1073,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1216,6 +1226,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1670,37 +1681,43 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -NDPI_VERS=`cat ../../config.h | grep -w VERSION | cut -d \" -f 2` -PFRING_VERS=`cat $HOME/PF_RING/kernel/linux/pf_ring.h | grep RING_VERSION | head -1 | cut -d '"' -f 2` -SVN_RELEASE=`svn info ../.. | grep "^Revision"|cut -d " " -f 2` -PFRING_SVN_RELEASE=`svn info $HOME/PF_RING | grep "^Revision"|cut -d " " -f 2` +DATE=`date -R` +KERNEL=`uname -r` MACHINE=`uname -m` +SHORT_MACHINE=`uname -m | cut -b1-3` +EXTN="" if test $MACHINE = "x86_64"; then - EXTN="amd64" + EXTN="amd64" else - EXTN="i386" + if test $SHORT_MACHINE = "aar"; then + EXTN="arm64" + else + if test $SHORT_MACHINE = "arm"; then + EXTN="armhf" + else + if test $SHORT_MACHINE = "mip"; then + EXTN="mips" + else + EXTN="i386" + fi + fi + fi fi -DATE=`date -R` -KERNEL=`uname -r` - - - - +NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` +GIT_RELEASE=`git rev-parse HEAD` +GIT_COMMITS=`git rev-list --all |wc -l | tr -d '[:space:]'` +ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/control" -ac_config_files="$ac_config_files Makefile" -ac_config_files="$ac_config_files debian/changelog" -ac_config_files="$ac_config_files debian/files" -ac_config_files="$ac_config_files debian/control" cat >confcache <<\_ACEOF diff --git a/packages/ubuntu/configure.in b/packages/ubuntu/configure.in index bf0608cf5cd..88a5788be08 100644 --- a/packages/ubuntu/configure.in +++ b/packages/ubuntu/configure.in @@ -1,32 +1,41 @@ AC_INIT([Makefile.in], 1.0) -NDPI_VERS=`cat ../../config.h | grep -w VERSION | cut -d \" -f 2` -PFRING_VERS=`cat $HOME/PF_RING/kernel/linux/pf_ring.h | grep RING_VERSION | head -1 | cut -d '"' -f 2` -SVN_RELEASE=`svn info ../.. | grep "^Revision"|cut -d " " -f 2` -PFRING_SVN_RELEASE=`svn info $HOME/PF_RING | grep "^Revision"|cut -d " " -f 2` +DATE=`date -R` +KERNEL=`uname -r` MACHINE=`uname -m` +SHORT_MACHINE=`uname -m | cut -b1-3` +EXTN="" if test $MACHINE = "x86_64"; then - EXTN="amd64" + EXTN="amd64" else - EXTN="i386" + if test $SHORT_MACHINE = "aar"; then + EXTN="arm64" + else + if test $SHORT_MACHINE = "arm"; then + EXTN="armhf" + else + if test $SHORT_MACHINE = "mip"; then + EXTN="mips" + else + EXTN="i386" + fi + fi + fi fi -DATE=`date -R` -KERNEL=`uname -r` +NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` +GIT_RELEASE=`git rev-parse HEAD` +GIT_COMMITS=`git rev-list --all |wc -l | tr -d '[[:space:]]'` + +AC_CONFIG_FILES([Makefile debian/changelog debian/files debian/control]) AC_SUBST(NDPI_VERS) -AC_SUBST(PFRING_VERS) AC_SUBST(MACHINE) AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) -AC_SUBST(SVN_RELEASE) -AC_SUBST(PFRING_SVN_RELEASE) - -AC_CONFIG_FILES(Makefile) -AC_CONFIG_FILES(debian/changelog) -AC_CONFIG_FILES(debian/files) -AC_CONFIG_FILES(debian/control) +AC_SUBST(GIT_RELEASE) +AC_SUBST(GIT_COMMITS) AC_OUTPUT diff --git a/packages/ubuntu/debian/README b/packages/ubuntu/debian/README index 6563a5d368a..ccecea75aab 100644 --- a/packages/ubuntu/debian/README +++ b/packages/ubuntu/debian/README @@ -1,2 +1,2 @@ This directory contains the files needed to build the package -named 'nprobe' for the Debian GNU/Linux distribution. +named 'ndpi' for the Debian GNU/Linux distribution. diff --git a/packages/ubuntu/debian/changelog.in b/packages/ubuntu/debian/changelog.in index 15d86b02da5..a5ed21450de 100644 --- a/packages/ubuntu/debian/changelog.in +++ b/packages/ubuntu/debian/changelog.in @@ -1,4 +1,4 @@ -ndpi (@NDPI_VERS@-@SVN_RELEASE@) stable; urgency=high +ndpi (@NDPI_VERS@-@GIT_COMMITS@) stable; urgency=high * Last packaged version -- Luca Deri @DATE@ diff --git a/packages/ubuntu/debian/compat b/packages/ubuntu/debian/compat index d00491fd7e5..ec635144f60 100644 --- a/packages/ubuntu/debian/compat +++ b/packages/ubuntu/debian/compat @@ -1 +1 @@ -1 +9 diff --git a/packages/ubuntu/debian/control.in b/packages/ubuntu/debian/control.in index 56191e2eb34..f55c829799b 100644 --- a/packages/ubuntu/debian/control.in +++ b/packages/ubuntu/debian/control.in @@ -2,27 +2,25 @@ Source: ndpi Section: free Priority: optional Maintainer: Luca Deri -Standards-Version: @NDPI_VERSION@ +Standards-Version: @NDPI_VERS@ Build-Depends: Build-Conflicts: Package: ndpi Architecture: @EXTN@ -Depends: pfring (=@PFRING_VERS@-@PFRING_SVN_RELEASE@), libnuma +Depends: libnuma Recommends: Suggests: Pre-Depends: Conflicts: Provides: Replaces: -Description: A network probe. +Description: A L7 DPI library. Package: ndpi-dev Section: libdevel Architecture: all Depends: ndpi (= ${binary:Version}), ${misc:Depends} Conflicts: -Description: development library and header files for ndpi - Headers, static libraries, and documentation for the ndpi library - +Description: Development library and header files for ndpi diff --git a/packages/ubuntu/debian/dirs b/packages/ubuntu/debian/dirs index c648ad7d043..e69de29bb2d 100644 --- a/packages/ubuntu/debian/dirs +++ b/packages/ubuntu/debian/dirs @@ -1 +0,0 @@ -usr/local/ndpi diff --git a/packages/ubuntu/debian/postinst b/packages/ubuntu/debian/postinst index 65bf042303e..202f79aa8ee 100755 --- a/packages/ubuntu/debian/postinst +++ b/packages/ubuntu/debian/postinst @@ -17,18 +17,7 @@ esac umask 022 -# Update shared libs -echo "/usr/local/lib\n" > /etc/ld.so.conf.d/nprobe.conf echo "Rebuilding ld cache..." /sbin/ldconfig -echo "Adding the nprobe startup script" -update-rc.d nprobe defaults 93 >/dev/null - -echo "Making the /etc/nprobe directory..." -mkdir -p /etc/nprobe/ - -echo "Making the /var/log/nprobe directory..." -mkdir -p /var/log/nprobe - exit 0 diff --git a/packages/ubuntu/debian/postrm b/packages/ubuntu/debian/postrm index 8ea16af2d36..3347514a19d 100644 --- a/packages/ubuntu/debian/postrm +++ b/packages/ubuntu/debian/postrm @@ -2,12 +2,6 @@ set -e -#\/bin/rm /etc/ld.so.conf.d/nprobe.conf /sbin/ldconfig -# Not needed: upstart does it -if [ "$1" = "purge" ] ; then - update-rc.d nprobe remove >/dev/null -fi - exit 0 diff --git a/packages/ubuntu/debian/preinst b/packages/ubuntu/debian/preinst index cf9323e9480..89699e385b8 100644 --- a/packages/ubuntu/debian/preinst +++ b/packages/ubuntu/debian/preinst @@ -1,5 +1,5 @@ #! /bin/sh -# preinst script for nbox +# preinst script # # see: dh_installdeb(1) @@ -13,9 +13,6 @@ set -e case "$1" in install|upgrade) - if test -f /usr/local/sbin/nprobe; then - rm /usr/local/sbin/nprobe - fi ;; abort-upgrade) @@ -30,6 +27,4 @@ esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. - - exit 0 diff --git a/packages/ubuntu/debian/prerm b/packages/ubuntu/debian/prerm index 58af3b74c1e..8f91692e01a 100755 --- a/packages/ubuntu/debian/prerm +++ b/packages/ubuntu/debian/prerm @@ -1,14 +1,10 @@ #!/bin/sh -e -# Only shut the daemon down if we're really removing the package. If this is -# an upgrade, we will instead do a restart in the postinst... this keeps nprobe -# from being left shut down for a long time, which could pose problems. case "$1" in upgrade) ;; *) - /etc/init.d/nprobe stop ;; esac -exit 0 \ No newline at end of file +exit 0 diff --git a/packages/ubuntu/debian/rules b/packages/ubuntu/debian/rules index a5fbcda0995..a72ae122f47 100755 --- a/packages/ubuntu/debian/rules +++ b/packages/ubuntu/debian/rules @@ -1,16 +1,7 @@ #!/usr/bin/make -f # Uncomment this to turn on verbose mode. -# export DH_VERBOSE=1 - -# -# debian/compat -# We should use at least compatibility version 5 -# but this requires the whole building process -# to be remade and this is something we leave -# to when we will have more time -# http://www.tin.org/bin/man.cgi?section=7&topic=debhelper -# +export DH_VERBOSE=1 package=ndpi @@ -37,20 +28,20 @@ binary-indep: build install binary-arch: build install dh_testdir dh_testroot - dh_clean -k + dh_prep + #dh_clean -k dh_installdirs dh_installinit dh_installman -# install the files into debian/tmp. - cp -r ./usr/ ./debian/tmp - cp -r ./ndpi-dev/* ./debian/ndpi-dev/ - -find ./debian/tmp -name .svn -exec /bin/rm -rf {} ';' - -find ./debian/tmp -executable -type f |xargs strip dh_link dh_strip dh_compress dh_fixperms dh_installdeb + mkdir -p ./debian/ndpi ./debian/ndpi-dev + cp -r ./debian/ndpi-tmp/* ./debian/ndpi/ + cp -r ./debian/ndpi-dev-tmp/* ./debian/ndpi-dev/ + -find ./debian/ndpi -executable -type f | xargs strip dh_gencontrol dh_md5sums dh_builddeb From 30305cf4fabeda16a99261b6e7c788658b88fcbe Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 15:13:38 +0100 Subject: [PATCH 114/147] deb dependency fix --- packages/ubuntu/debian/control.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ubuntu/debian/control.in b/packages/ubuntu/debian/control.in index f55c829799b..d15a0903186 100644 --- a/packages/ubuntu/debian/control.in +++ b/packages/ubuntu/debian/control.in @@ -8,7 +8,7 @@ Build-Conflicts: Package: ndpi Architecture: @EXTN@ -Depends: libnuma +Depends: libnuma1 Recommends: Suggests: Pre-Depends: From b0cfe0b9ccc87547940cca213033c0c026897e01 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 15:27:24 +0100 Subject: [PATCH 115/147] settins arch for -dev package as it contains static libs --- packages/ubuntu/Makefile.in | 4 ++-- packages/ubuntu/debian/control.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ubuntu/Makefile.in b/packages/ubuntu/Makefile.in index bff183ebfdf..33ecaac3498 100644 --- a/packages/ubuntu/Makefile.in +++ b/packages/ubuntu/Makefile.in @@ -28,10 +28,10 @@ ndpi: @echo "Package built." @/bin/ls ndpi*deb @echo "-------------------------------" - -dpkg --contents ndpi*@EXTN@.deb + -dpkg --contents ndpi_*.deb @echo "-------------------------------" @echo "-------------------------------" - -dpkg --contents ndpi*all.deb + -dpkg --contents ndpi-dev_*.deb @echo "-------------------------------" distclean: diff --git a/packages/ubuntu/debian/control.in b/packages/ubuntu/debian/control.in index d15a0903186..cf9a26488e9 100644 --- a/packages/ubuntu/debian/control.in +++ b/packages/ubuntu/debian/control.in @@ -19,7 +19,7 @@ Description: A L7 DPI library. Package: ndpi-dev Section: libdevel -Architecture: all +Architecture: @EXTN@ Depends: ndpi (= ${binary:Version}), ${misc:Depends} Conflicts: Description: Development library and header files for ndpi From 153766917891cd0d4abebc9035bbb427d3a9fbc1 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 18:02:06 +0100 Subject: [PATCH 116/147] rpm package --- example/Makefile.in | 2 +- packages/etc/ld.so.conf.d/ndpi.conf | 1 + packages/rpm/configure | 2869 +++++++++++++++++++++++++++ packages/rpm/rpm-sign.exp | 10 + packages/ubuntu/configure | 18 +- packages/ubuntu/configure.in | 4 +- packages/ubuntu/debian/changelog.in | 2 +- src/lib/Makefile.in | 4 +- 8 files changed, 2889 insertions(+), 21 deletions(-) create mode 100644 packages/etc/ld.so.conf.d/ndpi.conf create mode 100755 packages/rpm/configure create mode 100755 packages/rpm/rpm-sign.exp diff --git a/example/Makefile.in b/example/Makefile.in index a5ca6acce6c..5ee981bd137 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -14,7 +14,7 @@ ndpiReader: $(OBJS) $(LIBNDPI) $(CC) $(CFLAGS) -c $< -o $@ install: - cp ndpiReader $(DESTDIR)$(PREFIX)/bin + cp ndpiReader $(DESTDIR)$(PREFIX)/bin/ dpdk: make -f Makefile.dpdk diff --git a/packages/etc/ld.so.conf.d/ndpi.conf b/packages/etc/ld.so.conf.d/ndpi.conf new file mode 100644 index 00000000000..e8e4bdcd42e --- /dev/null +++ b/packages/etc/ld.so.conf.d/ndpi.conf @@ -0,0 +1 @@ +/usr/local/lib diff --git a/packages/rpm/configure b/packages/rpm/configure new file mode 100755 index 00000000000..45e05620f29 --- /dev/null +++ b/packages/rpm/configure @@ -0,0 +1,2869 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for Makefile.in 1.0. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Makefile.in' +PACKAGE_TARNAME='makefile-in' +PACKAGE_VERSION='1.0' +PACKAGE_STRING='Makefile.in 1.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_subst_vars='LTLIBOBJS +LIBOBJS +GIT_REVISION +GIT_RELEASE +KERNEL +DATE +EXTN +MACHINE +PLATFORM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +' + ac_precious_vars='build_alias +host_alias +target_alias' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Makefile.in 1.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/makefile-in] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Makefile.in 1.0:";; + esac + cat <<\_ACEOF + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Makefile.in configure 1.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Makefile.in $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +DATE=`date -R` +KERNEL=`uname -r` +PLATFORM=`uname -p` +MACHINE=`uname -m` +SHORT_MACHINE=`uname -m | cut -b1-3` + +EXTN="" +if test $MACHINE = "x86_64"; then + EXTN="amd64" +else + if test $SHORT_MACHINE = "aar"; then + EXTN="arm64" + else + if test $SHORT_MACHINE = "arm"; then + EXTN="armhf" + else + if test $SHORT_MACHINE = "mip"; then + EXTN="mips" + else + EXTN="i386" + fi + fi + fi +fi + +PACKAGE_VERSION=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` +GIT_RELEASE=`git rev-parse HEAD` +GIT_REVISION=`git rev-list --all |wc -l | tr -d '[:space:]'` + +ac_config_files="$ac_config_files Makefile ndpi.spec" + + + + + + + + + + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Makefile.in $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Makefile.in config.status 1.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "ndpi.spec") CONFIG_FILES="$CONFIG_FILES ndpi.spec" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/packages/rpm/rpm-sign.exp b/packages/rpm/rpm-sign.exp new file mode 100755 index 00000000000..04e4240142c --- /dev/null +++ b/packages/rpm/rpm-sign.exp @@ -0,0 +1,10 @@ +#!/usr/bin/expect -f + +### rpm-sign.exp -- Sign RPMs by sending the passphrase. + +spawn rpm --addsign {*}$argv + expect -exact "Enter pass phrase: " + send -- "\r" + expect eof + +## end of rpm-sign.exp \ No newline at end of file diff --git a/packages/ubuntu/configure b/packages/ubuntu/configure index ab2436b4036..77b5b716457 100755 --- a/packages/ubuntu/configure +++ b/packages/ubuntu/configure @@ -583,7 +583,7 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS -GIT_COMMITS +GIT_REVISION GIT_RELEASE KERNEL DATE @@ -609,7 +609,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -674,7 +673,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -927,15 +925,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1073,7 +1062,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1226,7 +1215,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1707,7 +1695,7 @@ fi NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` GIT_RELEASE=`git rev-parse HEAD` -GIT_COMMITS=`git rev-list --all |wc -l | tr -d '[:space:]'` +GIT_REVISION=`git rev-list --all |wc -l | tr -d '[:space:]'` ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/control" diff --git a/packages/ubuntu/configure.in b/packages/ubuntu/configure.in index 88a5788be08..0193b6e7817 100644 --- a/packages/ubuntu/configure.in +++ b/packages/ubuntu/configure.in @@ -26,7 +26,7 @@ fi NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` GIT_RELEASE=`git rev-parse HEAD` -GIT_COMMITS=`git rev-list --all |wc -l | tr -d '[[:space:]]'` +GIT_REVISION=`git rev-list --all |wc -l | tr -d '[[:space:]]'` AC_CONFIG_FILES([Makefile debian/changelog debian/files debian/control]) @@ -36,6 +36,6 @@ AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) AC_SUBST(GIT_RELEASE) -AC_SUBST(GIT_COMMITS) +AC_SUBST(GIT_REVISION) AC_OUTPUT diff --git a/packages/ubuntu/debian/changelog.in b/packages/ubuntu/debian/changelog.in index a5ed21450de..bf80f34a9eb 100644 --- a/packages/ubuntu/debian/changelog.in +++ b/packages/ubuntu/debian/changelog.in @@ -1,4 +1,4 @@ -ndpi (@NDPI_VERS@-@GIT_COMMITS@) stable; urgency=high +ndpi (@NDPI_VERS@-@GIT_REVISION@) stable; urgency=high * Last packaged version -- Luca Deri @DATE@ diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 1f07773e9f3..aad90d48662 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -46,7 +46,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(NDPI_LIB_SHARED): $(OBJECTS) $(CC) -shared -fPIC $(SONAME_FLAG) -o $@ $(OBJECTS) - ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) + ln -Ffsr $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ @@ -57,6 +57,6 @@ clean: install: $(NDPI_LIBS) mkdir -p $(DESTDIR)$(libdir) cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ - ln -Ffs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) + ln -Ffsr $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) mkdir -p $(DESTDIR)$(includedir) cp ../include/*.h $(DESTDIR)$(includedir) From 582da8d4bb00ed6be656451fbd6ebde6719c5ce2 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 19 Nov 2018 18:24:33 +0100 Subject: [PATCH 117/147] Improved WeChat support Removed Musical.ly protocol as the service has been merged with another one and thus it is no longer used Improved guess for UDP protocols --- example/ndpiReader.c | 1 + src/include/ndpi_api.h | 2 + src/include/ndpi_main.h | 1 + src/include/ndpi_protocol_ids.h | 2 +- src/include/ndpi_typedefs.h | 2 +- src/lib/ndpi_content_match.c.inc | 13 +++-- src/lib/ndpi_main.c | 93 +++++++++++++++++++------------- src/lib/protocols/dropbox.c | 26 ++++++--- src/lib/protocols/eaq.c | 10 ++-- src/lib/protocols/skype.c | 17 ++++-- 10 files changed, 107 insertions(+), 60 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index d9e150be700..cb3238a881f 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -911,6 +911,7 @@ static void node_print_known_proto_walker(const void *node, static u_int16_t node_guess_undetected_protocol(u_int16_t thread_id, struct ndpi_flow_info *flow) { flow->detected_protocol = ndpi_guess_undetected_protocol(ndpi_thread_info[thread_id].workflow->ndpi_struct, + NULL, flow->protocol, ntohl(flow->src_ip), ntohs(flow->src_port), diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index d010577a51f..c7ed7cd17d5 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -326,6 +326,7 @@ extern "C" { * Search and return the protocol guessed that is undetected * * @par ndpi_struct = the detection module + * @par flow = the flow we're trying to guess, NULL if not available * @par proto = the l4 protocol number * @par shost = source address in host byte order * @par sport = source port number @@ -335,6 +336,7 @@ extern "C" { * */ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int8_t proto, u_int32_t shost, u_int16_t sport, diff --git a/src/include/ndpi_main.h b/src/include/ndpi_main.h index 3517d45b293..41280fb8e0c 100644 --- a/src/include/ndpi_main.h +++ b/src/include/ndpi_main.h @@ -119,6 +119,7 @@ extern "C" { u_int16_t ndpi_get_proto_by_name(struct ndpi_detection_module_struct *ndpi_mod, const char *name); extern u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int8_t proto, u_int16_t sport, u_int16_t dport, u_int8_t *user_defined_proto); diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 0d2712d207f..aefb0fce2f4 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -73,7 +73,7 @@ typedef enum { NDPI_PROTOCOL_EDONKEY = 36, /* Tomasz Bujlow */ NDPI_PROTOCOL_BITTORRENT = 37, NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, - NDPI_PROTOCOL_MUSICALLY = 39, + NDPI_PROTOCOL_FREE_39 = 39, /* Free */ NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ NDPI_PROTOCOL_MINING = 42, /* Bitcoin, Ethereum, ZCash, Monero */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 51681e60e77..4b69c2b7b03 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -826,7 +826,7 @@ typedef enum { ndpi_pref_dns_dissect_response, ndpi_pref_direction_detect_disable, ndpi_pref_disable_metadata_export, - ndpi_pref_enable_category_substring_match, + ndpi_pref_enable_category_substring_match } ndpi_detection_preference; /* ntop extensions */ diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 71e236d37ff..4bfdde98342 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -21,7 +21,6 @@ /* ****************************************************** */ static ndpi_network host_protocol_list[] = { - /* SoundCloud */ @@ -111,11 +110,14 @@ static ndpi_network host_protocol_list[] = { WeChat origin AS132203, AS132591, AS45090 */ - { 0xCBCD93AB /* 203.205.147.171/32 */, 32, NDPI_PROTOCOL_WECHAT }, { 0xCBCD93AD /* 203.205.147.173/32 */, 32, NDPI_PROTOCOL_WECHAT }, { 0xCBCD97A2 /* 203.205.151.162/32 */, 32, NDPI_PROTOCOL_WECHAT }, - { 0x67071E25 /* 103.7.30.37/32 */, 32, NDPI_PROTOCOL_WECHAT }, + { 0x67071E25 /* 103.7.30.37/32 */, 32, NDPI_PROTOCOL_WECHAT }, + { 0XCBCDB000 /* 203.205.176.0/20 */, 20, NDPI_PROTOCOL_WECHAT }, + { 0XCBCDC000 /* 203.205.192.0/18 */, 18, NDPI_PROTOCOL_WECHAT }, + + /* OpenDNS, LLC @@ -8327,10 +8329,7 @@ ndpi_protocol_match host_match[] = { /* Detected "slack-assets2.s3-us-west-2.amazonaws.com.". Omitted "*amazonaws.com" CDN, but no generic pattern to use on first part */ { "slack-assets2.s3-", NULL, "slack-assets2\\.s3-", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, - { "zhiliaoapp.com", NULL, "zhiliaoapp" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "muscdn.com", NULL, "muscdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "livelycdn.com", NULL, "livelycdn" TLD, "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { "direct.ly", NULL, "direct\\.ly$", "Musical.ly", NDPI_PROTOCOL_MUSICALLY, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, + { "wechat.com", NULL, "wechat\\.com" TLD, "WeChat", NDPI_PROTOCOL_WECHAT, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { "github.com", NULL, "github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, { ".github.com", NULL, "\\.github" TLD, "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE }, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 3a6cd84ef3a..02ad31a5e88 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -517,7 +517,6 @@ void ndpi_exclude_protocol(struct ndpi_detection_module_struct *ndpi_struct, (*(ndpi_struct->ndpi_debug_printf))(protocol_id, ndpi_struct, NDPI_LOG_DEBUG, _file, _func, _line, "exclude %s\n",ndpi_get_proto_name(ndpi_struct, protocol_id)); - } #endif NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, protocol_id); @@ -1205,9 +1204,9 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Teredo", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 3544, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MUSICALLY, - no_master, - no_master, "Musical.ly", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WECHAT, + no_master, /* wechat.com */ + no_master, "WeChat", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEMCACHED, @@ -1245,7 +1244,12 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_39, + no_master, + no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_39, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, @@ -2523,6 +2527,7 @@ static ndpi_default_ports_tree_node_t* ndpi_get_guessed_protocol_id(struct ndpi_ /* ****************************************************** */ u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int8_t proto, u_int16_t sport, u_int16_t dport, u_int8_t *user_defined_proto) { @@ -2531,8 +2536,17 @@ u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_struc ndpi_default_ports_tree_node_t *found = ndpi_get_guessed_protocol_id(ndpi_struct, proto, sport, dport); if(found != NULL) { - *user_defined_proto = found->customUserProto; - return(found->proto->protoId); + u_int16_t guessed_proto = found->proto->protoId; + + /* We need to check if the guessed protocol isn't excluded by nDPI */ + if(flow + && (proto == IPPROTO_UDP) + && (NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, guessed_proto))) + return(NDPI_PROTOCOL_UNKNOWN); + else { + *user_defined_proto = found->customUserProto; + return(guessed_proto); + } } } else { /* No TCP/UDP */ @@ -3956,18 +3970,17 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st && (flow->l4.tcp.ssl_stage > 1)) flow->guessed_protocol_id = NDPI_PROTOCOL_SSL_NO_CERT; - guessed_protocol_id = flow->guessed_protocol_id, - guessed_host_protocol_id = flow->guessed_host_protocol_id; + guessed_protocol_id = flow->guessed_protocol_id, guessed_host_protocol_id = flow->guessed_host_protocol_id; if((guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN) - && (NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_host_protocol_id))) - guessed_host_protocol_id = NDPI_PROTOCOL_UNKNOWN; - + && ((flow->packet.l4_protocol == IPPROTO_UDP) && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_host_protocol_id))) + flow->guessed_host_protocol_id = guessed_host_protocol_id = NDPI_PROTOCOL_UNKNOWN; + /* Ignore guessed protocol if they have been discarded */ if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) - && (guessed_host_protocol_id == NDPI_PROTOCOL_UNKNOWN) - && (NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_protocol_id))) - guessed_protocol_id = NDPI_PROTOCOL_UNKNOWN; + // && (guessed_host_protocol_id == NDPI_PROTOCOL_UNKNOWN) + && (flow->packet.l4_protocol == IPPROTO_UDP) && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_protocol_id)) + flow->guessed_protocol_id = guessed_protocol_id = NDPI_PROTOCOL_UNKNOWN; if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) || (guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN)) { @@ -4394,7 +4407,7 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct else sport = dport = 0; /* guess protocol */ - flow->guessed_protocol_id = (int16_t) ndpi_guess_protocol_id(ndpi_struct, protocol, sport, dport, &user_defined_proto); + flow->guessed_protocol_id = (int16_t) ndpi_guess_protocol_id(ndpi_struct, flow, protocol, sport, dport, &user_defined_proto); flow->guessed_host_protocol_id = ndpi_guess_host_protocol_id(ndpi_struct, flow); if(flow->guessed_protocol_id >= (NDPI_MAX_SUPPORTED_PROTOCOLS-1)) { @@ -5356,6 +5369,7 @@ u_int16_t ndpi_get_lower_proto(ndpi_protocol proto) { /* ****************************************************** */ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, u_int8_t proto, u_int32_t shost /* host byte order */, u_int16_t sport, u_int32_t dhost /* host byte order */, u_int16_t dport) { @@ -5365,30 +5379,37 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct u_int8_t user_defined_proto; if((proto == IPPROTO_TCP) || (proto == IPPROTO_UDP)) { - rc = ndpi_search_tcp_or_udp_raw(ndpi_struct, NULL, proto, - shost, dhost, sport, dport); + rc = ndpi_search_tcp_or_udp_raw(ndpi_struct, NULL, proto, shost, dhost, sport, dport); if(rc != NDPI_PROTOCOL_UNKNOWN) { - ret.app_protocol = rc, - ret.master_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, - dport, &user_defined_proto); - - if(ret.app_protocol == ret.master_protocol) - ret.master_protocol = NDPI_PROTOCOL_UNKNOWN; - - ret.category = ndpi_get_proto_category(ndpi_struct, ret); - return(ret); + if(flow && (proto == IPPROTO_UDP) && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc)) + ; + else { + ret.app_protocol = rc, + ret.master_protocol = ndpi_guess_protocol_id(ndpi_struct, NULL, proto, sport, + dport, &user_defined_proto); + + if(ret.app_protocol == ret.master_protocol) + ret.master_protocol = NDPI_PROTOCOL_UNKNOWN; + + ret.category = ndpi_get_proto_category(ndpi_struct, ret); + return(ret); + } } - rc = ndpi_guess_protocol_id(ndpi_struct, proto, sport, dport, &user_defined_proto); + rc = ndpi_guess_protocol_id(ndpi_struct, NULL, proto, sport, dport, &user_defined_proto); if(rc != NDPI_PROTOCOL_UNKNOWN) { - ret.app_protocol = rc; - - if(rc == NDPI_PROTOCOL_SSL) - goto check_guessed_skype; + if(flow && (proto == IPPROTO_UDP) && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc)) + ; else { - ret.category = ndpi_get_proto_category(ndpi_struct, ret); - return(ret); + ret.app_protocol = rc; + + if(rc == NDPI_PROTOCOL_SSL) + goto check_guessed_skype; + else { + ret.category = ndpi_get_proto_category(ndpi_struct, ret); + return(ret); + } } } @@ -5402,10 +5423,10 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct ret.app_protocol = NDPI_PROTOCOL_SKYPE; } } else - ret.app_protocol = ndpi_guess_protocol_id(ndpi_struct, proto, sport, + ret.app_protocol = ndpi_guess_protocol_id(ndpi_struct, NULL, proto, sport, dport, &user_defined_proto); - ret.category = ndpi_get_proto_category(ndpi_struct, ret); + ret.category = ndpi_get_proto_category(ndpi_struct, ret); return(ret); } diff --git a/src/lib/protocols/dropbox.c b/src/lib/protocols/dropbox.c index d981c76b3dd..39bb96ff268 100644 --- a/src/lib/protocols/dropbox.c +++ b/src/lib/protocols/dropbox.c @@ -48,14 +48,24 @@ static void ndpi_check_dropbox(struct ndpi_detection_module_struct *ndpi_struct, if(packet->udp != NULL) { u_int16_t dropbox_port = htons(DB_LSP_PORT); - if((packet->udp->source == dropbox_port) - && (packet->udp->dest == dropbox_port)) { - if(payload_len > 2) { - if(strstr((const char *)packet->payload, "\"host_int\"") != NULL) { - - NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); - ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); - return; + if(packet->udp->dest == dropbox_port) { + if(packet->udp->source == dropbox_port) { + if(payload_len > 10) { + if(ndpi_strnstr((const char *)packet->payload, "\"host_int\"", payload_len) != NULL) { + + NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); + ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); + return; + } + } + } else { + if(payload_len > 10) { + if(ndpi_strnstr((const char *)packet->payload, "Bus17Cmd", payload_len) != NULL) { + + NDPI_LOG_INFO(ndpi_struct, "found dropbox\n"); + ndpi_int_dropbox_add_connection(ndpi_struct, flow, 0); + return; + } } } } diff --git a/src/lib/protocols/eaq.c b/src/lib/protocols/eaq.c index 2082b5263a8..8768cac6f60 100644 --- a/src/lib/protocols/eaq.c +++ b/src/lib/protocols/eaq.c @@ -53,12 +53,15 @@ void ndpi_search_eaq(struct ndpi_detection_module_struct *ndpi_struct, struct nd if(packet->udp != NULL) { u_int32_t seq = (packet->payload[0] * 1000) + (packet->payload[1] * 100) + (packet->payload[2] * 10) + packet->payload[3]; - + if(flow->l4.udp.eaq_pkt_id == 0) flow->l4.udp.eaq_sequence = seq; else { if( (flow->l4.udp.eaq_sequence != seq) && - ((flow->l4.udp.eaq_sequence+1) != seq)) break; + ((flow->l4.udp.eaq_sequence+1) != seq)) + break; + else + flow->l4.udp.eaq_sequence = seq; } if(++flow->l4.udp.eaq_pkt_id == 4) { @@ -66,7 +69,8 @@ void ndpi_search_eaq(struct ndpi_detection_module_struct *ndpi_struct, struct nd NDPI_LOG_INFO(ndpi_struct, "found eaq\n"); ndpi_int_eaq_add_connection(ndpi_struct, flow); return; - } + } else + return; } } while(0); diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index e544724a5f3..8a4eafca4b3 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -31,13 +31,16 @@ static void ndpi_skype_report_protocol(struct ndpi_detection_module_struct *ndpi NDPI_LOG_INFO(ndpi_struct, "found skype\n"); ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); } - + +static int is_port(u_int16_t a, u_int16_t b, u_int16_t c) { + return(((a == c) || (b == c)) ? 1 : 0); +} + static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; // const u_int8_t *packet_payload = packet->payload; u_int32_t payload_len = packet->payload_packet_len; - if(flow->host_server_name[0] != '\0') return; @@ -46,10 +49,15 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s flow->l4.udp.skype_packet_id++; if(flow->l4.udp.skype_packet_id < 5) { + u_int16_t sport = ntohs(packet->udp->source); u_int16_t dport = ntohs(packet->udp->dest); /* skype-to-skype */ - if(dport != 1119) /* It can be confused with battle.net */ { + if(is_port(sport, dport, 1119) /* It can be confused with battle.net */ + || is_port(sport, dport, 80) /* No HTTP-like protocols UDP/80 */ + ) { + ; + } else { if(((payload_len == 3) && ((packet->payload[2] & 0x0F)== 0x0d)) || ((payload_len >= 16) && (packet->payload[0] != 0x30) /* Avoid invalid SNMP detection */ @@ -57,11 +65,12 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s ndpi_skype_report_protocol(ndpi_struct, flow); } } + return; } + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); return; - // TCP check } else if(packet->tcp != NULL) { flow->l4.tcp.skype_packet_id++; From babb1c864c47437d37cfc005967aab5e635d754c Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 18:25:12 +0100 Subject: [PATCH 118/147] removed -r not supported on all systems --- src/lib/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index aad90d48662..1f07773e9f3 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -46,7 +46,7 @@ $(NDPI_LIB_STATIC): $(OBJECTS) $(NDPI_LIB_SHARED): $(OBJECTS) $(CC) -shared -fPIC $(SONAME_FLAG) -o $@ $(OBJECTS) - ln -Ffsr $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) + ln -Ffs $(NDPI_LIB_SHARED) $(NDPI_LIB_SHARED_BASE) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ @@ -57,6 +57,6 @@ clean: install: $(NDPI_LIBS) mkdir -p $(DESTDIR)$(libdir) cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ - ln -Ffsr $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) + ln -Ffs $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED) $(DESTDIR)$(libdir)/$(NDPI_LIB_SHARED_BASE) mkdir -p $(DESTDIR)$(includedir) cp ../include/*.h $(DESTDIR)$(includedir) From 12adb256650bece834173fce6213021d2e7a677b Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 19 Nov 2018 18:28:18 +0100 Subject: [PATCH 119/147] Improved Skype detection Update test results Added initialization for some free protocols --- src/lib/ndpi_main.c | 2 +- tests/result/skype.pcap.out | 387 +++++++++++++------------ tests/result/skype_no_unknown.pcap.out | 359 +++++++++++------------ tests/result/wechat.pcap.out | 98 +++---- 4 files changed, 424 insertions(+), 422 deletions(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 02ad31a5e88..fcfaec713da 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1249,7 +1249,7 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_39, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index 590f97c71ea..4d09243a3ad 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -3,11 +3,12 @@ DNS 2 267 1 MDNS 8 1736 2 NTP 2 180 1 SSDP 101 38156 6 +SkypeCallIn 1555 267750 192 ICMP 8 656 1 IGMP 5 258 4 SSL 96 8876 7 Dropbox 38 17948 5 -Skype 2139 324409 249 +Skype 584 56659 57 Apple 3 168 1 AppleiCloud 88 20520 2 Spotify 5 430 1 @@ -15,17 +16,17 @@ MS_OneDrive 387 198090 1 ApplePush 12 1877 1 1 TCP 192.168.1.34:50028 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][187 pkts/42539 bytes <-> 200 pkts/155551 bytes][server: *.gateway.messenger.live.com] - 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] + 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] 3 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][79 pkts/29479 bytes -> 0 pkts/0 bytes] 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web/5][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] - 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] + 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/7281 bytes -> 0 pkts/0 bytes] 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] - 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] - 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] - 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] - 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] - 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] + 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] + 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] + 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] + 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] + 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] 13 TCP 192.168.1.34:50027 <-> 23.223.73.34:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][17 pkts/3605 bytes <-> 1 pkts/74 bytes][client: apps.skypeassets.com] 14 TCP 192.168.1.34:50029 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 15 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/3264 bytes -> 0 pkts/0 bytes] @@ -33,75 +34,75 @@ ApplePush 12 1877 1 17 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] - 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125/Skype][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] + 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/1211 bytes <-> 6 pkts/666 bytes] 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1554 bytes <-> 3 pkts/200 bytes] - 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125/Skype][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] + 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][13 pkts/1392 bytes <-> 3 pkts/200 bytes] 25 TCP 192.168.1.34:50101 <-> 157.55.235.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1305 bytes <-> 3 pkts/285 bytes] 26 TCP 192.168.1.34:50037 <-> 157.55.56.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1218 bytes <-> 4 pkts/351 bytes] 27 TCP 192.168.1.34:50080 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:50111 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/955 bytes <-> 9 pkts/561 bytes] 29 TCP 192.168.1.34:50081 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1270 bytes <-> 3 pkts/243 bytes] - 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] - 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] - 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125/Skype][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] + 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] + 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] + 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1207 bytes <-> 3 pkts/277 bytes] 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][cat: Web/5][12 pkts/1221 bytes <-> 3 pkts/231 bytes] - 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] - 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] - 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] - 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] + 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] + 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] + 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] + 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1151 bytes <-> 3 pkts/260 bytes] - 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] - 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] + 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] + 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1050 bytes <-> 4 pkts/351 bytes] - 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] - 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] + 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] + 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][cat: Web/5][11 pkts/1140 bytes <-> 3 pkts/250 bytes] - 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] - 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] - 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] - 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] + 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] + 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] + 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] + 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][cat: Web/5][13 pkts/1176 bytes <-> 3 pkts/200 bytes] - 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] - 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] - 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] - 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] - 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] - 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] + 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] + 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] + 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] + 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] + 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] + 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1074 bytes <-> 3 pkts/277 bytes] 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1102 bytes <-> 3 pkts/247 bytes] 59 TCP 192.168.1.34:50048 <-> 157.55.130.150:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1109 bytes <-> 3 pkts/236 bytes] - 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] + 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] 61 TCP 192.168.1.34:50036 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1074 bytes <-> 3 pkts/254 bytes] - 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] + 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] 63 TCP 192.168.1.34:50078 <-> 157.55.130.173:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1088 bytes <-> 3 pkts/236 bytes] - 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] + 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] 65 TCP 192.168.1.34:50030 <-> 65.55.223.33:443 [proto: 91/SSL][cat: Web/5][11 pkts/960 bytes <-> 4 pkts/351 bytes] - 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] + 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1039 bytes <-> 3 pkts/267 bytes] - 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] - 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] + 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] + 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1002 bytes <-> 3 pkts/285 bytes] - 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] - 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] + 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] + 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/999 bytes <-> 4 pkts/266 bytes] 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1032 bytes <-> 3 pkts/230 bytes] - 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] - 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] - 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125/Skype][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] - 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] - 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] - 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] + 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] + 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] + 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] + 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] + 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] + 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/857 bytes <-> 4 pkts/351 bytes] - 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] + 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][9 pkts/862 bytes <-> 3 pkts/285 bytes] - 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125/Skype][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] + 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] 85 TCP 192.168.1.34:50100 <-> 111.221.74.46:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/237 bytes] - 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] + 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] 87 TCP 192.168.1.34:50087 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][9 pkts/822 bytes <-> 3 pkts/285 bytes] - 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] + 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] 89 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/908 bytes -> 0 pkts/0 bytes] 90 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/828 bytes -> 0 pkts/0 bytes] 91 TCP 192.168.1.34:50125 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/417 bytes <-> 4 pkts/352 bytes] @@ -141,8 +142,8 @@ ApplePush 12 1877 1 125 UDP 192.168.1.34:51066 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 126 UDP 192.168.1.34:56886 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 127 UDP 192.168.1.34:64560 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web/5][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] @@ -151,150 +152,150 @@ ApplePush 12 1877 1 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index 9c1dcbd1f13..1c43d3161ca 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -3,11 +3,12 @@ DNS 2 267 1 MDNS 3 400 2 NetBIOS 22 3106 7 SSDP 40 14100 3 +SkypeCallIn 684 60681 178 ICMP 4 328 1 IGMP 4 226 4 SSL 79 7742 6 Dropbox 16 7342 5 -Skype 1291 190136 223 +Skype 607 129455 45 Apple 76 19581 1 MS_OneDrive 348 181687 1 ApplePush 8 1118 1 @@ -16,10 +17,10 @@ ApplePush 8 1118 1 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] 3 TCP 192.168.1.34:51227 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][38 pkts/9082 bytes <-> 38 pkts/10499 bytes] 4 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][36 pkts/13402 bytes -> 0 pkts/0 bytes] - 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] - 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] + 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] + 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] - 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] + 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][4 pkts/818 bytes <-> 4 pkts/2172 bytes] 10 TCP 192.168.1.34:51295 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/2074 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 11 TCP 192.168.1.34:51238 <-> 157.55.235.147:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1446 bytes <-> 4 pkts/266 bytes] @@ -29,52 +30,52 @@ ApplePush 8 1118 1 15 TCP 192.168.1.34:51239 <-> 65.55.223.45:443 [proto: 91/SSL][cat: Web/5][12 pkts/1291 bytes <-> 3 pkts/242 bytes] 16 TCP 192.168.1.34:51274 <-> 157.55.235.152:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1235 bytes <-> 3 pkts/285 bytes] 17 TCP 192.168.1.34:51260 <-> 157.55.130.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/265 bytes] - 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125/Skype][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] - 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125/Skype][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] - 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125/Skype][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] - 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] + 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] + 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] + 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] + 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][11 pkts/1164 bytes <-> 3 pkts/268 bytes] 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1077 bytes <-> 4 pkts/351 bytes] - 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] - 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] - 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] + 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] + 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] + 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1095 bytes <-> 3 pkts/285 bytes] 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1022 bytes <-> 4 pkts/351 bytes] - 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125/Skype][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] - 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] + 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] + 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1012 bytes <-> 4 pkts/351 bytes] - 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125/Skype][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] - 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] - 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] - 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] - 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125/Skype][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] - 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] - 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] - 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] - 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] - 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] + 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] + 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] + 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] + 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] + 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] + 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] + 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] + 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] + 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] + 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][cat: Web/5][10 pkts/972 bytes <-> 3 pkts/285 bytes] 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/902 bytes <-> 4 pkts/351 bytes] - 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] - 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125/Skype][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] - 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125/Skype][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] + 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] + 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] + 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/852 bytes <-> 4 pkts/351 bytes] - 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] - 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] - 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] + 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] + 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] + 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/285 bytes] - 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125/Skype][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] - 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] + 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] + 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/958 bytes <-> 2 pkts/184 bytes] - 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125/Skype][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] + 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238/ApplePush][cat: Cloud/13][4 pkts/674 bytes <-> 4 pkts/444 bytes] 59 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 60 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 61 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 62 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125/Skype][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] + 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] 64 UDP 192.168.1.34:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][7 pkts/680 bytes -> 0 pkts/0 bytes] 65 TCP 192.168.1.34:51299 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/353 bytes <-> 5 pkts/306 bytes] 66 UDP 192.168.1.34:58631 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] @@ -107,8 +108,8 @@ ApplePush 8 1118 1 93 UDP 192.168.1.34:58061 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 94 UDP 192.168.1.34:59237 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 95 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][4 pkts/328 bytes -> 0 pkts/0 bytes] - 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] - 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125/Skype][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 98 UDP 192.168.1.34:57694 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/216 bytes -> 0 pkts/0 bytes] @@ -119,153 +120,153 @@ ApplePush 8 1118 1 105 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 106 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 107 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] - 108 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 109 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 112 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 113 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 114 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 115 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 116 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 117 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 118 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 119 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 120 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 121 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 122 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 123 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 124 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 125 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 126 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 127 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 130 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 131 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 132 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 133 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 134 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 135 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 136 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 137 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125/Skype][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125/Skype][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 108 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 109 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 110 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 112 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 113 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 114 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 115 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 116 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 117 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 118 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 119 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 120 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 121 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 122 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 123 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 124 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 125 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 126 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 127 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 130 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 131 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 133 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 134 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 135 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 136 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 137 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] 247 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 248 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 249 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125/Skype][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] 255 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/wechat.pcap.out b/tests/result/wechat.pcap.out index 92c6852e07e..716e4cb6a2b 100644 --- a/tests/result/wechat.pcap.out +++ b/tests/result/wechat.pcap.out @@ -13,52 +13,52 @@ LLMNR 12 944 6 WeChat 1251 606425 49 GoogleDocs 15 5114 2 - 1 TCP 203.205.151.162:443 <-> 192.168.1.103:54058 [proto: 91.197/SSL.WeChat][cat: Chat/9][88 pkts/15114 bytes <-> 91 pkts/61842 bytes] - 2 TCP 192.168.1.103:54101 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][46 pkts/12575 bytes <-> 40 pkts/53424 bytes][client: web.wechat.com][server: web.wechat.com] - 3 TCP 192.168.1.103:54103 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][50 pkts/23958 bytes <-> 46 pkts/39684 bytes][client: web.wechat.com][server: web.wechat.com] - 4 TCP 192.168.1.103:54113 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][38 pkts/8933 bytes <-> 35 pkts/35112 bytes][client: web.wechat.com][server: web.wechat.com] - 5 TCP 192.168.1.103:54099 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][25 pkts/9013 bytes <-> 29 pkts/27440 bytes][client: web.wechat.com][server: web.wechat.com] - 6 TCP 192.168.1.103:54119 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][26 pkts/8129 bytes <-> 24 pkts/22836 bytes][client: web.wechat.com][server: web.wechat.com] - 7 TCP 192.168.1.103:58038 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][34 pkts/17556 bytes <-> 25 pkts/12172 bytes][client: web.wechat.com][server: web.wechat.com] - 8 TCP 192.168.1.103:54089 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][21 pkts/7826 bytes <-> 20 pkts/18761 bytes][client: web.wechat.com][server: web.wechat.com] - 9 TCP 192.168.1.103:54095 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][21 pkts/7825 bytes <-> 18 pkts/17898 bytes][client: web.wechat.com][server: web.wechat.com] - 10 TCP 192.168.1.103:58040 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][29 pkts/17545 bytes <-> 20 pkts/6923 bytes][client: web.wechat.com][server: web.wechat.com] - 11 TCP 192.168.1.103:54097 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][25 pkts/12063 bytes <-> 19 pkts/7932 bytes][client: web.wechat.com][server: web.wechat.com] - 12 TCP 192.168.1.103:54094 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][22 pkts/10193 bytes <-> 18 pkts/8262 bytes][client: web.wechat.com][server: web.wechat.com] - 13 TCP 192.168.1.103:54102 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][13 pkts/2317 bytes <-> 15 pkts/15724 bytes][client: web.wechat.com][server: web.wechat.com] - 14 TCP 192.168.1.103:54098 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][22 pkts/8507 bytes <-> 16 pkts/6575 bytes][client: web.wechat.com][server: web.wechat.com] - 15 TCP 192.168.1.103:54117 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][20 pkts/8397 bytes <-> 16 pkts/6566 bytes][client: web.wechat.com][server: web.wechat.com] - 16 TCP 192.168.1.103:58036 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/6450 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] - 17 TCP 192.168.1.103:54092 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/6438 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] - 18 TCP 192.168.1.103:54100 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][15 pkts/4627 bytes <-> 12 pkts/5905 bytes][client: web.wechat.com][server: web.wechat.com] - 19 TCP 192.168.1.103:54111 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][14 pkts/4626 bytes <-> 12 pkts/5135 bytes][client: web.wechat.com][server: web.wechat.com] - 20 TCP 192.168.1.103:58042 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][12 pkts/4516 bytes <-> 10 pkts/5004 bytes][client: web.wechat.com][server: web.wechat.com] + 1 TCP 203.205.151.162:443 <-> 192.168.1.103:54058 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][88 pkts/15114 bytes <-> 91 pkts/61842 bytes] + 2 TCP 192.168.1.103:54101 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][46 pkts/12575 bytes <-> 40 pkts/53424 bytes][client: web.wechat.com][server: web.wechat.com] + 3 TCP 192.168.1.103:54103 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][50 pkts/23958 bytes <-> 46 pkts/39684 bytes][client: web.wechat.com][server: web.wechat.com] + 4 TCP 192.168.1.103:54113 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][38 pkts/8933 bytes <-> 35 pkts/35112 bytes][client: web.wechat.com][server: web.wechat.com] + 5 TCP 192.168.1.103:54099 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][25 pkts/9013 bytes <-> 29 pkts/27440 bytes][client: web.wechat.com][server: web.wechat.com] + 6 TCP 192.168.1.103:54119 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][26 pkts/8129 bytes <-> 24 pkts/22836 bytes][client: web.wechat.com][server: web.wechat.com] + 7 TCP 192.168.1.103:58038 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][34 pkts/17556 bytes <-> 25 pkts/12172 bytes][client: web.wechat.com][server: web.wechat.com] + 8 TCP 192.168.1.103:54089 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][21 pkts/7826 bytes <-> 20 pkts/18761 bytes][client: web.wechat.com][server: web.wechat.com] + 9 TCP 192.168.1.103:54095 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][21 pkts/7825 bytes <-> 18 pkts/17898 bytes][client: web.wechat.com][server: web.wechat.com] + 10 TCP 192.168.1.103:58040 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][29 pkts/17545 bytes <-> 20 pkts/6923 bytes][client: web.wechat.com][server: web.wechat.com] + 11 TCP 192.168.1.103:54097 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][25 pkts/12063 bytes <-> 19 pkts/7932 bytes][client: web.wechat.com][server: web.wechat.com] + 12 TCP 192.168.1.103:54094 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][22 pkts/10193 bytes <-> 18 pkts/8262 bytes][client: web.wechat.com][server: web.wechat.com] + 13 TCP 192.168.1.103:54102 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][13 pkts/2317 bytes <-> 15 pkts/15724 bytes][client: web.wechat.com][server: web.wechat.com] + 14 TCP 192.168.1.103:54098 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][22 pkts/8507 bytes <-> 16 pkts/6575 bytes][client: web.wechat.com][server: web.wechat.com] + 15 TCP 192.168.1.103:54117 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][20 pkts/8397 bytes <-> 16 pkts/6566 bytes][client: web.wechat.com][server: web.wechat.com] + 16 TCP 192.168.1.103:58036 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][15 pkts/6450 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] + 17 TCP 192.168.1.103:54092 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][15 pkts/6438 bytes <-> 11 pkts/5068 bytes][client: web.wechat.com][server: web.wechat.com] + 18 TCP 192.168.1.103:54100 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][15 pkts/4627 bytes <-> 12 pkts/5905 bytes][client: web.wechat.com][server: web.wechat.com] + 19 TCP 192.168.1.103:54111 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][14 pkts/4626 bytes <-> 12 pkts/5135 bytes][client: web.wechat.com][server: web.wechat.com] + 20 TCP 192.168.1.103:58042 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][12 pkts/4516 bytes <-> 10 pkts/5004 bytes][client: web.wechat.com][server: web.wechat.com] 21 TCP 192.168.1.103:43850 <-> 203.205.158.34:443 [proto: 91.48/SSL.QQ][cat: Chat/9][12 pkts/2005 bytes <-> 12 pkts/6787 bytes][client: res.wx.qq.com][server: wx.qq.com] 22 TCP 192.168.1.103:38657 <-> 172.217.22.14:443 [proto: 91.126/SSL.Google][cat: Web/5][17 pkts/2413 bytes <-> 17 pkts/6268 bytes][client: safebrowsing.googleusercontent.com][server: *.googleusercontent.com] 23 UDP 192.168.1.103:51507 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web/5][7 pkts/3507 bytes <-> 6 pkts/3329 bytes][Host: ssl.gstatic.com] 24 UDP 192.168.1.103:57591 <-> 216.58.198.46:443 [proto: 188.241/QUIC.GoogleDocs][cat: Media/1][6 pkts/2687 bytes <-> 7 pkts/2125 bytes][Host: docs.google.com] - 25 TCP 192.168.1.103:54120 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] - 26 TCP 192.168.1.103:58041 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] - 27 TCP 192.168.1.103:54118 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 8 pkts/3703 bytes][client: web.wechat.com][server: web.wechat.com] - 28 TCP 192.168.1.103:54090 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 29 TCP 192.168.1.103:54096 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 30 TCP 192.168.1.103:54104 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] - 31 TCP 192.168.1.103:54091 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][9 pkts/966 bytes <-> 6 pkts/3571 bytes][client: web.wechat.com][server: web.wechat.com] + 25 TCP 192.168.1.103:54120 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] + 26 TCP 192.168.1.103:58041 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 8 pkts/3711 bytes][client: web.wechat.com][server: web.wechat.com] + 27 TCP 192.168.1.103:54118 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 8 pkts/3703 bytes][client: web.wechat.com][server: web.wechat.com] + 28 TCP 192.168.1.103:54090 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 29 TCP 192.168.1.103:54096 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 30 TCP 192.168.1.103:54104 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][10 pkts/1032 bytes <-> 7 pkts/3637 bytes][client: web.wechat.com][server: web.wechat.com] + 31 TCP 192.168.1.103:54091 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][9 pkts/966 bytes <-> 6 pkts/3571 bytes][client: web.wechat.com][server: web.wechat.com] 32 UDP [fe80::7a92:9cff:fe0f:a88e]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/4488 bytes -> 0 pkts/0 bytes] 33 UDP 192.168.1.103:35601 <-> 172.217.23.67:443 [proto: 188.126/QUIC.Google][cat: Web/5][5 pkts/2035 bytes <-> 5 pkts/1937 bytes][Host: ssl.gstatic.com] 34 UDP 192.168.1.103:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][44 pkts/3608 bytes -> 0 pkts/0 bytes] - 35 TCP 192.168.1.103:54183 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/2508 bytes -> 0 pkts/0 bytes] + 35 TCP 192.168.1.103:54183 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][2 pkts/2508 bytes -> 0 pkts/0 bytes] 36 UDP [fe80::91f9:3df3:7436:6cd6]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1428 bytes -> 0 pkts/0 bytes] 37 TCP 192.168.1.103:36017 <-> 64.233.167.188:5228 [proto: 126/Google][cat: Web/5][10 pkts/660 bytes <-> 10 pkts/660 bytes] 38 UDP 192.168.1.100:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][14 pkts/1148 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.1.103:58039 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][13 pkts/866 bytes <-> 4 pkts/280 bytes] + 39 TCP 192.168.1.103:58039 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][13 pkts/866 bytes <-> 4 pkts/280 bytes] 40 TCP 192.168.1.103:58143 -> 216.58.205.131:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/1078 bytes -> 0 pkts/0 bytes] - 41 TCP 203.205.151.162:443 <-> 192.168.1.103:54084 [proto: 91.197/SSL.WeChat][cat: Chat/9][3 pkts/802 bytes <-> 3 pkts/198 bytes] + 41 TCP 203.205.151.162:443 <-> 192.168.1.103:54084 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][3 pkts/802 bytes <-> 3 pkts/198 bytes] 42 UDP 192.168.1.100:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][9 pkts/828 bytes -> 0 pkts/0 bytes] 43 IGMP 192.168.1.100:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][15 pkts/810 bytes -> 0 pkts/0 bytes] 44 UDP 192.168.1.100:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][3 pkts/751 bytes -> 0 pkts/0 bytes] - 45 TCP 192.168.1.103:54112 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 4 pkts/280 bytes] - 46 TCP 192.168.1.103:54114 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 4 pkts/280 bytes] + 45 TCP 192.168.1.103:54112 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][5 pkts/338 bytes <-> 4 pkts/280 bytes] + 46 TCP 192.168.1.103:54114 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][5 pkts/338 bytes <-> 4 pkts/280 bytes] 47 UDP 192.168.1.103:19041 <-> 192.168.1.254:53 [proto: 5.48/DNS.QQ][cat: Chat/9][1 pkts/73 bytes <-> 1 pkts/537 bytes][Host: res.wx.qq.com] 48 TCP 192.168.1.103:34981 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] 49 TCP 192.168.1.103:34996 -> 95.101.34.33:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] @@ -67,18 +67,18 @@ GoogleDocs 15 5114 2 52 TCP 192.168.1.103:39207 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] 53 TCP 192.168.1.103:39231 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][9 pkts/594 bytes -> 0 pkts/0 bytes] 54 TCP 192.168.1.103:53220 <-> 172.217.23.78:443 [proto: 91.126/SSL.Google][cat: Web/5][4 pkts/264 bytes <-> 4 pkts/319 bytes] - 55 TCP 192.168.1.103:54093 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 3 pkts/214 bytes] - 56 TCP 192.168.1.103:58037 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][5 pkts/338 bytes <-> 3 pkts/214 bytes] + 55 TCP 192.168.1.103:54093 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][5 pkts/338 bytes <-> 3 pkts/214 bytes] + 56 TCP 192.168.1.103:58037 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][5 pkts/338 bytes <-> 3 pkts/214 bytes] 57 TCP 192.168.1.103:39195 -> 95.101.34.34:80 [proto: 7/HTTP][cat: Web/5][8 pkts/528 bytes -> 0 pkts/0 bytes] 58 TCP 192.168.1.103:52020 -> 95.101.180.179:80 [proto: 7/HTTP][cat: Web/5][8 pkts/528 bytes -> 0 pkts/0 bytes] 59 TCP 192.168.1.103:43851 <-> 203.205.158.34:443 [proto: 91/SSL][cat: Web/5][5 pkts/290 bytes <-> 4 pkts/234 bytes] 60 TCP 192.168.1.103:47627 <-> 216.58.205.78:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/198 bytes <-> 4 pkts/319 bytes] 61 TCP 192.168.1.103:40740 <-> 203.205.151.211:443 [proto: 91/SSL][cat: Web/5][4 pkts/216 bytes <-> 4 pkts/253 bytes] - 62 UDP 192.168.1.103:60356 <-> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/74 bytes <-> 1 pkts/391 bytes][Host: web.wechat.com] + 62 UDP 192.168.1.103:60356 <-> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/74 bytes <-> 1 pkts/391 bytes][Host: web.wechat.com] 63 TCP 192.168.1.103:49787 <-> 216.58.205.142:443 [proto: 91.126/SSL.Google][cat: Web/5][3 pkts/198 bytes <-> 3 pkts/198 bytes] - 64 TCP 192.168.1.103:58226 -> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][6 pkts/396 bytes -> 0 pkts/0 bytes] + 64 TCP 192.168.1.103:58226 -> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][6 pkts/396 bytes -> 0 pkts/0 bytes] 65 UDP 192.168.1.103:53734 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/94 bytes <-> 1 pkts/272 bytes][Host: safebrowsing.googleusercontent.com] - 66 TCP 192.168.1.103:58043 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][3 pkts/206 bytes <-> 2 pkts/148 bytes] + 66 TCP 192.168.1.103:58043 <-> 203.205.147.171:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][3 pkts/206 bytes <-> 2 pkts/148 bytes] 67 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][1 pkts/342 bytes -> 0 pkts/0 bytes][Host: iphonedimonica] 68 UDP 192.168.1.103:46078 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] 69 UDP 192.168.1.103:60562 <-> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes <-> 1 pkts/234 bytes][Host: ssl.gstatic.com] @@ -86,33 +86,33 @@ GoogleDocs 15 5114 2 71 IGMP 192.168.1.103:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][4 pkts/216 bytes -> 0 pkts/0 bytes] 72 TCP 192.168.1.103:40741 <-> 203.205.151.211:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] 73 IGMP 192.168.1.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][4 pkts/200 bytes -> 0 pkts/0 bytes] - 74 TCP 192.168.1.103:54085 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/132 bytes <-> 1 pkts/66 bytes] + 74 TCP 192.168.1.103:54085 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][2 pkts/132 bytes <-> 1 pkts/66 bytes] 75 UDP [fe80::91f9:3df3:7436:6cd6]:50440 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/180 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] 76 UDP [fe80::91f9:3df3:7436:6cd6]:49195 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: cansaqcq] 77 UDP [fe80::91f9:3df3:7436:6cd6]:50577 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/176 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] - 78 UDP 192.168.1.103:43705 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 78 UDP 192.168.1.103:43705 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] 79 UDP 192.168.1.103:42856 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/170 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org.lan] - 80 UDP 192.168.1.103:45366 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 81 UDP 192.168.1.103:56367 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 80 UDP 192.168.1.103:45366 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 81 UDP 192.168.1.103:56367 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][2 pkts/164 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] 82 UDP 192.168.1.103:41759 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 2.debian.pool.ntp.org] 83 UDP 192.168.1.103:44063 -> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/162 bytes -> 0 pkts/0 bytes][Host: 1.debian.pool.ntp.org] 84 UDP 192.168.1.103:42074 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][2 pkts/158 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] 85 UDP 192.168.1.100:54124 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: lbjamwptxz] 86 UDP 192.168.1.100:49832 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: cansaqcq] 87 UDP 192.168.1.100:57401 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: mcztmpkc] - 88 TCP 192.168.1.103:54106 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][2 pkts/132 bytes -> 0 pkts/0 bytes] - 89 TCP 192.168.1.103:54109 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][1 pkts/66 bytes <-> 1 pkts/66 bytes] - 90 TCP 192.168.1.103:54110 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: Chat/9][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 88 TCP 192.168.1.103:54106 -> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][2 pkts/132 bytes -> 0 pkts/0 bytes] + 89 TCP 192.168.1.103:54109 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][1 pkts/66 bytes <-> 1 pkts/66 bytes] + 90 TCP 192.168.1.103:54110 <-> 203.205.151.162:443 [proto: 91.197/SSL.WeChat][cat: SocialNetwork/6][1 pkts/66 bytes <-> 1 pkts/66 bytes] 91 TCP 192.168.1.103:54205 -> 64.233.167.188:443 [proto: 91.126/SSL.Google][cat: Web/5][2 pkts/132 bytes -> 0 pkts/0 bytes] 92 ICMPV6 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes] 93 0 [fe80::842:a3f3:a286:6c5b]:0 -> [ff02::16]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/110 bytes -> 0 pkts/0 bytes] 94 UDP 192.168.1.103:37578 -> 193.204.114.233:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] - 95 UDP 192.168.1.103:44346 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] - 96 UDP 192.168.1.103:53515 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 95 UDP 192.168.1.103:44346 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] + 96 UDP 192.168.1.103:53515 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/86 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com.lan] 97 ICMPV6 [::]:0 -> [ff02::1:ff86:6c5b]:0 [proto: 102/ICMPV6][cat: Network/14][1 pkts/86 bytes -> 0 pkts/0 bytes] - 98 UDP 192.168.1.103:33915 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 99 UDP 192.168.1.103:43317 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] - 100 UDP 192.168.1.103:58165 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: Chat/9][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 98 UDP 192.168.1.103:33915 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 99 UDP 192.168.1.103:43317 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] + 100 UDP 192.168.1.103:58165 -> 192.168.1.254:53 [proto: 5.197/DNS.WeChat][cat: SocialNetwork/6][1 pkts/82 bytes -> 0 pkts/0 bytes][Host: webpush.web.wechat.com] 101 UDP 192.168.1.103:59567 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/79 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com.lan] 102 UDP 192.168.1.103:42589 -> 192.168.1.254:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/75 bytes -> 0 pkts/0 bytes][Host: ssl.gstatic.com] 103 IGMP 192.168.1.108:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/54 bytes -> 0 pkts/0 bytes] From 21504c849233d69b896fdff364b3933e8ec997d3 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 19 Nov 2018 19:01:53 +0100 Subject: [PATCH 120/147] rpm spec file --- example/Makefile.in | 2 +- packages/rpm/Makefile.in | 38 +++++++++++++++++ packages/rpm/configure.in | 44 ++++++++++++++++++++ packages/rpm/ndpi.spec.in | 87 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 packages/rpm/Makefile.in create mode 100644 packages/rpm/configure.in create mode 100644 packages/rpm/ndpi.spec.in diff --git a/example/Makefile.in b/example/Makefile.in index 5ee981bd137..3e0f25d91d0 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -13,7 +13,7 @@ ndpiReader: $(OBJS) $(LIBNDPI) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ -install: +install: ndpiReader cp ndpiReader $(DESTDIR)$(PREFIX)/bin/ dpdk: diff --git a/packages/rpm/Makefile.in b/packages/rpm/Makefile.in new file mode 100644 index 00000000000..1621b66e95d --- /dev/null +++ b/packages/rpm/Makefile.in @@ -0,0 +1,38 @@ +# +# RPM Build Process +# +APPL=ndpi +PLATFORM=@PLATFORM@ +GIT_REVISION=@GIT_REVISION@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +PACKAGE=$(APPL)-$(PACKAGE_VERSION)-$(GIT_REVISION).$(PLATFORM).rpm +DEV_PACKAGE=$(APPL)-dev-$(PACKAGE_VERSION)-$(GIT_REVISION).$(PLATFORM).rpm +PACKAGE_PATH=$(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE) + +package: build-rpm + +cleanup-src: + cd ../..; ./autogen.sh; ./configure; make clean + +cleanup-rpm: + rm -rf $(HOME)/rpmbuild/BUILD/ndpi* $(HOME)/rpmbuild/SOURCES/ndpi* + +build-rpm: cleanup-src cleanup-rpm + -rm -rf ndpi-@PACKAGE_VERSION@ + mkdir -p ndpi-@PACKAGE_VERSION@/packages + cp ndpi.spec.in ndpi-@PACKAGE_VERSION@/packages + cp ../../Makefile.* ../../libtool ../../configure* ../../config.* ../../install-sh ../../autogen.sh ndpi-@PACKAGE_VERSION@ + cp -rf ../../src ndpi-@PACKAGE_VERSION@ + cp ../../CHANGELOG.md ../../COPYING ndpi-@PACKAGE_VERSION@ + \rm -f ndpi-@PACKAGE_VERSION@/config.status + mkdir -p $(HOME)/rpmbuild/SOURCES + tar cvfz $(HOME)/rpmbuild/SOURCES/ndpi-@PACKAGE_VERSION@.tgz ndpi-@PACKAGE_VERSION@ + @rm -f $(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE) + @rpmbuild -bb ./$(APPL).spec --define "buildnumber $(GIT_REVISION)" + @if [[ $EUID -ne 0 ]]; then ./rpm-sign.exp $(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE); fi + @if [[ $EUID -ne 0 ]]; then ./rpm-sign.exp $(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(DEV_PACKAGE); fi + @echo "" + @echo "Package contents:" + @rpm -qpl $(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE) + @echo "The package is now available in $(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE)" + diff --git a/packages/rpm/configure.in b/packages/rpm/configure.in new file mode 100644 index 00000000000..84454923ac5 --- /dev/null +++ b/packages/rpm/configure.in @@ -0,0 +1,44 @@ +AC_INIT([Makefile.in], 1.0) + +DATE=`date -R` +KERNEL=`uname -r` +PLATFORM=`uname -p` +MACHINE=`uname -m` +SHORT_MACHINE=`uname -m | cut -b1-3` + +EXTN="" +if test $MACHINE = "x86_64"; then + EXTN="amd64" +else + if test $SHORT_MACHINE = "aar"; then + EXTN="arm64" + else + if test $SHORT_MACHINE = "arm"; then + EXTN="armhf" + else + if test $SHORT_MACHINE = "mip"; then + EXTN="mips" + else + EXTN="i386" + fi + fi + fi +fi + +PACKAGE_VERSION=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` +GIT_RELEASE=`git rev-parse HEAD` +GIT_REVISION=`git rev-list --all |wc -l | tr -d '[[:space:]]'` + +AC_CONFIG_FILES([Makefile ndpi.spec]) + +AC_SUBST(PACKAGE_VERSION) +AC_SUBST(PLATFORM) +AC_SUBST(MACHINE) +AC_SUBST(EXTN) +AC_SUBST(DATE) +AC_SUBST(KERNEL) +AC_SUBST(GIT_RELEASE) +AC_SUBST(GIT_REVISION) + +AC_OUTPUT + diff --git a/packages/rpm/ndpi.spec.in b/packages/rpm/ndpi.spec.in new file mode 100644 index 00000000000..5d8f21a01c5 --- /dev/null +++ b/packages/rpm/ndpi.spec.in @@ -0,0 +1,87 @@ +Summary: L7 DPI library +Name: ndpi +Version: @PACKAGE_VERSION@ +Release: %{buildnumber} +License: LGPL +Group: Networking/Utilities +Conflicts: nprobe-dev +URL: http://www.ntop.org/products/deep-packet-inspection/ndpi/ +Source: ndpi-%{version}.tgz +Packager: Luca Deri +BuildRoot: %{_tmppath}/%{name}-%{version}-root +%{?el7:Requires: glibc >= 2.3.4 numactl coreutils } +%{?el6:Requires: glibc >= 2.3.4 numactl coreutils } +AutoReqProv: no + +%description +nDPI Open and Extensible LGPLv3 Deep Packet Inspection Library. + +%package dev +Summary: Header files and development libraries for %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} + +%description dev +This package contains the header files and development libraries +for %{name}. If you like to develop programs using %{name}, +you will need to install %{name}-dev. + +%prep + +%setup -q + +# Execution order: +# install: pre -> (copy) -> post +# upgrade: pre -> (copy) -> post -> preun (old) -> (delete old) -> postun (old) +# un-install: preun -> (delete) -> postun + +%pre + +%post + +%build +PATH=/usr/bin:/bin:/usr/sbin:/sbin + +%define includedir /usr/local/include/ndpi +%define libdir /usr/local/lib +%define bindir /usr/local/bin + +%install +PATH=/usr/bin:/bin:/usr/sbin:/sbin +if [ -d $RPM_BUILD_ROOT ]; then + \rm -rf $RPM_BUILD_ROOT +fi +mkdir -p $RPM_BUILD_ROOT%{includedir} +mkdir -p $RPM_BUILD_ROOT%{libdir} +mkdir -p $RPM_BUILD_ROOT%{bindir} +cd $HOME/nDPI; make DESTDIR=$RPM_BUILD_ROOT install; +rm $RPM_BUILD_ROOT%{libdir}/libndpi.so +ln -sr $RPM_BUILD_ROOT%{libdir}/libndpi.so.@PACKAGE_VERSION@ $RPM_BUILD_ROOT%{libdir}/libndpi.so +mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d +cp $HOME/nDPI/packages/etc/ld.so.conf.d/ndpi.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d +strip $RPM_BUILD_ROOT%{bindir}/* +rm -fr %{buildroot}%{includedir}/ndpi_win32.h + +%clean +rm -fr $RPM_BUILD_ROOT + +%files +%defattr(-, root, root) + +/usr/local/lib/libndpi.so +/usr/local/lib/libndpi.so.@PACKAGE_VERSION@ +/usr/local/bin/ndpiReader +/etc/ld.so.conf.d/ndpi.conf +/usr/local/libdata/pkgconfig/libndpi.pc + +%preun + +%files dev +%defattr(-,root,root,-) + +%{includedir} +%{libdir}/libndpi.a + +%changelog +* Mon Nov 19 2018 Alfredo Cardigliano 2.5 +- Initial package version From 669fdf6b5f3657c638ffa8df6ff1baebf5b311b1 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 21 Nov 2018 00:32:32 +0100 Subject: [PATCH 121/147] Improved skype, teredo, netbios heuristics Changed ndpi_detection_giveup() API: guess is now part of the call --- example/ndpiReader.c | 51 +--- example/ndpi_util.c | 7 +- src/include/ndpi_api.h | 4 +- src/lib/ndpi_main.c | 77 ++++-- src/lib/protocols/netbios.c | 5 +- src/lib/protocols/skype.c | 2 +- src/lib/protocols/teredo.c | 2 +- tests/do.sh | 5 +- tests/result/pps.pcap.out | 193 +++++++-------- tests/result/skype.pcap.out | 310 ++++++++++++------------ tests/result/skype_no_unknown.pcap.out | 316 ++++++++++++------------- tests/result/viber.pcap.out | 42 ++-- tests/result/waze.pcap.out | 27 +-- 13 files changed, 531 insertions(+), 510 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index cb3238a881f..78d95a76deb 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -81,7 +81,8 @@ static json_object *jArray_topStats; static u_int8_t live_capture = 0; static u_int8_t undetected_flows_deleted = 0; /** User preferences **/ -static u_int8_t enable_protocol_guess = 1, verbose = 0, json_flag = 0; +u_int8_t enable_protocol_guess = 1; +static u_int8_t verbose = 0, json_flag = 0; int nDPI_LogLevel = 0; char *_debug_protocols = NULL; static u_int8_t stats_flag = 0, bpf_filter_flag = 0; @@ -97,7 +98,7 @@ static struct timeval begin, end; #ifdef linux static int core_affinity[MAX_NUM_READER_THREADS]; #endif -static struct timeval pcap_start, pcap_end; +static struct timeval pcap_start = { 0, 0}, pcap_end = { 0, 0 }; /** Detection parameters **/ static time_t capture_for = 0; static time_t capture_until = 0; @@ -905,27 +906,6 @@ static void node_print_known_proto_walker(const void *node, /* ********************************** */ -/** - * @brief Guess Undetected Protocol - */ -static u_int16_t node_guess_undetected_protocol(u_int16_t thread_id, struct ndpi_flow_info *flow) { - - flow->detected_protocol = ndpi_guess_undetected_protocol(ndpi_thread_info[thread_id].workflow->ndpi_struct, - NULL, - flow->protocol, - ntohl(flow->src_ip), - ntohs(flow->src_port), - ntohl(flow->dst_ip), - ntohs(flow->dst_port)); - // printf("Guess state: %u\n", flow->detected_protocol); - if(flow->detected_protocol.app_protocol != NDPI_PROTOCOL_UNKNOWN) - ndpi_thread_info[thread_id].workflow->stats.guessed_flow_protocols++; - - return(flow->detected_protocol.app_protocol); -} - -/* ********************************** */ - /** * @brief Proto Guess Walker */ @@ -935,13 +915,7 @@ static void node_proto_guess_walker(const void *node, ndpi_VISIT which, int dept if((which == ndpi_preorder) || (which == ndpi_leaf)) { /* Avoid walking the same node multiple times */ if((!flow->detection_completed) && flow->ndpi_flow) - flow->detected_protocol = ndpi_detection_giveup(ndpi_thread_info[0].workflow->ndpi_struct, flow->ndpi_flow); - - if(enable_protocol_guess) { - if(flow->detected_protocol.app_protocol == NDPI_PROTOCOL_UNKNOWN) { - node_guess_undetected_protocol(thread_id, flow); - } - } + flow->detected_protocol = ndpi_detection_giveup(ndpi_thread_info[0].workflow->ndpi_struct, flow->ndpi_flow, enable_protocol_guess); process_ndpi_collected_info(ndpi_thread_info[thread_id].workflow, flow); @@ -1416,23 +1390,12 @@ static void node_idle_scan_walker(const void *node, ndpi_VISIT which, int depth, /** - * @brief On Protocol Discover - call node_guess_undetected_protocol() for protocol + * @brief On Protocol Discover - demo callback */ static void on_protocol_discovered(struct ndpi_workflow * workflow, struct ndpi_flow_info * flow, void * udata) { - const u_int16_t thread_id = (uintptr_t) udata; - - if(verbose > 1) { - if(enable_protocol_guess) { - if(flow->detected_protocol.app_protocol == NDPI_PROTOCOL_UNKNOWN) { - flow->detected_protocol.app_protocol = node_guess_undetected_protocol(thread_id, flow), - flow->detected_protocol.master_protocol = NDPI_PROTOCOL_UNKNOWN; - } - } - - // printFlow(thread_id, flow); - } + ; } #if 0 @@ -2026,8 +1989,10 @@ static void printResults(u_int64_t tot_usec) { float t = (float)(cumulative_stats.ip_packet_count*1000000)/(float)tot_usec; float b = (float)(cumulative_stats.total_wire_bytes * 8 *1000000)/(float)tot_usec; float traffic_duration; + if(live_capture) traffic_duration = tot_usec; else traffic_duration = (pcap_end.tv_sec*1000000 + pcap_end.tv_usec) - (pcap_start.tv_sec*1000000 + pcap_start.tv_usec); + printf("\tnDPI throughput: %s pps / %s/sec\n", formatPackets(t, buf), formatTraffic(b, 1, buf1)); t = (float)(cumulative_stats.ip_packet_count*1000000)/(float)traffic_duration; b = (float)(cumulative_stats.total_wire_bytes * 8 *1000000)/(float)traffic_duration; diff --git a/example/ndpi_util.c b/example/ndpi_util.c index 1a0d4591431..58dc896b1cf 100644 --- a/example/ndpi_util.c +++ b/example/ndpi_util.c @@ -74,6 +74,8 @@ #include "ndpi_main.h" #include "ndpi_util.h" +extern u_int8_t enable_protocol_guess; + /* ***************************************************** */ void ndpi_free_flow_info_half(struct ndpi_flow_info *flow) { @@ -677,8 +679,9 @@ static struct ndpi_proto packet_processing(struct ndpi_workflow * workflow, flow->check_extra_packets = 1; if(flow->detected_protocol.app_protocol == NDPI_PROTOCOL_UNKNOWN) - flow->detected_protocol = ndpi_detection_giveup(workflow->ndpi_struct, - flow->ndpi_flow); + flow->detected_protocol = ndpi_detection_giveup(workflow->ndpi_struct, flow->ndpi_flow, + enable_protocol_guess); + process_ndpi_collected_info(workflow, flow); } diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index c7ed7cd17d5..5bee25f5be5 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -213,11 +213,13 @@ extern "C" { * * @par ndpi_struct = the detection module * @par flow = the flow given for the detection module + * @par enable_guess = guess protocol if unknown * @return the detected protocol even if the flow is not completed; * */ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow); + struct ndpi_flow_struct *flow, + u_int8_t enable_guess); /** * Processes an extra packet in order to get more information for a given protocol diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index fcfaec713da..c7d9e237e52 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2526,6 +2526,25 @@ static ndpi_default_ports_tree_node_t* ndpi_get_guessed_protocol_id(struct ndpi_ /* ****************************************************** */ +/* + These are UDP protocols that must fit a single packet + and thus that if have NOT been detected they cannot be guessed + as they have been excluded + */ +u_int8_t is_udp_guessable_protocol(u_int16_t l7_guessed_proto) { + switch(l7_guessed_proto) { + case NDPI_PROTOCOL_QUIC: + case NDPI_PROTOCOL_SNMP: + case NDPI_PROTOCOL_NETFLOW: + /* TODO: add more protocols (if any missing) */ + return(1); + } + + return(0); +} + +/* ****************************************************** */ + u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int8_t proto, u_int16_t sport, u_int16_t dport, @@ -2541,7 +2560,9 @@ u_int16_t ndpi_guess_protocol_id(struct ndpi_detection_module_struct *ndpi_struc /* We need to check if the guessed protocol isn't excluded by nDPI */ if(flow && (proto == IPPROTO_UDP) - && (NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, guessed_proto))) + && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, guessed_proto) + && is_udp_guessable_protocol(guessed_proto) + ) return(NDPI_PROTOCOL_UNKNOWN); else { *user_defined_proto = found->customUserProto; @@ -3397,7 +3418,7 @@ static int ndpi_handle_ipv6_extension_headers(struct ndpi_detection_module_struc } return 0; } -#endif /* NDPI_DETECTION_SUPPORT_IPV6 */ +#endif /* NDPI_DETECTION_SUPPORT_IPV6 */ static u_int8_t ndpi_iph_is_valid_and_not_fragmented(const struct ndpi_iphdr *iph, const u_int16_t ipsize) @@ -3605,13 +3626,18 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str && flow->init_finished != 0 && flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { u_int8_t backup; + u_int16_t backup1, backup2; if(flow->http.url) ndpi_free(flow->http.url); if(flow->http.content_type) ndpi_free(flow->http.content_type); - backup = flow->num_processed_pkts; + backup = flow->num_processed_pkts; + backup1 = flow->guessed_protocol_id; + backup2 = flow->guessed_host_protocol_id; memset(flow, 0, sizeof(*(flow))); flow->num_processed_pkts = backup; + flow->guessed_protocol_id = backup1; + flow->guessed_host_protocol_id = backup2; NDPI_LOG_DBG(ndpi_struct, "tcp syn packet for unknown protocol, reset detection state\n"); @@ -3785,9 +3811,8 @@ void check_ndpi_other_flow_func(struct ndpi_detection_module_struct *ndpi_struct ndpi_struct->callback_buffer_non_tcp_udp[a].ndpi_selection_bitmask && (flow == NULL || - NDPI_BITMASK_COMPARE - (flow->excluded_protocol_bitmask, - ndpi_struct->callback_buffer_non_tcp_udp[a].excluded_protocol_bitmask) == 0) + NDPI_BITMASK_COMPARE(flow->excluded_protocol_bitmask, + ndpi_struct->callback_buffer_non_tcp_udp[a].excluded_protocol_bitmask) == 0) && NDPI_BITMASK_COMPARE(ndpi_struct->callback_buffer_non_tcp_udp[a].detection_bitmask, detection_bitmask) != 0) { @@ -3905,8 +3930,7 @@ void check_ndpi_tcp_flow_func(struct ndpi_detection_module_struct *ndpi_struct, && (ndpi_struct->callback_buffer_tcp_no_payload[a].ndpi_selection_bitmask & *ndpi_selection_packet) == ndpi_struct->callback_buffer_tcp_no_payload[a].ndpi_selection_bitmask && NDPI_BITMASK_COMPARE(flow->excluded_protocol_bitmask, - ndpi_struct-> - callback_buffer_tcp_no_payload[a].excluded_protocol_bitmask) == 0 + ndpi_struct->callback_buffer_tcp_no_payload[a].excluded_protocol_bitmask) == 0 && NDPI_BITMASK_COMPARE(ndpi_struct->callback_buffer_tcp_no_payload[a].detection_bitmask, detection_bitmask) != 0) { ndpi_struct->callback_buffer_tcp_no_payload[a].func(ndpi_struct, flow); @@ -3951,7 +3975,7 @@ static u_int16_t ndpi_guess_host_protocol_id(struct ndpi_detection_module_struct /* ********************************************************************************* */ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) { + struct ndpi_flow_struct *flow, u_int8_t enable_guess) { ndpi_protocol ret = { NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED }; if(flow == NULL) return(ret); @@ -3973,13 +3997,18 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st guessed_protocol_id = flow->guessed_protocol_id, guessed_host_protocol_id = flow->guessed_host_protocol_id; if((guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN) - && ((flow->packet.l4_protocol == IPPROTO_UDP) && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_host_protocol_id))) + && ((flow->packet.l4_protocol == IPPROTO_UDP) + && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_host_protocol_id) + && is_udp_guessable_protocol(guessed_host_protocol_id) + )) flow->guessed_host_protocol_id = guessed_host_protocol_id = NDPI_PROTOCOL_UNKNOWN; /* Ignore guessed protocol if they have been discarded */ if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) // && (guessed_host_protocol_id == NDPI_PROTOCOL_UNKNOWN) - && (flow->packet.l4_protocol == IPPROTO_UDP) && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_protocol_id)) + && (flow->packet.l4_protocol == IPPROTO_UDP) + && NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_protocol_id) + && is_udp_guessable_protocol(guessed_protocol_id)) flow->guessed_protocol_id = guessed_protocol_id = NDPI_PROTOCOL_UNKNOWN; if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) @@ -4026,6 +4055,20 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st ret.app_protocol = NDPI_PROTOCOL_HANGOUT; } + if(enable_guess + && (ret.app_protocol == NDPI_PROTOCOL_UNKNOWN) + && flow->packet.iph /* Guess only IPv4 */ + && (flow->packet.tcp || flow->packet.udp) + ) + ret = ndpi_guess_undetected_protocol(ndpi_struct, + flow, + flow->packet.l4_protocol, + ntohl(flow->packet.iph->saddr), + ntohs(flow->packet.udp ? flow->packet.udp->source : flow->packet.tcp->source), + ntohl(flow->packet.iph->daddr), + ntohs(flow->packet.udp ? flow->packet.udp->dest : flow->packet.tcp->dest) + ); + ndpi_fill_protocol_category(ndpi_struct, flow, &ret); return(ret); @@ -4421,7 +4464,7 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct if(flow->packet.iph) { if(flow->guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN) { /* ret.master_protocol = flow->guessed_protocol_id , ret.app_protocol = flow->guessed_host_protocol_id; /\* ****** *\/ */ - ret = ndpi_detection_giveup(ndpi_struct, flow); + ret = ndpi_detection_giveup(ndpi_struct, flow, 0); } ndpi_fill_protocol_category(ndpi_struct, flow, &ret); @@ -4499,7 +4542,7 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct We don't see how future packets can match anything hence we giveup here */ - ret = ndpi_detection_giveup(ndpi_struct, flow); + ret = ndpi_detection_giveup(ndpi_struct, flow, 0); } return(ret); @@ -5382,7 +5425,9 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct rc = ndpi_search_tcp_or_udp_raw(ndpi_struct, NULL, proto, shost, dhost, sport, dport); if(rc != NDPI_PROTOCOL_UNKNOWN) { - if(flow && (proto == IPPROTO_UDP) && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc)) + if(flow && (proto == IPPROTO_UDP) + && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc) + && is_udp_guessable_protocol(rc)) ; else { ret.app_protocol = rc, @@ -5399,7 +5444,9 @@ ndpi_protocol ndpi_guess_undetected_protocol(struct ndpi_detection_module_struct rc = ndpi_guess_protocol_id(ndpi_struct, NULL, proto, sport, dport, &user_defined_proto); if(rc != NDPI_PROTOCOL_UNKNOWN) { - if(flow && (proto == IPPROTO_UDP) && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc)) + if(flow && (proto == IPPROTO_UDP) + && NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, rc) + && is_udp_guessable_protocol(rc)) ; else { ret.app_protocol = rc; diff --git a/src/lib/protocols/netbios.c b/src/lib/protocols/netbios.c index 4c5897c1476..925b864ad89 100644 --- a/src/lib/protocols/netbios.c +++ b/src/lib/protocols/netbios.c @@ -330,9 +330,8 @@ void ndpi_search_netbios(struct ndpi_detection_module_struct *ndpi_struct, struc NDPI_LOG_DBG2(ndpi_struct, "found netbios port 138 and payload length >= 112 \n"); - if(packet->payload[0] >= 0x11 && packet->payload[0] <= 0x16) { - - NDPI_LOG_DBG2(ndpi_struct, "found netbios with MSG-type 0x11,0x12,0x13,0x14,0x15 or 0x16\n"); + if(packet->payload[0] >= 0x10 && packet->payload[0] <= 0x16) { + NDPI_LOG_DBG2(ndpi_struct, "found netbios with MSG-type 0x10,0x11,0x12,0x13,0x14,0x15 or 0x16\n"); if(ntohl(get_u_int32_t(packet->payload, 4)) == ntohl(packet->iph->saddr)) { NDPI_LOG_INFO(ndpi_struct, "found netbios with checked ip-address\n"); diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index 8a4eafca4b3..faeac17c591 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -66,7 +66,7 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s } } - return; + // return; } NDPI_EXCLUDE_PROTO(ndpi_struct, flow); diff --git a/src/lib/protocols/teredo.c b/src/lib/protocols/teredo.c index 732b1d6c9a2..e377d09a45f 100644 --- a/src/lib/protocols/teredo.c +++ b/src/lib/protocols/teredo.c @@ -32,7 +32,7 @@ void ndpi_search_teredo(struct ndpi_detection_module_struct *ndpi_struct, struct NDPI_LOG_DBG(ndpi_struct,"search teredo\n"); if(packet->udp && packet->iph - && ((ntohl(packet->iph->daddr) & 0xF0000000) == 0xE0000000 /* A multicast address */) + && ((ntohl(packet->iph->daddr) & 0xF0000000) != 0xE0000000 /* Not a multicast address */) && ((ntohs(packet->udp->source) == 3544) || (ntohs(packet->udp->dest) == 3544)) && (packet->payload_packet_len >= 40 /* IPv6 header */)) { NDPI_LOG_INFO(ndpi_struct,"found teredo\n"); diff --git a/tests/do.sh b/tests/do.sh index 7516e599708..a17878fb5b2 100755 --- a/tests/do.sh +++ b/tests/do.sh @@ -7,7 +7,10 @@ build_results() { for f in $PCAPS; do #echo $f # create result files if not present - [ ! -f result/$f.out ] && $READER -q -i pcap/$f -w result/$f.out -v 1 + if [ ! -f result/$f.out ]; then + CMD="$READER -q -i pcap/$f -w result/$f.out -v 1" + $CMD + fi done } diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index 778aa1197fe..baad4b4e632 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -1,9 +1,10 @@ -Unknown 990 378832 34 +Unknown 985 375351 33 HTTP 47 42014 11 SSDP 63 17143 10 HTTP_Download 26 27222 2 Google 2 1093 1 GenericProtocol 1429 1780307 49 +QUIC 5 3481 1 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] @@ -12,72 +13,73 @@ GenericProtocol 1429 1780307 49 5 TCP 192.168.115.8:50486 <-> 77.234.40.96:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][11 pkts/11023 bytes <-> 12 pkts/14869 bytes][Host: bcu.ff.avast.com] 6 UDP 192.168.5.38:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][18 pkts/9327 bytes -> 0 pkts/0 bytes] 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] - 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] - 9 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] - 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] - 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] - 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] - 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] - 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] - 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] - 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] - 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] - 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 33 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] - 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 35 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] - 36 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] - 37 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 38 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] - 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 43 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] - 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] - 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 50 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] - 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] - 52 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] - 54 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] - 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] - 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] - 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 65 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] - 66 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] - 67 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] - 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] - 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] - 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] - 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] - 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes -> 0 pkts/0 bytes] - 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] + 8 UDP 192.168.115.8:22793 <-> 202.198.7.89:16039 [proto: 188/QUIC][cat: Web/5][2 pkts/158 bytes <-> 3 pkts/3323 bytes] + 9 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] + 10 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] + 11 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] + 12 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] + 13 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] + 14 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 15 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 16 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 17 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 18 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] + 19 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] + 20 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 21 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] + 22 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 23 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] + 24 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 25 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] + 26 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 27 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] + 28 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 29 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 30 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 31 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 32 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 33 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 34 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] + 35 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 36 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] + 37 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] + 38 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 39 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 40 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 41 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] + 42 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 43 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 44 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] + 45 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] + 46 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 47 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 48 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 49 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 50 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 51 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] + 52 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] + 53 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 54 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] + 55 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 56 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] + 57 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 58 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] + 59 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 60 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 61 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 62 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] + 63 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 64 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 65 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 66 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] + 67 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] + 68 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] + 69 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] + 70 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] + 71 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] + 72 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] + 73 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes -> 0 pkts/0 bytes] + 74 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] Undetected flows: @@ -86,32 +88,31 @@ Undetected flows: 3 UDP 118.171.15.56:5544 <-> 192.168.115.8:22793 [proto: 0/Unknown][30 pkts/33210 bytes <-> 71 pkts/5609 bytes] 4 UDP 192.168.115.8:22793 <-> 219.228.107.156:1250 [proto: 0/Unknown][34 pkts/2686 bytes <-> 11 pkts/12177 bytes] 5 UDP 192.168.115.8:22793 <-> 222.197.138.12:6956 [proto: 0/Unknown][30 pkts/2370 bytes <-> 10 pkts/10042 bytes] - 6 UDP 192.168.115.8:22793 <-> 202.198.7.89:16039 [proto: 0/Unknown][2 pkts/158 bytes <-> 3 pkts/3323 bytes] - 7 UDP 192.168.115.8:22793 -> 1.169.136.116:17951 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] - 8 UDP 192.168.115.8:22793 -> 114.41.144.153:10492 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] - 9 UDP 192.168.115.8:22793 -> 218.61.39.103:17788 [proto: 0/Unknown][2 pkts/300 bytes -> 0 pkts/0 bytes] - 10 UDP 192.168.115.8:22793 -> 119.188.133.182:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 11 UDP 192.168.115.8:22793 -> 183.61.167.104:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.115.8:22793 -> 218.61.39.87:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 13 UDP 183.228.182.44:13913 <-> 192.168.115.8:22793 [proto: 0/Unknown][1 pkts/87 bytes <-> 2 pkts/170 bytes] - 14 UDP 192.168.115.8:22793 -> 183.61.167.82:17788 [proto: 0/Unknown][2 pkts/188 bytes -> 0 pkts/0 bytes] - 15 UDP 192.168.115.8:22793 -> 220.130.154.23:35941 [proto: 0/Unknown][2 pkts/174 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.115.8:22793 -> 111.249.53.196:32443 [proto: 0/Unknown][2 pkts/158 bytes -> 0 pkts/0 bytes] - 17 UDP 192.168.115.8:22793 -> 1.175.128.104:5185 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.115.8:22793 -> 36.233.39.81:18590 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.115.8:22793 -> 36.237.154.69:4316 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 20 UDP 192.168.115.8:22793 -> 61.223.204.67:11102 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 21 UDP 192.168.115.8:22793 -> 61.227.170.88:20227 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 22 UDP 192.168.115.8:22793 -> 111.117.101.81:10162 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 23 UDP 192.168.115.8:22793 -> 111.250.102.66:1107 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 24 UDP 192.168.115.8:22793 -> 114.37.142.173:1074 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.115.8:22793 -> 114.47.91.129:22576 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 26 UDP 192.168.115.8:22793 -> 115.157.62.243:29006 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 27 UDP 192.168.115.8:22793 -> 121.248.133.93:12757 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 28 UDP 192.168.115.8:22793 -> 202.112.31.89:29072 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.115.8:22793 -> 210.44.171.1:29702 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 30 UDP 192.168.115.8:22793 -> 210.44.232.243:21044 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 31 UDP 192.168.115.8:22793 -> 210.47.12.19:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 32 UDP 192.168.115.8:22793 -> 210.47.12.20:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.115.8:22793 -> 222.26.74.190:1037 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 34 UDP 192.168.115.8:22793 -> 222.26.193.119:7133 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 6 UDP 192.168.115.8:22793 -> 1.169.136.116:17951 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] + 7 UDP 192.168.115.8:22793 -> 114.41.144.153:10492 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] + 8 UDP 192.168.115.8:22793 -> 218.61.39.103:17788 [proto: 0/Unknown][2 pkts/300 bytes -> 0 pkts/0 bytes] + 9 UDP 192.168.115.8:22793 -> 119.188.133.182:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 10 UDP 192.168.115.8:22793 -> 183.61.167.104:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 11 UDP 192.168.115.8:22793 -> 218.61.39.87:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 12 UDP 183.228.182.44:13913 <-> 192.168.115.8:22793 [proto: 0/Unknown][1 pkts/87 bytes <-> 2 pkts/170 bytes] + 13 UDP 192.168.115.8:22793 -> 183.61.167.82:17788 [proto: 0/Unknown][2 pkts/188 bytes -> 0 pkts/0 bytes] + 14 UDP 192.168.115.8:22793 -> 220.130.154.23:35941 [proto: 0/Unknown][2 pkts/174 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.115.8:22793 -> 111.249.53.196:32443 [proto: 0/Unknown][2 pkts/158 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.115.8:22793 -> 1.175.128.104:5185 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.115.8:22793 -> 36.233.39.81:18590 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.115.8:22793 -> 36.237.154.69:4316 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 19 UDP 192.168.115.8:22793 -> 61.223.204.67:11102 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 20 UDP 192.168.115.8:22793 -> 61.227.170.88:20227 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 21 UDP 192.168.115.8:22793 -> 111.117.101.81:10162 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 22 UDP 192.168.115.8:22793 -> 111.250.102.66:1107 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 23 UDP 192.168.115.8:22793 -> 114.37.142.173:1074 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 24 UDP 192.168.115.8:22793 -> 114.47.91.129:22576 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 25 UDP 192.168.115.8:22793 -> 115.157.62.243:29006 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 26 UDP 192.168.115.8:22793 -> 121.248.133.93:12757 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 27 UDP 192.168.115.8:22793 -> 202.112.31.89:29072 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 28 UDP 192.168.115.8:22793 -> 210.44.171.1:29702 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 29 UDP 192.168.115.8:22793 -> 210.44.232.243:21044 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 30 UDP 192.168.115.8:22793 -> 210.47.12.19:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 31 UDP 192.168.115.8:22793 -> 210.47.12.20:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 32 UDP 192.168.115.8:22793 -> 222.26.74.190:1037 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 33 UDP 192.168.115.8:22793 -> 222.26.193.119:7133 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index 4d09243a3ad..ddb00deaab5 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -1,4 +1,4 @@ -Unknown 175 20913 11 +Unknown 171 20697 10 DNS 2 267 1 MDNS 8 1736 2 NTP 2 180 1 @@ -9,7 +9,7 @@ IGMP 5 258 4 SSL 96 8876 7 Dropbox 38 17948 5 Skype 584 56659 57 -Apple 3 168 1 +Apple 7 384 2 AppleiCloud 88 20520 2 Spotify 5 430 1 MS_OneDrive 387 198090 1 @@ -146,157 +146,158 @@ ApplePush 12 1877 1 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web/5][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] - 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] - 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] - 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] - 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:54067 -> 192.168.1.1:5351 [proto: 140/Apple][cat: Web/5][4 pkts/216 bytes -> 0 pkts/0 bytes] + 133 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] + 134 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 135 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 136 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] + 137 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] + 138 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 248 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 249 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 256 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 257 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 258 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 259 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 260 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 261 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 262 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 263 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 264 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 265 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 266 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 267 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 268 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 269 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 270 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 271 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 272 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 273 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 274 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 275 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 276 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 277 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 278 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 279 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 280 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 281 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 282 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 283 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] Undetected flows: @@ -309,5 +310,4 @@ Undetected flows: 7 TCP 192.168.1.34:50144 <-> 78.202.226.115:29059 [proto: 0/Unknown][10 pkts/797 bytes <-> 4 pkts/342 bytes] 8 TCP 192.168.1.34:50145 -> 157.56.53.51:12350 [proto: 0/Unknown][8 pkts/608 bytes -> 0 pkts/0 bytes] 9 UDP 192.168.1.34:49511 -> 192.168.1.1:5351 [proto: 0/Unknown][4 pkts/216 bytes -> 0 pkts/0 bytes] - 10 UDP 192.168.1.34:54067 -> 192.168.1.1:5351 [proto: 0/Unknown][4 pkts/216 bytes -> 0 pkts/0 bytes] - 11 TCP 192.168.1.34:50140 <-> 76.167.161.6:20274 [proto: 0/Unknown][2 pkts/132 bytes <-> 1 pkts/74 bytes] + 10 TCP 192.168.1.34:50140 <-> 76.167.161.6:20274 [proto: 0/Unknown][2 pkts/132 bytes <-> 1 pkts/74 bytes] diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index 1c43d3161ca..a278e42ebb8 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -1,4 +1,4 @@ -Unknown 186 61791 12 +Unknown 183 61585 11 DNS 2 267 1 MDNS 3 400 2 NetBIOS 22 3106 7 @@ -8,7 +8,7 @@ ICMP 4 328 1 IGMP 4 226 4 SSL 79 7742 6 Dropbox 16 7342 5 -Skype 607 129455 45 +Skype 610 129661 46 Apple 76 19581 1 MS_OneDrive 348 181687 1 ApplePush 8 1118 1 @@ -114,160 +114,161 @@ ApplePush 8 1118 1 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/216 bytes -> 0 pkts/0 bytes] 101 TCP 192.168.1.34:51283 <-> 111.221.74.48:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][2 pkts/132 bytes <-> 1 pkts/74 bytes] - 102 UDP 192.168.1.34:59788 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 103 UDP 192.168.1.34:63661 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 104 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/142 bytes -> 0 pkts/0 bytes][Lucas-iMac.local] - 105 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] - 106 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] - 107 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] - 108 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 109 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 112 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 113 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 114 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 115 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 116 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 117 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 118 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 119 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 120 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 121 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 122 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 123 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 124 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 125 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 126 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 127 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 130 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 131 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 132 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 133 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 134 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 135 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 136 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 137 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 247 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 248 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 249 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 255 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] + 102 TCP 192.168.1.34:51300 <-> 76.167.161.6:20274 [proto: 125/Skype][cat: VoIP/10][2 pkts/132 bytes <-> 1 pkts/74 bytes] + 103 UDP 192.168.1.34:59788 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 104 UDP 192.168.1.34:63661 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 105 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/142 bytes -> 0 pkts/0 bytes][Lucas-iMac.local] + 106 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 107 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 108 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] + 109 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 110 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 112 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 113 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 114 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 115 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 116 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 117 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 118 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 119 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 120 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 121 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 122 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 123 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 124 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 125 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 126 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 127 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 130 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 131 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 133 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 134 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 135 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 136 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 137 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 248 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 249 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 250 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 256 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] Undetected flows: @@ -281,5 +282,4 @@ Undetected flows: 8 TCP 192.168.1.34:51303 -> 80.121.84.93:62381 [proto: 0/Unknown][7 pkts/546 bytes -> 0 pkts/0 bytes] 9 TCP 192.168.1.34:51306 -> 80.121.84.93:62381 [proto: 0/Unknown][6 pkts/468 bytes -> 0 pkts/0 bytes] 10 UDP 192.168.1.34:59052 -> 192.168.1.1:5351 [proto: 0/Unknown][4 pkts/216 bytes -> 0 pkts/0 bytes] - 11 TCP 192.168.1.34:51300 <-> 76.167.161.6:20274 [proto: 0/Unknown][2 pkts/132 bytes <-> 1 pkts/74 bytes] - 12 TCP 192.168.1.34:51319 -> 212.161.8.36:13392 [proto: 0/Unknown][1 pkts/78 bytes -> 0 pkts/0 bytes] + 11 TCP 192.168.1.34:51319 -> 212.161.8.36:13392 [proto: 0/Unknown][1 pkts/78 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/viber.pcap.out b/tests/result/viber.pcap.out index 73816982736..0c85aae9e26 100644 --- a/tests/result/viber.pcap.out +++ b/tests/result/viber.pcap.out @@ -1,3 +1,4 @@ +Unknown 93 13829 4 DNS 8 1267 4 MDNS 4 412 1 ICMP 2 3028 1 @@ -5,7 +6,7 @@ SSL 129 42221 7 ICMPV6 2 140 1 Facebook 2 281 1 Google 2 164 1 -Viber 268 99524 9 +Viber 175 85695 5 QUIC 3 194 1 1 TCP 192.168.0.17:53934 <-> 54.230.93.53:443 [proto: 91.144/SSL.Viber][cat: Chat/9][43 pkts/4571 bytes <-> 46 pkts/60087 bytes][client: dl-media.viber.com][server: *.viber.com] @@ -16,21 +17,24 @@ QUIC 3 194 1 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] 7 TCP 192.168.0.17:55746 <-> 151.101.1.130:443 [proto: 91/SSL][cat: Web/5][10 pkts/1534 bytes <-> 9 pkts/6239 bytes][client: venetia.iad.appboy.com][server: y.ssl.fastly.net] 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] - 9 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 144/Viber][cat: Chat/9][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] - 10 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 144/Viber][cat: Chat/9][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] - 11 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] - 12 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] - 13 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 14 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 15 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] - 17 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] - 18 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] - 19 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] - 20 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] - 21 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188/QUIC][cat: Web/5][2 pkts/130 bytes <-> 1 pkts/64 bytes] - 22 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] - 23 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] - 24 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] - 26 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 9 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] + 10 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] + 11 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 12 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 13 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] + 14 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] + 15 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] + 16 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] + 17 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] + 18 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] + 19 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188/QUIC][cat: Web/5][2 pkts/130 bytes <-> 1 pkts/64 bytes] + 20 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] + 21 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] + 22 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] + + +Undetected flows: + 1 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 0/Unknown][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] + 2 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 0/Unknown][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] + 3 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 0/Unknown][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 4 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 0/Unknown][1 pkts/76 bytes <-> 1 pkts/62 bytes] diff --git a/tests/result/waze.pcap.out b/tests/result/waze.pcap.out index 5b183ea2cd4..bdb4acf91db 100644 --- a/tests/result/waze.pcap.out +++ b/tests/result/waze.pcap.out @@ -1,4 +1,3 @@ -Unknown 10 786 1 HTTP 28 1572 7 NTP 2 180 1 HTTP_Download 37 63205 1 @@ -6,6 +5,7 @@ SSL_No_Cert 13 2142 1 SSL 8 432 2 Waze 484 289335 19 WhatsApp 15 1341 1 +Amazon 10 786 1 1 TCP 10.8.0.1:36100 <-> 46.51.173.182:443 [proto: 91.135/SSL.Waze][cat: Web/5][52 pkts/10860 bytes <-> 55 pkts/74852 bytes][server: *.world.waze.com] 2 TCP 10.8.0.1:54915 <-> 65.39.128.135:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][19 pkts/1309 bytes <-> 18 pkts/61896 bytes][Host: xtra1.gpsonextra.net] @@ -29,17 +29,14 @@ WhatsApp 15 1341 1 20 TCP 10.8.0.1:45552 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/552 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] 21 TCP 10.8.0.1:45554 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/550 bytes <-> 7 pkts/769 bytes][Host: cres.waze.com] 22 TCP 10.8.0.1:45540 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/553 bytes <-> 7 pkts/733 bytes][Host: roadshields.waze.com] - 23 TCP 10.16.37.157:41823 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 24 TCP 10.16.37.157:43991 <-> 200.160.4.31:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 25 TCP 10.16.37.157:46473 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 26 TCP 10.16.37.157:52746 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 27 TCP 10.16.37.157:52953 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] - 28 TCP 10.8.0.1:43089 <-> 200.160.4.198:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 29 TCP 10.8.0.1:45169 <-> 200.160.4.198:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 30 TCP 10.8.0.1:60479 <-> 200.160.4.49:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 31 TCP 10.8.0.1:60574 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] - 32 UDP 10.8.0.1:46214 <-> 200.89.75.198:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] - - -Undetected flows: - 1 TCP 10.16.37.157:42256 <-> 174.37.231.81:5222 [proto: 0/Unknown][8 pkts/678 bytes <-> 2 pkts/108 bytes] + 23 TCP 10.16.37.157:42256 <-> 174.37.231.81:5222 [proto: 91.178/SSL.Amazon][cat: Web/5][8 pkts/678 bytes <-> 2 pkts/108 bytes] + 24 TCP 10.16.37.157:41823 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 25 TCP 10.16.37.157:43991 <-> 200.160.4.31:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 26 TCP 10.16.37.157:46473 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 27 TCP 10.16.37.157:52746 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 28 TCP 10.16.37.157:52953 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/120 bytes <-> 2 pkts/108 bytes] + 29 TCP 10.8.0.1:43089 <-> 200.160.4.198:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 30 TCP 10.8.0.1:45169 <-> 200.160.4.198:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 31 TCP 10.8.0.1:60479 <-> 200.160.4.49:443 [proto: 91/SSL][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 32 TCP 10.8.0.1:60574 <-> 200.160.4.49:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes <-> 2 pkts/108 bytes] + 33 UDP 10.8.0.1:46214 <-> 200.89.75.198:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] From e9dd5985b3d3f1ac462b9145c20f32c4ed7869b7 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 21 Nov 2018 17:22:15 +0100 Subject: [PATCH 122/147] Made configure more friendly Added time measurement in ndpiReader (processing and setup time) --- configure.seed | 1 + example/ndpiReader.c | 40 +++++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/configure.seed b/configure.seed index 11220f8859f..1aa68f17ced 100644 --- a/configure.seed +++ b/configure.seed @@ -87,6 +87,7 @@ if test "${with_hyperscan+set}" = set; then HS_INC=`pkg-config --cflags libhs` HS_LIB=`pkg-config --libs libhs` LDFLAGS="$LDFLAGS $HS_LIB" + AC_MSG_RESULT([compiling with Intel Hyperscan]) else AC_MSG_RESULT([Intel Hyperscan not found, exiting. See https://github.com/intel/hyperscan/blob/master/doc/dev-reference/getting_started.rst for install/build instructions]) exit 1 diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 78d95a76deb..2885399d28f 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -94,7 +94,7 @@ static u_int16_t decode_tunnels = 0; static u_int16_t num_loops = 1; static u_int8_t shutdown_app = 0, quiet_mode = 0; static u_int8_t num_threads = 1; -static struct timeval begin, end; +static struct timeval startup_time, begin, end; #ifdef linux static int core_affinity[MAX_NUM_READER_THREADS]; #endif @@ -1890,7 +1890,7 @@ void printPortStats(struct port_stats *stats) { /** * @brief Print result */ -static void printResults(u_int64_t tot_usec) { +static void printResults(u_int64_t processing_time_usec, u_int64_t setup_time_usec) { u_int32_t i; u_int64_t total_flow_bytes = 0; u_int32_t avg_pkt_size = 0; @@ -1953,7 +1953,9 @@ static void printResults(u_int64_t tot_usec) { printf("\tFlow Memory (per flow): %-13s\n", formatBytes(sizeof(struct ndpi_flow_struct), buf, sizeof(buf))); printf("\tActual Memory: %-13s\n", formatBytes(current_ndpi_memory, buf, sizeof(buf))); printf("\tPeak Memory: %-13s\n", formatBytes(max_ndpi_memory, buf, sizeof(buf))); - + printf("\tSetup Time: %lu msec\n", setup_time_usec/1000); + printf("\tPacket Processing Time: %lu msec\n", processing_time_usec/1000); + if(!json_flag) { printf("\nTraffic statistics:\n"); printf("\tEthernet bytes: %-13llu (includes ethernet CRC/IFC/trailer)\n", @@ -1984,13 +1986,13 @@ static void printResults(u_int64_t tot_usec) { printf("\tPacket Len 1024-1500: %-13lu\n", (unsigned long)cumulative_stats.packet_len[4]); printf("\tPacket Len > 1500: %-13lu\n", (unsigned long)cumulative_stats.packet_len[5]); - if(tot_usec > 0) { + if(processing_time_usec > 0) { char buf[32], buf1[32], when[64]; - float t = (float)(cumulative_stats.ip_packet_count*1000000)/(float)tot_usec; - float b = (float)(cumulative_stats.total_wire_bytes * 8 *1000000)/(float)tot_usec; + float t = (float)(cumulative_stats.ip_packet_count*1000000)/(float)processing_time_usec; + float b = (float)(cumulative_stats.total_wire_bytes * 8 *1000000)/(float)processing_time_usec; float traffic_duration; - if(live_capture) traffic_duration = tot_usec; + if(live_capture) traffic_duration = processing_time_usec; else traffic_duration = (pcap_end.tv_sec*1000000 + pcap_end.tv_usec) - (pcap_start.tv_sec*1000000 + pcap_start.tv_usec); printf("\tnDPI throughput: %s pps / %s/sec\n", formatPackets(t, buf), formatTraffic(b, 1, buf1)); @@ -2002,7 +2004,7 @@ static void printResults(u_int64_t tot_usec) { strftime(when, sizeof(when), "%d/%b/%Y %H:%M:%S", localtime(&pcap_end.tv_sec)); printf("\tAnalysis end: %s\n", when); printf("\tTraffic throughput: %s pps / %s/sec\n", formatPackets(t, buf), formatTraffic(b, 1, buf1)); - printf("\tTraffic duration: %.3f sec\n", traffic_duration/1000000); + printf("\tTraffic duration: %.3f sec\n", traffic_duration/1000000); } if(enable_protocol_guess) @@ -2491,12 +2493,13 @@ static void pcap_process_packet(u_char *args, if((pcap_end.tv_sec-pcap_start.tv_sec) > pcap_analysis_duration) { int i; - u_int64_t tot_usec; + u_int64_t processing_time_usec, setup_time_usec; gettimeofday(&end, NULL); - tot_usec = end.tv_sec*1000000 + end.tv_usec - (begin.tv_sec*1000000 + begin.tv_usec); - - printResults(tot_usec); + processing_time_usec = end.tv_sec*1000000 + end.tv_usec - (begin.tv_sec*1000000 + begin.tv_usec); + setup_time_usec = begin.tv_sec*1000000 + begin.tv_usec - (startup_time.tv_sec*1000000 + startup_time.tv_usec); + + printResults(processing_time_usec, setup_time_usec); for(i=0; iprefs.num_roots; i++) { ndpi_tdestroy(ndpi_thread_info[thread_id].workflow->ndpi_flows_root[i], ndpi_flow_info_freer); @@ -2595,7 +2598,7 @@ void * processing_thread(void *_thread_id) { */ void test_lib() { struct timeval end; - u_int64_t tot_usec; + u_int64_t processing_time_usec, setup_time_usec; long thread_id; #ifdef HAVE_JSON_C @@ -2647,10 +2650,11 @@ void test_lib() { } gettimeofday(&end, NULL); - tot_usec = end.tv_sec*1000000 + end.tv_usec - (begin.tv_sec*1000000 + begin.tv_usec); + processing_time_usec = end.tv_sec*1000000 + end.tv_usec - (begin.tv_sec*1000000 + begin.tv_usec); + setup_time_usec = begin.tv_sec*1000000 + begin.tv_usec - (startup_time.tv_sec*1000000 + startup_time.tv_usec); /* Printing cumulative results */ - printResults(tot_usec); + printResults(processing_time_usec, setup_time_usec); if(stats_flag) { #ifdef HAVE_JSON_C @@ -3263,8 +3267,8 @@ int orginal_main(int argc, char **argv) { #else int main(int argc, char **argv) { #endif - int i; - + int i; + if(ndpi_get_api_version() != NDPI_API_VERSION) { printf("nDPI Library version mismatch: please make sure this code and the nDPI library are in sync\n"); return(-1); @@ -3272,7 +3276,9 @@ int orginal_main(int argc, char **argv) { automataUnitTest(); + gettimeofday(&startup_time, NULL); ndpi_info_mod = ndpi_init_detection_module(); + if(ndpi_info_mod == NULL) return -1; memset(ndpi_thread_info, 0, sizeof(ndpi_thread_info)); From f15aed6c46461779459031058f0e9f076a3186bc Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 21 Nov 2018 23:25:27 +0100 Subject: [PATCH 123/147] Renamed internal function --- example/ndpiReader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 2885399d28f..29d07e29960 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -2400,7 +2400,7 @@ static pcap_t * openPcapFileOrDevice(u_int16_t thread_id, const u_char * pcap_fi /** * @brief Check pcap packet */ -static void pcap_process_packet(u_char *args, +static void ndpi_process_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { struct ndpi_proto p; @@ -2522,7 +2522,7 @@ static void pcap_process_packet(u_char *args, */ static void runPcapLoop(u_int16_t thread_id) { if((!shutdown_app) && (ndpi_thread_info[thread_id].workflow->pcap_handle != NULL)) - pcap_loop(ndpi_thread_info[thread_id].workflow->pcap_handle, -1, &pcap_process_packet, (u_char*)&thread_id); + pcap_loop(ndpi_thread_info[thread_id].workflow->pcap_handle, -1, &ndpi_process_packet, (u_char*)&thread_id); } /** @@ -2570,7 +2570,7 @@ void * processing_thread(void *_thread_id) { h.len = h.caplen = len; gettimeofday(&h.ts, NULL); - pcap_process_packet((u_char*)&thread_id, &h, (const u_char *)data); + ndpi_process_packet((u_char*)&thread_id, &h, (const u_char *)data); rte_pktmbuf_free(bufs[i]); } } From 54deb1302d12cdf8611b243096969af531274844 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 28 Nov 2018 00:09:44 +0100 Subject: [PATCH 124/147] Added Signal.org dissector --- src/include/ndpi_protocol_ids.h | 2 +- src/lib/ndpi_content_match.c.inc | 2 ++ src/lib/ndpi_main.c | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index aefb0fce2f4..376ae195835 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -73,7 +73,7 @@ typedef enum { NDPI_PROTOCOL_EDONKEY = 36, /* Tomasz Bujlow */ NDPI_PROTOCOL_BITTORRENT = 37, NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, - NDPI_PROTOCOL_FREE_39 = 39, /* Free */ + NDPI_PROTOCOL_SIGNAL = 39, NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ NDPI_PROTOCOL_MINING = 42, /* Bitcoin, Ethereum, ZCash, Monero */ diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 4bfdde98342..778618862d7 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8419,6 +8419,8 @@ ndpi_protocol_match host_match[] = { { "snapcraft.io", NULL, "snapcraft\\.io" TLD, "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, { "ubuntu.com", NULL, "ubuntu\\.com" TLD, "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE }, + { "signal.org", NULL, "signal\\.org" TLD, "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, + { "whispersystems.org", NULL, "whispersystems\\.org" TLD, "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE }, { NULL, NULL, NULL, 0 } }; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index c7d9e237e52..00707cd8ae2 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1244,9 +1244,9 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_39, - no_master, - no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SIGNAL, + no_master, /* https://signal.org */ + no_master, "Signal", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196, From 5429063546fe8a73adc50e2d6eac4e00046c4424 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 28 Nov 2018 00:24:41 +0100 Subject: [PATCH 125/147] Improved WhatsApp detection --- src/lib/ndpi_content_match.c.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 778618862d7..7ea9927ec76 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -80,6 +80,8 @@ static ndpi_network host_protocol_list[] = { /* WhatsApp Inc. */ + { 0x1F0D4B00 /* 31.13.75.0/24 */, 24, NDPI_PROTOCOL_WHATSAPP }, + { 0x1F0D5600 /* 31.13.86.0/24 */, 24, NDPI_PROTOCOL_WHATSAPP }, { 0x3216C6CC /* 50.22.198.204/30 */, 30, NDPI_PROTOCOL_WHATSAPP }, { 0x4B7E2720 /* 75.126.39.32/27 */, 27, NDPI_PROTOCOL_WHATSAPP }, { 0x6CA8B460 /* 108.168.180.96/27 */, 27, NDPI_PROTOCOL_WHATSAPP }, From ea7e7c753b20bfdb4edd97499362a3a331631e04 Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Wed, 28 Nov 2018 16:40:34 +0200 Subject: [PATCH 126/147] build: correct example dpdk linking with pcap. - take libpcap from configure information. - clean up distclean. Signed-off-by: Vitaliy Ivanov --- example/Makefile.dpdk.in | 4 ++-- example/Makefile.in | 6 +++++- src/lib/Makefile.in | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/example/Makefile.dpdk.in b/example/Makefile.dpdk.in index 8519d7d0e11..d9697548370 100644 --- a/example/Makefile.dpdk.in +++ b/example/Makefile.dpdk.in @@ -14,14 +14,14 @@ RTE_TARGET ?= x86_64-native-linuxapp-gcc include $(RTE_SDK)/mk/rte.vars.mk -APP = ndpiReader +APP = ndpiReader.dpdk LIBNDPI = $(PWD)/../src/lib/libndpi.a SRCS-y := ndpi_util.c ndpiReader.c CFLAGS += -g CFLAGS += -Wno-strict-prototypes -Wno-missing-prototypes -Wno-missing-declarations -Wno-unused-parameter -I $(PWD)/../src/include @CFLAGS@ -DUSE_DPDK -LDLIBS = $(LIBNDPI) -lpthread @LDFLAGS@ +LDLIBS = $(LIBNDPI) @PCAP_LIB@ -lpthread @LDFLAGS@ include $(RTE_SDK)/mk/rte.extapp.mk diff --git a/example/Makefile.in b/example/Makefile.in index 3e0f25d91d0..84f3f36238c 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -1,7 +1,7 @@ CC=@CC@ CFLAGS=-g -I../src/include @CFLAGS@ LIBNDPI=../src/lib/libndpi.a -LDFLAGS=$(LIBNDPI) -lpcap -lpthread @LDFLAGS@ +LDFLAGS=$(LIBNDPI) @PCAP_LIB@ -lpthread @LDFLAGS@ OBJS=ndpiReader.o ndpi_util.o PREFIX?=/usr/local @@ -21,4 +21,8 @@ dpdk: clean: /bin/rm -f *.o ndpiReader + /bin/rm -rf build +distclean: clean + /bin/rm -f Makefile.dpdk + /bin/rm -f Makefile diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 1f07773e9f3..c22aa1a362e 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -54,6 +54,9 @@ $(NDPI_LIB_SHARED): $(OBJECTS) clean: /bin/rm -f $(NDPI_LIB_STATIC) $(OBJECTS) *.o *.so *.lo +distclean: clean + /bin/rm -f Makefile + install: $(NDPI_LIBS) mkdir -p $(DESTDIR)$(libdir) cp $(NDPI_LIBS) $(DESTDIR)$(libdir)/ From 923ba84f65c3b06cda087fa4458fc78fc653f3dc Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Wed, 28 Nov 2018 16:43:17 +0200 Subject: [PATCH 127/147] gitignore: ignore dpdk artifacts. Also similarly to shared libraries do not hide static lib. Signed-off-by: Vitaliy Ivanov --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 759db411c65..ebacea3cd4f 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ compile /example/.deps/ /example/Makefile /example/ndpiReader +/example/Makefile.dpdk +/example/build *.in /install-sh *.ko @@ -35,7 +37,7 @@ compile /m4/ltversion.m4 /Makefile /missing -*.[oa] +*.[o] *.obj *o.cmd *o.cmd From 9cbf25a76fc03c1a8440aa473523c4287aabb200 Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Wed, 28 Nov 2018 16:56:22 +0200 Subject: [PATCH 128/147] build: cleanup .so.X.X.X if present. Signed-off-by: Vitaliy Ivanov --- src/lib/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index c22aa1a362e..297869fe39a 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -52,7 +52,7 @@ $(NDPI_LIB_SHARED): $(OBJECTS) $(CC) $(CFLAGS) -c $< -o $@ clean: - /bin/rm -f $(NDPI_LIB_STATIC) $(OBJECTS) *.o *.so *.lo + /bin/rm -f $(NDPI_LIB_STATIC) $(OBJECTS) *.o *.so *.lo $(NDPI_LIB_SHARED) distclean: clean /bin/rm -f Makefile From 8df6b5c1bf453939a2d84cfa76b46dff6a3a6a42 Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Wed, 28 Nov 2018 17:39:14 +0200 Subject: [PATCH 129/147] build: install example binaries to dst dir. make install DESTDIR=/build/nDPI/ Signed-off-by: Vitaliy Ivanov --- example/Makefile.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/example/Makefile.in b/example/Makefile.in index 84f3f36238c..96be6eacff3 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -14,7 +14,9 @@ ndpiReader: $(OBJS) $(LIBNDPI) $(CC) $(CFLAGS) -c $< -o $@ install: ndpiReader + mkdir -p $(DESTDIR)$(PREFIX)/bin/ cp ndpiReader $(DESTDIR)$(PREFIX)/bin/ + [ -f build/app/ndpiReader.dpdk ] && cp build/app/ndpiReader.dpdk $(DESTDIR)$(PREFIX)/bin/ dpdk: make -f Makefile.dpdk From a3abbc3ebb851c7316b6694efc5036d40324d103 Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Wed, 28 Nov 2018 19:23:27 +0200 Subject: [PATCH 130/147] build: do not fail if example app is not present. Signed-off-by: Vitaliy Ivanov --- example/Makefile.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example/Makefile.in b/example/Makefile.in index 96be6eacff3..050cac8e15c 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -16,7 +16,8 @@ ndpiReader: $(OBJS) $(LIBNDPI) install: ndpiReader mkdir -p $(DESTDIR)$(PREFIX)/bin/ cp ndpiReader $(DESTDIR)$(PREFIX)/bin/ - [ -f build/app/ndpiReader.dpdk ] && cp build/app/ndpiReader.dpdk $(DESTDIR)$(PREFIX)/bin/ + [ -f build/app/ndpiReader.dpdk ] && cp build/app/ndpiReader.dpdk $(DESTDIR)$(PREFIX)/bin/ || true + [ -f ndpiReader.dpdk ] && cp ndpiReader.dpdk $(DESTDIR)$(PREFIX)/bin/ || true dpdk: make -f Makefile.dpdk From 622519e90ec2327ce8507783fb3858397bd42c07 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 29 Nov 2018 07:53:41 +0100 Subject: [PATCH 131/147] Warning fix --- example/ndpiReader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 29d07e29960..6c3dfeee85f 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -1953,8 +1953,8 @@ static void printResults(u_int64_t processing_time_usec, u_int64_t setup_time_us printf("\tFlow Memory (per flow): %-13s\n", formatBytes(sizeof(struct ndpi_flow_struct), buf, sizeof(buf))); printf("\tActual Memory: %-13s\n", formatBytes(current_ndpi_memory, buf, sizeof(buf))); printf("\tPeak Memory: %-13s\n", formatBytes(max_ndpi_memory, buf, sizeof(buf))); - printf("\tSetup Time: %lu msec\n", setup_time_usec/1000); - printf("\tPacket Processing Time: %lu msec\n", processing_time_usec/1000); + printf("\tSetup Time: %lu msec\n", (unsigned long)(setup_time_usec/1000)); + printf("\tPacket Processing Time: %lu msec\n", (unsigned long)(processing_time_usec/1000)); if(!json_flag) { printf("\nTraffic statistics:\n"); From c09284ba276a3caf9dd4a8d9440e35e2808d5551 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 29 Nov 2018 08:44:41 +0100 Subject: [PATCH 132/147] Improved heuristics Used the host guessed protocol if upper protocol has not been detected --- src/lib/ndpi_content_match.c.inc | 4 +- src/lib/ndpi_main.c | 9 + src/lib/protocols/skype.c | 5 +- tests/result/1kxun.pcap.out | 4 +- tests/result/Instagram.pcap.out | 5 +- tests/result/KakaoTalk_chat.pcap.out | 6 +- tests/result/KakaoTalk_talk.pcap.out | 6 +- tests/result/hangout.pcap.out | 4 +- tests/result/nintendo.pcap.out | 6 +- tests/result/ocs.pcap.out | 13 +- tests/result/pps.pcap.out | 193 ++++++------ tests/result/quic.pcap.out | 5 +- tests/result/skype.pcap.out | 362 +++++++++++----------- tests/result/skype_no_unknown.pcap.out | 37 ++- tests/result/snapchat.pcap.out | 4 +- tests/result/starcraft_battle.pcap.out | 5 +- tests/result/viber.pcap.out | 56 ++-- tests/result/waze.pcap.out | 4 +- tests/result/webex.pcap.out | 6 +- tests/result/weibo.pcap.out | 7 +- tests/result/whatsapp_login_call.pcap.out | 12 +- tests/result/whatsapp_login_chat.pcap.out | 5 +- 22 files changed, 378 insertions(+), 380 deletions(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 7ea9927ec76..45cd46484c2 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -118,8 +118,6 @@ static ndpi_network host_protocol_list[] = { { 0x67071E25 /* 103.7.30.37/32 */, 32, NDPI_PROTOCOL_WECHAT }, { 0XCBCDB000 /* 203.205.176.0/20 */, 20, NDPI_PROTOCOL_WECHAT }, { 0XCBCDC000 /* 203.205.192.0/18 */, 18, NDPI_PROTOCOL_WECHAT }, - - /* OpenDNS, LLC @@ -814,7 +812,7 @@ static ndpi_network host_protocol_list[] = { /* Canonical Ltd (Ubuntu) - origin AS41231 + origin AS41231z */ { 0x5BBD5800 /* 91.189.88.0/21 */, 21, NDPI_PROTOCOL_UBUNTUONE }, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 00707cd8ae2..0812e63acb3 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5179,6 +5179,15 @@ void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, if(upper_detected_protocol == lower_detected_protocol) lower_detected_protocol = NDPI_PROTOCOL_UNKNOWN; + if((upper_detected_protocol != NDPI_PROTOCOL_UNKNOWN) + && (lower_detected_protocol == NDPI_PROTOCOL_UNKNOWN)) { + if((flow->guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN) + && (upper_detected_protocol != flow->guessed_host_protocol_id)) { + lower_detected_protocol = upper_detected_protocol; + upper_detected_protocol = flow->guessed_host_protocol_id; + } + } + ndpi_int_change_flow_protocol(ndpi_struct, flow, upper_detected_protocol, lower_detected_protocol); ndpi_int_change_packet_protocol(ndpi_struct, flow, diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index faeac17c591..0f5e8c780f7 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -72,7 +72,10 @@ static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, s NDPI_EXCLUDE_PROTO(ndpi_struct, flow); return; // TCP check - } else if(packet->tcp != NULL) { + } else if((packet->tcp != NULL) + /* As the TCP skype heuristic is weak, we need to make sure no other protocols overlap */ + && (flow->guessed_host_protocol_id == NDPI_PROTOCOL_UNKNOWN) + && (flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN)) { flow->l4.tcp.skype_packet_id++; if(flow->l4.tcp.skype_packet_id < 3) { diff --git a/tests/result/1kxun.pcap.out b/tests/result/1kxun.pcap.out index e02ddac2f50..5eead7a9c27 100644 --- a/tests/result/1kxun.pcap.out +++ b/tests/result/1kxun.pcap.out @@ -2,7 +2,6 @@ Unknown 24 6428 14 DNS 2 378 1 HTTP 524 220123 9 MDNS 1 82 1 -NTP 1 90 1 NetBIOS 31 3589 8 SSDP 143 36951 13 DHCP 24 8208 5 @@ -13,6 +12,7 @@ DHCPV6 10 980 3 Facebook 19 6840 2 Google 3 176 1 GenericProtocol 433 311919 14 +Apple 1 90 1 LLMNR 89 6799 47 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7/HTTP][cat: Web/5][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] @@ -123,7 +123,7 @@ LLMNR 89 6799 47 106 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 107 UDP [fe80::e034:7be:d8f9:6197]:57143 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] 108 UDP [fe80::e034:7be:d8f9:6197]:62756 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 109 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] + 109 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9.140/NTP.Apple][cat: Web/5][1 pkts/90 bytes -> 0 pkts/0 bytes] 110 UDP 192.168.5.64:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/82 bytes -> 0 pkts/0 bytes] 111 UDP 192.168.5.50:49766 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] 112 UDP 192.168.5.50:50030 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] diff --git a/tests/result/Instagram.pcap.out b/tests/result/Instagram.pcap.out index 9a34e200889..7e35db0cc48 100644 --- a/tests/result/Instagram.pcap.out +++ b/tests/result/Instagram.pcap.out @@ -2,11 +2,12 @@ Unknown 1 66 1 HTTP 116 91784 6 ICMP 5 510 1 SSL 2 169 1 -Facebook 251 215986 5 +Facebook 101 62428 4 Dropbox 5 725 2 +WhatsApp 150 153558 1 Instagram 363 255094 16 - 1 TCP 31.13.86.52:80 <-> 192.168.0.103:58216 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][103 pkts/150456 bytes <-> 47 pkts/3102 bytes] + 1 TCP 31.13.86.52:80 <-> 192.168.0.103:58216 [proto: 7.142/HTTP.WhatsApp][cat: Chat/9][103 pkts/150456 bytes <-> 47 pkts/3102 bytes] 2 TCP 192.168.0.103:38816 <-> 46.33.70.160:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][13 pkts/1118 bytes <-> 39 pkts/57876 bytes][Host: photos-h.ak.instagram.com] 3 TCP 192.168.0.103:58052 <-> 82.85.26.162:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][37 pkts/2702 bytes <-> 38 pkts/54537 bytes][Host: photos-g.ak.instagram.com] 4 TCP 192.168.0.103:44379 <-> 82.85.26.186:80 [proto: 7.211/HTTP.Instagram][cat: SocialNetwork/6][41 pkts/3392 bytes <-> 40 pkts/50024 bytes][Host: photos-e.ak.instagram.com] diff --git a/tests/result/KakaoTalk_chat.pcap.out b/tests/result/KakaoTalk_chat.pcap.out index eedfab56a4f..0826675eab2 100644 --- a/tests/result/KakaoTalk_chat.pcap.out +++ b/tests/result/KakaoTalk_chat.pcap.out @@ -1,11 +1,11 @@ DNS 2 217 1 HTTP 1 56 1 ICMP 1 147 1 -SSL 29 4579 3 +SSL 23 2689 2 Facebook 215 51809 12 Google 16 1031 3 HTTP_Proxy 26 3926 1 -Amazon 2 181 1 +Amazon 8 2071 2 KakaoTalk 55 9990 15 1 TCP 10.24.82.188:43581 <-> 31.13.68.70:443 [proto: 91.119/SSL.Facebook][cat: SocialNetwork/6][17 pkts/3461 bytes <-> 17 pkts/6194 bytes][client: graph.facebook.com][server: *.facebook.com] @@ -17,7 +17,7 @@ KakaoTalk 55 9990 15 7 TCP 10.24.82.188:37821 <-> 210.103.240.15:443 [proto: 91.193/SSL.KakaoTalk][cat: VoIP/10][13 pkts/2036 bytes <-> 14 pkts/5090 bytes][server: *.kakao.com] 8 TCP 10.24.82.188:51021 <-> 103.246.57.251:8080 [proto: 131/HTTP_Proxy][cat: Web/5][17 pkts/2231 bytes <-> 9 pkts/1695 bytes] 9 TCP 139.150.0.125:443 <-> 10.24.82.188:46947 [proto: 91/SSL][cat: Web/5][9 pkts/1737 bytes <-> 9 pkts/672 bytes] - 10 TCP 10.24.82.188:58964 <-> 54.255.253.199:5223 [proto: 91/SSL][cat: Web/5][3 pkts/290 bytes <-> 3 pkts/1600 bytes][server: *.push.samsungosp.com] + 10 TCP 10.24.82.188:58964 <-> 54.255.253.199:5223 [proto: 91.178/SSL.Amazon][cat: Web/5][3 pkts/290 bytes <-> 3 pkts/1600 bytes][server: *.push.samsungosp.com] 11 TCP 10.24.82.188:37557 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 6 pkts/627 bytes][Host: www.facebook.com] 12 TCP 10.24.82.188:37553 <-> 31.13.68.84:80 [proto: 7.119/HTTP.Facebook][cat: SocialNetwork/6][5 pkts/487 bytes <-> 5 pkts/571 bytes][Host: www.facebook.com] 13 TCP 216.58.221.10:80 <-> 10.24.82.188:35922 [proto: 7.126/HTTP.Google][cat: Web/5][7 pkts/392 bytes <-> 7 pkts/392 bytes] diff --git a/tests/result/KakaoTalk_talk.pcap.out b/tests/result/KakaoTalk_talk.pcap.out index 9bb9fca1ba7..ec5e9762029 100644 --- a/tests/result/KakaoTalk_talk.pcap.out +++ b/tests/result/KakaoTalk_talk.pcap.out @@ -1,9 +1,9 @@ HTTP 5 280 1 QQ 15 1727 1 -SSL_No_Cert 74 14132 2 +SSL_No_Cert 45 10108 1 RTP 2991 398751 2 SSL 5 1198 1 -Facebook 5 377 3 +Facebook 34 4401 4 Google 4 359 4 HTTP_Proxy 16 1838 2 Tor 40 10538 1 @@ -14,7 +14,7 @@ KakaoTalk_Voice 44 6196 2 2 UDP 10.24.82.188:10268 <-> 1.201.1.174:23046 [proto: 87/RTP][cat: Media/1][746 pkts/93906 bytes <-> 742 pkts/104604 bytes] 3 TCP 10.24.82.188:58857 <-> 110.76.143.50:9001 [proto: 163/Tor][cat: VPN/2][22 pkts/5326 bytes <-> 18 pkts/5212 bytes] 4 TCP 10.24.82.188:32968 <-> 110.76.143.50:8080 [proto: 64/SSL_No_Cert][cat: Web/5][23 pkts/4380 bytes <-> 22 pkts/5728 bytes] - 5 TCP 10.24.82.188:59954 <-> 173.252.88.128:443 [proto: 64/SSL_No_Cert][cat: Web/5][15 pkts/2932 bytes <-> 14 pkts/1092 bytes] + 5 TCP 10.24.82.188:59954 <-> 173.252.88.128:443 [proto: 64.119/SSL_No_Cert.Facebook][cat: SocialNetwork/6][15 pkts/2932 bytes <-> 14 pkts/1092 bytes] 6 UDP 10.24.82.188:10269 <-> 1.201.1.174:23047 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][12 pkts/1692 bytes <-> 10 pkts/1420 bytes] 7 UDP 10.24.82.188:11321 <-> 1.201.1.174:23045 [proto: 194/KakaoTalk_Voice][cat: VoIP/10][11 pkts/1542 bytes <-> 11 pkts/1542 bytes] 8 TCP 10.24.82.188:48489 <-> 203.205.147.215:80 [proto: 7.48/HTTP.QQ][cat: Chat/9][8 pkts/1117 bytes <-> 7 pkts/610 bytes][Host: hkminorshort.weixin.qq.com] diff --git a/tests/result/hangout.pcap.out b/tests/result/hangout.pcap.out index 323e41d3660..430ecdcaec7 100644 --- a/tests/result/hangout.pcap.out +++ b/tests/result/hangout.pcap.out @@ -1,3 +1,3 @@ -GoogleHangout 19 2774 1 +Google 19 2774 1 - 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201/GoogleHangout][cat: Chat/9][19 pkts/2774 bytes -> 0 pkts/0 bytes] + 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201.126/GoogleHangout.Google][cat: Web/5][19 pkts/2774 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index 6535e7cc5ee..c1b44147aca 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -1,6 +1,6 @@ ICMP 30 2100 2 -Nintendo 890 320242 12 -Amazon 76 10811 7 +Nintendo 887 319888 11 +Amazon 79 11165 8 1 UDP 192.168.12.114:55915 <-> 185.118.169.65:27520 [proto: 173/Nintendo][cat: Game/8][169 pkts/61414 bytes <-> 278 pkts/126260 bytes] 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] @@ -18,7 +18,7 @@ Amazon 76 10811 7 14 UDP 192.168.12.114:55915 <-> 35.158.74.61:10025 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes <-> 5 pkts/290 bytes] 15 UDP 192.168.12.114:18874 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] 16 UDP 192.168.12.114:51035 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] - 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173/Nintendo][cat: Game/8][3 pkts/354 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173.178/Nintendo.Amazon][cat: Web/5][3 pkts/354 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.12.114:55915 -> 35.158.74.61:33335 [proto: 178/Amazon][cat: Web/5][3 pkts/318 bytes -> 0 pkts/0 bytes] 19 UDP 192.168.12.114:55915 -> 52.10.205.177:34343 [proto: 178/Amazon][cat: Web/5][1 pkts/298 bytes -> 0 pkts/0 bytes] 20 UDP 192.168.12.114:55915 -> 35.158.74.61:33334 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/ocs.pcap.out b/tests/result/ocs.pcap.out index b5b526bfa2e..51d926ee34b 100644 --- a/tests/result/ocs.pcap.out +++ b/tests/result/ocs.pcap.out @@ -1,8 +1,7 @@ Unknown 6 360 1 -DNS 3 214 3 HTTP 13 1019 2 -SSL 20 2715 1 -Google 27 3176 3 +Google 30 3390 6 +Amazon 20 2715 1 OCS 863 57552 7 PlayStore 1 72 1 GoogleServices 13 2277 2 @@ -10,7 +9,7 @@ GoogleServices 13 2277 2 1 TCP 192.168.180.2:49881 -> 178.248.208.54:80 [proto: 7.218/HTTP.OCS][cat: Media/1][751 pkts/44783 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] 2 TCP 192.168.180.2:36680 -> 178.248.208.54:443 [proto: 91.218/SSL.OCS][cat: Media/1][20 pkts/6089 bytes -> 0 pkts/0 bytes][client: ocs.labgency.ws] 3 TCP 192.168.180.2:42590 -> 178.248.208.210:80 [proto: 7.218/HTTP.OCS][cat: Media/1][83 pkts/5408 bytes -> 0 pkts/0 bytes][Host: www.ocs.fr] - 4 TCP 192.168.180.2:39263 -> 23.21.230.199:443 [proto: 91/SSL][cat: Web/5][20 pkts/2715 bytes -> 0 pkts/0 bytes][client: settings.crashlytics.com] + 4 TCP 192.168.180.2:39263 -> 23.21.230.199:443 [proto: 91.178/SSL.Amazon][cat: Web/5][20 pkts/2715 bytes -> 0 pkts/0 bytes][client: settings.crashlytics.com] 5 TCP 192.168.180.2:32946 -> 64.233.184.188:443 [proto: 91.239/SSL.GoogleServices][cat: Web/5][12 pkts/2212 bytes -> 0 pkts/0 bytes][client: mtalk.google.com] 6 TCP 192.168.180.2:47803 -> 64.233.166.95:443 [proto: 91.126/SSL.Google][cat: Web/5][12 pkts/1608 bytes -> 0 pkts/0 bytes] 7 TCP 192.168.180.2:41223 -> 216.58.208.46:443 [proto: 91.126/SSL.Google][cat: Web/5][13 pkts/1448 bytes -> 0 pkts/0 bytes] @@ -18,10 +17,10 @@ GoogleServices 13 2277 2 9 TCP 192.168.180.2:44959 -> 137.135.129.206:80 [proto: 7/HTTP][cat: Web/5][7 pkts/540 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] 10 TCP 192.168.180.2:53356 -> 137.135.129.206:80 [proto: 7/HTTP][cat: Web/5][6 pkts/479 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] 11 TCP 192.168.180.2:47699 -> 64.233.184.188:5228 [proto: 126/Google][cat: Web/5][2 pkts/120 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.180.2:3621 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: xmpp.device06.eu01.capptain.com] + 12 UDP 192.168.180.2:3621 -> 8.8.8.8:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/77 bytes -> 0 pkts/0 bytes][Host: xmpp.device06.eu01.capptain.com] 13 UDP 192.168.180.2:48770 -> 8.8.8.8:53 [proto: 5.228/DNS.PlayStore][cat: SoftwareUpdate/19][1 pkts/72 bytes -> 0 pkts/0 bytes][Host: android.clients.google.com] - 14 UDP 192.168.180.2:40097 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: settings.crashlytics.com] - 15 UDP 192.168.180.2:1291 -> 8.8.8.8:53 [proto: 5/DNS][cat: Network/14][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] + 14 UDP 192.168.180.2:40097 -> 8.8.8.8:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/70 bytes -> 0 pkts/0 bytes][Host: settings.crashlytics.com] + 15 UDP 192.168.180.2:1291 -> 8.8.8.8:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: api.eu01.capptain.com] 16 UDP 192.168.180.2:11793 -> 8.8.8.8:53 [proto: 5.239/DNS.GoogleServices][cat: Web/5][1 pkts/65 bytes -> 0 pkts/0 bytes][Host: play.googleapis.com] 17 UDP 192.168.180.2:38472 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media/1][1 pkts/63 bytes -> 0 pkts/0 bytes][Host: ocu03.labgency.ws] 18 UDP 192.168.180.2:2589 -> 8.8.8.8:53 [proto: 5.218/DNS.OCS][cat: Media/1][1 pkts/61 bytes -> 0 pkts/0 bytes][Host: ocs.labgency.ws] diff --git a/tests/result/pps.pcap.out b/tests/result/pps.pcap.out index baad4b4e632..778aa1197fe 100644 --- a/tests/result/pps.pcap.out +++ b/tests/result/pps.pcap.out @@ -1,10 +1,9 @@ -Unknown 985 375351 33 +Unknown 990 378832 34 HTTP 47 42014 11 SSDP 63 17143 10 HTTP_Download 26 27222 2 Google 2 1093 1 GenericProtocol 1429 1780307 49 -QUIC 5 3481 1 1 TCP 192.168.115.8:50780 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 541 pkts/710082 bytes][Host: preimage1.qiyipic.com] 2 TCP 192.168.115.8:50778 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes <-> 528 pkts/692658 bytes][Host: preimage1.qiyipic.com] @@ -13,73 +12,72 @@ QUIC 5 3481 1 5 TCP 192.168.115.8:50486 <-> 77.234.40.96:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][11 pkts/11023 bytes <-> 12 pkts/14869 bytes][Host: bcu.ff.avast.com] 6 UDP 192.168.5.38:1900 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][18 pkts/9327 bytes -> 0 pkts/0 bytes] 7 TCP 192.168.115.8:50476 <-> 101.227.32.39:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/656 bytes <-> 4 pkts/3897 bytes][Host: cache.video.iqiyi.com] - 8 UDP 192.168.115.8:22793 <-> 202.198.7.89:16039 [proto: 188/QUIC][cat: Web/5][2 pkts/158 bytes <-> 3 pkts/3323 bytes] - 9 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] - 10 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] - 11 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] - 12 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] - 13 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] - 14 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 15 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 16 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] - 17 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 18 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] - 20 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] - 21 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] - 22 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 23 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] - 24 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] - 25 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] - 26 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 27 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] - 28 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 29 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 30 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 31 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 32 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 33 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 34 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] - 35 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 36 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] - 37 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] - 38 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 39 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] - 40 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 41 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] - 42 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 43 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 44 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] - 45 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] - 46 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 47 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 48 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 49 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 50 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 51 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] - 52 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] - 53 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 54 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] - 55 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] - 56 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] - 57 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] - 58 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] - 59 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 60 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] - 61 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 62 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] - 63 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] - 64 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] - 65 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] - 66 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] - 67 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] - 68 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] - 69 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] - 70 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] - 71 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] - 72 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] - 73 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes -> 0 pkts/0 bytes] - 74 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] + 8 TCP 192.168.115.8:50495 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][3 pkts/2844 bytes <-> 3 pkts/597 bytes][Host: msg.71.am] + 9 TCP 77.234.41.35:80 <-> 192.168.115.8:49174 [proto: 7/HTTP][cat: Web/5][4 pkts/2953 bytes <-> 1 pkts/356 bytes] + 10 TCP 192.168.115.8:50767 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][4 pkts/800 bytes <-> 4 pkts/2112 bytes][Host: static.qiyi.com] + 11 TCP 192.168.115.8:50488 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/311 bytes <-> 2 pkts/2035 bytes][Host: meta.video.qiyi.com] + 12 TCP 192.168.115.8:50471 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1898 bytes <-> 2 pkts/398 bytes][Host: msg.71.am] + 13 TCP 192.168.115.8:50501 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1893 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 14 TCP 192.168.115.8:50463 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 15 TCP 192.168.115.8:50496 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1555 bytes <-> 1 pkts/306 bytes][Host: api.cupid.iqiyi.com] + 16 TCP 192.168.115.8:50779 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][2 pkts/1438 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 17 UDP 192.168.5.38:58897 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1575 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.115.1:50945 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][9 pkts/1539 bytes -> 0 pkts/0 bytes] + 19 TCP 192.168.115.8:50464 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/707 bytes <-> 1 pkts/744 bytes][Host: click.hm.baidu.com] + 20 TCP 192.168.115.8:50492 <-> 111.206.13.3:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/389 bytes <-> 2 pkts/1034 bytes][Host: pdata.video.qiyi.com] + 21 TCP 192.168.115.8:50777 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1186 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 22 TCP 192.168.115.8:50494 <-> 223.26.106.66:80 [proto: 7.60/HTTP.HTTP_Download][cat: Download-FileTransfer-FileSharing/7][2 pkts/887 bytes <-> 1 pkts/443 bytes][Host: 223.26.106.66] + 23 TCP 192.168.115.8:50497 <-> 123.125.112.49:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1004 bytes <-> 2 pkts/301 bytes][Host: click.hm.baidu.com] + 24 TCP 192.168.115.8:50499 <-> 111.206.22.76:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1097 bytes <-> 1 pkts/199 bytes][Host: msg.iqiyi.com] + 25 TCP 192.168.115.8:50474 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/1100 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 26 TCP 192.168.115.8:50507 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/212 bytes <-> 1 pkts/1063 bytes][Host: static.qiyi.com] + 27 TCP 192.168.115.8:50485 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 28 TCP 192.168.115.8:50502 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/947 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 29 TCP 192.168.115.8:50493 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 30 TCP 192.168.115.8:50771 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 31 TCP 192.168.115.8:50473 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/944 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 32 TCP 192.168.115.8:50475 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/941 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 33 TCP 192.168.115.8:50500 <-> 23.41.133.163:80 [proto: 7/HTTP][cat: Web/5][1 pkts/289 bytes <-> 1 pkts/839 bytes][Host: s1.symcb.com] + 34 TCP 192.168.115.8:50773 <-> 202.108.14.221:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/919 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 35 TCP 192.168.115.8:50466 <-> 203.66.182.24:80 [proto: 7.126/HTTP.Google][cat: Web/5][1 pkts/280 bytes <-> 1 pkts/813 bytes][Host: clients1.google.com] + 36 UDP 192.168.5.50:52529 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1074 bytes -> 0 pkts/0 bytes] + 37 UDP 192.168.5.28:60023 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 38 UDP 192.168.5.57:59648 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][6 pkts/1050 bytes -> 0 pkts/0 bytes] + 39 TCP 192.168.115.8:50504 -> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/946 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 40 TCP 192.168.115.8:50769 <-> 101.227.200.11:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/604 bytes <-> 1 pkts/291 bytes][Host: api.cupid.iqiyi.com] + 41 TCP 192.168.115.8:50498 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/694 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 42 TCP 192.168.115.8:50503 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 43 UDP 192.168.5.41:50374 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][5 pkts/875 bytes -> 0 pkts/0 bytes] + 44 TCP 192.168.115.8:50490 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/357 bytes <-> 1 pkts/479 bytes][Host: pdata.video.qiyi.com] + 45 TCP 192.168.115.8:50467 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/629 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 46 TCP 192.168.115.8:50484 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/622 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 47 TCP 192.168.115.8:50477 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/614 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 48 TCP 192.168.115.8:50774 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/587 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 49 TCP 192.168.115.8:50469 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/573 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 50 TCP 192.168.115.8:50482 <-> 140.205.243.64:80 [proto: 7/HTTP][cat: Web/5][1 pkts/444 bytes <-> 1 pkts/283 bytes][Host: cmc.tanx.com] + 51 TCP 192.168.115.8:50768 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/526 bytes][Host: static.qiyi.com] + 52 TCP 192.168.5.15:65128 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/331 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 53 TCP 192.168.115.8:50509 <-> 106.38.219.107:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/163 bytes <-> 2 pkts/557 bytes][Host: iplocation.geo.qiyi.com] + 54 TCP 192.168.5.15:65127 <-> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/323 bytes <-> 1 pkts/390 bytes][Host: api.magicansoft.com] + 55 TCP 192.168.115.8:50766 <-> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/493 bytes][Host: static.qiyi.com] + 56 TCP 192.168.115.8:50487 -> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/683 bytes -> 0 pkts/0 bytes][Host: msg.71.am] + 57 TCP 192.168.115.8:50489 <-> 119.188.13.188:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/253 bytes <-> 1 pkts/430 bytes][Host: pdata.video.qiyi.com] + 58 TCP 192.168.115.8:50772 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 59 TCP 192.168.115.8:50775 <-> 123.125.111.70:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/399 bytes <-> 1 pkts/275 bytes][Host: nl.rcd.iqiyi.com] + 60 TCP 192.168.115.8:50470 <-> 202.108.14.236:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/424 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 61 TCP 192.168.115.8:50508 <-> 223.26.106.19:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/198 bytes <-> 1 pkts/420 bytes][Host: static.qiyi.com] + 62 TCP 192.168.115.8:50483 <-> 202.108.14.219:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/417 bytes <-> 1 pkts/199 bytes][Host: msg.71.am] + 63 TCP 192.168.115.8:50776 <-> 111.206.22.77:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/394 bytes <-> 1 pkts/194 bytes][Host: msg.iqiyi.com] + 64 TCP 192.168.115.8:50765 <-> 36.110.220.15:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/264 bytes <-> 1 pkts/199 bytes][Host: msg.video.qiyi.com] + 65 TCP 202.108.14.219:80 -> 192.168.115.8:50295 [proto: 7/HTTP][cat: Web/5][2 pkts/398 bytes -> 0 pkts/0 bytes] + 66 UDP 192.168.5.48:63930 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/358 bytes -> 0 pkts/0 bytes] + 67 TCP 117.79.81.135:80 -> 192.168.115.8:50443 [proto: 7/HTTP][cat: Web/5][1 pkts/347 bytes -> 0 pkts/0 bytes] + 68 TCP 192.168.115.8:50781 -> 223.26.106.20:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][1 pkts/303 bytes -> 0 pkts/0 bytes][Host: preimage1.qiyipic.com] + 69 TCP 202.108.14.219:80 -> 192.168.115.8:50506 [proto: 7/HTTP][cat: Web/5][1 pkts/199 bytes -> 0 pkts/0 bytes] + 70 UDP 192.168.5.63:60976 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/165 bytes -> 0 pkts/0 bytes] + 71 UDP 192.168.5.63:39383 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][1 pkts/130 bytes -> 0 pkts/0 bytes] + 72 TCP 192.168.115.8:50462 -> 202.108.14.236:80 [proto: 7/HTTP][cat: Web/5][2 pkts/108 bytes -> 0 pkts/0 bytes] + 73 TCP 192.168.5.15:65125 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][1 pkts/66 bytes -> 0 pkts/0 bytes] Undetected flows: @@ -88,31 +86,32 @@ Undetected flows: 3 UDP 118.171.15.56:5544 <-> 192.168.115.8:22793 [proto: 0/Unknown][30 pkts/33210 bytes <-> 71 pkts/5609 bytes] 4 UDP 192.168.115.8:22793 <-> 219.228.107.156:1250 [proto: 0/Unknown][34 pkts/2686 bytes <-> 11 pkts/12177 bytes] 5 UDP 192.168.115.8:22793 <-> 222.197.138.12:6956 [proto: 0/Unknown][30 pkts/2370 bytes <-> 10 pkts/10042 bytes] - 6 UDP 192.168.115.8:22793 -> 1.169.136.116:17951 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] - 7 UDP 192.168.115.8:22793 -> 114.41.144.153:10492 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] - 8 UDP 192.168.115.8:22793 -> 218.61.39.103:17788 [proto: 0/Unknown][2 pkts/300 bytes -> 0 pkts/0 bytes] - 9 UDP 192.168.115.8:22793 -> 119.188.133.182:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 10 UDP 192.168.115.8:22793 -> 183.61.167.104:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 11 UDP 192.168.115.8:22793 -> 218.61.39.87:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] - 12 UDP 183.228.182.44:13913 <-> 192.168.115.8:22793 [proto: 0/Unknown][1 pkts/87 bytes <-> 2 pkts/170 bytes] - 13 UDP 192.168.115.8:22793 -> 183.61.167.82:17788 [proto: 0/Unknown][2 pkts/188 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.115.8:22793 -> 220.130.154.23:35941 [proto: 0/Unknown][2 pkts/174 bytes -> 0 pkts/0 bytes] - 15 UDP 192.168.115.8:22793 -> 111.249.53.196:32443 [proto: 0/Unknown][2 pkts/158 bytes -> 0 pkts/0 bytes] - 16 UDP 192.168.115.8:22793 -> 1.175.128.104:5185 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 17 UDP 192.168.115.8:22793 -> 36.233.39.81:18590 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 18 UDP 192.168.115.8:22793 -> 36.237.154.69:4316 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 19 UDP 192.168.115.8:22793 -> 61.223.204.67:11102 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 20 UDP 192.168.115.8:22793 -> 61.227.170.88:20227 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 21 UDP 192.168.115.8:22793 -> 111.117.101.81:10162 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 22 UDP 192.168.115.8:22793 -> 111.250.102.66:1107 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 23 UDP 192.168.115.8:22793 -> 114.37.142.173:1074 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 24 UDP 192.168.115.8:22793 -> 114.47.91.129:22576 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 25 UDP 192.168.115.8:22793 -> 115.157.62.243:29006 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 26 UDP 192.168.115.8:22793 -> 121.248.133.93:12757 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 27 UDP 192.168.115.8:22793 -> 202.112.31.89:29072 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 28 UDP 192.168.115.8:22793 -> 210.44.171.1:29702 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 29 UDP 192.168.115.8:22793 -> 210.44.232.243:21044 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 30 UDP 192.168.115.8:22793 -> 210.47.12.19:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 31 UDP 192.168.115.8:22793 -> 210.47.12.20:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 32 UDP 192.168.115.8:22793 -> 222.26.74.190:1037 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] - 33 UDP 192.168.115.8:22793 -> 222.26.193.119:7133 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 6 UDP 192.168.115.8:22793 <-> 202.198.7.89:16039 [proto: 0/Unknown][2 pkts/158 bytes <-> 3 pkts/3323 bytes] + 7 UDP 192.168.115.8:22793 -> 1.169.136.116:17951 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] + 8 UDP 192.168.115.8:22793 -> 114.41.144.153:10492 [proto: 0/Unknown][4 pkts/512 bytes -> 0 pkts/0 bytes] + 9 UDP 192.168.115.8:22793 -> 218.61.39.103:17788 [proto: 0/Unknown][2 pkts/300 bytes -> 0 pkts/0 bytes] + 10 UDP 192.168.115.8:22793 -> 119.188.133.182:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 11 UDP 192.168.115.8:22793 -> 183.61.167.104:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 12 UDP 192.168.115.8:22793 -> 218.61.39.87:17788 [proto: 0/Unknown][2 pkts/260 bytes -> 0 pkts/0 bytes] + 13 UDP 183.228.182.44:13913 <-> 192.168.115.8:22793 [proto: 0/Unknown][1 pkts/87 bytes <-> 2 pkts/170 bytes] + 14 UDP 192.168.115.8:22793 -> 183.61.167.82:17788 [proto: 0/Unknown][2 pkts/188 bytes -> 0 pkts/0 bytes] + 15 UDP 192.168.115.8:22793 -> 220.130.154.23:35941 [proto: 0/Unknown][2 pkts/174 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.115.8:22793 -> 111.249.53.196:32443 [proto: 0/Unknown][2 pkts/158 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.115.8:22793 -> 1.175.128.104:5185 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 18 UDP 192.168.115.8:22793 -> 36.233.39.81:18590 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 19 UDP 192.168.115.8:22793 -> 36.237.154.69:4316 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 20 UDP 192.168.115.8:22793 -> 61.223.204.67:11102 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 21 UDP 192.168.115.8:22793 -> 61.227.170.88:20227 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 22 UDP 192.168.115.8:22793 -> 111.117.101.81:10162 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 23 UDP 192.168.115.8:22793 -> 111.250.102.66:1107 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 24 UDP 192.168.115.8:22793 -> 114.37.142.173:1074 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 25 UDP 192.168.115.8:22793 -> 114.47.91.129:22576 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 26 UDP 192.168.115.8:22793 -> 115.157.62.243:29006 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 27 UDP 192.168.115.8:22793 -> 121.248.133.93:12757 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 28 UDP 192.168.115.8:22793 -> 202.112.31.89:29072 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 29 UDP 192.168.115.8:22793 -> 210.44.171.1:29702 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 30 UDP 192.168.115.8:22793 -> 210.44.232.243:21044 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 31 UDP 192.168.115.8:22793 -> 210.47.12.19:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 32 UDP 192.168.115.8:22793 -> 210.47.12.20:33738 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 33 UDP 192.168.115.8:22793 -> 222.26.74.190:1037 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] + 34 UDP 192.168.115.8:22793 -> 222.26.193.119:7133 [proto: 0/Unknown][2 pkts/132 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/quic.pcap.out b/tests/result/quic.pcap.out index dbfc7f84dc1..e1f4aa97fed 100644 --- a/tests/result/quic.pcap.out +++ b/tests/result/quic.pcap.out @@ -1,8 +1,7 @@ Unknown 6 7072 1 GMail 413 254874 1 YouTube 85 76193 5 -Google 11 10063 2 -QUIC 3 364 1 +Google 14 10427 3 1 UDP 192.168.1.109:57833 <-> 216.58.212.101:443 [proto: 188.122/QUIC.GMail][cat: Email/3][161 pkts/23930 bytes <-> 252 pkts/230944 bytes][Host: mail.google.com] 2 UDP 192.168.1.109:35236 <-> 216.58.210.206:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][25 pkts/5276 bytes <-> 44 pkts/53157 bytes][Host: www.youtube.com] @@ -12,7 +11,7 @@ QUIC 3 364 1 6 UDP 192.168.1.105:45669 <-> 172.217.16.4:443 [proto: 188.126/QUIC.Google][cat: Web/5][3 pkts/1550 bytes <-> 2 pkts/2784 bytes][Host: www.google.com] 7 UDP 192.168.1.105:48445 <-> 216.58.214.110:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][2 pkts/1471 bytes <-> 1 pkts/1392 bytes][Host: i.ytimg.com] 8 UDP 192.168.1.105:53817 <-> 216.58.210.225:443 [proto: 188.124/QUIC.YouTube][cat: Media/1][1 pkts/1392 bytes <-> 1 pkts/1392 bytes][Host: yt3.ggpht.com] - 9 UDP 192.168.1.105:40461 <-> 172.217.16.3:443 [proto: 188/QUIC][cat: Web/5][2 pkts/241 bytes <-> 1 pkts/123 bytes] + 9 UDP 192.168.1.105:40461 <-> 172.217.16.3:443 [proto: 188.126/QUIC.Google][cat: Web/5][2 pkts/241 bytes <-> 1 pkts/123 bytes] Undetected flows: diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index ddb00deaab5..d02ced39b31 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -1,29 +1,27 @@ -Unknown 171 20697 10 +Unknown 175 20913 11 DNS 2 267 1 MDNS 8 1736 2 -NTP 2 180 1 SSDP 101 38156 6 -SkypeCallIn 1555 267750 192 +SkypeCallIn 730 71378 170 ICMP 8 656 1 IGMP 5 258 4 SSL 96 8876 7 Dropbox 38 17948 5 -Skype 584 56659 57 -Apple 7 384 2 +Skype 1409 253031 79 +Apple 17 2225 3 AppleiCloud 88 20520 2 Spotify 5 430 1 MS_OneDrive 387 198090 1 -ApplePush 12 1877 1 1 TCP 192.168.1.34:50028 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][187 pkts/42539 bytes <-> 200 pkts/155551 bytes][server: *.gateway.messenger.live.com] - 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] + 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] 3 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][79 pkts/29479 bytes -> 0 pkts/0 bytes] 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web/5][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/7281 bytes -> 0 pkts/0 bytes] 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] - 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] + 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] @@ -35,7 +33,7 @@ ApplePush 12 1877 1 18 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] - 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/1211 bytes <-> 6 pkts/666 bytes] + 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238.140/ApplePush.Apple][cat: Web/5][6 pkts/1211 bytes <-> 6 pkts/666 bytes] 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1554 bytes <-> 3 pkts/200 bytes] 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][13 pkts/1392 bytes <-> 3 pkts/200 bytes] @@ -50,51 +48,51 @@ ApplePush 12 1877 1 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1207 bytes <-> 3 pkts/277 bytes] 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][cat: Web/5][12 pkts/1221 bytes <-> 3 pkts/231 bytes] 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] - 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] - 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] + 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] + 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1151 bytes <-> 3 pkts/260 bytes] 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1050 bytes <-> 4 pkts/351 bytes] - 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] - 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] + 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] + 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][cat: Web/5][11 pkts/1140 bytes <-> 3 pkts/250 bytes] - 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] + 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][cat: Web/5][13 pkts/1176 bytes <-> 3 pkts/200 bytes] - 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] + 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] - 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] - 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] + 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] + 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] - 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] + 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1074 bytes <-> 3 pkts/277 bytes] 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1102 bytes <-> 3 pkts/247 bytes] 59 TCP 192.168.1.34:50048 <-> 157.55.130.150:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1109 bytes <-> 3 pkts/236 bytes] - 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] + 60 TCP 192.168.1.34:50077 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/334 bytes] 61 TCP 192.168.1.34:50036 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1074 bytes <-> 3 pkts/254 bytes] - 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] + 62 TCP 192.168.1.34:50074 <-> 157.55.130.173:40003 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/317 bytes] 63 TCP 192.168.1.34:50078 <-> 157.55.130.173:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1088 bytes <-> 3 pkts/236 bytes] - 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] + 64 TCP 192.168.1.34:50070 <-> 157.55.130.170:40018 [proto: 125/Skype][cat: VoIP/10][13 pkts/989 bytes <-> 4 pkts/323 bytes] 65 TCP 192.168.1.34:50030 <-> 65.55.223.33:443 [proto: 91/SSL][cat: Web/5][11 pkts/960 bytes <-> 4 pkts/351 bytes] - 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] + 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1039 bytes <-> 3 pkts/267 bytes] - 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] + 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1002 bytes <-> 3 pkts/285 bytes] - 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] - 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] + 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] + 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/999 bytes <-> 4 pkts/266 bytes] 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1032 bytes <-> 3 pkts/230 bytes] - 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] + 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] - 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] - 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] - 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] + 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] + 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] + 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/857 bytes <-> 4 pkts/351 bytes] 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][9 pkts/862 bytes <-> 3 pkts/285 bytes] @@ -146,158 +144,157 @@ ApplePush 12 1877 1 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web/5][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] - 132 UDP 192.168.1.34:54067 -> 192.168.1.1:5351 [proto: 140/Apple][cat: Web/5][4 pkts/216 bytes -> 0 pkts/0 bytes] - 133 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] - 134 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 135 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] - 136 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] - 137 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] - 138 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 248 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 249 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 256 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 257 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 258 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 259 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 260 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 261 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 262 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 263 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 264 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 265 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 266 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 267 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 268 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 269 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 270 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 271 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 272 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 273 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 274 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 275 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 276 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 277 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 278 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 279 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 280 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 281 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 282 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 283 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9.140/NTP.Apple][cat: Web/5][1 pkts/90 bytes <-> 1 pkts/90 bytes] + 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] + 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] + 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] + 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] + 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] Undetected flows: @@ -310,4 +307,5 @@ Undetected flows: 7 TCP 192.168.1.34:50144 <-> 78.202.226.115:29059 [proto: 0/Unknown][10 pkts/797 bytes <-> 4 pkts/342 bytes] 8 TCP 192.168.1.34:50145 -> 157.56.53.51:12350 [proto: 0/Unknown][8 pkts/608 bytes -> 0 pkts/0 bytes] 9 UDP 192.168.1.34:49511 -> 192.168.1.1:5351 [proto: 0/Unknown][4 pkts/216 bytes -> 0 pkts/0 bytes] - 10 TCP 192.168.1.34:50140 <-> 76.167.161.6:20274 [proto: 0/Unknown][2 pkts/132 bytes <-> 1 pkts/74 bytes] + 10 UDP 192.168.1.34:54067 -> 192.168.1.1:5351 [proto: 0/Unknown][4 pkts/216 bytes -> 0 pkts/0 bytes] + 11 TCP 192.168.1.34:50140 <-> 76.167.161.6:20274 [proto: 0/Unknown][2 pkts/132 bytes <-> 1 pkts/74 bytes] diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index a278e42ebb8..bbddd568fd5 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -3,15 +3,14 @@ DNS 2 267 1 MDNS 3 400 2 NetBIOS 22 3106 7 SSDP 40 14100 3 -SkypeCallIn 684 60681 178 +SkypeCallIn 454 39996 164 ICMP 4 328 1 IGMP 4 226 4 SSL 79 7742 6 Dropbox 16 7342 5 -Skype 610 129661 46 -Apple 76 19581 1 +Skype 840 150346 60 +Apple 84 20699 2 MS_OneDrive 348 181687 1 -ApplePush 8 1118 1 1 TCP 192.168.1.34:51230 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][166 pkts/39042 bytes <-> 182 pkts/142645 bytes][server: *.gateway.messenger.live.com] 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] @@ -20,7 +19,7 @@ ApplePush 8 1118 1 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] - 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] + 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][4 pkts/818 bytes <-> 4 pkts/2172 bytes] 10 TCP 192.168.1.34:51295 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/2074 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 11 TCP 192.168.1.34:51238 <-> 157.55.235.147:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1446 bytes <-> 4 pkts/266 bytes] @@ -33,44 +32,44 @@ ApplePush 8 1118 1 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] - 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] + 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][11 pkts/1164 bytes <-> 3 pkts/268 bytes] 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1077 bytes <-> 4 pkts/351 bytes] - 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] - 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] + 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] + 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1095 bytes <-> 3 pkts/285 bytes] 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1022 bytes <-> 4 pkts/351 bytes] 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] - 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] + 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1012 bytes <-> 4 pkts/351 bytes] 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] - 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] - 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] - 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] + 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] + 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] + 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] - 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] - 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] - 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] + 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] + 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] + 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] - 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] + 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][cat: Web/5][10 pkts/972 bytes <-> 3 pkts/285 bytes] 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/902 bytes <-> 4 pkts/351 bytes] - 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] + 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/852 bytes <-> 4 pkts/351 bytes] 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] - 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] + 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/285 bytes] 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/958 bytes <-> 2 pkts/184 bytes] 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] - 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238/ApplePush][cat: Cloud/13][4 pkts/674 bytes <-> 4 pkts/444 bytes] + 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238.140/ApplePush.Apple][cat: Web/5][4 pkts/674 bytes <-> 4 pkts/444 bytes] 59 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 60 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 61 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/snapchat.pcap.out b/tests/result/snapchat.pcap.out index 35183e642b1..017d5a639fe 100644 --- a/tests/result/snapchat.pcap.out +++ b/tests/result/snapchat.pcap.out @@ -1,6 +1,6 @@ -SSL_No_Cert 22 2879 1 +Google 22 2879 1 Snapchat 34 7320 2 1 TCP 10.8.0.1:56193 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat/9][9 pkts/2290 bytes <-> 8 pkts/1653 bytes][client: feelinsonice-hrd.appspot.com] 2 TCP 10.8.0.1:44536 <-> 74.125.136.141:443 [proto: 91.199/SSL.Snapchat][cat: Chat/9][9 pkts/2345 bytes <-> 8 pkts/1032 bytes][client: feelinsonice-hrd.appspot.com] - 3 TCP 10.8.0.1:33233 <-> 74.125.136.141:443 [proto: 64/SSL_No_Cert][cat: Web/5][11 pkts/1910 bytes <-> 11 pkts/969 bytes] + 3 TCP 10.8.0.1:33233 <-> 74.125.136.141:443 [proto: 64.126/SSL_No_Cert.Google][cat: Web/5][11 pkts/1910 bytes <-> 11 pkts/969 bytes] diff --git a/tests/result/starcraft_battle.pcap.out b/tests/result/starcraft_battle.pcap.out index c385561d739..c63b86dc84d 100644 --- a/tests/result/starcraft_battle.pcap.out +++ b/tests/result/starcraft_battle.pcap.out @@ -5,8 +5,7 @@ HTTP_Download 179 134204 1 WorldOfWarcraft 9 880 1 IGMP 2 120 1 SSL 38 2548 11 -Google 16 1709 4 -QUIC 6 475 1 +Google 22 2184 5 Github 3 234 1 Starcraft 236 51494 6 @@ -32,7 +31,7 @@ Starcraft 236 51494 6 20 TCP 192.168.1.100:3427 <-> 80.239.208.193:1119 [proto: 213/Starcraft][cat: Game/8][6 pkts/376 bytes <-> 7 pkts/526 bytes] 21 TCP 192.168.1.100:3512 <-> 12.129.222.54:80 [proto: 7.76/HTTP.WorldOfWarcraft][cat: Game/8][5 pkts/367 bytes <-> 4 pkts/513 bytes][Host: us.scan.worldofwarcraft.com] 22 UDP 192.168.1.100:55468 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/168 bytes <-> 2 pkts/388 bytes][Host: bnetcmsus-a.akamaihd.net] - 23 UDP 173.194.40.22:443 <-> 192.168.1.100:53568 [proto: 188/QUIC][cat: Web/5][3 pkts/243 bytes <-> 3 pkts/232 bytes] + 23 UDP 173.194.40.22:443 <-> 192.168.1.100:53568 [proto: 188.126/QUIC.Google][cat: Web/5][3 pkts/243 bytes <-> 3 pkts/232 bytes] 24 UDP 192.168.1.100:58851 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/173 bytes <-> 2 pkts/282 bytes][Host: 22.40.194.173.in-addr.arpa] 25 UDP 192.168.1.100:60026 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/154 bytes <-> 2 pkts/288 bytes][Host: llnw.blizzard.com] 26 UDP 192.168.1.100:58818 <-> 192.168.1.254:53 [proto: 5/DNS][cat: Network/14][2 pkts/172 bytes <-> 2 pkts/260 bytes][Host: 91.252.30.192.in-addr.arpa] diff --git a/tests/result/viber.pcap.out b/tests/result/viber.pcap.out index 0c85aae9e26..e200492ee9f 100644 --- a/tests/result/viber.pcap.out +++ b/tests/result/viber.pcap.out @@ -1,40 +1,36 @@ -Unknown 93 13829 4 DNS 8 1267 4 MDNS 4 412 1 ICMP 2 3028 1 -SSL 129 42221 7 +SSL 31 8597 3 ICMPV6 2 140 1 Facebook 2 281 1 -Google 2 164 1 -Viber 175 85695 5 -QUIC 3 194 1 +Google 32 9133 3 +Viber 268 99524 9 +Amazon 71 24849 3 1 TCP 192.168.0.17:53934 <-> 54.230.93.53:443 [proto: 91.144/SSL.Viber][cat: Chat/9][43 pkts/4571 bytes <-> 46 pkts/60087 bytes][client: dl-media.viber.com][server: *.viber.com] 2 TCP 192.168.0.17:57520 <-> 54.230.93.96:443 [proto: 91.144/SSL.Viber][cat: Chat/9][12 pkts/1848 bytes <-> 12 pkts/9317 bytes][client: media.cdn.viber.com][server: *.cdn.viber.com] - 3 TCP 192.168.0.17:49048 <-> 54.187.91.182:443 [proto: 91/SSL][cat: Web/5][13 pkts/2823 bytes <-> 14 pkts/6552 bytes][client: brahe.apptimize.com][server: *.apptimize.com] + 3 TCP 192.168.0.17:49048 <-> 54.187.91.182:443 [proto: 91.178/SSL.Amazon][cat: Web/5][13 pkts/2823 bytes <-> 14 pkts/6552 bytes][client: brahe.apptimize.com][server: *.apptimize.com] 4 TCP 192.168.0.17:33208 <-> 52.0.253.101:4244 [proto: 144/Viber][cat: Chat/9][32 pkts/6563 bytes <-> 26 pkts/2782 bytes] - 5 TCP 192.168.0.17:43702 <-> 172.217.23.78:443 [proto: 91/SSL][cat: Web/5][15 pkts/5339 bytes <-> 12 pkts/3436 bytes][client: app-measurement.com] - 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] + 5 TCP 192.168.0.17:43702 <-> 172.217.23.78:443 [proto: 91.126/SSL.Google][cat: Web/5][15 pkts/5339 bytes <-> 12 pkts/3436 bytes][client: app-measurement.com] + 6 TCP 192.168.0.17:36986 <-> 54.69.166.226:443 [proto: 91.178/SSL.Amazon][cat: Web/5][11 pkts/1437 bytes <-> 11 pkts/6412 bytes][client: mapi.apptimize.com][server: *.apptimize.com] 7 TCP 192.168.0.17:55746 <-> 151.101.1.130:443 [proto: 91/SSL][cat: Web/5][10 pkts/1534 bytes <-> 9 pkts/6239 bytes][client: venetia.iad.appboy.com][server: y.ssl.fastly.net] - 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91/SSL][cat: Web/5][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] - 9 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] - 10 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] - 11 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 12 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] - 13 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] - 14 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] - 15 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] - 16 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] - 17 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] - 18 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] - 19 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188/QUIC][cat: Web/5][2 pkts/130 bytes <-> 1 pkts/64 bytes] - 20 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] - 21 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] - 22 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] - - -Undetected flows: - 1 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 0/Unknown][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] - 2 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 0/Unknown][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] - 3 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 0/Unknown][1 pkts/76 bytes <-> 1 pkts/62 bytes] - 4 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 0/Unknown][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 8 TCP 192.168.0.17:36988 <-> 54.69.166.226:443 [proto: 91.178/SSL.Amazon][cat: Web/5][11 pkts/1462 bytes <-> 11 pkts/6163 bytes][client: mapi.apptimize.com][server: *.apptimize.com] + 9 UDP 192.168.0.17:47171 <-> 18.201.4.32:7985 [proto: 144/Viber][cat: Chat/9][24 pkts/5035 bytes <-> 22 pkts/2302 bytes] + 10 UDP 192.168.0.17:38190 <-> 18.201.4.3:7985 [proto: 144/Viber][cat: Chat/9][25 pkts/4344 bytes <-> 18 pkts/1872 bytes] + 11 ICMP 192.168.0.17:0 <-> 192.168.0.15:0 [proto: 81/ICMP][cat: Network/14][1 pkts/1514 bytes <-> 1 pkts/1514 bytes] + 12 UDP 192.168.0.17:62872 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/78 bytes <-> 1 pkts/373 bytes][Host: mapi.apptimize.com] + 13 TCP 192.168.0.17:33744 <-> 18.201.4.3:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 14 TCP 192.168.0.17:45424 <-> 18.201.4.32:443 [proto: 91/SSL][cat: Web/5][4 pkts/272 bytes <-> 2 pkts/140 bytes] + 15 UDP 192.168.0.17:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/412 bytes -> 0 pkts/0 bytes] + 16 UDP 192.168.0.17:35283 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/74 bytes <-> 1 pkts/303 bytes][Host: app.adjust.com] + 17 UDP 192.168.0.17:45743 <-> 192.168.0.15:53 [proto: 5.119/DNS.Facebook][cat: SocialNetwork/6][1 pkts/78 bytes <-> 1 pkts/203 bytes][Host: graph.facebook.com] + 18 UDP 192.168.0.17:44376 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/82 bytes <-> 1 pkts/183 bytes][Host: venetia.iad.appboy.com] + 19 UDP 192.168.0.17:37418 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/79 bytes <-> 1 pkts/185 bytes][Host: media.cdn.viber.com] + 20 UDP 192.168.0.17:40445 <-> 192.168.0.15:53 [proto: 5.144/DNS.Viber][cat: Chat/9][1 pkts/78 bytes <-> 1 pkts/185 bytes][Host: dl-media.viber.com] + 21 UDP 192.168.0.17:41993 <-> 172.217.23.106:443 [proto: 188.126/QUIC.Google][cat: Web/5][2 pkts/130 bytes <-> 1 pkts/64 bytes] + 22 UDP 192.168.0.17:35331 <-> 192.168.0.15:53 [proto: 5/DNS][cat: Network/14][1 pkts/79 bytes <-> 1 pkts/95 bytes][Host: app-measurement.com] + 23 UDP 192.168.0.17:50097 <-> 192.168.0.15:53 [proto: 5.126/DNS.Google][cat: Web/5][1 pkts/74 bytes <-> 1 pkts/90 bytes][Host: www.google.com] + 24 ICMPV6 [fe80::3207:4dff:fea3:5fa7]:0 -> [ff02::2]:0 [proto: 102/ICMPV6][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes] + 25 UDP 192.168.0.17:38190 <-> 18.201.4.3:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] + 26 UDP 192.168.0.17:47171 <-> 18.201.4.32:7987 [proto: 144/Viber][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/62 bytes] diff --git a/tests/result/waze.pcap.out b/tests/result/waze.pcap.out index bdb4acf91db..b964af613fd 100644 --- a/tests/result/waze.pcap.out +++ b/tests/result/waze.pcap.out @@ -1,8 +1,8 @@ HTTP 28 1572 7 NTP 2 180 1 HTTP_Download 37 63205 1 -SSL_No_Cert 13 2142 1 SSL 8 432 2 +Google 13 2142 1 Waze 484 289335 19 WhatsApp 15 1341 1 Amazon 10 786 1 @@ -21,7 +21,7 @@ Amazon 10 786 1 12 TCP 10.8.0.1:36314 <-> 176.34.186.180:443 [proto: 91.135/SSL.Waze][cat: Web/5][11 pkts/1260 bytes <-> 9 pkts/4413 bytes][server: *.world.waze.com] 13 TCP 10.8.0.1:51050 <-> 176.34.103.105:443 [proto: 91.135/SSL.Waze][cat: Web/5][9 pkts/1184 bytes <-> 9 pkts/4369 bytes][server: *.waze.com] 14 TCP 10.8.0.1:45529 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][9 pkts/591 bytes <-> 8 pkts/3424 bytes][Host: roadshields.waze.com] - 15 TCP 10.8.0.1:36585 <-> 173.194.118.48:443 [proto: 64/SSL_No_Cert][cat: Web/5][7 pkts/1137 bytes <-> 6 pkts/1005 bytes] + 15 TCP 10.8.0.1:36585 <-> 173.194.118.48:443 [proto: 64.126/SSL_No_Cert.Google][cat: Web/5][7 pkts/1137 bytes <-> 6 pkts/1005 bytes] 16 TCP 10.8.0.1:45536 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][8 pkts/594 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] 17 TCP 10.8.0.1:50828 <-> 108.168.176.228:443 [proto: 142/WhatsApp][cat: Chat/9][8 pkts/673 bytes <-> 7 pkts/668 bytes] 18 TCP 10.8.0.1:45546 <-> 54.230.227.172:80 [proto: 7.135/HTTP.Waze][cat: Web/5][7 pkts/557 bytes <-> 7 pkts/771 bytes][Host: cres.waze.com] diff --git a/tests/result/webex.pcap.out b/tests/result/webex.pcap.out index 71fb528d18e..ed5418eaebf 100644 --- a/tests/result/webex.pcap.out +++ b/tests/result/webex.pcap.out @@ -1,10 +1,10 @@ HTTP 22 3182 2 SSL_No_Cert 90 10682 5 -SSL 46 10727 4 +SSL 16 1159 3 SIP 22 15356 1 Google 17 6375 1 Webex 1380 818407 43 -Amazon 3 174 1 +Amazon 33 9742 2 1 TCP 10.8.0.1:51155 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][256 pkts/14707 bytes <-> 257 pkts/329379 bytes][server: *.webex.com] 2 TCP 10.8.0.1:41348 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][28 pkts/4815 bytes <-> 28 pkts/104881 bytes][client: radcom.webex.com] @@ -15,7 +15,7 @@ Amazon 3 174 1 7 TCP 10.8.0.1:51154 <-> 62.109.224.120:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][55 pkts/12583 bytes <-> 50 pkts/6703 bytes][server: *.webex.com] 8 UDP 10.8.0.1:64538 -> 172.16.1.75:5060 [proto: 100/SIP][cat: VoIP/10][22 pkts/15356 bytes -> 0 pkts/0 bytes] 9 TCP 10.8.0.1:51857 <-> 62.109.229.158:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][29 pkts/4559 bytes <-> 21 pkts/5801 bytes][server: *.webex.com] - 10 TCP 10.8.0.1:46211 <-> 54.241.32.14:443 [proto: 91/SSL][cat: Web/5][16 pkts/1984 bytes <-> 14 pkts/7584 bytes][client: api.crittercism.com][server: *.crittercism.com] + 10 TCP 10.8.0.1:46211 <-> 54.241.32.14:443 [proto: 91.178/SSL.Amazon][cat: Web/5][16 pkts/1984 bytes <-> 14 pkts/7584 bytes][client: api.crittercism.com][server: *.crittercism.com] 11 TCP 10.8.0.1:41386 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1417 bytes <-> 8 pkts/6984 bytes][server: *.webex.com] 12 TCP 10.8.0.1:41419 <-> 64.68.105.103:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][7 pkts/1309 bytes <-> 7 pkts/6930 bytes][server: *.webex.com] 13 TCP 10.8.0.1:52730 <-> 173.243.4.76:443 [proto: 91.141/SSL.Webex][cat: VoIP/10][9 pkts/1369 bytes <-> 8 pkts/6621 bytes][server: *.webex.com] diff --git a/tests/result/weibo.pcap.out b/tests/result/weibo.pcap.out index f6c618bcf89..b62f14fff62 100644 --- a/tests/result/weibo.pcap.out +++ b/tests/result/weibo.pcap.out @@ -1,9 +1,8 @@ DNS 10 1059 5 HTTP 19 2275 5 SSL 15 1234 10 -Google 10 660 5 +Google 33 4778 7 Amazon 2 132 1 -QUIC 23 4118 2 Sina(Weibo) 419 258077 16 1 TCP 192.168.1.105:35803 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][52 pkts/5367 bytes <-> 54 pkts/71536 bytes][Host: img.t.sinajs.cn] @@ -13,8 +12,8 @@ Sina(Weibo) 419 258077 16 5 TCP 192.168.1.105:35805 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][21 pkts/2323 bytes <-> 20 pkts/20922 bytes][Host: img.t.sinajs.cn] 6 TCP 192.168.1.105:35809 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][18 pkts/1681 bytes <-> 17 pkts/20680 bytes][Host: img.t.sinajs.cn] 7 TCP 192.168.1.105:35806 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][7 pkts/946 bytes <-> 6 pkts/3755 bytes][Host: img.t.sinajs.cn] - 8 UDP 192.168.1.105:53656 <-> 216.58.210.227:443 [proto: 188/QUIC][cat: Web/5][8 pkts/1301 bytes <-> 6 pkts/873 bytes] - 9 UDP 216.58.210.14:443 <-> 192.168.1.105:49361 [proto: 188/QUIC][cat: Web/5][5 pkts/963 bytes <-> 4 pkts/981 bytes] + 8 UDP 192.168.1.105:53656 <-> 216.58.210.227:443 [proto: 188.126/QUIC.Google][cat: Web/5][8 pkts/1301 bytes <-> 6 pkts/873 bytes] + 9 UDP 216.58.210.14:443 <-> 192.168.1.105:49361 [proto: 188.126/QUIC.Google][cat: Web/5][5 pkts/963 bytes <-> 4 pkts/981 bytes] 10 TCP 192.168.1.105:59119 <-> 114.134.80.162:80 [proto: 7/HTTP][cat: Web/5][5 pkts/736 bytes <-> 4 pkts/863 bytes][Host: weibo.com] 11 TCP 192.168.1.105:35811 <-> 93.188.134.246:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/604 bytes <-> 2 pkts/140 bytes][Host: js.t.sinajs.cn] 12 TCP 192.168.1.105:42275 <-> 222.73.28.96:80 [proto: 7.200/HTTP.Sina(Weibo)][cat: SocialNetwork/6][3 pkts/610 bytes <-> 1 pkts/66 bytes][Host: u1.img.mobile.sina.cn] diff --git a/tests/result/whatsapp_login_call.pcap.out b/tests/result/whatsapp_login_call.pcap.out index 666b3d70ae4..701215a49e0 100644 --- a/tests/result/whatsapp_login_call.pcap.out +++ b/tests/result/whatsapp_login_call.pcap.out @@ -4,14 +4,14 @@ MDNS 8 952 4 DHCP 10 3420 1 ICMP 10 700 1 SSL 8 589 2 +Facebook 44 7818 2 Dropbox 4 2176 1 -Apple 105 22176 19 +Apple 127 28102 20 WhatsApp 182 25154 2 Spotify 3 258 1 Messenger 70 9464 14 -WhatsAppVoice 706 91156 4 +WhatsAppVoice 662 83338 2 AppleStore 85 28087 2 -ApplePush 22 5926 1 1 UDP 192.168.2.4:51518 <-> 91.253.176.65:9344 [proto: 189/WhatsAppVoice][cat: VoIP/10][186 pkts/27025 bytes <-> 278 pkts/25895 bytes] 2 UDP 192.168.2.4:52794 <-> 91.253.176.65:9665 [proto: 189/WhatsAppVoice][cat: VoIP/10][141 pkts/17530 bytes <-> 57 pkts/12888 bytes] @@ -19,10 +19,10 @@ ApplePush 22 5926 1 4 TCP 192.168.2.4:49204 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][29 pkts/11770 bytes <-> 24 pkts/6612 bytes][client: p53-buy.itunes.apple.com] 5 TCP 192.168.2.4:49201 <-> 17.178.104.12:443 [proto: 91.140/SSL.Apple][cat: Web/5][21 pkts/7644 bytes <-> 17 pkts/9576 bytes][client: query.ess.apple.com][server: *.ess.apple.com] 6 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][17 pkts/6166 bytes <-> 15 pkts/3539 bytes][client: p53-buy.itunes.apple.com] - 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238/ApplePush][cat: Cloud/13][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] - 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] + 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238.140/ApplePush.Apple][cat: Web/5][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] + 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189.119/WhatsAppVoice.Facebook][cat: SocialNetwork/6][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] 9 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][10 pkts/3420 bytes -> 0 pkts/0 bytes][Host: lucas-imac] - 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] + 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189.119/WhatsAppVoice.Facebook][cat: SocialNetwork/6][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/2176 bytes -> 0 pkts/0 bytes] 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][cat: Web/5][9 pkts/1130 bytes <-> 8 pkts/868 bytes] 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network/14][10 pkts/700 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/whatsapp_login_chat.pcap.out b/tests/result/whatsapp_login_chat.pcap.out index 324b0cd4cbf..51ce4456a20 100644 --- a/tests/result/whatsapp_login_chat.pcap.out +++ b/tests/result/whatsapp_login_chat.pcap.out @@ -1,14 +1,13 @@ MDNS 2 202 2 DHCP 6 2052 1 Dropbox 2 1088 1 -Apple 44 21371 1 +Apple 50 23466 2 WhatsApp 32 3243 2 Spotify 1 86 1 -ApplePush 6 2095 1 1 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][cat: Web/5][24 pkts/15117 bytes <-> 20 pkts/6254 bytes] 2 TCP 192.168.2.4:49206 <-> 158.85.58.15:5222 [proto: 142/WhatsApp][cat: Chat/9][17 pkts/1794 bytes <-> 13 pkts/1169 bytes] - 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/2095 bytes -> 0 pkts/0 bytes] + 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238.140/ApplePush.Apple][cat: Web/5][6 pkts/2095 bytes -> 0 pkts/0 bytes] 4 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][6 pkts/2052 bytes -> 0 pkts/0 bytes][Host: lucas-imac] 5 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 6 UDP 192.168.2.4:61697 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e12.whatsapp.net] From fd963538f3c93800b870283b31313257930af715 Mon Sep 17 00:00:00 2001 From: Vitaliy Ivanov Date: Thu, 29 Nov 2018 13:40:37 +0200 Subject: [PATCH 133/147] build: cleanup of dpdk examples. - clean install dependencies on example binary - add more rules to clean command Signed-off-by: Vitaliy Ivanov --- example/Makefile.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/example/Makefile.in b/example/Makefile.in index 050cac8e15c..bf218f5033d 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -13,7 +13,7 @@ ndpiReader: $(OBJS) $(LIBNDPI) %.o: %.c $(HEADERS) Makefile $(CC) $(CFLAGS) -c $< -o $@ -install: ndpiReader +install: mkdir -p $(DESTDIR)$(PREFIX)/bin/ cp ndpiReader $(DESTDIR)$(PREFIX)/bin/ [ -f build/app/ndpiReader.dpdk ] && cp build/app/ndpiReader.dpdk $(DESTDIR)$(PREFIX)/bin/ || true @@ -23,7 +23,9 @@ dpdk: make -f Makefile.dpdk clean: - /bin/rm -f *.o ndpiReader + /bin/rm -f *.o ndpiReader ndpiReader.dpdk + /bin/rm -f .*.dpdk.cmd .*.o.cmd *.dpdk.map .*.o.d + /bin/rm -f _install _postbuild _postinstall _preinstall /bin/rm -rf build distclean: clean From d63e000a451f4904c80e949fd05bb7d3cd0f7422 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Fri, 30 Nov 2018 00:57:34 +0100 Subject: [PATCH 134/147] Fixed package signing --- packages/ubuntu/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ubuntu/Makefile.in b/packages/ubuntu/Makefile.in index 33ecaac3498..c55b379e012 100644 --- a/packages/ubuntu/Makefile.in +++ b/packages/ubuntu/Makefile.in @@ -21,7 +21,7 @@ ndpi: @find ./debian/ndpi-tmp -name "*~" -exec /bin/rm {} ';' @find ./debian/ndpi-dev-tmp -name "*~" -exec /bin/rm {} ';' dpkg-buildpackage -rfakeroot -d -us -uc - dpkg-sig --sign builder -k 7921DF34 ../ndpi*deb + dpkg-sig --sign builder -k D1EB60BE ../ndpi*deb @\rm -f ../ndpi*dsc ../ndpi*.gz ../ndpi*changes @/bin/mv ../ndpi*deb . @echo From b6be0eebf6672c7c8127ea7a1e7fde2d6c3ae3e0 Mon Sep 17 00:00:00 2001 From: lucaderi Date: Fri, 30 Nov 2018 06:53:41 +0100 Subject: [PATCH 135/147] Fix for shared library symbolic link --- packages/rpm/ndpi.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rpm/ndpi.spec.in b/packages/rpm/ndpi.spec.in index 5d8f21a01c5..90d9c51d785 100644 --- a/packages/rpm/ndpi.spec.in +++ b/packages/rpm/ndpi.spec.in @@ -56,7 +56,7 @@ mkdir -p $RPM_BUILD_ROOT%{libdir} mkdir -p $RPM_BUILD_ROOT%{bindir} cd $HOME/nDPI; make DESTDIR=$RPM_BUILD_ROOT install; rm $RPM_BUILD_ROOT%{libdir}/libndpi.so -ln -sr $RPM_BUILD_ROOT%{libdir}/libndpi.so.@PACKAGE_VERSION@ $RPM_BUILD_ROOT%{libdir}/libndpi.so +cd $RPM_BUILD_ROOT%{libdir}/; ln -s libndpi.so.2.5.0 libndpi.so; cd - mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d cp $HOME/nDPI/packages/etc/ld.so.conf.d/ndpi.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d strip $RPM_BUILD_ROOT%{bindir}/* From bae75c8f9b90c8655cc1e67c85a52e66f6121b52 Mon Sep 17 00:00:00 2001 From: Luca Date: Fri, 30 Nov 2018 08:39:54 +0100 Subject: [PATCH 136/147] Fix for custom protocol load --- src/lib/ndpi_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 0812e63acb3..8ee2dd1a61a 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4455,7 +4455,8 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct if(flow->guessed_protocol_id >= (NDPI_MAX_SUPPORTED_PROTOCOLS-1)) { /* This is a custom protocol and it has priority over everything else */ - ret.master_protocol = NDPI_PROTOCOL_UNKNOWN, ret.app_protocol = flow->guessed_host_protocol_id; + ret.master_protocol = NDPI_PROTOCOL_UNKNOWN, + ret.app_protocol = flow->guessed_protocol_id ? flow->guessed_protocol_id : flow->guessed_host_protocol_id; ndpi_fill_protocol_category(ndpi_struct, flow, &ret); return(ret); } From be2934f9ad2f9ea21ca19a9f64e5bf3b67e22447 Mon Sep 17 00:00:00 2001 From: Luca Date: Fri, 30 Nov 2018 18:41:16 +0100 Subject: [PATCH 137/147] Added the concept of protocols that can have subprotocols. Example Spotify cannot have subprotocols, DNS can (DNS.Spotify) Merged Skype call in/out in Skype Call --- src/include/ndpi_main.h | 1 + src/include/ndpi_protocol_ids.h | 4 +- src/include/ndpi_typedefs.h | 1 + src/lib/ndpi_main.c | 418 ++++++++++---------- src/lib/protocols/skype.c | 4 +- src/lib/protocols/stun.c | 7 +- tests/result/1kxun.pcap.out | 90 ++--- tests/result/hangout.pcap.out | 4 +- tests/result/nintendo.pcap.out | 6 +- tests/result/skype-conference-call.pcap.out | 4 +- tests/result/skype.pcap.out | 350 ++++++++-------- tests/result/skype_no_unknown.pcap.out | 335 ++++++++-------- tests/result/whatsapp_login_call.pcap.out | 12 +- tests/result/whatsapp_login_chat.pcap.out | 5 +- 14 files changed, 626 insertions(+), 615 deletions(-) diff --git a/src/include/ndpi_main.h b/src/include/ndpi_main.h index 41280fb8e0c..e37576289c5 100644 --- a/src/include/ndpi_main.h +++ b/src/include/ndpi_main.h @@ -97,6 +97,7 @@ extern "C" { extern void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol_breed_t protoBreed, u_int16_t protoId, + u_int8_t can_have_a_subprotocol, u_int16_t tcp_alias_protoId[2], u_int16_t udp_alias_protoId[2], char *protoName, ndpi_protocol_category_t protoCategory, diff --git a/src/include/ndpi_protocol_ids.h b/src/include/ndpi_protocol_ids.h index 376ae195835..14f1810edcd 100644 --- a/src/include/ndpi_protocol_ids.h +++ b/src/include/ndpi_protocol_ids.h @@ -72,7 +72,7 @@ typedef enum { NDPI_PROTOCOL_GNUTELLA = 35, NDPI_PROTOCOL_EDONKEY = 36, /* Tomasz Bujlow */ NDPI_PROTOCOL_BITTORRENT = 37, - NDPI_PROTOCOL_SKYPE_CALL_OUT = 38, + NDPI_PROTOCOL_SKYPE_CALL = 38, /* Skype call and videocalls */ NDPI_PROTOCOL_SIGNAL = 39, NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski */ NDPI_PROTOCOL_SMBV23 = 41, /* SMB version 2/3 */ @@ -85,7 +85,7 @@ typedef enum { NDPI_PROTOCOL_XBOX = 47, NDPI_PROTOCOL_QQ = 48, - NDPI_PROTOCOL_SKYPE_CALL_IN = 49, + NDPI_PROTOCOL_FREE_49 = 49, /* Free */ NDPI_PROTOCOL_RTSP = 50, NDPI_PROTOCOL_MAIL_IMAPS = 51, NDPI_PROTOCOL_ICECAST = 52, diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 4b69c2b7b03..d48453baf29 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -833,6 +833,7 @@ typedef enum { typedef struct ndpi_proto_defaults { char *protoName; ndpi_protocol_category_t protoCategory; + u_int8_t can_have_a_subprotocol; u_int16_t protoId, protoIdx; u_int16_t master_tcp_protoId[2], master_udp_protoId[2]; /* The main protocols on which this sub-protocol sits on */ ndpi_protocol_breed_t protoBreed; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 8ee2dd1a61a..12aba272e8e 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -527,6 +527,7 @@ void ndpi_exclude_protocol(struct ndpi_detection_module_struct *ndpi_struct, void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, ndpi_protocol_breed_t breed, u_int16_t protoId, + u_int8_t can_have_a_subprotocol, u_int16_t tcp_master_protoId[2], u_int16_t udp_master_protoId[2], char *protoName, ndpi_protocol_category_t protoCategory, ndpi_port_range *tcpDefPorts, ndpi_port_range *udpDefPorts) { @@ -553,7 +554,8 @@ void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_mod, ndpi_mod->proto_defaults[protoId].protoCategory = protoCategory, ndpi_mod->proto_defaults[protoId].protoId = protoId, ndpi_mod->proto_defaults[protoId].protoBreed = breed; - + ndpi_mod->proto_defaults[protoId].can_have_a_subprotocol = can_have_a_subprotocol; + memcpy(&ndpi_mod->proto_defaults[protoId].master_tcp_protoId, tcp_master_protoId, 2*sizeof(u_int16_t)); memcpy(&ndpi_mod->proto_defaults[protoId].master_udp_protoId, udp_master_protoId, 2*sizeof(u_int16_t)); @@ -754,6 +756,7 @@ void ndpi_init_protocol_match(struct ndpi_detection_module_struct *ndpi_mod, ndpi_set_proto_defaults(ndpi_mod, ndpi_mod->proto_defaults[match->protocol_id].protoBreed, ndpi_mod->proto_defaults[match->protocol_id].protoId, + 0 /* can_have_a_subprotocol */, no_master, no_master, ndpi_mod->proto_defaults[match->protocol_id].protoName, ndpi_mod->proto_defaults[match->protocol_id].protoCategory, @@ -995,966 +998,971 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp memset(ndpi_mod->proto_defaults, 0, sizeof(ndpi_mod->proto_defaults)); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_UNKNOWN, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Unknown", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_FTP_CONTROL, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "FTP_CONTROL", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 21, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FTP_DATA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "FTP_DATA", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 20, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MAIL_POP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "POP3", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 110, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_POPS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "POPS", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 995, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MAIL_SMTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SMTP", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 25, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_SMTPS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SMTPS", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 465, 587, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MAIL_IMAP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IMAP", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 143, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_IMAPS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IMAPS", NDPI_PROTOCOL_CATEGORY_MAIL, ndpi_build_default_ports(ports_a, 993, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DNS, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "DNS", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 53, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 53, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IPP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IPP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HEP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "HEP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 9064, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 9063, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "HTTP", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 80, 0 /* ntop */, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MDNS, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "MDNS", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 5353, 5354, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NTP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 123, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NETBIOS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NetBIOS", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 139, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 137, 138, 139, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NFS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NFS", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 2049, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 2049, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SSDP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SSDP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BGP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "BGP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 179, 2605, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SNMP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SNMP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 161, 162, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_XDMCP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "XDMCP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 177, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 177, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV1, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SMBv1", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SYSLOG, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Syslog", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 514, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 514, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DHCP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DHCP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 67, 68, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_POSTGRES, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PostgreSQL", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 5432, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MYSQL, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MySQL", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 3306, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DIRECT_DOWNLOAD_LINK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Direct_Download_Link", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_APPLEJUICE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "AppleJuice", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_DIRECTCONNECT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DirectConnect", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_NTOP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ntop", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VMWARE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "VMware", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 903, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 902, 903, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_FBZERO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "FacebookZero", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 443, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_KONTIKI, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Kontiki", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_OPENFT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "OpenFT", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_FASTTRACK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "FastTrack", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_GNUTELLA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Gnutella", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_EDONKEY, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "eDonkey", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_BITTORRENT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "BitTorrent", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 51413, 53646, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 6771, 51413, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKYPE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Skype", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKYPE_CALL_IN, - no_master, - no_master, "SkypeCallIn", NDPI_PROTOCOL_CATEGORY_VOIP, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKYPE_CALL, + 0 /* can_have_a_subprotocol */, no_master, + no_master, "SkypeCall", NDPI_PROTOCOL_CATEGORY_VOIP, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE_49, + 0 /* can_have_a_subprotocol */, no_master, + no_master, "Free_49", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKYPE_CALL_OUT, - no_master, - no_master, "SkypeCallOut", NDPI_PROTOCOL_CATEGORY_VOIP, + ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE_49, + 0 /* can_have_a_subprotocol */, no_master, + no_master, "SkypeCall", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TEREDO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Teredo", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 3544, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WECHAT, - no_master, /* wechat.com */ + 0 /* can_have_a_subprotocol */, no_master, /* wechat.com */ no_master, "WeChat", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEMCACHED, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Memcached", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 11211, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 11211, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV23, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MINING, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Mining", CUSTOM_CATEGORY_MINING, ndpi_build_default_ports(ports_a, 8333, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NEST_LOG_SINK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NestLogSink", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 11095, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_44, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_45, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_46, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SIGNAL, - no_master, /* https://signal.org */ + 0 /* can_have_a_subprotocol */, no_master, /* https://signal.org */ no_master, "Signal", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_205, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Free", NDPI_PROTOCOL_CATEGORY_CUSTOM_1 /* dummy */, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VIDTO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PPStream", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_XBOX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Xbox", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_QQ, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "QQ", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_RTSP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RTSP", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 554, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 554, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ICECAST, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IceCast", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PPLIVE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PPLive", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PPSTREAM, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PPStream", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ZATTOO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Zattoo", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SHOUTCAST, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ShoutCast", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SOPCAST, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Sopcast", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TVANTS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Tvants", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TVUPLAYER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TVUplayer", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_DOWNLOAD, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "HTTP_Download", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_QQLIVE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "QQLive", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_THUNDER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Thunder", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SOULSEEK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Soulseek", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); custom_master[0] = NDPI_PROTOCOL_SSL, custom_master[1] = NDPI_PROTOCOL_UNKNOWN; ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SSL_NO_CERT, - custom_master, + 1 /* can_have_a_subprotocol */, custom_master, no_master, "SSL_No_Cert", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_IRC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IRC", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 194, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 194, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AYIYA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Ayiya", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 5072, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UNENCRYPTED_JABBER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Unencrypted_Jabber", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OSCAR, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Oscar", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_BATTLEFIELD, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "BattleField", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_VRRP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "VRRP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_STEAM, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Steam", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HALFLIFE2, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "HalfLife2", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WORLDOFWARCRAFT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "WorldOfWarcraft", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_HOTSPOT_SHIELD, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "HotspotShield", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_TELNET, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Telnet", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 23, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); custom_master[0] = NDPI_PROTOCOL_SIP, custom_master[1] = NDPI_PROTOCOL_H323; ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_STUN, - no_master, + 0 /* can_have_a_subprotocol */, no_master, custom_master, "STUN", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 3478, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_IP_IPSEC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IPsec", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 500, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 500, 4500, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_GRE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "GRE", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_ICMP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ICMP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_IGMP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IGMP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_EGP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "EGP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_SCTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SCTP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_OSPF, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "OSPF", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 2604, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_IP_IN_IP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IP_in_IP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RTP", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RDP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RDP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 3389, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VNC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "VNC", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 5900, 5901, 5800, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PCANYWHERE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PcAnywhere", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP_VOICE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "WhatsAppVoice", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP_FILES, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "WhatsAppFiles", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "WhatsApp", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); custom_master[0] = NDPI_PROTOCOL_SSL_NO_CERT, custom_master[1] = NDPI_PROTOCOL_UNKNOWN; ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_SSL, - no_master, + 1 /* can_have_a_subprotocol */, no_master, custom_master, "SSL", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 443, 3001 /* ntop */, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SSH, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 22, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_USENET, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Usenet", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MGCP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MGCP", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IAX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "IAX", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 4569, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 4569, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AFP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "AFP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 548, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 548, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CATEGORY_CUSTOM_1, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, NDPI_CONST_GENERIC_PROTOCOL_NAME, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CHECKMK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "CHECKMK", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 6556, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_STEALTHNET, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Stealthnet", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_AIMINI, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Aimini", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SIP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SIP", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 5060, 5061, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 5060, 5061, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TRUPHONE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TruPhone", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_ICMPV6, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ICMPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DHCPV6, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DHCPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ARMAGETRON, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Armagetron", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_CROSSFIRE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Crossfire", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DOFUS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Dofus", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FIESTA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Fiesta", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FLORENSIA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Florensia", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GUILDWARS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Guildwars", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_ACTIVESYNC, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "HTTP_ActiveSync", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KERBEROS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Kerberos", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 88, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 88, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LDAP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "LDAP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 389, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 389, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MAPLESTORY, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MapleStory", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MSSQL_TDS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MsSQL-TDS", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 1433, 1434, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PPTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "PPTP", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WARCRAFT3, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Warcraft3", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WORLD_OF_KUNG_FU, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "WorldOfKungFu", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DCERPC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DCE_RPC", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 135, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NETFLOW, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NetFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 2055, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SFLOW, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "sFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 6343, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_CONNECT, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "HTTP_Connect", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_PROXY, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "HTTP_Proxy", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 8080, 3128, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CITRIX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Citrix", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 1494, 2598, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBEX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Webex", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RADIUS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Radius", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 1812, 1813, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 1812, 1813, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TEAMVIEWER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TeamViewer", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 5938, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 5938, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LOTUS_NOTES, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "LotusNotes", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, ndpi_build_default_ports(ports_a, 1352, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SAP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SAP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 3201, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); /* Missing dissector: port based only */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "GTP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 2152, 2123, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UPNP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "UPnP", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 1780, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 1900, 0, 0, 0, 0) /* UDP */); /* Missing dissector: port based only */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TELEGRAM, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Telegram", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_QUIC, - no_master, + 1 /* can_have_a_subprotocol */, no_master, no_master, "QUIC", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 443, 80, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DIAMETER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Diameter", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 3868, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_APPLE_PUSH, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ApplePush", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 1, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DROPBOX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Dropbox", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 17500, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SPOTIFY, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Spotify", NDPI_PROTOCOL_CATEGORY_STREAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LISP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "LISP", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 4342, 4341, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_EAQ, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "EAQ", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 6000, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KAKAOTALK_VOICE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "KakaoTalk_Voice", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MPEGTS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MPEG_TS", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); /* http://en.wikipedia.org/wiki/Link-local_Multicast_Name_Resolution */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LLMNR, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "LLMNR", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 5355, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 5355, 0, 0, 0, 0) /* UDP */); /* Missing dissector: port based only */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_REMOTE_SCAN, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RemoteScan", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 6077, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 6078, 0, 0, 0, 0) /* UDP */); /* Missing dissector: port based only */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_H323, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master,"H323", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 1719, 1720, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 1719, 1720, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPENVPN, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "OpenVPN", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 1194, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 1194, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NOE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "NOE", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CISCOVPN, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "CiscoVPN", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 10000, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 10000, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TEAMSPEAK, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TeamSpeak", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKINNY, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "CiscoSkinny", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 2000, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTCP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RTCP", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RSYNC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RSYNC", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 873, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ORACLE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Oracle", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 1521, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CORBA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Corba", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UBUNTUONE, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "UbuntuONE", NDPI_PROTOCOL_CATEGORY_CLOUD, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHOIS_DAS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Whois-DAS", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 43, 4343, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_COLLECTD, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Collectd", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 25826, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOCKS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SOCKS", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 1080, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 1080, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TFTP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TFTP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 69, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTMP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RTMP", NDPI_PROTOCOL_CATEGORY_MEDIA, ndpi_build_default_ports(ports_a, 1935, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PANDO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Pando_Media_Booster", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEGACO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Megaco", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 2944 , 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_REDIS, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Redis", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 6379, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0 , 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ZMQ, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "ZeroMQ", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0 , 0, 0, 0, 0) ); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VHUA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "VHUA", NDPI_PROTOCOL_CATEGORY_VOIP, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 58267, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_STARCRAFT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Starcraft", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 1119, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 1119, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_UBNTAC2, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "UBNTAC2", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 10001, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VIBER, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Viber", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 7985, 5242, 5243, 4244, 0), /* TCP */ ndpi_build_default_ports(ports_b, 7985, 7987, 5242, 5243, 4244)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_COAP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "COAP", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 5683, 5684, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MQTT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "MQTT", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 1883, 8883, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOMEIP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SOMEIP", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 30491, 30501, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 30491, 30501, 30490, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "RX", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_GIT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Git", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, ndpi_build_default_ports(ports_a, 9418, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DRDA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DRDA", NDPI_PROTOCOL_CATEGORY_DATABASE, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HANGOUT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "GoogleHangout", NDPI_PROTOCOL_CATEGORY_CHAT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BJNP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "BJNP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 8612, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMPP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "SMPP", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_OOKLA, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Ookla", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AMQP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "AMQP", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DNSCRYPT, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "DNScrypt", NDPI_PROTOCOL_CATEGORY_NETWORK, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0), /* TCP */ ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TINC, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "TINC", NDPI_PROTOCOL_CATEGORY_VPN, ndpi_build_default_ports(ports_a, 655, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 655, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_FIX, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "FIX", NDPI_PROTOCOL_CATEGORY_RPC, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_NINTENDO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "Nintendo", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_CSGO, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "CSGO", NDPI_PROTOCOL_CATEGORY_GAME, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AJP, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, "AJP", NDPI_PROTOCOL_CATEGORY_WEB, ndpi_build_default_ports(ports_a, 8009, 0, 0, 0, 0) /* TCP */, ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); @@ -2686,7 +2694,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, ndpi_mod->ndpi_num_supported_protocols, - no_master, + 0 /* can_have_a_subprotocol */, no_master, no_master, ndpi_strdup(proto), NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, /* TODO add protocol category support in rules */ @@ -4038,9 +4046,7 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st if(flow->protos.stun_ssl.stun.num_processed_pkts > 0) { if(/* (flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) */ flow->protos.stun_ssl.stun.is_skype) { - u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; - - ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE); } else ndpi_set_detected_protocol(ndpi_struct, flow, flow->guessed_host_protocol_id, NDPI_PROTOCOL_STUN); } @@ -5184,8 +5190,10 @@ void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, && (lower_detected_protocol == NDPI_PROTOCOL_UNKNOWN)) { if((flow->guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN) && (upper_detected_protocol != flow->guessed_host_protocol_id)) { - lower_detected_protocol = upper_detected_protocol; - upper_detected_protocol = flow->guessed_host_protocol_id; + if(ndpi_struct->proto_defaults[upper_detected_protocol].can_have_a_subprotocol) { + lower_detected_protocol = upper_detected_protocol; + upper_detected_protocol = flow->guessed_host_protocol_id; + } } } @@ -6052,10 +6060,8 @@ int ndpi_match_bigram(struct ndpi_detection_module_struct *ndpi_struct, void ndpi_free_flow(struct ndpi_flow_struct *flow) { if(flow) { - if(flow->http.url) - ndpi_free(flow->http.url); - if(flow->http.content_type) - ndpi_free(flow->http.content_type); + if(flow->http.url) ndpi_free(flow->http.url); + if(flow->http.content_type) ndpi_free(flow->http.content_type); ndpi_free(flow); } } diff --git a/src/lib/protocols/skype.c b/src/lib/protocols/skype.c index 0f5e8c780f7..35dcb01619b 100644 --- a/src/lib/protocols/skype.c +++ b/src/lib/protocols/skype.c @@ -24,12 +24,10 @@ #include "ndpi_api.h" static void ndpi_skype_report_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - u_int16_t proto = (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT; - //printf("-> payload_len=%u\n", flow->packet.payload_packet_len); NDPI_LOG_INFO(ndpi_struct, "found skype\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, proto, NDPI_PROTOCOL_SKYPE); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE); } static int is_port(u_int16_t a, u_int16_t b, u_int16_t c) { diff --git a/src/lib/protocols/stun.c b/src/lib/protocols/stun.c index cb1322e5eb8..c169a47db7e 100644 --- a/src/lib/protocols/stun.c +++ b/src/lib/protocols/stun.c @@ -203,7 +203,7 @@ void ndpi_search_stun(struct ndpi_detection_module_struct *ndpi_struct, struct n NDPI_LOG_INFO(ndpi_struct, "found Skype\n"); if((flow->protos.stun_ssl.stun.num_processed_pkts >= 8) || (flow->protos.stun_ssl.stun.num_binding_requests >= 4)) - ndpi_set_detected_protocol(ndpi_struct, flow, (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT, NDPI_PROTOCOL_SKYPE); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE); } else { NDPI_LOG_INFO(ndpi_struct, "found UDP stun\n"); /* Ummmmm we're in the TCP branch. This code looks bad */ ndpi_int_stun_add_connection(ndpi_struct, @@ -221,9 +221,10 @@ void ndpi_search_stun(struct ndpi_detection_module_struct *ndpi_struct, struct n if(flow->protos.stun_ssl.stun.is_skype) { NDPI_LOG_INFO(ndpi_struct, "Found Skype\n"); - + + /* flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT */ if((flow->protos.stun_ssl.stun.num_processed_pkts >= 8) || (flow->protos.stun_ssl.stun.num_binding_requests >= 4)) - ndpi_set_detected_protocol(ndpi_struct, flow, (flow->protos.stun_ssl.stun.num_binding_requests < 4) ? NDPI_PROTOCOL_SKYPE_CALL_IN : NDPI_PROTOCOL_SKYPE_CALL_OUT, NDPI_PROTOCOL_SKYPE); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE); } else { NDPI_LOG_INFO(ndpi_struct, "found UDP stun\n"); ndpi_int_stun_add_connection(ndpi_struct, diff --git a/tests/result/1kxun.pcap.out b/tests/result/1kxun.pcap.out index 5eead7a9c27..73834078175 100644 --- a/tests/result/1kxun.pcap.out +++ b/tests/result/1kxun.pcap.out @@ -1,7 +1,8 @@ -Unknown 24 6428 14 +Unknown 23 6265 13 DNS 2 378 1 HTTP 524 220123 9 MDNS 1 82 1 +NTP 1 90 1 NetBIOS 31 3589 8 SSDP 143 36951 13 DHCP 24 8208 5 @@ -12,8 +13,7 @@ DHCPV6 10 980 3 Facebook 19 6840 2 Google 3 176 1 GenericProtocol 433 311919 14 -Apple 1 90 1 -LLMNR 89 6799 47 +LLMNR 90 6962 48 1 TCP 192.168.115.8:49613 <-> 183.131.48.144:80 [proto: 7/HTTP][cat: Web/5][260 pkts/15070 bytes <-> 159 pkts/168623 bytes][Host: 183.131.48.144] 2 TCP 192.168.115.8:49600 <-> 106.187.35.246:80 [proto: 7.137/HTTP.GenericProtocol][cat: Streaming/17][18 pkts/1722 bytes <-> 51 pkts/61707 bytes][Host: pic.1kxun.com] @@ -91,45 +91,46 @@ LLMNR 89 6799 47 74 UDP [fe80::5d92:62a8:ebde:1319]:63659 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: isatap] 75 UDP [fe80::edf5:240a:c8c0:8312]:53962 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] 76 UDP [fe80::edf5:240a:c8c0:8312]:61603 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/172 bytes -> 0 pkts/0 bytes][Host: ro_x1c] - 77 UDP 192.168.5.49:61548 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 78 UDP 192.168.5.49:64568 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] - 79 UDP 192.168.3.95:51451 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 80 UDP 192.168.3.95:54888 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 81 UDP 192.168.3.95:58779 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] - 82 UDP 192.168.5.50:57143 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 83 UDP 192.168.5.50:62756 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 84 UDP 192.168.5.48:59797 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: kasper-mac] - 85 UDP 192.168.3.236:62069 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 86 UDP 192.168.3.236:65496 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] - 87 UDP 192.168.5.9:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 88 UDP 192.168.5.9:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 89 UDP 192.168.101.33:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 90 UDP 192.168.101.33:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] - 91 UDP 192.168.5.37:54506 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] - 92 UDP 192.168.5.37:56366 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] - 93 UDP 192.168.5.41:54470 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 94 UDP 192.168.5.44:58702 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 95 UDP 192.168.5.44:59571 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 96 UDP 192.168.5.57:64428 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] - 97 UDP 192.168.5.57:65150 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] - 98 UDP 192.168.3.236:51714 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] - 99 UDP 192.168.3.236:56043 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] - 100 UDP 192.168.5.47:53962 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: ro_x1c] - 101 UDP 192.168.5.47:61603 -> 224.0.0.252:5355 [proto: 87/RTP][cat: Media/1][2 pkts/132 bytes -> 0 pkts/0 bytes] - 102 TCP 192.168.5.16:53605 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][2 pkts/126 bytes -> 0 pkts/0 bytes] - 103 TCP 192.168.5.16:53622 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes <-> 1 pkts/60 bytes] - 104 UDP [fe80::f65c:89ff:fe89:e607]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][1 pkts/98 bytes -> 0 pkts/0 bytes] - 105 UDP 192.168.5.45:59461 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] - 106 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] - 107 UDP [fe80::e034:7be:d8f9:6197]:57143 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 108 UDP [fe80::e034:7be:d8f9:6197]:62756 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 109 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9.140/NTP.Apple][cat: Web/5][1 pkts/90 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.5.64:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/82 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.5.50:49766 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 112 UDP 192.168.5.50:50030 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] - 113 UDP 192.168.5.41:55593 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: kevin-pc] - 114 UDP 192.168.5.44:59062 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: jason-pc] - 115 UDP 192.168.3.236:59730 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: sonusav] + 77 UDP 192.168.119.2:43786 -> 255.255.255.255:5678 [proto: 154/LLMNR][cat: Network/14][1 pkts/163 bytes -> 0 pkts/0 bytes] + 78 UDP 192.168.5.49:61548 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 79 UDP 192.168.5.49:64568 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/150 bytes -> 0 pkts/0 bytes][Host: caesar-thinkpad] + 80 UDP 192.168.3.95:51451 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 81 UDP 192.168.3.95:54888 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 82 UDP 192.168.3.95:58779 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/144 bytes -> 0 pkts/0 bytes][Host: 小佛專機] + 83 UDP 192.168.5.50:57143 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 84 UDP 192.168.5.50:62756 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/142 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 85 UDP 192.168.5.48:59797 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/140 bytes -> 0 pkts/0 bytes][Host: kasper-mac] + 86 UDP 192.168.3.236:62069 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 87 UDP 192.168.3.236:65496 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: wangs-ltw] + 88 UDP 192.168.5.9:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 89 UDP 192.168.5.9:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 90 UDP 192.168.101.33:58456 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 91 UDP 192.168.101.33:62822 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/138 bytes -> 0 pkts/0 bytes][Host: joanna-pc] + 92 UDP 192.168.5.37:54506 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] + 93 UDP 192.168.5.37:56366 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: notebook] + 94 UDP 192.168.5.41:54470 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 95 UDP 192.168.5.44:58702 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 96 UDP 192.168.5.44:59571 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 97 UDP 192.168.5.57:64428 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] + 98 UDP 192.168.5.57:65150 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/136 bytes -> 0 pkts/0 bytes][Host: usher-pc] + 99 UDP 192.168.3.236:51714 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] + 100 UDP 192.168.3.236:56043 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: isatap] + 101 UDP 192.168.5.47:53962 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][2 pkts/132 bytes -> 0 pkts/0 bytes][Host: ro_x1c] + 102 UDP 192.168.5.47:61603 -> 224.0.0.252:5355 [proto: 87/RTP][cat: Media/1][2 pkts/132 bytes -> 0 pkts/0 bytes] + 103 TCP 192.168.5.16:53605 -> 68.233.253.133:80 [proto: 7/HTTP][cat: Web/5][2 pkts/126 bytes -> 0 pkts/0 bytes] + 104 TCP 192.168.5.16:53622 <-> 192.168.115.75:443 [proto: 91/SSL][cat: Web/5][1 pkts/60 bytes <-> 1 pkts/60 bytes] + 105 UDP [fe80::f65c:89ff:fe89:e607]:546 -> [ff02::1:2]:547 [proto: 103/DHCPV6][cat: Network/14][1 pkts/98 bytes -> 0 pkts/0 bytes] + 106 UDP 192.168.5.45:59461 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 107 UDP 192.168.5.45:59789 -> 192.168.255.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] + 108 UDP [fe80::e034:7be:d8f9:6197]:57143 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 109 UDP [fe80::e034:7be:d8f9:6197]:62756 -> [ff02::1:3]:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/91 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 110 UDP 192.168.5.16:123 -> 17.253.26.125:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.5.64:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][1 pkts/82 bytes -> 0 pkts/0 bytes] + 112 UDP 192.168.5.50:49766 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 113 UDP 192.168.5.50:50030 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/71 bytes -> 0 pkts/0 bytes][Host: charming-pc] + 114 UDP 192.168.5.41:55593 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: kevin-pc] + 115 UDP 192.168.5.44:59062 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/68 bytes -> 0 pkts/0 bytes][Host: jason-pc] + 116 UDP 192.168.3.236:59730 -> 224.0.0.252:5355 [proto: 154/LLMNR][cat: Network/14][1 pkts/67 bytes -> 0 pkts/0 bytes][Host: sonusav] Undetected flows: @@ -144,6 +145,5 @@ Undetected flows: 9 UDP 192.168.119.1:56861 -> 255.255.255.255:5678 [proto: 0/Unknown][1 pkts/177 bytes -> 0 pkts/0 bytes] 10 UDP 59.120.208.218:50151 -> 255.255.255.255:1947 [proto: 0/Unknown][2 pkts/164 bytes -> 0 pkts/0 bytes] 11 UDP 192.168.2.186:32768 -> 255.255.255.255:1947 [proto: 0/Unknown][2 pkts/164 bytes -> 0 pkts/0 bytes] - 12 UDP 192.168.119.2:43786 -> 255.255.255.255:5678 [proto: 0/Unknown][1 pkts/163 bytes -> 0 pkts/0 bytes] - 13 UDP 192.168.0.100:50925 -> 255.255.255.255:5678 [proto: 0/Unknown][1 pkts/142 bytes -> 0 pkts/0 bytes] - 14 UDP 59.120.208.212:32768 -> 255.255.255.255:1947 [proto: 0/Unknown][1 pkts/82 bytes -> 0 pkts/0 bytes] + 12 UDP 192.168.0.100:50925 -> 255.255.255.255:5678 [proto: 0/Unknown][1 pkts/142 bytes -> 0 pkts/0 bytes] + 13 UDP 59.120.208.212:32768 -> 255.255.255.255:1947 [proto: 0/Unknown][1 pkts/82 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/hangout.pcap.out b/tests/result/hangout.pcap.out index 430ecdcaec7..323e41d3660 100644 --- a/tests/result/hangout.pcap.out +++ b/tests/result/hangout.pcap.out @@ -1,3 +1,3 @@ -Google 19 2774 1 +GoogleHangout 19 2774 1 - 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201.126/GoogleHangout.Google][cat: Web/5][19 pkts/2774 bytes -> 0 pkts/0 bytes] + 1 UDP 74.125.134.127:19305 -> 10.89.61.13:56406 [proto: 201/GoogleHangout][cat: Chat/9][19 pkts/2774 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/nintendo.pcap.out b/tests/result/nintendo.pcap.out index c1b44147aca..6535e7cc5ee 100644 --- a/tests/result/nintendo.pcap.out +++ b/tests/result/nintendo.pcap.out @@ -1,6 +1,6 @@ ICMP 30 2100 2 -Nintendo 887 319888 11 -Amazon 79 11165 8 +Nintendo 890 320242 12 +Amazon 76 10811 7 1 UDP 192.168.12.114:55915 <-> 185.118.169.65:27520 [proto: 173/Nintendo][cat: Game/8][169 pkts/61414 bytes <-> 278 pkts/126260 bytes] 2 UDP 192.168.12.114:55915 <-> 93.237.131.235:56066 [proto: 173/Nintendo][cat: Game/8][122 pkts/48332 bytes <-> 35 pkts/5026 bytes] @@ -18,7 +18,7 @@ Amazon 79 11165 8 14 UDP 192.168.12.114:55915 <-> 35.158.74.61:10025 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes <-> 5 pkts/290 bytes] 15 UDP 192.168.12.114:18874 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] 16 UDP 192.168.12.114:51035 <-> 192.168.12.1:53 [proto: 5.173/DNS.Nintendo][cat: Game/8][1 pkts/110 bytes <-> 1 pkts/281 bytes][Host: e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com] - 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173.178/Nintendo.Amazon][cat: Web/5][3 pkts/354 bytes -> 0 pkts/0 bytes] + 17 UDP 192.168.12.114:52119 -> 35.158.74.61:33335 [proto: 173/Nintendo][cat: Game/8][3 pkts/354 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.12.114:55915 -> 35.158.74.61:33335 [proto: 178/Amazon][cat: Web/5][3 pkts/318 bytes -> 0 pkts/0 bytes] 19 UDP 192.168.12.114:55915 -> 52.10.205.177:34343 [proto: 178/Amazon][cat: Web/5][1 pkts/298 bytes -> 0 pkts/0 bytes] 20 UDP 192.168.12.114:55915 -> 35.158.74.61:33334 [proto: 178/Amazon][cat: Web/5][5 pkts/290 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype-conference-call.pcap.out b/tests/result/skype-conference-call.pcap.out index 3a7c34e1788..fd6dde8c409 100644 --- a/tests/result/skype-conference-call.pcap.out +++ b/tests/result/skype-conference-call.pcap.out @@ -1,3 +1,3 @@ -SkypeCallOut 200 39687 1 +SkypeCall 200 39687 1 - 1 UDP 192.168.2.20:49282 <-> 104.46.40.49:60642 [proto: 125.38/Skype.SkypeCallOut][cat: VoIP/10][133 pkts/24845 bytes <-> 67 pkts/14842 bytes] + 1 UDP 192.168.2.20:49282 <-> 104.46.40.49:60642 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][133 pkts/24845 bytes <-> 67 pkts/14842 bytes] diff --git a/tests/result/skype.pcap.out b/tests/result/skype.pcap.out index d02ced39b31..f1fef0ed856 100644 --- a/tests/result/skype.pcap.out +++ b/tests/result/skype.pcap.out @@ -1,30 +1,32 @@ Unknown 175 20913 11 DNS 2 267 1 MDNS 8 1736 2 +NTP 2 180 1 SSDP 101 38156 6 -SkypeCallIn 730 71378 170 +SkypeCall 730 71378 170 ICMP 8 656 1 IGMP 5 258 4 SSL 96 8876 7 Dropbox 38 17948 5 Skype 1409 253031 79 -Apple 17 2225 3 +Apple 3 168 1 AppleiCloud 88 20520 2 Spotify 5 430 1 MS_OneDrive 387 198090 1 +ApplePush 12 1877 1 1 TCP 192.168.1.34:50028 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][187 pkts/42539 bytes <-> 200 pkts/155551 bytes][server: *.gateway.messenger.live.com] 2 TCP 192.168.1.34:50108 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][231 pkts/60232 bytes <-> 241 pkts/104395 bytes] 3 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][79 pkts/29479 bytes -> 0 pkts/0 bytes] 4 TCP 192.168.1.34:50128 <-> 17.172.100.36:443 [proto: 91.143/SSL.AppleiCloud][cat: Web/5][43 pkts/9635 bytes <-> 43 pkts/10651 bytes][client: p05-keyvalueservice.icloud.com] - 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] + 5 TCP 192.168.1.34:50119 <-> 86.31.35.30:59621 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][62 pkts/6941 bytes <-> 38 pkts/5325 bytes] 6 UDP 192.168.1.92:50084 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][14 pkts/7281 bytes -> 0 pkts/0 bytes] 7 TCP 108.160.170.46:443 <-> 192.168.1.34:49445 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][8 pkts/1636 bytes <-> 8 pkts/4344 bytes] - 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] + 8 TCP 192.168.1.34:50117 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][24 pkts/3136 bytes <-> 19 pkts/2618 bytes] 9 TCP 192.168.1.34:50126 <-> 91.190.216.23:12350 [proto: 125/Skype][cat: VoIP/10][16 pkts/4788 bytes <-> 4 pkts/372 bytes] - 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] - 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] - 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] + 10 TCP 192.168.1.34:50138 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][19 pkts/2797 bytes <-> 13 pkts/2175 bytes] + 11 TCP 192.168.1.34:50118 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][18 pkts/2588 bytes <-> 13 pkts/2100 bytes] + 12 TCP 192.168.1.34:50139 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][15 pkts/2395 bytes <-> 8 pkts/1724 bytes] 13 TCP 192.168.1.34:50027 <-> 23.223.73.34:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][17 pkts/3605 bytes <-> 1 pkts/74 bytes][client: apps.skypeassets.com] 14 TCP 192.168.1.34:50029 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 15 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][6 pkts/3264 bytes -> 0 pkts/0 bytes] @@ -32,42 +34,42 @@ MS_OneDrive 387 198090 1 17 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] 18 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][5 pkts/2720 bytes -> 0 pkts/0 bytes] 19 TCP 192.168.1.34:50090 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/2140 bytes <-> 3 pkts/200 bytes][client: apps.skype.com] - 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] - 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238.140/ApplePush.Apple][cat: Web/5][6 pkts/1211 bytes <-> 6 pkts/666 bytes] + 20 TCP 192.168.1.34:50134 <-> 157.56.53.47:12350 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/1578 bytes <-> 4 pkts/342 bytes] + 21 TCP 17.143.160.22:5223 <-> 192.168.1.34:49447 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/1211 bytes <-> 6 pkts/666 bytes] 22 TCP 192.168.1.34:50091 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][13 pkts/1554 bytes <-> 3 pkts/200 bytes] - 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] + 23 TCP 192.168.1.34:50122 <-> 81.133.19.185:44431 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1090 bytes <-> 6 pkts/534 bytes] 24 TCP 192.168.1.34:50039 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][13 pkts/1392 bytes <-> 3 pkts/200 bytes] 25 TCP 192.168.1.34:50101 <-> 157.55.235.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1305 bytes <-> 3 pkts/285 bytes] 26 TCP 192.168.1.34:50037 <-> 157.55.56.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1218 bytes <-> 4 pkts/351 bytes] 27 TCP 192.168.1.34:50080 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:50111 <-> 91.190.216.125:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/955 bytes <-> 9 pkts/561 bytes] 29 TCP 192.168.1.34:50081 <-> 157.55.130.176:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1270 bytes <-> 3 pkts/243 bytes] - 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] - 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] - 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] + 30 TCP 192.168.1.34:50116 <-> 81.83.77.141:17639 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][15 pkts/1138 bytes <-> 4 pkts/372 bytes] + 31 TCP 192.168.1.34:50123 <-> 80.14.46.121:4415 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1075 bytes <-> 4 pkts/431 bytes] + 32 TCP 192.168.1.34:50075 <-> 213.199.179.142:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1100 bytes <-> 5 pkts/395 bytes] 33 TCP 192.168.1.34:50072 <-> 157.55.130.170:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1207 bytes <-> 3 pkts/277 bytes] 34 TCP 192.168.1.34:50066 <-> 65.55.223.12:443 [proto: 91/SSL][cat: Web/5][12 pkts/1221 bytes <-> 3 pkts/231 bytes] - 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] + 35 TCP 192.168.1.34:50137 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1062 bytes <-> 4 pkts/383 bytes] 36 TCP 192.168.1.34:50076 <-> 157.55.235.156:40014 [proto: 125/Skype][cat: VoIP/10][14 pkts/1083 bytes <-> 4 pkts/359 bytes] 37 TCP 192.168.1.34:50054 <-> 157.55.130.153:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1020 bytes <-> 4 pkts/421 bytes] - 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] + 38 TCP 192.168.1.34:50132 <-> 149.13.32.15:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/1010 bytes <-> 5 pkts/402 bytes] 39 TCP 192.168.1.34:50045 <-> 157.55.130.167:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1151 bytes <-> 3 pkts/260 bytes] - 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] - 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] + 40 TCP 192.168.1.34:50114 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1040 bytes <-> 4 pkts/362 bytes] + 41 TCP 192.168.1.34:50065 <-> 65.55.223.12:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/397 bytes] 42 TCP 192.168.1.34:50069 <-> 157.55.56.160:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/1050 bytes <-> 4 pkts/351 bytes] 43 TCP 192.168.1.34:50034 <-> 157.55.130.140:40033 [proto: 125/Skype][cat: VoIP/10][13 pkts/1010 bytes <-> 4 pkts/390 bytes] 44 TCP 192.168.1.34:50088 <-> 157.55.235.146:33033 [proto: 125/Skype][cat: VoIP/10][14 pkts/1085 bytes <-> 4 pkts/315 bytes] 45 TCP 192.168.1.34:50102 <-> 65.55.223.15:443 [proto: 91/SSL][cat: Web/5][11 pkts/1140 bytes <-> 3 pkts/250 bytes] 46 TCP 192.168.1.34:50092 <-> 157.55.130.155:40020 [proto: 125/Skype][cat: VoIP/10][13 pkts/975 bytes <-> 4 pkts/412 bytes] - 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] - 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] - 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] + 47 TCP 192.168.1.34:50115 <-> 86.31.35.30:59621 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/391 bytes] + 48 TCP 192.168.1.34:50098 <-> 65.55.223.15:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/995 bytes <-> 4 pkts/386 bytes] + 49 TCP 192.168.1.34:50130 <-> 212.161.8.36:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/380 bytes] 50 TCP 192.168.1.34:50079 <-> 213.199.179.142:443 [proto: 91/SSL][cat: Web/5][13 pkts/1176 bytes <-> 3 pkts/200 bytes] 51 TCP 192.168.1.34:50097 <-> 157.55.235.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/1000 bytes <-> 4 pkts/371 bytes] - 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] + 52 TCP 192.168.1.34:50026 <-> 65.55.223.33:40002 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/971 bytes <-> 4 pkts/399 bytes] 53 TCP 192.168.1.34:50033 <-> 157.55.56.170:40015 [proto: 125/Skype][cat: VoIP/10][13 pkts/977 bytes <-> 4 pkts/384 bytes] 54 TCP 192.168.1.34:50053 <-> 157.55.56.146:40030 [proto: 125/Skype][cat: VoIP/10][12 pkts/940 bytes <-> 5 pkts/415 bytes] - 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] + 55 TCP 192.168.1.34:50099 <-> 64.4.23.166:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/407 bytes] 56 TCP 192.168.1.34:50044 <-> 157.55.130.167:40031 [proto: 125/Skype][cat: VoIP/10][13 pkts/993 bytes <-> 4 pkts/360 bytes] 57 TCP 192.168.1.34:50051 <-> 157.55.130.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1074 bytes <-> 3 pkts/277 bytes] 58 TCP 192.168.1.34:50057 <-> 157.55.130.153:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1102 bytes <-> 3 pkts/247 bytes] @@ -81,26 +83,26 @@ MS_OneDrive 387 198090 1 66 TCP 192.168.1.34:50032 <-> 157.56.52.44:40032 [proto: 125/Skype][cat: VoIP/10][12 pkts/969 bytes <-> 4 pkts/337 bytes] 67 TCP 192.168.1.34:50094 <-> 157.55.130.155:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1039 bytes <-> 3 pkts/267 bytes] 68 TCP 192.168.1.34:50067 <-> 157.55.56.160:40027 [proto: 125/Skype][cat: VoIP/10][12 pkts/899 bytes <-> 5 pkts/406 bytes] - 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] + 69 TCP 192.168.1.34:50035 <-> 213.199.179.175:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/982 bytes <-> 4 pkts/322 bytes] 70 TCP 192.168.1.34:50063 <-> 111.221.74.38:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1002 bytes <-> 3 pkts/285 bytes] 71 TCP 192.168.1.34:50049 <-> 157.55.130.166:40021 [proto: 125/Skype][cat: VoIP/10][11 pkts/836 bytes <-> 5 pkts/442 bytes] 72 TCP 192.168.1.34:50086 <-> 111.221.77.142:40023 [proto: 125/Skype][cat: VoIP/10][11 pkts/841 bytes <-> 5 pkts/429 bytes] 73 TCP 192.168.1.34:50056 <-> 157.55.56.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][11 pkts/999 bytes <-> 4 pkts/266 bytes] 74 TCP 192.168.1.34:50038 <-> 157.55.130.140:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1032 bytes <-> 3 pkts/230 bytes] 75 TCP 192.168.1.34:50055 <-> 111.221.74.47:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/866 bytes <-> 5 pkts/396 bytes] - 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] - 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] + 76 TCP 192.168.1.34:50112 <-> 76.167.161.6:20274 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/411 bytes] + 77 TCP 192.168.1.34:50141 <-> 80.14.46.121:4415 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/994 bytes <-> 2 pkts/243 bytes] 78 TCP 192.168.1.34:50059 <-> 111.221.74.38:40015 [proto: 125/Skype][cat: VoIP/10][11 pkts/820 bytes <-> 5 pkts/416 bytes] 79 TCP 192.168.1.34:50046 <-> 157.55.130.150:40011 [proto: 125/Skype][cat: VoIP/10][11 pkts/843 bytes <-> 4 pkts/386 bytes] 80 TCP 192.168.1.34:50096 <-> 111.221.74.46:40027 [proto: 125/Skype][cat: VoIP/10][11 pkts/822 bytes <-> 4 pkts/390 bytes] 81 TCP 192.168.1.34:50058 <-> 111.221.74.47:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/857 bytes <-> 4 pkts/351 bytes] - 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] + 82 TCP 192.168.1.34:50113 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/827 bytes <-> 3 pkts/325 bytes] 83 TCP 192.168.1.34:50103 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][9 pkts/862 bytes <-> 3 pkts/285 bytes] - 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] + 84 TCP 192.168.1.34:50143 <-> 78.202.226.115:29059 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/935 bytes <-> 2 pkts/197 bytes] 85 TCP 192.168.1.34:50100 <-> 111.221.74.46:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/237 bytes] - 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] + 86 TCP 192.168.1.34:50135 <-> 76.167.161.6:20274 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/838 bytes <-> 3 pkts/270 bytes] 87 TCP 192.168.1.34:50087 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][9 pkts/822 bytes <-> 3 pkts/285 bytes] - 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] + 88 TCP 192.168.1.34:50136 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/814 bytes <-> 3 pkts/287 bytes] 89 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/908 bytes -> 0 pkts/0 bytes] 90 UDP 192.168.1.92:5353 -> 224.0.0.251:5353 [proto: 8/MDNS][cat: Network/14][4 pkts/828 bytes -> 0 pkts/0 bytes] 91 TCP 192.168.1.34:50125 <-> 91.190.218.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/417 bytes <-> 4 pkts/352 bytes] @@ -140,160 +142,160 @@ MS_OneDrive 387 198090 1 125 UDP 192.168.1.34:51066 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 126 UDP 192.168.1.34:56886 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 127 UDP 192.168.1.34:64560 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 76.185.207.12:45493 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 176.26.55.167:63773 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 130 UDP 192.168.1.34:58681 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 131 UDP 192.168.1.34:62454 <-> 192.168.1.1:53 [proto: 5.143/DNS.AppleiCloud][cat: Web/5][1 pkts/101 bytes <-> 1 pkts/133 bytes][Host: p05-keyvalueservice.icloud.com.akadns.net] - 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9.140/NTP.Apple][cat: Web/5][1 pkts/90 bytes <-> 1 pkts/90 bytes] + 132 UDP 192.168.1.34:123 <-> 17.253.48.245:123 [proto: 9/NTP][cat: System/18][1 pkts/90 bytes <-> 1 pkts/90 bytes] 133 UDP 192.168.1.34:51879 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 134 UDP 192.168.1.34:63321 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e4593.g.akamaiedge.net] 135 UDP 192.168.1.34:64085 <-> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/82 bytes <-> 1 pkts/98 bytes][Host: e7768.b.akamaiedge.net] 136 TCP 192.168.1.34:50024 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][2 pkts/108 bytes <-> 1 pkts/60 bytes] 137 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][2 pkts/92 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 64.4.23.145:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 65.55.223.26:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 65.55.223.33:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 157.55.56.168:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 157.55.130.146:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 157.55.130.154:40005 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 157.55.235.147:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 157.55.235.152:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 213.199.179.155:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 111.221.74.28:40014 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 111.221.77.155:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 111.221.77.159:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 111.221.77.172:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 157.55.130.156:40034 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 157.55.235.161:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 157.55.235.176:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.56.52.27:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.28:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 65.55.223.29:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 111.221.74.15:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 111.221.77.145:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 111.221.77.166:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 157.55.56.142:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.56.151:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.56.175:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 157.55.130.143:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 157.55.235.155:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 64.4.23.166:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 65.55.223.25:40028 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 65.55.223.43:40002 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 111.221.77.151:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 157.55.56.162:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 157.55.130.147:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.235.175:40008 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 213.199.179.150:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 111.221.74.12:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 111.221.74.48:40008 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 111.221.77.165:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 213.199.179.143:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 213.199.179.154:40034 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 65.55.223.28:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 111.221.74.40:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 157.56.52.26:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 213.199.179.165:40007 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 64.4.23.141:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 111.221.74.29:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 111.221.74.31:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 111.221.77.176:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 157.55.235.153:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 213.199.179.168:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 64.4.23.165:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 111.221.77.142:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 157.55.130.151:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 64.4.23.168:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 65.55.223.21:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 65.55.223.45:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 111.221.74.44:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 111.221.77.153:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 157.55.56.148:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.235.157:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 213.199.179.170:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 64.4.23.150:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 64.4.23.159:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 65.55.223.17:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 111.221.74.17:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 111.221.74.32:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 111.221.74.42:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 157.55.56.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 157.55.56.161:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 157.55.130.155:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 157.55.130.165:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 157.55.235.142:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 157.56.52.33:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 213.199.179.162:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 64.4.23.148:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 65.55.223.41:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 111.221.77.148:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 157.55.235.160:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 157.56.52.37:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 64.4.23.140:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 111.221.77.160:40028 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 111.221.77.168:40007 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.55.56.145:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 157.55.56.165:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 157.55.235.145:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 65.55.223.24:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 111.221.74.16:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 111.221.77.141:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 111.221.77.149:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 248 UDP 192.168.1.34:13021 -> 157.55.130.160:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 249 UDP 192.168.1.34:13021 -> 157.55.130.172:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 250 UDP 192.168.1.34:13021 -> 157.56.52.45:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 65.55.223.15:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 256 UDP 192.168.1.34:13021 -> 65.55.223.38:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 257 UDP 192.168.1.34:13021 -> 65.55.223.44:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 258 UDP 192.168.1.34:13021 -> 111.221.74.25:40028 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 259 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 260 UDP 192.168.1.34:13021 -> 157.55.130.144:40034 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 261 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 262 UDP 192.168.1.34:13021 -> 213.199.179.145:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 263 UDP 192.168.1.34:13021 -> 65.55.223.20:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 264 UDP 192.168.1.34:13021 -> 111.221.74.24:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 265 UDP 192.168.1.34:13021 -> 111.221.77.140:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 266 UDP 192.168.1.34:13021 -> 157.55.56.166:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 267 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 268 UDP 192.168.1.34:13021 -> 157.55.235.158:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 269 UDP 192.168.1.34:13021 -> 157.55.235.159:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 270 UDP 192.168.1.34:13021 -> 157.55.235.173:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 271 UDP 192.168.1.34:13021 -> 157.56.52.21:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 272 UDP 192.168.1.34:13021 -> 157.56.52.24:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 273 UDP 192.168.1.34:13021 -> 157.56.52.47:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 274 UDP 192.168.1.34:13021 -> 213.199.179.152:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] 275 IGMP 192.168.1.1:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 276 IGMP 192.168.1.92:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 277 UDP 192.168.1.34:13021 -> 65.55.223.39:443 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 278 UDP 192.168.1.34:13021 -> 71.62.0.85:33647 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 279 UDP 192.168.1.34:13021 -> 106.188.249.186:15120 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 280 UDP 192.168.1.34:13021 -> 157.55.130.145:443 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 281 UDP 192.168.1.34:13021 -> 176.97.100.249:26635 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] 282 IGMP 192.168.1.34:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/skype_no_unknown.pcap.out b/tests/result/skype_no_unknown.pcap.out index bbddd568fd5..f83f6b55985 100644 --- a/tests/result/skype_no_unknown.pcap.out +++ b/tests/result/skype_no_unknown.pcap.out @@ -3,21 +3,22 @@ DNS 2 267 1 MDNS 3 400 2 NetBIOS 22 3106 7 SSDP 40 14100 3 -SkypeCallIn 454 39996 164 +SkypeCall 454 39996 164 ICMP 4 328 1 IGMP 4 226 4 SSL 79 7742 6 Dropbox 16 7342 5 Skype 840 150346 60 -Apple 84 20699 2 +Apple 76 19581 1 MS_OneDrive 348 181687 1 +ApplePush 8 1118 1 1 TCP 192.168.1.34:51230 <-> 157.56.126.211:443 [proto: 91.221/SSL.MS_OneDrive][cat: Cloud/13][166 pkts/39042 bytes <-> 182 pkts/142645 bytes][server: *.gateway.messenger.live.com] 2 TCP 192.168.1.34:51279 <-> 111.221.74.48:40008 [proto: 125/Skype][cat: VoIP/10][101 pkts/30681 bytes <-> 98 pkts/59934 bytes] 3 TCP 192.168.1.34:51227 <-> 17.172.100.36:443 [proto: 91.140/SSL.Apple][cat: Web/5][38 pkts/9082 bytes <-> 38 pkts/10499 bytes] 4 UDP 192.168.0.254:1025 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][36 pkts/13402 bytes -> 0 pkts/0 bytes] - 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] - 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] + 5 TCP 192.168.1.34:51292 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][17 pkts/2686 bytes <-> 13 pkts/2218 bytes] + 6 TCP 192.168.1.34:51293 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/2194 bytes <-> 8 pkts/1711 bytes] 7 TCP 192.168.1.34:51231 <-> 23.206.33.166:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][16 pkts/3461 bytes <-> 1 pkts/74 bytes][client: apps.skype.com] 8 TCP 192.168.1.34:51297 <-> 91.190.216.24:12350 [proto: 125/Skype][cat: VoIP/10][12 pkts/3242 bytes <-> 3 pkts/290 bytes] 9 TCP 108.160.163.108:443 <-> 192.168.1.34:51222 [proto: 91.121/SSL.Dropbox][cat: Cloud/13][4 pkts/818 bytes <-> 4 pkts/2172 bytes] @@ -29,52 +30,52 @@ MS_OneDrive 348 181687 1 15 TCP 192.168.1.34:51239 <-> 65.55.223.45:443 [proto: 91/SSL][cat: Web/5][12 pkts/1291 bytes <-> 3 pkts/242 bytes] 16 TCP 192.168.1.34:51274 <-> 157.55.235.152:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1235 bytes <-> 3 pkts/285 bytes] 17 TCP 192.168.1.34:51260 <-> 157.55.130.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1249 bytes <-> 3 pkts/265 bytes] - 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] - 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] - 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] + 18 TCP 192.168.1.34:51258 <-> 213.199.179.176:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1104 bytes <-> 5 pkts/392 bytes] + 19 TCP 192.168.1.34:51269 <-> 213.199.179.175:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1106 bytes <-> 5 pkts/385 bytes] + 20 TCP 192.168.1.34:51290 <-> 5.248.186.221:31010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1070 bytes <-> 4 pkts/420 bytes] 21 TCP 192.168.1.34:51234 <-> 157.55.235.147:40001 [proto: 125/Skype][cat: VoIP/10][14 pkts/1117 bytes <-> 4 pkts/337 bytes] 22 TCP 192.168.1.34:51253 <-> 64.4.23.166:443 [proto: 91/SSL][cat: Web/5][11 pkts/1164 bytes <-> 3 pkts/268 bytes] 23 TCP 192.168.1.34:51247 <-> 157.56.52.44:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1077 bytes <-> 4 pkts/351 bytes] 24 TCP 192.168.1.34:51257 <-> 157.55.235.170:40032 [proto: 125/Skype][cat: VoIP/10][14 pkts/1059 bytes <-> 4 pkts/367 bytes] 25 TCP 192.168.1.34:51277 <-> 157.55.235.156:40026 [proto: 125/Skype][cat: VoIP/10][13 pkts/1011 bytes <-> 4 pkts/415 bytes] - 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] + 26 TCP 192.168.1.34:51305 <-> 149.13.32.15:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][14 pkts/1093 bytes <-> 4 pkts/333 bytes] 27 TCP 192.168.1.34:51271 <-> 213.199.179.175:443 [proto: 91/SSL][cat: Web/5][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 28 TCP 192.168.1.34:51280 <-> 157.55.235.146:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1130 bytes <-> 3 pkts/285 bytes] 29 TCP 192.168.1.34:51281 <-> 157.55.235.156:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][12 pkts/1095 bytes <-> 3 pkts/285 bytes] 30 TCP 192.168.1.34:51240 <-> 111.221.74.45:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1022 bytes <-> 4 pkts/351 bytes] - 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] + 31 TCP 192.168.1.34:51289 <-> 71.238.7.203:18767 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/991 bytes <-> 4 pkts/378 bytes] 32 TCP 192.168.1.34:51272 <-> 157.55.235.152:40029 [proto: 125/Skype][cat: VoIP/10][13 pkts/1006 bytes <-> 4 pkts/361 bytes] 33 TCP 192.168.1.34:51250 <-> 111.221.77.175:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/1012 bytes <-> 4 pkts/351 bytes] - 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] + 34 TCP 192.168.1.34:51235 <-> 65.55.223.45:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][13 pkts/976 bytes <-> 4 pkts/365 bytes] 35 TCP 192.168.1.34:51237 <-> 157.55.130.176:40022 [proto: 125/Skype][cat: VoIP/10][13 pkts/986 bytes <-> 4 pkts/344 bytes] 36 TCP 192.168.1.34:51276 <-> 157.55.235.146:40021 [proto: 125/Skype][cat: VoIP/10][13 pkts/981 bytes <-> 4 pkts/348 bytes] 37 TCP 192.168.1.34:51255 <-> 157.55.130.142:40005 [proto: 125/Skype][cat: VoIP/10][13 pkts/1004 bytes <-> 4 pkts/318 bytes] - 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] + 38 TCP 192.168.1.34:51251 <-> 64.4.23.166:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/948 bytes <-> 4 pkts/349 bytes] 39 TCP 192.168.1.34:51229 <-> 157.56.52.28:40009 [proto: 125/Skype][cat: VoIP/10][12 pkts/951 bytes <-> 4 pkts/341 bytes] 40 TCP 192.168.1.34:51248 <-> 111.221.77.175:40030 [proto: 125/Skype][cat: VoIP/10][11 pkts/858 bytes <-> 5 pkts/426 bytes] 41 TCP 192.168.1.34:51246 <-> 157.56.52.44:40020 [proto: 125/Skype][cat: VoIP/10][11 pkts/856 bytes <-> 5 pkts/409 bytes] - 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] + 42 TCP 192.168.1.34:51288 <-> 76.167.161.6:20274 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/861 bytes <-> 4 pkts/397 bytes] 43 TCP 192.168.1.34:51236 <-> 111.221.74.45:40008 [proto: 125/Skype][cat: VoIP/10][11 pkts/844 bytes <-> 5 pkts/413 bytes] 44 TCP 192.168.1.34:51282 <-> 64.4.23.159:443 [proto: 91/SSL][cat: Web/5][10 pkts/972 bytes <-> 3 pkts/285 bytes] 45 TCP 192.168.1.34:51259 <-> 111.221.77.142:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/902 bytes <-> 4 pkts/351 bytes] 46 TCP 192.168.1.34:51256 <-> 111.221.77.142:40013 [proto: 125/Skype][cat: VoIP/10][11 pkts/815 bytes <-> 5 pkts/423 bytes] - 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] - 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] + 47 TCP 192.168.1.34:51291 <-> 81.83.77.141:17639 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/942 bytes <-> 3 pkts/284 bytes] + 48 TCP 192.168.1.34:51278 <-> 64.4.23.159:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/832 bytes <-> 4 pkts/387 bytes] 49 TCP 192.168.1.34:51268 <-> 111.221.74.18:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/852 bytes <-> 4 pkts/351 bytes] - 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] - 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] + 50 TCP 192.168.1.34:51309 <-> 149.13.32.15:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/916 bytes <-> 3 pkts/281 bytes] + 51 TCP 192.168.1.34:51316 <-> 149.13.32.15:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/862 bytes <-> 3 pkts/314 bytes] 52 TCP 192.168.1.34:51267 <-> 111.221.74.18:40025 [proto: 125/Skype][cat: VoIP/10][10 pkts/785 bytes <-> 4 pkts/378 bytes] 53 TCP 192.168.1.34:51232 <-> 157.56.52.28:443 [proto: 91.125/SSL.Skype][cat: VoIP/10][10 pkts/872 bytes <-> 3 pkts/285 bytes] - 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] - 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] + 54 TCP 192.168.1.34:51298 <-> 82.224.110.241:38895 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][12 pkts/931 bytes <-> 2 pkts/219 bytes] + 55 TCP 192.168.1.34:51313 <-> 212.161.8.36:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/855 bytes <-> 3 pkts/287 bytes] 56 UDP 192.168.1.1:137 <-> 192.168.1.34:137 [proto: 10/NetBIOS][cat: System/18][6 pkts/958 bytes <-> 2 pkts/184 bytes] - 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] - 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238.140/ApplePush.Apple][cat: Web/5][4 pkts/674 bytes <-> 4 pkts/444 bytes] + 57 TCP 192.168.1.34:51311 <-> 93.79.224.176:14506 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][11 pkts/848 bytes <-> 3 pkts/286 bytes] + 58 TCP 17.143.160.149:5223 <-> 192.168.1.34:50407 [proto: 238/ApplePush][cat: Cloud/13][4 pkts/674 bytes <-> 4 pkts/444 bytes] 59 UDP 192.168.1.34:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 60 UDP 192.168.1.34:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 61 UDP 192.168.1.92:17500 -> 192.168.1.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 62 UDP 192.168.1.92:17500 -> 255.255.255.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] - 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] + 63 TCP 192.168.1.34:51318 <-> 212.161.8.36:13392 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][7 pkts/571 bytes <-> 3 pkts/286 bytes] 64 UDP 192.168.1.34:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][7 pkts/680 bytes -> 0 pkts/0 bytes] 65 TCP 192.168.1.34:51299 <-> 91.190.216.125:12350 [proto: 125/Skype][cat: VoIP/10][6 pkts/353 bytes <-> 5 pkts/306 bytes] 66 UDP 192.168.1.34:58631 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][8 pkts/648 bytes -> 0 pkts/0 bytes][Host: conn.skype.akadns.net] @@ -107,8 +108,8 @@ MS_OneDrive 348 181687 1 93 UDP 192.168.1.34:58061 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 94 UDP 192.168.1.34:59237 -> 239.255.255.250:1900 [proto: 12/SSDP][cat: System/18][2 pkts/349 bytes -> 0 pkts/0 bytes] 95 ICMP 192.168.1.1:0 -> 192.168.1.34:0 [proto: 81/ICMP][cat: Network/14][4 pkts/328 bytes -> 0 pkts/0 bytes] - 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] - 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 96 UDP 192.168.1.34:13021 -> 83.31.12.173:23939 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] + 97 UDP 192.168.1.34:13021 -> 174.49.171.224:32011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][5 pkts/300 bytes -> 0 pkts/0 bytes] 98 UDP 192.168.1.34:57694 <-> 192.168.1.1:53 [proto: 5/DNS][cat: Network/14][1 pkts/101 bytes <-> 1 pkts/166 bytes][Host: db3msgr5011709.gateway.messenger.live.com] 99 UDP [fe80::c62c:3ff:fe06:49fe]:5353 -> [ff02::fb]:5353 [proto: 8/MDNS][cat: Network/14][2 pkts/258 bytes -> 0 pkts/0 bytes] 100 UDP 192.168.1.92:138 -> 192.168.1.255:138 [proto: 10/NetBIOS][cat: System/18][1 pkts/216 bytes -> 0 pkts/0 bytes] @@ -120,153 +121,153 @@ MS_OneDrive 348 181687 1 106 UDP 192.168.1.92:137 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 107 UDP 192.168.1.92:53826 -> 192.168.1.255:137 [proto: 10/NetBIOS][cat: System/18][1 pkts/92 bytes -> 0 pkts/0 bytes] 108 UDP 192.168.1.34:61016 -> 192.168.1.1:53 [proto: 5.125/DNS.Skype][cat: VoIP/10][1 pkts/80 bytes -> 0 pkts/0 bytes][Host: apps.skypeassets.com] - 109 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 110 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 111 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 112 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 113 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 114 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 115 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 116 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 117 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 118 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 119 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 120 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] - 121 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 122 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 123 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 124 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 125 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 126 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 127 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 128 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] - 129 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 130 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 131 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 132 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 133 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 134 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 135 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 136 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 137 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 138 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 139 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] - 140 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 141 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 142 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 143 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 144 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 145 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 146 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 147 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 148 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 149 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 150 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 151 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 152 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] - 153 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 154 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 155 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 156 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 157 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 158 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 159 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] - 160 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 161 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 162 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 163 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 164 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 165 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] - 166 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 167 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 168 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 169 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 170 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 171 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 172 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] - 173 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 174 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 175 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 176 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 177 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 178 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 179 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 180 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 181 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 182 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 183 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 184 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] - 185 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 186 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 187 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 188 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 189 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 190 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 191 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 192 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 193 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] - 194 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 195 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 196 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 197 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 198 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 199 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 200 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 201 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 202 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 203 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] - 204 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 205 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 206 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 208 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] - 209 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 210 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 211 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 212 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 213 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 214 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] - 215 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 216 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 217 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 218 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 219 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 220 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 221 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 222 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 223 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 224 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 225 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 226 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 227 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 228 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 229 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] - 230 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 231 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 232 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 233 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 234 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 235 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 236 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 237 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 238 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] - 239 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 240 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 241 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 242 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 243 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 244 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 245 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 246 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] - 247 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 109 UDP 192.168.1.34:13021 -> 64.4.23.148:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 110 UDP 192.168.1.34:13021 -> 64.4.23.171:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 111 UDP 192.168.1.34:13021 -> 65.55.223.27:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 112 UDP 192.168.1.34:13021 -> 111.221.74.40:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 113 UDP 192.168.1.34:13021 -> 111.221.77.151:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 114 UDP 192.168.1.34:13021 -> 111.221.77.173:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 115 UDP 192.168.1.34:13021 -> 157.55.56.147:40014 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 116 UDP 192.168.1.34:13021 -> 157.55.130.167:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 117 UDP 192.168.1.34:13021 -> 157.55.235.144:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 118 UDP 192.168.1.34:13021 -> 157.56.52.15:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 119 UDP 192.168.1.34:13021 -> 213.199.179.141:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 120 UDP 192.168.1.34:13021 -> 213.199.179.156:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/79 bytes -> 0 pkts/0 bytes] + 121 UDP 192.168.1.34:13021 -> 64.4.23.143:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 122 UDP 192.168.1.34:13021 -> 111.221.74.28:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 123 UDP 192.168.1.34:13021 -> 111.221.77.170:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 124 UDP 192.168.1.34:13021 -> 157.56.52.39:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 125 UDP 192.168.1.34:13021 -> 157.56.52.43:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 126 UDP 192.168.1.34:13021 -> 213.199.179.143:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 127 UDP 192.168.1.34:13021 -> 213.199.179.154:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 128 UDP 192.168.1.34:13021 -> 213.199.179.165:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/78 bytes -> 0 pkts/0 bytes] + 129 UDP 192.168.1.34:13021 -> 65.55.223.15:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 130 UDP 192.168.1.34:13021 -> 65.55.223.24:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 131 UDP 192.168.1.34:13021 -> 65.55.223.32:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 132 UDP 192.168.1.34:13021 -> 65.55.223.43:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 133 UDP 192.168.1.34:13021 -> 111.221.74.20:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 134 UDP 192.168.1.34:13021 -> 111.221.77.154:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 135 UDP 192.168.1.34:13021 -> 157.55.130.149:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 136 UDP 192.168.1.34:13021 -> 157.55.235.168:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 137 UDP 192.168.1.34:13021 -> 157.56.52.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 138 UDP 192.168.1.34:13021 -> 157.56.52.20:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 139 UDP 192.168.1.34:13021 -> 213.199.179.160:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/77 bytes -> 0 pkts/0 bytes] + 140 UDP 192.168.1.34:13021 -> 64.4.23.158:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 141 UDP 192.168.1.34:13021 -> 64.4.23.173:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 142 UDP 192.168.1.34:13021 -> 65.55.223.42:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 143 UDP 192.168.1.34:13021 -> 65.55.223.44:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 144 UDP 192.168.1.34:13021 -> 111.221.74.33:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 145 UDP 192.168.1.34:13021 -> 111.221.77.165:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 146 UDP 192.168.1.34:13021 -> 157.55.56.140:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 147 UDP 192.168.1.34:13021 -> 157.55.56.170:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 148 UDP 192.168.1.34:13021 -> 157.55.130.165:40028 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 149 UDP 192.168.1.34:13021 -> 157.55.130.170:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 150 UDP 192.168.1.34:13021 -> 157.55.235.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 151 UDP 192.168.1.34:13021 -> 157.56.52.25:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 152 UDP 192.168.1.34:13021 -> 213.199.179.172:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/76 bytes -> 0 pkts/0 bytes] + 153 UDP 192.168.1.34:13021 -> 64.4.23.165:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 154 UDP 192.168.1.34:13021 -> 111.221.77.149:40016 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 155 UDP 192.168.1.34:13021 -> 157.55.235.148:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 156 UDP 192.168.1.34:13021 -> 157.56.52.13:40021 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 157 UDP 192.168.1.34:13021 -> 157.56.52.38:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 158 UDP 192.168.1.34:13021 -> 157.56.52.42:40005 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 159 UDP 192.168.1.34:13021 -> 213.199.179.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/75 bytes -> 0 pkts/0 bytes] + 160 UDP 192.168.1.34:13021 -> 64.4.23.155:40004 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 161 UDP 192.168.1.34:13021 -> 65.55.223.22:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 162 UDP 192.168.1.34:13021 -> 65.55.223.28:40014 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 163 UDP 192.168.1.34:13021 -> 65.55.223.33:40002 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 164 UDP 192.168.1.34:13021 -> 157.55.235.155:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 165 UDP 192.168.1.34:13021 -> 157.55.235.175:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/74 bytes -> 0 pkts/0 bytes] + 166 UDP 192.168.1.34:13021 -> 64.4.23.145:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 167 UDP 192.168.1.34:13021 -> 111.221.74.19:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 168 UDP 192.168.1.34:13021 -> 111.221.74.34:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 169 UDP 192.168.1.34:13021 -> 157.55.130.146:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 170 UDP 192.168.1.34:13021 -> 157.55.235.158:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 171 UDP 192.168.1.34:13021 -> 157.55.235.176:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 172 UDP 192.168.1.34:13021 -> 213.199.179.149:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/73 bytes -> 0 pkts/0 bytes] + 173 UDP 192.168.1.34:13021 -> 64.4.23.142:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 174 UDP 192.168.1.34:13021 -> 111.221.74.24:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 175 UDP 192.168.1.34:13021 -> 111.221.77.159:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 176 UDP 192.168.1.34:13021 -> 157.55.56.142:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 177 UDP 192.168.1.34:13021 -> 157.55.56.145:40008 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 178 UDP 192.168.1.34:13021 -> 157.55.130.140:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 179 UDP 192.168.1.34:13021 -> 157.55.130.148:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 180 UDP 192.168.1.34:13021 -> 157.55.130.152:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 181 UDP 192.168.1.34:13021 -> 157.55.130.173:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 182 UDP 192.168.1.34:13021 -> 157.55.235.174:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 183 UDP 192.168.1.34:13021 -> 157.56.52.27:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 184 UDP 192.168.1.34:13021 -> 213.199.179.173:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/72 bytes -> 0 pkts/0 bytes] + 185 UDP 192.168.1.34:13021 -> 64.4.23.149:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 186 UDP 192.168.1.34:13021 -> 65.55.223.13:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 187 UDP 192.168.1.34:13021 -> 111.221.74.15:40026 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 188 UDP 192.168.1.34:13021 -> 157.55.56.146:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 189 UDP 192.168.1.34:13021 -> 157.55.130.150:40007 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 190 UDP 192.168.1.34:13021 -> 157.55.130.171:40012 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 191 UDP 192.168.1.34:13021 -> 157.55.235.143:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 192 UDP 192.168.1.34:13021 -> 157.56.52.33:40002 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 193 UDP 192.168.1.34:13021 -> 213.199.179.174:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/71 bytes -> 0 pkts/0 bytes] + 194 UDP 192.168.1.34:13021 -> 64.4.23.154:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 195 UDP 192.168.1.34:13021 -> 65.55.223.16:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 196 UDP 192.168.1.34:13021 -> 65.55.223.17:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 197 UDP 192.168.1.34:13021 -> 65.55.223.65:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 198 UDP 192.168.1.34:13021 -> 111.221.74.27:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 199 UDP 192.168.1.34:13021 -> 111.221.74.44:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 200 UDP 192.168.1.34:13021 -> 111.221.77.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 201 UDP 192.168.1.34:13021 -> 111.221.77.160:40016 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 202 UDP 192.168.1.34:13021 -> 157.56.52.24:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 203 UDP 192.168.1.34:13021 -> 213.199.179.140:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/70 bytes -> 0 pkts/0 bytes] + 204 UDP 192.168.1.34:13021 -> 64.4.23.151:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 205 UDP 192.168.1.34:13021 -> 64.4.23.176:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 206 UDP 192.168.1.34:13021 -> 157.55.130.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 207 UDP 192.168.1.34:13021 -> 157.55.235.172:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 208 UDP 192.168.1.34:13021 -> 213.199.179.144:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/69 bytes -> 0 pkts/0 bytes] + 209 UDP 192.168.1.34:13021 -> 111.221.77.145:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 210 UDP 192.168.1.34:13021 -> 157.55.56.150:40014 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 211 UDP 192.168.1.34:13021 -> 157.55.130.175:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 212 UDP 192.168.1.34:13021 -> 157.55.235.160:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 213 UDP 192.168.1.34:13021 -> 157.56.52.19:40020 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 214 UDP 192.168.1.34:13021 -> 213.199.179.146:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/68 bytes -> 0 pkts/0 bytes] + 215 UDP 192.168.1.34:13021 -> 64.4.23.140:40003 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 216 UDP 192.168.1.34:13021 -> 65.55.223.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 217 UDP 192.168.1.34:13021 -> 65.55.223.18:40025 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 218 UDP 192.168.1.34:13021 -> 111.221.74.18:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 219 UDP 192.168.1.34:13021 -> 111.221.74.42:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 220 UDP 192.168.1.34:13021 -> 111.221.74.43:40001 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 221 UDP 192.168.1.34:13021 -> 111.221.74.46:40027 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 222 UDP 192.168.1.34:13021 -> 111.221.77.143:40022 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 223 UDP 192.168.1.34:13021 -> 157.55.56.161:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 224 UDP 192.168.1.34:13021 -> 157.55.56.167:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 225 UDP 192.168.1.34:13021 -> 157.55.130.144:40016 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 226 UDP 192.168.1.34:13021 -> 157.55.130.160:40008 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 227 UDP 192.168.1.34:13021 -> 157.55.235.166:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 228 UDP 192.168.1.34:13021 -> 157.56.52.12:40031 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 229 UDP 192.168.1.34:13021 -> 157.56.52.29:40010 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/67 bytes -> 0 pkts/0 bytes] + 230 UDP 192.168.1.34:13021 -> 64.4.23.146:33033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 231 UDP 192.168.1.34:13021 -> 64.4.23.170:40011 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 232 UDP 192.168.1.34:13021 -> 65.55.223.20:40023 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 233 UDP 192.168.1.34:13021 -> 157.55.56.143:40018 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 234 UDP 192.168.1.34:13021 -> 157.55.130.154:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 235 UDP 192.168.1.34:13021 -> 157.55.235.162:40033 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 236 UDP 192.168.1.34:13021 -> 157.55.235.171:40006 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 237 UDP 192.168.1.34:13021 -> 157.56.52.16:40032 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 238 UDP 192.168.1.34:13021 -> 157.56.52.17:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/66 bytes -> 0 pkts/0 bytes] + 239 UDP 192.168.1.34:13021 -> 111.221.74.13:40009 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 240 UDP 192.168.1.34:13021 -> 111.221.74.38:40015 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 241 UDP 192.168.1.34:13021 -> 111.221.77.171:40030 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 242 UDP 192.168.1.34:13021 -> 157.55.130.156:40019 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 243 UDP 192.168.1.34:13021 -> 157.55.130.157:40013 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 244 UDP 192.168.1.34:13021 -> 157.55.130.159:40016 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 245 UDP 192.168.1.34:13021 -> 157.55.235.167:40029 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 246 UDP 192.168.1.34:13021 -> 157.56.52.40:40017 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] + 247 UDP 192.168.1.34:13021 -> 213.199.179.145:40024 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/64 bytes -> 0 pkts/0 bytes] 248 IGMP 192.168.1.219:0 -> 224.0.0.22:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 249 IGMP 192.168.1.219:0 -> 233.89.188.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] 250 IGMP 192.168.1.229:0 -> 224.0.0.251:0 [proto: 82/IGMP][cat: Network/14][1 pkts/60 bytes -> 0 pkts/0 bytes] - 251 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 252 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 253 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 254 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] - 255 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125.49/Skype.SkypeCallIn][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 251 UDP 192.168.1.34:13021 -> 111.221.74.14:443 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 252 UDP 192.168.1.34:13021 -> 133.236.67.25:49195 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 253 UDP 192.168.1.34:13021 -> 157.55.235.141:443 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 254 UDP 192.168.1.34:13021 -> 189.138.161.88:19521 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] + 255 UDP 192.168.1.34:13021 -> 189.188.134.174:22436 [proto: 125.38/Skype.SkypeCall][cat: VoIP/10][1 pkts/60 bytes -> 0 pkts/0 bytes] 256 IGMP 192.168.0.254:0 -> 224.0.0.1:0 [proto: 82/IGMP][cat: Network/14][1 pkts/46 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/whatsapp_login_call.pcap.out b/tests/result/whatsapp_login_call.pcap.out index 701215a49e0..666b3d70ae4 100644 --- a/tests/result/whatsapp_login_call.pcap.out +++ b/tests/result/whatsapp_login_call.pcap.out @@ -4,14 +4,14 @@ MDNS 8 952 4 DHCP 10 3420 1 ICMP 10 700 1 SSL 8 589 2 -Facebook 44 7818 2 Dropbox 4 2176 1 -Apple 127 28102 20 +Apple 105 22176 19 WhatsApp 182 25154 2 Spotify 3 258 1 Messenger 70 9464 14 -WhatsAppVoice 662 83338 2 +WhatsAppVoice 706 91156 4 AppleStore 85 28087 2 +ApplePush 22 5926 1 1 UDP 192.168.2.4:51518 <-> 91.253.176.65:9344 [proto: 189/WhatsAppVoice][cat: VoIP/10][186 pkts/27025 bytes <-> 278 pkts/25895 bytes] 2 UDP 192.168.2.4:52794 <-> 91.253.176.65:9665 [proto: 189/WhatsAppVoice][cat: VoIP/10][141 pkts/17530 bytes <-> 57 pkts/12888 bytes] @@ -19,10 +19,10 @@ AppleStore 85 28087 2 4 TCP 192.168.2.4:49204 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][29 pkts/11770 bytes <-> 24 pkts/6612 bytes][client: p53-buy.itunes.apple.com] 5 TCP 192.168.2.4:49201 <-> 17.178.104.12:443 [proto: 91.140/SSL.Apple][cat: Web/5][21 pkts/7644 bytes <-> 17 pkts/9576 bytes][client: query.ess.apple.com][server: *.ess.apple.com] 6 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.224/SSL.AppleStore][cat: SoftwareUpdate/19][17 pkts/6166 bytes <-> 15 pkts/3539 bytes][client: p53-buy.itunes.apple.com] - 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238.140/ApplePush.Apple][cat: Web/5][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] - 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189.119/WhatsAppVoice.Facebook][cat: SocialNetwork/6][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] + 7 TCP 192.168.2.4:49193 <-> 17.110.229.14:5223 [proto: 238/ApplePush][cat: Cloud/13][11 pkts/4732 bytes <-> 11 pkts/1194 bytes] + 8 UDP 192.168.2.4:51518 <-> 31.13.93.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][12 pkts/2341 bytes <-> 12 pkts/2484 bytes] 9 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][10 pkts/3420 bytes -> 0 pkts/0 bytes][Host: lucas-imac] - 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189.119/WhatsAppVoice.Facebook][cat: SocialNetwork/6][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] + 10 UDP 192.168.2.4:52794 <-> 31.13.84.48:3478 [proto: 189/WhatsAppVoice][cat: VoIP/10][9 pkts/1842 bytes <-> 11 pkts/1151 bytes] 11 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][4 pkts/2176 bytes -> 0 pkts/0 bytes] 12 TCP 192.168.2.4:49199 <-> 17.172.100.70:993 [proto: 51.140/IMAPS.Apple][cat: Web/5][9 pkts/1130 bytes <-> 8 pkts/868 bytes] 13 ICMP 192.168.2.4:0 -> 91.253.176.65:0 [proto: 81/ICMP][cat: Network/14][10 pkts/700 bytes -> 0 pkts/0 bytes] diff --git a/tests/result/whatsapp_login_chat.pcap.out b/tests/result/whatsapp_login_chat.pcap.out index 51ce4456a20..324b0cd4cbf 100644 --- a/tests/result/whatsapp_login_chat.pcap.out +++ b/tests/result/whatsapp_login_chat.pcap.out @@ -1,13 +1,14 @@ MDNS 2 202 2 DHCP 6 2052 1 Dropbox 2 1088 1 -Apple 50 23466 2 +Apple 44 21371 1 WhatsApp 32 3243 2 Spotify 1 86 1 +ApplePush 6 2095 1 1 TCP 192.168.2.4:49205 <-> 17.173.66.102:443 [proto: 91.140/SSL.Apple][cat: Web/5][24 pkts/15117 bytes <-> 20 pkts/6254 bytes] 2 TCP 192.168.2.4:49206 <-> 158.85.58.15:5222 [proto: 142/WhatsApp][cat: Chat/9][17 pkts/1794 bytes <-> 13 pkts/1169 bytes] - 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238.140/ApplePush.Apple][cat: Web/5][6 pkts/2095 bytes -> 0 pkts/0 bytes] + 3 TCP 17.110.229.14:5223 -> 192.168.2.4:49193 [proto: 238/ApplePush][cat: Cloud/13][6 pkts/2095 bytes -> 0 pkts/0 bytes] 4 UDP 0.0.0.0:68 -> 255.255.255.255:67 [proto: 18/DHCP][cat: Network/14][6 pkts/2052 bytes -> 0 pkts/0 bytes][Host: lucas-imac] 5 UDP 192.168.2.1:17500 -> 192.168.2.255:17500 [proto: 121/Dropbox][cat: Cloud/13][2 pkts/1088 bytes -> 0 pkts/0 bytes] 6 UDP 192.168.2.4:61697 <-> 192.168.2.1:53 [proto: 5.142/DNS.WhatsApp][cat: Chat/9][1 pkts/76 bytes <-> 1 pkts/204 bytes][Host: e12.whatsapp.net] From 70d056648002b6eca2f6a3c759466c39b3ef9ca7 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 5 Dec 2018 06:58:29 +0100 Subject: [PATCH 138/147] Build fix --- packages/rpm/Makefile.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/rpm/Makefile.in b/packages/rpm/Makefile.in index 1621b66e95d..9546e44739f 100644 --- a/packages/rpm/Makefile.in +++ b/packages/rpm/Makefile.in @@ -11,13 +11,13 @@ PACKAGE_PATH=$(HOME)/rpmbuild/RPMS/$(PLATFORM)/$(PACKAGE) package: build-rpm -cleanup-src: - cd ../..; ./autogen.sh; ./configure; make clean +build-src: + cd ../..; ./autogen.sh; ./configure; make clean; make cleanup-rpm: rm -rf $(HOME)/rpmbuild/BUILD/ndpi* $(HOME)/rpmbuild/SOURCES/ndpi* -build-rpm: cleanup-src cleanup-rpm +build-rpm: build-src cleanup-rpm -rm -rf ndpi-@PACKAGE_VERSION@ mkdir -p ndpi-@PACKAGE_VERSION@/packages cp ndpi.spec.in ndpi-@PACKAGE_VERSION@/packages From b2c00b3b241f57df07e21246f35c6cf53725ed58 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Fri, 7 Dec 2018 15:50:23 +0100 Subject: [PATCH 139/147] Added script to get the package version --- packages/rpm/configure | 21 ++++++++++++++------ packages/rpm/configure.in | 6 ++---- packages/ubuntu/configure | 21 ++++++++++++++------ packages/ubuntu/configure.in | 6 ++---- packages/version.sh | 37 ++++++++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 20 deletions(-) create mode 100755 packages/version.sh diff --git a/packages/rpm/configure b/packages/rpm/configure index 45e05620f29..a0398b00a99 100755 --- a/packages/rpm/configure +++ b/packages/rpm/configure @@ -584,7 +584,6 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS GIT_REVISION -GIT_RELEASE KERNEL DATE EXTN @@ -609,6 +608,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -673,6 +673,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -925,6 +926,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1062,7 +1072,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1215,6 +1225,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1694,9 +1705,8 @@ else fi fi -PACKAGE_VERSION=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` -GIT_RELEASE=`git rev-parse HEAD` -GIT_REVISION=`git rev-list --all |wc -l | tr -d '[:space:]'` +PACKAGE_VERSION=`../version.sh --release` +GIT_REVISION=`../version.sh --revision` ac_config_files="$ac_config_files Makefile ndpi.spec" @@ -1709,7 +1719,6 @@ ac_config_files="$ac_config_files Makefile ndpi.spec" - cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/packages/rpm/configure.in b/packages/rpm/configure.in index 84454923ac5..4153c905d87 100644 --- a/packages/rpm/configure.in +++ b/packages/rpm/configure.in @@ -25,9 +25,8 @@ else fi fi -PACKAGE_VERSION=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` -GIT_RELEASE=`git rev-parse HEAD` -GIT_REVISION=`git rev-list --all |wc -l | tr -d '[[:space:]]'` +PACKAGE_VERSION=`../version.sh --release` +GIT_REVISION=`../version.sh --revision` AC_CONFIG_FILES([Makefile ndpi.spec]) @@ -37,7 +36,6 @@ AC_SUBST(MACHINE) AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) -AC_SUBST(GIT_RELEASE) AC_SUBST(GIT_REVISION) AC_OUTPUT diff --git a/packages/ubuntu/configure b/packages/ubuntu/configure index 77b5b716457..64900aa8df3 100755 --- a/packages/ubuntu/configure +++ b/packages/ubuntu/configure @@ -584,7 +584,6 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS GIT_REVISION -GIT_RELEASE KERNEL DATE EXTN @@ -609,6 +608,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -673,6 +673,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -925,6 +926,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1062,7 +1072,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1215,6 +1225,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1693,9 +1704,8 @@ else fi fi -NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` -GIT_RELEASE=`git rev-parse HEAD` -GIT_REVISION=`git rev-list --all |wc -l | tr -d '[:space:]'` +NDPI_VERS=`../version.sh --release` +GIT_REVISION=`../version.sh --revision` ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/control" @@ -1707,7 +1717,6 @@ ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/ - cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/packages/ubuntu/configure.in b/packages/ubuntu/configure.in index 0193b6e7817..8883bdf04a0 100644 --- a/packages/ubuntu/configure.in +++ b/packages/ubuntu/configure.in @@ -24,9 +24,8 @@ else fi fi -NDPI_VERS=`cat ../../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev` -GIT_RELEASE=`git rev-parse HEAD` -GIT_REVISION=`git rev-list --all |wc -l | tr -d '[[:space:]]'` +NDPI_VERS=`../version.sh --release` +GIT_REVISION=`../version.sh --revision` AC_CONFIG_FILES([Makefile debian/changelog debian/files debian/control]) @@ -35,7 +34,6 @@ AC_SUBST(MACHINE) AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) -AC_SUBST(GIT_RELEASE) AC_SUBST(GIT_REVISION) AC_OUTPUT diff --git a/packages/version.sh b/packages/version.sh new file mode 100755 index 00000000000..852fcecaa43 --- /dev/null +++ b/packages/version.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +SCRIPTPATH="$(cd "$(dirname "$0")"; pwd -P)" +RELEASE="$(cd ${SCRIPTPATH}; cat ../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev)" +REVISION="$(cd ${SCRIPTPATH}; git rev-list --all |wc -l | tr -d '[[:space:]]')" + +get_release() { + echo "${RELEASE}" + exit 0 +} + +get_revision() { + echo "${REVISION}" + exit 0 +} + +get_version() { + echo "${RELEASE}-${REVISION}" + exit 0 +} + +case "$1" in + --release) + get_release; + ;; + --revision) + get_revision; + ;; + --version) + get_version; + ;; + *) + echo "Usage: ${0} {--release|--revision|--version}" + exit 1 +esac + +exit 0 From 2a1313ffd5a1f5030e51960580f9abb4c83d058b Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 10 Dec 2018 12:19:34 +0100 Subject: [PATCH 140/147] Improvements in SpeedTest (Ookla) detection --- src/lib/ndpi_content_match.c.inc | 3 ++- src/lib/ndpi_main.c | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index 45cd46484c2..e8cc040e1b7 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -8094,7 +8094,8 @@ ndpi_protocol_match host_match[] = { { ".facebook.net", NULL, "\\.facebook" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, { ".fbsbx.com", NULL, "\\.fbsbx" TLD, "Facebook", NDPI_PROTOCOL_FACEBOOK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN }, - { ".speedtest.net", NULL, "\\.speedtest" TLD, "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, + { "speedtest.", NULL, "speedtest\\." TLD, "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, + { ".ooklaserver.net", NULL, "\\.ooklaserver\\.net" TLD, "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, { "ntop.org", NULL, "ntop\\.org$", "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE }, diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 12aba272e8e..32f19320ae3 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -3997,6 +3997,9 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st else if((flow->l4.tcp.ssl_seen_client_cert == 1) && (flow->protos.stun_ssl.ssl.client_certificate[0] != '\0')) { ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSL, NDPI_PROTOCOL_UNKNOWN); } else { + if(!enable_guess) + return(ret); + if((flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN) && (flow->packet.l4_protocol == IPPROTO_TCP) && (flow->l4.tcp.ssl_stage > 1)) From af0fd3b96dbd0fe04d6e934f28aae0bb0432a728 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 10 Dec 2018 16:18:53 +0100 Subject: [PATCH 141/147] RPM fix --- packages/rpm/ndpi.spec.in | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/rpm/ndpi.spec.in b/packages/rpm/ndpi.spec.in index 90d9c51d785..5f7f47fbe3f 100644 --- a/packages/rpm/ndpi.spec.in +++ b/packages/rpm/ndpi.spec.in @@ -56,6 +56,7 @@ mkdir -p $RPM_BUILD_ROOT%{libdir} mkdir -p $RPM_BUILD_ROOT%{bindir} cd $HOME/nDPI; make DESTDIR=$RPM_BUILD_ROOT install; rm $RPM_BUILD_ROOT%{libdir}/libndpi.so +rm $RPM_BUILD_ROOT%{libdir}/libndpi.so.? cd $RPM_BUILD_ROOT%{libdir}/; ln -s libndpi.so.2.5.0 libndpi.so; cd - mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d cp $HOME/nDPI/packages/etc/ld.so.conf.d/ndpi.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d From 60337330bfba2db9b6a4e7f86af4556e626674e9 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 10 Dec 2018 16:33:09 +0100 Subject: [PATCH 142/147] Creating shared lib with major version --- packages/rpm/configure | 17 ++++------------- packages/rpm/configure.in | 2 ++ packages/rpm/ndpi.spec.in | 4 +++- packages/version.sh | 11 ++++++++++- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/packages/rpm/configure b/packages/rpm/configure index a0398b00a99..f1d1084c30a 100755 --- a/packages/rpm/configure +++ b/packages/rpm/configure @@ -583,6 +583,7 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS +MAJOR_RELEASE GIT_REVISION KERNEL DATE @@ -608,7 +609,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -673,7 +673,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -926,15 +925,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1072,7 +1062,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1225,7 +1215,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1706,6 +1695,7 @@ else fi PACKAGE_VERSION=`../version.sh --release` +MAJOR_RELEASE=`../version.sh --major-release` GIT_REVISION=`../version.sh --revision` ac_config_files="$ac_config_files Makefile ndpi.spec" @@ -1719,6 +1709,7 @@ ac_config_files="$ac_config_files Makefile ndpi.spec" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/packages/rpm/configure.in b/packages/rpm/configure.in index 4153c905d87..1eaa0ea3410 100644 --- a/packages/rpm/configure.in +++ b/packages/rpm/configure.in @@ -26,6 +26,7 @@ else fi PACKAGE_VERSION=`../version.sh --release` +MAJOR_RELEASE=`../version.sh --major-release` GIT_REVISION=`../version.sh --revision` AC_CONFIG_FILES([Makefile ndpi.spec]) @@ -37,6 +38,7 @@ AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) AC_SUBST(GIT_REVISION) +AC_SUBST(MAJOR_RELEASE) AC_OUTPUT diff --git a/packages/rpm/ndpi.spec.in b/packages/rpm/ndpi.spec.in index 5f7f47fbe3f..7b9b443650b 100644 --- a/packages/rpm/ndpi.spec.in +++ b/packages/rpm/ndpi.spec.in @@ -57,7 +57,8 @@ mkdir -p $RPM_BUILD_ROOT%{bindir} cd $HOME/nDPI; make DESTDIR=$RPM_BUILD_ROOT install; rm $RPM_BUILD_ROOT%{libdir}/libndpi.so rm $RPM_BUILD_ROOT%{libdir}/libndpi.so.? -cd $RPM_BUILD_ROOT%{libdir}/; ln -s libndpi.so.2.5.0 libndpi.so; cd - +cd $RPM_BUILD_ROOT%{libdir}/; ln -s libndpi.so.@PACKAGE_VERSION@ libndpi.so.@MAJOR_RELEASE@; cd - +cd $RPM_BUILD_ROOT%{libdir}/; ln -s libndpi.so.@PACKAGE_VERSION@ libndpi.so; cd - mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d cp $HOME/nDPI/packages/etc/ld.so.conf.d/ndpi.conf $RPM_BUILD_ROOT/etc/ld.so.conf.d strip $RPM_BUILD_ROOT%{bindir}/* @@ -70,6 +71,7 @@ rm -fr $RPM_BUILD_ROOT %defattr(-, root, root) /usr/local/lib/libndpi.so +/usr/local/lib/libndpi.so.@MAJOR_RELEASE@ /usr/local/lib/libndpi.so.@PACKAGE_VERSION@ /usr/local/bin/ndpiReader /etc/ld.so.conf.d/ndpi.conf diff --git a/packages/version.sh b/packages/version.sh index 852fcecaa43..4ef853249dc 100755 --- a/packages/version.sh +++ b/packages/version.sh @@ -2,6 +2,7 @@ SCRIPTPATH="$(cd "$(dirname "$0")"; pwd -P)" RELEASE="$(cd ${SCRIPTPATH}; cat ../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev)" +MAJOR_RELEASE="$(cd ${SCRIPTPATH}; cat ../configure.ac|grep C_INIT|cut -c 21-|rev|cut -c 3-|rev|cut -d. -f1)" REVISION="$(cd ${SCRIPTPATH}; git rev-list --all |wc -l | tr -d '[[:space:]]')" get_release() { @@ -9,6 +10,11 @@ get_release() { exit 0 } +get_major_release() { + echo "${MAJOR_RELEASE}" + exit 0 +} + get_revision() { echo "${REVISION}" exit 0 @@ -23,6 +29,9 @@ case "$1" in --release) get_release; ;; + --major-release) + get_major_release; + ;; --revision) get_revision; ;; @@ -30,7 +39,7 @@ case "$1" in get_version; ;; *) - echo "Usage: ${0} {--release|--revision|--version}" + echo "Usage: ${0} {--release|--major-release|--revision|--version}" exit 1 esac From 181ec4992bf469a0133852822c8a998b8df1bd11 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Mon, 10 Dec 2018 16:54:01 +0100 Subject: [PATCH 143/147] Deb fix (shared lib links) --- packages/ubuntu/Makefile.in | 4 +++- packages/ubuntu/configure | 3 +++ packages/ubuntu/configure.in | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/ubuntu/Makefile.in b/packages/ubuntu/Makefile.in index c55b379e012..a728cd13bab 100644 --- a/packages/ubuntu/Makefile.in +++ b/packages/ubuntu/Makefile.in @@ -12,7 +12,9 @@ ndpi: mkdir -p ./debian/ndpi-tmp/usr/local/lib ./debian/ndpi-tmp/usr/local/bin mkdir -p ./debian/ndpi-dev-tmp/usr/local/lib ./debian/ndpi-dev-tmp/usr/local/include/ndpi cd ${NDPI_HOME}; ./autogen.sh; ./configure; make - cp $(NDPI_HOME)/src/lib/libndpi.so* ./debian/ndpi-tmp/usr/local/lib/ + cp $(NDPI_HOME)/src/lib/libndpi.so.@NDPI_VERS@ ./debian/ndpi-tmp/usr/local/lib/ + cd ./debian/ndpi-tmp/usr/local/lib/; ln -s libndpi.so.@NDPI_VERS@ libndpi.so; cd - + cd ./debian/ndpi-tmp/usr/local/lib/; ln -s libndpi.so.@NDPI_VERS@ libndpi.so.@MAJOR_RELEASE@; cd - cp $(NDPI_HOME)/src/lib/libndpi.a ./debian/ndpi-dev-tmp/usr/local/lib/ cp $(NDPI_HOME)/example/ndpiReader ./debian/ndpi-tmp/usr/local/bin/ cp $(NDPI_HOME)/src/include/*.h ./debian/ndpi-dev-tmp/usr/local/include/ndpi/ diff --git a/packages/ubuntu/configure b/packages/ubuntu/configure index 64900aa8df3..c67f37e88a5 100755 --- a/packages/ubuntu/configure +++ b/packages/ubuntu/configure @@ -583,6 +583,7 @@ PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS +MAJOR_RELEASE GIT_REVISION KERNEL DATE @@ -1705,6 +1706,7 @@ else fi NDPI_VERS=`../version.sh --release` +MAJOR_RELEASE=`../version.sh --major-release` GIT_REVISION=`../version.sh --revision` ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/control" @@ -1717,6 +1719,7 @@ ac_config_files="$ac_config_files Makefile debian/changelog debian/files debian/ + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/packages/ubuntu/configure.in b/packages/ubuntu/configure.in index 8883bdf04a0..a6f49030820 100644 --- a/packages/ubuntu/configure.in +++ b/packages/ubuntu/configure.in @@ -25,6 +25,7 @@ else fi NDPI_VERS=`../version.sh --release` +MAJOR_RELEASE=`../version.sh --major-release` GIT_REVISION=`../version.sh --revision` AC_CONFIG_FILES([Makefile debian/changelog debian/files debian/control]) @@ -35,5 +36,6 @@ AC_SUBST(EXTN) AC_SUBST(DATE) AC_SUBST(KERNEL) AC_SUBST(GIT_REVISION) +AC_SUBST(MAJOR_RELEASE) AC_OUTPUT From c1d31bb4096e3a8d49babba871684d26195726bc Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Wed, 12 Dec 2018 08:58:34 +0100 Subject: [PATCH 144/147] Fixed eDonkey false positives --- src/lib/protocols/edonkey.c | 175 ++++++++++++++++++------------------ 1 file changed, 88 insertions(+), 87 deletions(-) diff --git a/src/lib/protocols/edonkey.c b/src/lib/protocols/edonkey.c index 3a4801ab1a5..547bafc5f83 100644 --- a/src/lib/protocols/edonkey.c +++ b/src/lib/protocols/edonkey.c @@ -35,123 +35,122 @@ static void ndpi_int_edonkey_add_connection(struct ndpi_detection_module_struct } static int ndpi_edonkey_payload_check(const u_int8_t *data, u_int32_t len) { + if((len >= 4) && (data[0] == 0xe3) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; - if ((len >= 4) && (data[0] == 0xe3) && (data[2] == 0x00) && (data[3] == 0x00)) - return 1; + if((len >= 4) && (data[0] == 0xc5) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; - if ((len >= 4) && (data[0] == 0xc5) && (data[2] == 0x00) && (data[3] == 0x00)) - return 1; + if((len >= 2) && (data[0] == 0xe5) && (data[1] == 0x43)) + return 1; - if ((len >= 2) && (data[0] == 0xe5) && (data[1] == 0x43)) - return 1; - - if ((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x08) && (data[2] == 0x78) && (data[3] == 0xda)) - return 1; + if((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x08) && (data[2] == 0x78) && (data[3] == 0xda)) + return 1; - if ((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x28) && (data[2] == 0x78) && (data[3] == 0xda)) - return 1; + if((len >= 4) && (data[0] == 0xe5) && (data[1] == 0x28) && (data[2] == 0x78) && (data[3] == 0xda)) + return 1; - if ((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x90)) - return 1; + if((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x90)) + return 1; - if ((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x91)) - return 1; + if((len >= 2) && (data[0] == 0xc5) && (data[1] == 0x91)) + return 1; - if ((len == 2) && (data[0] == 0xc5) && (data[1] == 0x92)) - return 1; + if((len == 2) && (data[0] == 0xc5) && (data[1] == 0x92)) + return 1; - if ((len == 2) && (data[0] == 0xc5) && (data[1] == 0x93)) - return 1; + if((len == 2) && (data[0] == 0xc5) && (data[1] == 0x93)) + return 1; - if ((len >= 38 && len <= 70) && (data[0] == 0xc5) && (data[1] == 0x94)) - return 1; + if((len >= 38 && len <= 70) && (data[0] == 0xc5) && (data[1] == 0x94)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9a)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9a)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9b)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x9b)) + return 1; - if ((len == 6) && (data[0] == 0xe3) && (data[1] == 0x96)) - return 1; + if((len == 6) && (data[0] == 0xe3) && (data[1] == 0x96)) + return 1; - if ((len <= 34 && ((len - 2) % 4 == 0)) && (data[0] == 0xe3) && (data[1] == 0x97)) - return 1; + if((len <= 34 && ((len - 2) % 4 == 0)) && (data[0] == 0xe3) && (data[1] == 0x97)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x92)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x92)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x94)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x94)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x98)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x98)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x99)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0x99)) + return 1; - if ((len == 6) && (data[0] == 0xe3) && (data[1] == 0xa2)) - return 1; + if((len == 6) && (data[0] == 0xe3) && (data[1] == 0xa2)) + return 1; - if ((len >= 2) && (data[0] == 0xe3) && (data[1] == 0xa3)) - return 1; + if((len >= 2) && (data[0] == 0xe3) && (data[1] == 0xa3)) + return 1; - if ((len == 27) && (data[0] == 0xe4) && (data[1] == 0x00)) - return 1; + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x00)) + return 1; - if ((len == 529) && (data[0] == 0xe4) && (data[1] == 0x08)) - return 1; + if((len == 529) && (data[0] == 0xe4) && (data[1] == 0x08)) + return 1; - if ((len == 18) && (data[0] == 0xe4) && (data[1] == 0x01) && (data[2] == 0x00) && (data[3] == 0x00)) - return 1; + if((len == 18) && (data[0] == 0xe4) && (data[1] == 0x01) && (data[2] == 0x00) && (data[3] == 0x00)) + return 1; - if ((len == 523) && (data[0] == 0xe4) && (data[1] == 0x09)) - return 1; + if((len == 523) && (data[0] == 0xe4) && (data[1] == 0x09)) + return 1; - if ((len == 35) && (data[0] == 0xe4) && (data[1] == 0x21)) - return 1; + if((len == 35) && (data[0] == 0xe4) && (data[1] == 0x21)) + return 1; - if ((len == 19) && (data[0] == 0xe4) && (data[1] == 0x4b)) - return 1; + if((len == 19) && (data[0] == 0xe4) && (data[1] == 0x4b)) + return 1; - if ((len >= 2) && (data[0] == 0xe4) && (data[1] == 0x11)) - return 1; + if((len >= 2) && (data[0] == 0xe4) && (data[1] == 0x11)) + return 1; - if ((len == 22 || len == 38 || len == 28) && (data[0] == 0xe4) && (data[1] == 0x19)) - return 1; + if((len == 22 || len == 38 || len == 28) && (data[0] == 0xe4) && (data[1] == 0x19)) + return 1; - if ((len == 35) && (data[0] == 0xe4) && (data[1] == 0x20)) - return 1; + if((len == 35) && (data[0] == 0xe4) && (data[1] == 0x20)) + return 1; - if ((len == 27) && (data[0] == 0xe4) && (data[1] == 0x18)) - return 1; + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x18)) + return 1; - if ((len == 27) && (data[0] == 0xe4) && (data[1] == 0x10)) - return 1; + if((len == 27) && (data[0] == 0xe4) && (data[1] == 0x10)) + return 1; - if ((len == 6) && (data[0] == 0xe4) && (data[1] == 0x58)) - return 1; + if((len == 6) && (data[0] == 0xe4) && (data[1] == 0x58)) + return 1; - if ((len == 4) && (data[0] == 0xe4) && (data[1] == 0x50)) - return 1; + if((len == 4) && (data[0] == 0xe4) && (data[1] == 0x50)) + return 1; - if ((len == 36) && (data[0] == 0xe4) && (data[1] == 0x52)) - return 1; + if((len == 36) && (data[0] == 0xe4) && (data[1] == 0x52)) + return 1; - if ((len == 48) && (data[0] == 0xe4) && (data[1] == 0x40)) - return 1; + if((len == 48) && (data[0] == 0xe4) && (data[1] == 0x40)) + return 1; - if ((len == 225) && (data[0] == 0xe4) && (data[1] == 0x43)) - return 1; + if((len == 225) && (data[0] == 0xe4) && (data[1] == 0x43)) + return 1; - if ((len == 19) && (data[0] == 0xe4) && (data[1] == 0x48)) - return 1; + if((len == 19) && (data[0] == 0xe4) && (data[1] == 0x48)) + return 1; - if ((len == 119 || len == 69 || len == 294) && (data[0] == 0xe4) && (data[1] == 0x29)) - return 1; + if((len == 119 || len == 69 || len == 294) && (data[0] == 0xe4) && (data[1] == 0x29)) + return 1; - if ((len == 119 || len == 69 || len == 294 || len == 44 || len == 269) && (data[0] == 0xe4) && (data[1] == 0x28)) - return 1; + if((len == 119 || len == 69 || len == 294 || len == 44 || len == 269) && (data[0] == 0xe4) && (data[1] == 0x28)) + return 1; return 0; } @@ -159,18 +158,20 @@ static int ndpi_edonkey_payload_check(const u_int8_t *data, u_int32_t len) { static void ndpi_check_edonkey(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &flow->packet; u_int32_t payload_len = packet->payload_packet_len; - + /* Break after 20 packets. */ - if (flow->packet_counter > 20) { + if(flow->packet_counter > 20) { NDPI_EXCLUDE_PROTO(ndpi_struct, flow); return; } + if(payload_len == 0) return; + /* Check if we so far detected the protocol in the request or not. */ - if (flow->edonkey_stage == 0) { + if(flow->edonkey_stage == 0) { NDPI_LOG_DBG2(ndpi_struct, "EDONKEY stage 0: \n"); - if (ndpi_edonkey_payload_check(packet->payload, payload_len)) { + if(ndpi_edonkey_payload_check(packet->payload, payload_len)) { NDPI_LOG_DBG2(ndpi_struct, "Possible EDONKEY request detected, we will look further for the response\n"); /* Encode the direction of the packet in the stage, so we will know when we need to look for the response packet. */ @@ -181,12 +182,12 @@ static void ndpi_check_edonkey(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct, "EDONKEY stage %u: \n", flow->edonkey_stage); /* At first check, if this is for sure a response packet (in another direction. If not, do nothing now and return. */ - if ((flow->edonkey_stage - packet->packet_direction) == 1) { + if((flow->edonkey_stage - packet->packet_direction) == 1) { return; } /* This is a packet in another direction. Check if we find the proper response. */ - if ((payload_len == 0) || (ndpi_edonkey_payload_check(packet->payload, payload_len))) { + if((payload_len == 0) || (ndpi_edonkey_payload_check(packet->payload, payload_len))) { NDPI_LOG_INFO(ndpi_struct, "found EDONKEY\n"); ndpi_int_edonkey_add_connection(ndpi_struct, flow); } else { @@ -203,8 +204,8 @@ void ndpi_search_edonkey(struct ndpi_detection_module_struct *ndpi_struct, struc NDPI_LOG_DBG(ndpi_struct, "search EDONKEY\n"); /* skip marked packets */ - if (packet->detected_protocol_stack[0] != NDPI_PROTOCOL_EDONKEY) { - if (packet->tcp_retransmission == 0) { + if(packet->detected_protocol_stack[0] != NDPI_PROTOCOL_EDONKEY) { + if(packet->tcp_retransmission == 0) { ndpi_check_edonkey(ndpi_struct, flow); } } From d2b2aba6e86b78bd9a9abdf97b51b643da1ef0dd Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 12 Dec 2018 11:31:07 +0100 Subject: [PATCH 145/147] Expose ndpi_fill_ip_protocol_category api to handle ICMP flows category --- src/include/ndpi_api.h | 3 +++ src/lib/ndpi_main.c | 28 +++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 5bee25f5be5..e57f3a568e0 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -739,6 +739,9 @@ extern "C" { int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct, char *name, ndpi_protocol_category_t category); int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_struct); + int ndpi_fill_ip_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, + const struct ndpi_iphdr *iph, + ndpi_protocol *ret); void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, ndpi_protocol *ret); diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 32f19320ae3..b5b3c9c6b94 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -4313,28 +4313,42 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) /* ********************************************************************************* */ -void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow, +int ndpi_fill_ip_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, + const struct ndpi_iphdr *iph, ndpi_protocol *ret) { if(ndpi_struct->custom_categories.categories_loaded) { - if(flow->packet.iph) { prefix_t prefix; patricia_node_t *node; /* Make sure all in network byte order otherwise compares wont work */ - fill_prefix_v4(&prefix, (struct in_addr *)&flow->packet.iph->saddr, + fill_prefix_v4(&prefix, (struct in_addr *)&iph->saddr, 32, ((patricia_tree_t*)ndpi_struct->protocols_ptree)->maxbits); node = ndpi_patricia_search_best(ndpi_struct->custom_categories.ipAddresses, &prefix); if(!node) { - fill_prefix_v4(&prefix, (struct in_addr *)&flow->packet.iph->daddr, + fill_prefix_v4(&prefix, (struct in_addr *)&iph->daddr, 32, ((patricia_tree_t*)ndpi_struct->protocols_ptree)->maxbits); node = ndpi_patricia_search_best(ndpi_struct->custom_categories.ipAddresses, &prefix); } if(node) { - flow->category = ret->category = (ndpi_protocol_category_t)node->value.user_value; - return; + ret->category = (ndpi_protocol_category_t)node->value.user_value; + return 1; + } + } + + ret->category = ndpi_get_proto_category(ndpi_struct, *ret); + return 0; +} + +void ndpi_fill_protocol_category(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + ndpi_protocol *ret) { + if(ndpi_struct->custom_categories.categories_loaded) { + if(flow->packet.iph) { + if(ndpi_fill_ip_protocol_category(ndpi_struct, flow->packet.iph, ret)) { + flow->category = ret->category; + return; } } From 92ad05733246738b0fc3bb6b2ddb83605e6babad Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Mon, 17 Dec 2018 22:33:58 +0100 Subject: [PATCH 146/147] Added Ookla cache --- src/include/ndpi_protocols.h | 1 + src/include/ndpi_typedefs.h | 5 +- src/lib/ndpi_main.c | 14 +- src/lib/protocols/http.c | 31 ++- src/lib/protocols/ookla.c | 66 +++++++ src/lib/protocols/snmp_proto.c | 1 - src/lib/third_party/include/lruc.h | 55 ++++++ src/lib/third_party/src/lruc.c | 294 +++++++++++++++++++++++++++++ 8 files changed, 452 insertions(+), 15 deletions(-) create mode 100644 src/lib/protocols/ookla.c create mode 100644 src/lib/third_party/include/lruc.h create mode 100644 src/lib/third_party/src/lruc.c diff --git a/src/include/ndpi_protocols.h b/src/include/ndpi_protocols.h index 8ac7d72476b..5349237d4ac 100644 --- a/src/include/ndpi_protocols.h +++ b/src/include/ndpi_protocols.h @@ -362,4 +362,5 @@ void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int3 void init_fbzero_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_memcached_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); void init_nest_log_sink_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); +void init_ookla_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask); #endif /* __NDPI_PROTOCOLS_H__ */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index d48453baf29..294af22b342 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -996,7 +996,10 @@ struct ndpi_detection_module_struct { struct bt_announce *bt_ann; int bt_ann_len; -/* NDPI_PROTOCOL_TINC */ + /* NDPI_PROTOCOL_OOKLA */ + void *ookla_cache; + + /* NDPI_PROTOCOL_TINC */ struct cache *tinc_cache; ndpi_proto_defaults_t proto_defaults[NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS]; diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index b5b3c9c6b94..e882feaa6f8 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -30,6 +30,7 @@ #include #include "ahocorasick.h" #include "libcache.h" +#include "lruc.h" #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UNKNOWN @@ -2427,14 +2428,16 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_struct ndpi_free(ndpi_struct->proto_defaults[i].protoName); } -/* NDPI_PROTOCOL_TINC */ + /* NDPI_PROTOCOL_TINC */ if(ndpi_struct->tinc_cache) cache_free((cache_t)(ndpi_struct->tinc_cache)); - if(ndpi_struct->protocols_ptree) - ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_struct->protocols_ptree, - free_ptree_data); + if(ndpi_struct->ookla_cache) + lruc_free((lruc*)ndpi_struct->ookla_cache); + if(ndpi_struct->protocols_ptree) + ndpi_Destroy_Patricia((patricia_tree_t*)ndpi_struct->protocols_ptree, free_ptree_data); + if(ndpi_struct->udpRoot != NULL) ndpi_tdestroy(ndpi_struct->udpRoot, ndpi_free); if(ndpi_struct->tcpRoot != NULL) @@ -3293,6 +3296,9 @@ void ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *n /* WHATSAPP */ init_whatsapp_dissector(ndpi_struct, &a, detection_bitmask); + /* OOKLA */ + init_ookla_dissector(ndpi_struct, &a, detection_bitmask); + /* AMQP */ init_amqp_dissector(ndpi_struct, &a, detection_bitmask); diff --git a/src/lib/protocols/http.c b/src/lib/protocols/http.c index 94d918e76e7..09b816129a7 100644 --- a/src/lib/protocols/http.c +++ b/src/lib/protocols/http.c @@ -26,7 +26,7 @@ #define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP #include "ndpi_api.h" - +#include "lruc.h" /* global variables used for 1kxun protocol and iqiyi service */ @@ -613,7 +613,23 @@ static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct */ + ookla_found: ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_UNKNOWN); + + if(ndpi_struct->ookla_cache == NULL) + ndpi_struct->ookla_cache = lruc_new(4*1024, 1024); + + if(ndpi_struct->ookla_cache != NULL) { + u_int8_t *dummy = (u_int8_t*)ndpi_malloc(sizeof(u_int8_t)); + + if(dummy) { + if(packet->tcp->source == htons(8080)) + lruc_set((lruc*)ndpi_struct->ookla_cache, (void*)&packet->iph->saddr, 4, dummy, 1); + else + lruc_set((lruc*)ndpi_struct->ookla_cache, (void*)&packet->iph->daddr, 4, dummy, 1); + } + } + return; } @@ -663,9 +679,8 @@ static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct /* Check for Ookla */ if((packet->referer_line.len > 0) - && ndpi_strnstr((const char *)packet->referer_line.ptr, "www.speedtest.net", packet->referer_line.len)) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_HTTP); - return; + && ndpi_strnstr((const char *)packet->referer_line.ptr, "www.speedtest.net", packet->referer_line.len)) { + goto ookla_found; } /* Check for additional field introduced by Steam */ @@ -782,17 +797,15 @@ static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct if((packet->payload_packet_len == 34) && (flow->l4.tcp.http_stage == 1)) { if((packet->payload[5] == ' ') && (packet->payload[9] == ' ')) { - ndpi_int_http_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA); - return; + goto ookla_found; } } if((packet->payload_packet_len > 6) && memcmp(packet->payload, "HELLO ", 6) == 0) { /* This looks like Ookla */ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_UNKNOWN); - return; + goto ookla_found; } else - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OOKLA); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_OOKLA); /** At first check, if this is for sure a response packet (in another direction. If not, if HTTP is detected do nothing now and return, diff --git a/src/lib/protocols/ookla.c b/src/lib/protocols/ookla.c new file mode 100644 index 00000000000..b1eb295a7dd --- /dev/null +++ b/src/lib/protocols/ookla.c @@ -0,0 +1,66 @@ +/* + * ookla.c + * + * Copyright (C) 2018 - ntop.org + * + * nDPI is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * nDPI is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with nDPI. If not, see . + * + */ +#include "ndpi_protocol_ids.h" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_OOKLA + +#include "ndpi_api.h" +#include "lruc.h" + + +void ndpi_search_ookla(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) { + struct ndpi_packet_struct* packet = &flow->packet; + u_int32_t addr = 0; + void *value; + + NDPI_LOG_DBG(ndpi_struct, "Ookla detection\n"); + + if(packet->tcp->source == htons(8080)) + addr = packet->iph->saddr; + else if(packet->tcp->dest == htons(8080)) + addr = packet->iph->daddr; + else + goto ookla_exclude; + + if(ndpi_struct->ookla_cache != NULL) { + if(lruc_get(ndpi_struct->ookla_cache, &addr, sizeof(addr), &value) == LRUC_NO_ERROR) { + /* Don't remove it as it can be used for other connections */ + NDPI_LOG_INFO(ndpi_struct, "found ookla tcp connection\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_UNKNOWN); + return; + } + } + + ookla_exclude: + NDPI_EXCLUDE_PROTO(ndpi_struct, flow); +} + +void init_ookla_dissector(struct ndpi_detection_module_struct *ndpi_struct, + u_int32_t *id, NDPI_PROTOCOL_BITMASK *detection_bitmask) { + ndpi_set_bitmask_protocol_detection("Ookla", ndpi_struct, detection_bitmask, *id, + NDPI_PROTOCOL_OOKLA, + ndpi_search_ookla, + NDPI_SELECTION_BITMASK_PROTOCOL_TCP, + SAVE_DETECTION_BITMASK_AS_UNKNOWN, + ADD_TO_DETECTION_BITMASK); + + *id += 1; +} + diff --git a/src/lib/protocols/snmp_proto.c b/src/lib/protocols/snmp_proto.c index 759d6bae03b..77ad4d23349 100644 --- a/src/lib/protocols/snmp_proto.c +++ b/src/lib/protocols/snmp_proto.c @@ -123,7 +123,6 @@ void ndpi_search_snmp(struct ndpi_detection_module_struct *ndpi_struct, struct n } excl: NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - } diff --git a/src/lib/third_party/include/lruc.h b/src/lib/third_party/include/lruc.h new file mode 100644 index 00000000000..55fb271fe3a --- /dev/null +++ b/src/lib/third_party/include/lruc.h @@ -0,0 +1,55 @@ +#include +#include +#include + +#ifndef __lruc_header__ +#define __lruc_header__ + +// ------------------------------------------ +// errors +// ------------------------------------------ +typedef enum { + LRUC_NO_ERROR = 0, + LRUC_MISSING_CACHE, + LRUC_MISSING_KEY, + LRUC_MISSING_VALUE, + LRUC_PTHREAD_ERROR, + LRUC_VALUE_TOO_LARGE +} lruc_error; + + +// ------------------------------------------ +// types +// ------------------------------------------ +typedef struct { + void *value; + void *key; + uint32_t value_length; + uint32_t key_length; + uint64_t access_count; + void *next; +} lruc_item; + +typedef struct { + lruc_item **items; + uint64_t access_count; + uint64_t free_memory; + uint64_t total_memory; + uint64_t average_item_length; + uint32_t hash_table_size; + time_t seed; + lruc_item *free_items; + pthread_mutex_t *mutex; +} lruc; + + +// ------------------------------------------ +// api +// ------------------------------------------ +lruc *lruc_new(uint64_t cache_size, uint32_t average_length); +lruc_error lruc_free(lruc *cache); +lruc_error lruc_set(lruc *cache, void *key, uint32_t key_length, void *value, uint32_t value_length); +lruc_error lruc_get(lruc *cache, void *key, uint32_t key_length, void **value); +lruc_error lruc_delete(lruc *cache, void *key, uint32_t key_length); + +#endif diff --git a/src/lib/third_party/src/lruc.c b/src/lib/third_party/src/lruc.c new file mode 100644 index 00000000000..f08fb2ce111 --- /dev/null +++ b/src/lib/third_party/src/lruc.c @@ -0,0 +1,294 @@ +/* https://github.com/willcannings/C-LRU-Cache */ + +#include "lruc.h" +#include +#include +#include +#include + +// ------------------------------------------ +// private functions +// ------------------------------------------ +// MurmurHash2, by Austin Appleby +// http://sites.google.com/site/murmurhash/ +uint32_t lruc_hash(lruc *cache, void *key, uint32_t key_length) { + uint32_t m = 0x5bd1e995; + uint32_t r = 24; + uint32_t h = cache->seed ^ key_length; + char* data = (char *)key; + + while(key_length >= 4) { + uint32_t k = *(uint32_t *)data; + k *= m; + k ^= k >> r; + k *= m; + h *= m; + h ^= k; + data += 4; + key_length -= 4; + } + + switch(key_length) { + case 3: h ^= data[2] << 16; + case 2: h ^= data[1] << 8; + case 1: h ^= data[0]; + h *= m; + }; + + h ^= h >> 13; + h *= m; + h ^= h >> 15; + return h % cache->hash_table_size; +} + +// compare a key against an existing item's key +int lruc_cmp_keys(lruc_item *item, void *key, uint32_t key_length) { + if(key_length != item->key_length) + return 1; + else + return memcmp(key, item->key, key_length); +} + +// remove an item and push it to the free items queue +void lruc_remove_item(lruc *cache, lruc_item *prev, lruc_item *item, uint32_t hash_index) { + if(prev) + prev->next = item->next; + else + cache->items[hash_index] = (lruc_item *) item->next; + + // free memory and update the free memory counter + cache->free_memory += item->value_length; + free(item->value); + free(item->key); + + // push the item to the free items queue + memset(item, 0, sizeof(lruc_item)); + item->next = cache->free_items; + cache->free_items = item; +} + +// remove the least recently used item +// TODO: we can optimise this by finding the n lru items, where n = required_space / average_length +void lruc_remove_lru_item(lruc *cache) { + lruc_item *min_item = NULL, *min_prev = NULL; + lruc_item *item = NULL, *prev = NULL; + uint32_t i = 0, min_index = -1; + uint64_t min_access_count = -1; + + for(; i < cache->hash_table_size; i++) { + item = cache->items[i]; + prev = NULL; + + while(item) { + if(item->access_count < min_access_count || min_access_count == -1) { + min_access_count = item->access_count; + min_item = item; + min_prev = prev; + min_index = i; + } + prev = item; + item = item->next; + } + } + + if(min_item) + lruc_remove_item(cache, min_prev, min_item, min_index); +} + +// pop an existing item off the free queue, or create a new one +lruc_item *lruc_pop_or_create_item(lruc *cache) { + lruc_item *item = NULL; + + if(cache->free_items) { + item = cache->free_items; + cache->free_items = item->next; + } else { + item = (lruc_item *) calloc(sizeof(lruc_item), 1); + } + + return item; +} + +// error helpers +#define error_for(conditions, error) if(conditions) {return error;} +#define test_for_missing_cache() error_for(!cache, LRUC_MISSING_CACHE) +#define test_for_missing_key() error_for(!key || key_length == 0, LRUC_MISSING_KEY) +#define test_for_missing_value() error_for(!value || value_length == 0, LRUC_MISSING_VALUE) +#define test_for_value_too_large() error_for(value_length > cache->total_memory, LRUC_VALUE_TOO_LARGE) + +// lock helpers +#define lock_cache() if(pthread_mutex_lock(cache->mutex)) {\ + perror("LRU Cache unable to obtain mutex lock");\ + return LRUC_PTHREAD_ERROR;\ +} + +#define unlock_cache() if(pthread_mutex_unlock(cache->mutex)) {\ + perror("LRU Cache unable to release mutex lock");\ + return LRUC_PTHREAD_ERROR;\ +} + + +// ------------------------------------------ +// public api +// ------------------------------------------ +lruc *lruc_new(uint64_t cache_size, uint32_t average_length) { + // create the cache + lruc *cache = (lruc *) calloc(sizeof(lruc), 1); + if(!cache) { + perror("LRU Cache unable to create cache object"); + return NULL; + } + cache->hash_table_size = cache_size / average_length; + cache->average_item_length = average_length; + cache->free_memory = cache_size; + cache->total_memory = cache_size; + cache->seed = time(NULL); + + // size the hash table to a guestimate of the number of slots required (assuming a perfect hash) + cache->items = (lruc_item **) calloc(sizeof(lruc_item *), cache->hash_table_size); + if(!cache->items) { + perror("LRU Cache unable to create cache hash table"); + free(cache); + return NULL; + } + + // all cache calls are guarded by a mutex + cache->mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); + if(pthread_mutex_init(cache->mutex, NULL)) { + perror("LRU Cache unable to initialise mutex"); + free(cache->items); + free(cache); + return NULL; + } + return cache; +} + + +lruc_error lruc_free(lruc *cache) { + test_for_missing_cache(); + + // free each of the cached items, and the hash table + lruc_item *item = NULL, *next = NULL; + uint32_t i = 0; + if(cache->items) { + for(; i < cache->hash_table_size; i++) { + item = cache->items[i]; + while(item) { + next = (lruc_item *) item->next; + free(item); + item = next; + } + } + free(cache->items); + } + + // free the cache + if(cache->mutex) { + if(pthread_mutex_destroy(cache->mutex)) { + perror("LRU Cache unable to destroy mutex"); + return LRUC_PTHREAD_ERROR; + } + } + free(cache); + + return LRUC_NO_ERROR; +} + + +lruc_error lruc_set(lruc *cache, void *key, uint32_t key_length, void *value, uint32_t value_length) { + test_for_missing_cache(); + test_for_missing_key(); + test_for_missing_value(); + test_for_value_too_large(); + lock_cache(); + + // see if the key already exists + uint32_t hash_index = lruc_hash(cache, key, key_length), required = 0; + lruc_item *item = NULL, *prev = NULL; + item = cache->items[hash_index]; + + while(item && lruc_cmp_keys(item, key, key_length)) { + prev = item; + item = (lruc_item *) item->next; + } + + if(item) { + // update the value and value_lengths + required = value_length - item->value_length; + free(item->value); + item->value = value; + item->value_length = value_length; + + } else { + // insert a new item + item = lruc_pop_or_create_item(cache); + item->value = value; + item->key = key; + item->value_length = value_length; + item->key_length = key_length; + required = value_length; + + if(prev) + prev->next = item; + else + cache->items[hash_index] = item; + } + item->access_count = ++cache->access_count; + + // remove as many items as necessary to free enough space + if(required > 0 && required > cache->free_memory) { + while(cache->free_memory < required) + lruc_remove_lru_item(cache); + } + cache->free_memory -= required; + unlock_cache(); + return LRUC_NO_ERROR; +} + + +lruc_error lruc_get(lruc *cache, void *key, uint32_t key_length, void **value) { + test_for_missing_cache(); + test_for_missing_key(); + lock_cache(); + + // loop until we find the item, or hit the end of a chain + uint32_t hash_index = lruc_hash(cache, key, key_length); + lruc_item *item = cache->items[hash_index]; + + while(item && lruc_cmp_keys(item, key, key_length)) + item = (lruc_item *) item->next; + + if(item) { + *value = item->value; + item->access_count = ++cache->access_count; + } else { + *value = NULL; + } + + unlock_cache(); + return LRUC_NO_ERROR; +} + + +lruc_error lruc_delete(lruc *cache, void *key, uint32_t key_length) { + test_for_missing_cache(); + test_for_missing_key(); + lock_cache(); + + // loop until we find the item, or hit the end of a chain + lruc_item *item = NULL, *prev = NULL; + uint32_t hash_index = lruc_hash(cache, key, key_length); + item = cache->items[hash_index]; + + while(item && lruc_cmp_keys(item, key, key_length)) { + prev = item; + item = (lruc_item *) item->next; + } + + if(item) { + lruc_remove_item(cache, prev, item, hash_index); + } + + unlock_cache(); + return LRUC_NO_ERROR; +} From d3be349fa0d03477be1c84fad23fcc37df9bcf67 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Thu, 20 Dec 2018 09:16:59 +0100 Subject: [PATCH 147/147] Changelog update --- CHANGELOG.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 977b02bc77c..930cb4c3bc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,61 @@ # CHANGELOG +#### nDPI 2.6 (December 2018) + +## New Supported Protocols and Services + +* New Bitcoin, Ethereum, ZCash, Monero dissectors all identified as Mining +* New Signal.org dissector +* New Nest Log Sink dissector +* New UPnP dissector +* Added support for SMBv1 traffic, split from SMBv23 + +## Improvements + +* Improved Skype detection, merged Skype call in/out into Skype Call +* Improved heuristics for Skype, Teredo, Netbios +* Improved SpeedTest (Ookla) detection +* Improved WhatsApp detection +* Improved WeChat detection +* Improved Facebook Messenger detection +* Improved Messenger/Hangout detection +* Improved SSL detection, prevent false positives +* Improved guess for UDP protocols +* Improved STUN detection +* Added more Ubuntu servers +* Added missing categorization with giveup/guess +* Optimizations for TCP flows that do not start with a SYN packet (early giveup) + +## Fixes + +* Fixed eDonkey false positives +* Fixed Dropbox dissector +* Fixed Spotify dissector +* Fixed custom protocol loading +* Fixed missing Application Data packet for TLS +* Fixed buffer overflows +* Fixed custom categories match by IP +* Fixed category field not accounted in ndpi_get_proto_category +* Fixed null pointer dereference in ndpi_detection_process_packet +* Fixed compilation on Mac + +## Other + +* Deb and RPM packages: ndpi with shared libraries and binaries, ndpi-dev with headers and static libraries +* Protocols now have an optional subprotocol: Spotify cannot have subprotocols, DNS can (DNS.Spotify) +* New API functions: + - ndpi_fill_ip_protocol_category to handle ICMP flows category + - ndpi_flowv4_flow_hash and ndpi_flowv6_flow_hash to support the Community ID Flow Hashing (https://github.com/corelight/community-id-spec) + - ndpi_protocol2id to print the protocol as ID + - ndpi_get_custom_category_match to search host in custom categories +* Changed ndpi_detection_giveup API: guess is now part of the call +* Added DPDK support to ndpiReader +* Removed Musical.ly protocol (service no longer used) +* Custom categories have now priority over protocol related categories +* Improved clang support + +------------------------------------------------------------------------ + #### nDPI 2.4 (August 2018) ## New Supported Protocols and Services