aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_api.h45
-rw-r--r--src/include/ndpi_define.h.in11
-rw-r--r--src/include/ndpi_main.h67
-rw-r--r--src/include/ndpi_protocol_ids.h517
-rw-r--r--src/include/ndpi_protocols.h7
-rw-r--r--src/include/ndpi_typedefs.h514
-rw-r--r--src/lib/Makefile.am181
-rw-r--r--src/lib/Makefile.in67
-rw-r--r--src/lib/Makefile.simple22
-rw-r--r--src/lib/ndpi_content_match.c.inc675
-rw-r--r--src/lib/ndpi_main.c1454
-rw-r--r--src/lib/protocols/afp.c8
-rw-r--r--src/lib/protocols/aimini.c6
-rw-r--r--src/lib/protocols/ajp.c4
-rw-r--r--src/lib/protocols/amqp.c5
-rw-r--r--src/lib/protocols/apple_push.c5
-rw-r--r--src/lib/protocols/applejuice.c6
-rw-r--r--src/lib/protocols/armagetron.c7
-rw-r--r--src/lib/protocols/attic/flash.c2
-rw-r--r--src/lib/protocols/attic/ftp.c2
-rw-r--r--src/lib/protocols/attic/manolito.c2
-rw-r--r--src/lib/protocols/attic/popo.c2
-rw-r--r--src/lib/protocols/attic/secondlife.c2
-rw-r--r--src/lib/protocols/ayiya.c6
-rw-r--r--src/lib/protocols/battlefield.c6
-rw-r--r--src/lib/protocols/bgp.c6
-rw-r--r--src/lib/protocols/bittorrent.c4
-rw-r--r--src/lib/protocols/bjnp.c12
-rw-r--r--src/lib/protocols/btlib.c4
-rw-r--r--src/lib/protocols/checkmk.c7
-rw-r--r--src/lib/protocols/ciscovpn.c4
-rw-r--r--src/lib/protocols/citrix.c6
-rw-r--r--src/lib/protocols/coap.c4
-rw-r--r--src/lib/protocols/collectd.c6
-rw-r--r--src/lib/protocols/corba.c3
-rw-r--r--src/lib/protocols/crossfire.c6
-rw-r--r--src/lib/protocols/csgo.c4
-rw-r--r--src/lib/protocols/dcerpc.c5
-rw-r--r--src/lib/protocols/dhcp.c6
-rw-r--r--src/lib/protocols/dhcpv6.c6
-rw-r--r--src/lib/protocols/diameter.c27
-rw-r--r--src/lib/protocols/directconnect.c9
-rw-r--r--src/lib/protocols/directdownloadlink.c6
-rw-r--r--src/lib/protocols/dns.c14
-rw-r--r--src/lib/protocols/dofus.c6
-rw-r--r--src/lib/protocols/drda.c6
-rw-r--r--src/lib/protocols/dropbox.c34
-rw-r--r--src/lib/protocols/eaq.c16
-rw-r--r--src/lib/protocols/edonkey.c178
-rw-r--r--src/lib/protocols/fasttrack.c6
-rw-r--r--src/lib/protocols/fbzero.c7
-rw-r--r--src/lib/protocols/fiesta.c5
-rw-r--r--src/lib/protocols/fix.c7
-rw-r--r--src/lib/protocols/florensia.c6
-rw-r--r--src/lib/protocols/ftp_control.c6
-rw-r--r--src/lib/protocols/ftp_data.c6
-rw-r--r--src/lib/protocols/git.c7
-rw-r--r--src/lib/protocols/gnutella.c6
-rw-r--r--src/lib/protocols/gtp.c6
-rw-r--r--src/lib/protocols/guildwars.c6
-rw-r--r--src/lib/protocols/h323.c7
-rw-r--r--src/lib/protocols/halflife2_and_mods.c6
-rw-r--r--src/lib/protocols/hangout.c5
-rw-r--r--src/lib/protocols/hep.c25
-rw-r--r--src/lib/protocols/http.c103
-rw-r--r--src/lib/protocols/http_activesync.c40
-rw-r--r--src/lib/protocols/iax.c6
-rw-r--r--src/lib/protocols/icecast.c28
-rw-r--r--src/lib/protocols/ipp.c6
-rw-r--r--src/lib/protocols/irc.c9
-rw-r--r--src/lib/protocols/jabber.c13
-rw-r--r--src/lib/protocols/kakaotalk_voice.c8
-rw-r--r--src/lib/protocols/kerberos.c5
-rw-r--r--src/lib/protocols/kontiki.c8
-rw-r--r--src/lib/protocols/ldap.c5
-rw-r--r--src/lib/protocols/lisp.c25
-rw-r--r--src/lib/protocols/lotus_notes.c6
-rw-r--r--src/lib/protocols/mail_imap.c8
-rw-r--r--src/lib/protocols/mail_pop.c6
-rw-r--r--src/lib/protocols/mail_smtp.c5
-rw-r--r--src/lib/protocols/maplestory.c6
-rw-r--r--src/lib/protocols/mdns_proto.c (renamed from src/lib/protocols/mdns.c)5
-rw-r--r--src/lib/protocols/megaco.c8
-rw-r--r--src/lib/protocols/memcached.c189
-rw-r--r--src/lib/protocols/mgcp.c7
-rw-r--r--src/lib/protocols/mining.c94
-rw-r--r--src/lib/protocols/mpegts.c5
-rw-r--r--src/lib/protocols/mqtt.c5
-rw-r--r--src/lib/protocols/msn.c61
-rw-r--r--src/lib/protocols/mssql_tds.c6
-rw-r--r--src/lib/protocols/mysql.c6
-rw-r--r--src/lib/protocols/nest_log_sink.c79
-rw-r--r--src/lib/protocols/netbios.c11
-rw-r--r--src/lib/protocols/netflow.c5
-rw-r--r--src/lib/protocols/nfs.c5
-rw-r--r--src/lib/protocols/nintendo.c5
-rw-r--r--src/lib/protocols/noe.c6
-rw-r--r--src/lib/protocols/non_tcp_udp.c62
-rw-r--r--src/lib/protocols/ntp.c5
-rw-r--r--src/lib/protocols/ookla.c66
-rw-r--r--src/lib/protocols/openft.c6
-rw-r--r--src/lib/protocols/openvpn.c6
-rw-r--r--src/lib/protocols/oracle.c4
-rw-r--r--src/lib/protocols/oscar.c6
-rw-r--r--src/lib/protocols/pando.c4
-rw-r--r--src/lib/protocols/pcanywhere.c5
-rw-r--r--src/lib/protocols/postgres.c5
-rw-r--r--src/lib/protocols/pplive.c3
-rw-r--r--src/lib/protocols/ppstream.c5
-rw-r--r--src/lib/protocols/pptp.c6
-rw-r--r--src/lib/protocols/qq.c12
-rw-r--r--src/lib/protocols/quic.c14
-rw-r--r--src/lib/protocols/radius.c6
-rw-r--r--src/lib/protocols/rdp.c6
-rw-r--r--src/lib/protocols/redis_net.c6
-rw-r--r--src/lib/protocols/rsync.c6
-rw-r--r--src/lib/protocols/rtcp.c10
-rw-r--r--src/lib/protocols/rtmp.c3
-rw-r--r--src/lib/protocols/rtp.c19
-rw-r--r--src/lib/protocols/rtsp.c16
-rw-r--r--src/lib/protocols/rx.c5
-rw-r--r--src/lib/protocols/sflow.c5
-rw-r--r--src/lib/protocols/shoutcast.c8
-rw-r--r--src/lib/protocols/sip.c21
-rw-r--r--src/lib/protocols/skinny.c4
-rw-r--r--src/lib/protocols/skype.c44
-rw-r--r--src/lib/protocols/smb.c17
-rw-r--r--src/lib/protocols/smpp.c6
-rw-r--r--src/lib/protocols/snmp_proto.c (renamed from src/lib/protocols/snmp.c)6
-rw-r--r--src/lib/protocols/socks45.c5
-rw-r--r--src/lib/protocols/someip.c5
-rw-r--r--src/lib/protocols/sopcast.c5
-rw-r--r--src/lib/protocols/soulseek.c14
-rw-r--r--src/lib/protocols/spotify.c31
-rw-r--r--src/lib/protocols/ssdp.c7
-rw-r--r--src/lib/protocols/ssh.c5
-rw-r--r--src/lib/protocols/ssl.c177
-rw-r--r--src/lib/protocols/starcraft.c5
-rw-r--r--src/lib/protocols/stealthnet.c5
-rw-r--r--src/lib/protocols/steam.c4
-rw-r--r--src/lib/protocols/stun.c29
-rw-r--r--src/lib/protocols/syslog.c6
-rw-r--r--src/lib/protocols/tcp_udp.c2
-rw-r--r--src/lib/protocols/teamspeak.c3
-rw-r--r--src/lib/protocols/teamviewer.c5
-rw-r--r--src/lib/protocols/telegram.c5
-rw-r--r--src/lib/protocols/telnet.c6
-rw-r--r--src/lib/protocols/teredo.c7
-rw-r--r--src/lib/protocols/tftp.c5
-rw-r--r--src/lib/protocols/thunder.c6
-rw-r--r--src/lib/protocols/tinc.c5
-rw-r--r--src/lib/protocols/tor.c12
-rw-r--r--src/lib/protocols/tvants.c6
-rw-r--r--src/lib/protocols/tvuplayer.c6
-rw-r--r--src/lib/protocols/ubntac2.c5
-rw-r--r--src/lib/protocols/upnp.c65
-rw-r--r--src/lib/protocols/usenet.c6
-rw-r--r--src/lib/protocols/vhua.c5
-rw-r--r--src/lib/protocols/viber.c6
-rw-r--r--src/lib/protocols/vmware.c6
-rw-r--r--src/lib/protocols/vnc.c6
-rw-r--r--src/lib/protocols/warcraft3.c5
-rw-r--r--src/lib/protocols/whatsapp.c27
-rw-r--r--src/lib/protocols/whoisdas.c6
-rw-r--r--src/lib/protocols/world_of_kung_fu.c5
-rw-r--r--src/lib/protocols/world_of_warcraft.c5
-rw-r--r--src/lib/protocols/xbox.c6
-rw-r--r--src/lib/protocols/xdmcp.c6
-rw-r--r--src/lib/protocols/yahoo.c13
-rw-r--r--src/lib/protocols/zattoo.c6
-rw-r--r--src/lib/protocols/zeromq.c5
-rw-r--r--src/lib/third_party/include/actypes.h14
-rw-r--r--src/lib/third_party/include/ahocorasick.h6
-rw-r--r--src/lib/third_party/include/ht_hash.h (renamed from src/lib/third_party/include/hash.h)3
-rw-r--r--src/lib/third_party/include/lruc.h55
-rw-r--r--src/lib/third_party/include/ndpi_patricia.h2
-rw-r--r--src/lib/third_party/src/ahocorasick.c16
-rw-r--r--src/lib/third_party/src/ht_hash.c (renamed from src/lib/third_party/src/hash.c)4
-rw-r--r--src/lib/third_party/src/lruc.c294
-rw-r--r--src/lib/third_party/src/node.c2
-rw-r--r--src/lib/third_party/src/sha1-fast.c148
181 files changed, 3702 insertions, 2685 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h
index 16ac45de0..e57f3a568 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
@@ -326,6 +328,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 +338,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,
@@ -346,6 +350,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 +358,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 +367,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 +376,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 +387,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 +396,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
@@ -427,6 +437,20 @@ extern "C" {
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
*
* @par category = the category associated to the protocol
@@ -606,7 +630,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 +663,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 +677,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 */
/**
@@ -717,9 +739,14 @@ 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);
+ 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);
@@ -752,6 +779,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/include/ndpi_define.h.in b/src/include/ndpi_define.h.in
index a641c7b66..a73e03bc5 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 */
@@ -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/include/ndpi_main.h b/src/include/ndpi_main.h
index b76335e02..e37576289 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
@@ -53,34 +53,56 @@ 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_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,
- 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,24 +112,27 @@ 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);
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);
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);
-#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 d04722b8d..14f1810ed 100644
--- a/src/include/ndpi_protocol_ids.h
+++ b/src/include/ndpi_protocol_ids.h
@@ -33,262 +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 <tomasz@skatnet.dk> */
+ 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_SMBV1 = 16, /* SMB version 1 */
+ 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 <thomas+ndpi@fjellstrom.ca> */
+ NDPI_PROTOCOL_KONTIKI = 32,
+ NDPI_PROTOCOL_OPENFT = 33,
+ NDPI_PROTOCOL_FASTTRACK = 34,
+ NDPI_PROTOCOL_GNUTELLA = 35,
+ NDPI_PROTOCOL_EDONKEY = 36, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_BITTORRENT = 37,
+ NDPI_PROTOCOL_SKYPE_CALL = 38, /* Skype call and videocalls */
+ NDPI_PROTOCOL_SIGNAL = 39,
+ NDPI_PROTOCOL_MEMCACHED = 40, /* Memcached - Darryl Sokoloski <darryl@egloo.ca> */
+ 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 <darryl@egloo.ca> */
+
+ 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_FREE_49 = 49, /* Free */
+ NDPI_PROTOCOL_RTSP = 50,
+ NDPI_PROTOCOL_MAIL_IMAPS = 51,
+ NDPI_PROTOCOL_ICECAST = 52,
+ NDPI_PROTOCOL_PPLIVE = 53, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ 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 <tomasz@skatnet.dk> */
+ 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 <leonn.paiva@gmail.com> */
+ 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 <mudingay@ill.fr> */
+ NDPI_PROTOCOL_OPENVPN = 159, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_NOE = 160, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_CISCOVPN = 161, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_TEAMSPEAK = 162, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_TOR = 163, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_SKINNY = 164, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_RTCP = 165, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_RSYNC = 166, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_ORACLE = 167, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_CORBA = 168, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_UBUNTUONE = 169, /* Remy Mudingay <mudingay@ill.fr> */
+ NDPI_PROTOCOL_WHOIS_DAS = 170,
+ NDPI_PROTOCOL_COLLECTD = 171,
+ NDPI_PROTOCOL_SOCKS = 172, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_NINTENDO = 173,
+ NDPI_PROTOCOL_RTMP = 174, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_FTP_DATA = 175, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_WIKIPEDIA = 176, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_ZMQ = 177,
+ NDPI_PROTOCOL_AMAZON = 178, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_EBAY = 179, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_CNN = 180, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_MEGACO = 181, /* Gianluca Costa <g.costa@xplico.org> */
+ NDPI_PROTOCOL_REDIS = 182,
+ NDPI_PROTOCOL_PANDO = 183, /* Tomasz Bujlow <tomasz@skatnet.dk> */
+ NDPI_PROTOCOL_VHUA = 184,
+ NDPI_PROTOCOL_TELEGRAM = 185, /* Gianluca Costa <g.costa@xplico.org> */
+ NDPI_PROTOCOL_VEVO = 186,
+ NDPI_PROTOCOL_PANDORA = 187,
+ NDPI_PROTOCOL_QUIC = 188, /* Andrea Buscarinu <andrea.buscarinu@gmail.com> - Michele Campus <michelecampus5@gmail.com> */
+ 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 <edoaramis@gmail.com> */
+ 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 <manoj_ws@yahoo.com> */
+ NDPI_PROTOCOL_GITHUB = 203,
+ NDPI_PROTOCOL_BJNP = 204,
+ NDPI_PROTOCOL_FREE_205 = 205, /* Free */
+ NDPI_PROTOCOL_VIDTO = 206,
+ NDPI_PROTOCOL_SMPP = 207, /* Damir Franusic <df@release14.org> */
+ NDPI_PROTOCOL_DNSCRYPT = 208,
+ NDPI_PROTOCOL_TINC = 209, /* William Guglielmo <william@deselmo.com> */
+ NDPI_PROTOCOL_DEEZER = 210,
+ NDPI_PROTOCOL_INSTAGRAM = 211, /* Andrea Buscarinu <andrea.buscarinu@gmail.com> */
+ NDPI_PROTOCOL_MICROSOFT = 212,
+ NDPI_PROTOCOL_STARCRAFT = 213, /* Matteo Bracci <matteobracci1@gmail.com> */
+ 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 <pa@pauloangelo.com> */
+ NDPI_PROTOCOL_LINKEDIN = 233, /* Paulo Angelo <pa@pauloangelo.com> */
+ 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_id_t;
-#define NDPI_PROTOCOL_NO_MASTER_PROTO NDPI_PROTOCOL_UNKNOWN
-
-#define NDPI_PROTOCOL_UNKNOWN 0
-#define NDPI_PROTOCOL_FTP_CONTROL 1 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#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 <thomas+ndpi@fjellstrom.ca> */
-#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 <tomasz@skatnet.dk> */
-#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 <tomasz@skatnet.dk> */
-#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 <tomasz@skatnet.dk> */
-#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 <leonn.paiva@gmail.com>*/
-#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 <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_OPENVPN 159 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_NOE 160 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_CISCOVPN 161 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_TEAMSPEAK 162 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_TOR 163 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_SKINNY 164 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_RTCP 165 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_RSYNC 166 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_ORACLE 167 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_CORBA 168 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_UBUNTUONE 169 /* Remy Mudingay <mudingay@ill.fr> */
-#define NDPI_PROTOCOL_WHOIS_DAS 170
-#define NDPI_PROTOCOL_COLLECTD 171
-#define NDPI_PROTOCOL_SOCKS 172 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_NINTENDO 173
-#define NDPI_PROTOCOL_RTMP 174 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_FTP_DATA 175 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_WIKIPEDIA 176 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_ZMQ 177
-#define NDPI_PROTOCOL_AMAZON 178 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_EBAY 179 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_CNN 180 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_MEGACO 181 /* Gianluca Costa <g.costa@xplico.org> */
-#define NDPI_PROTOCOL_REDIS 182
-#define NDPI_PROTOCOL_PANDO 183 /* Tomasz Bujlow <tomasz@skatnet.dk> */
-#define NDPI_PROTOCOL_VHUA 184
-#define NDPI_PROTOCOL_TELEGRAM 185 /* Gianluca Costa <g.costa@xplico.org> */
-#define NDPI_PROTOCOL_VEVO 186
-#define NDPI_PROTOCOL_PANDORA 187
-#define NDPI_PROTOCOL_QUIC 188 /* Andrea Buscarinu <andrea.buscarinu@gmail.com> - Michele Campus <michelecampus5@gmail.com> */
-#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 <edoaramis@gmail.com> */
-#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 <manoj_ws@yahoo.com> */
-#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 <df@release14.org> */
-#define NDPI_PROTOCOL_DNSCRYPT 208
-#define NDPI_PROTOCOL_TINC 209 /* William Guglielmo <william@deselmo.com> */
-#define NDPI_PROTOCOL_DEEZER 210
-#define NDPI_PROTOCOL_INSTAGRAM 211 /* Andrea Buscarinu <andrea.buscarinu@gmail.com> */
-#define NDPI_PROTOCOL_MICROSOFT 212
-#define NDPI_PROTOCOL_STARCRAFT 213 /* Matteo Bracci <matteobracci1@gmail.com> */
-#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 <pa@pauloangelo.com> */
-#define NDPI_PROTOCOL_LINKEDIN 233 /* Paulo Angelo <pa@pauloangelo.com> */
-#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 */
-
-/* UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE UPDATE */
-#define NDPI_LAST_IMPLEMENTED_PROTOCOL NDPI_PROTOCOL_RAPIDVIDEO
-
-#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_protocols.h b/src/include/ndpi_protocols.h
index f08b1de73..5349237d4 100644
--- a/src/include/ndpi_protocols.h
+++ b/src/include/ndpi_protocols.h
@@ -203,6 +203,8 @@ 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);
+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);
@@ -259,6 +261,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);
@@ -322,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);
@@ -356,4 +360,7 @@ 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);
+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 77440b5c7..294af22b3 100644
--- a/src/include/ndpi_typedefs.h
+++ b/src/include/ndpi_typedefs.h
@@ -25,9 +25,7 @@
#define __NDPI_TYPEDEFS_H__
#include "ndpi_define.h"
-
-#define BT_ANNOUNCE
-#define SNAP_EXT
+#include "ndpi_protocol_ids.h"
/* NDPI_LOG_LEVEL */
typedef enum {
@@ -308,8 +306,7 @@ struct ndpi_icmphdr {
/* ******************* ********************* ****************** */
/* ************************************************************ */
-#ifdef NDPI_PROTOCOL_BITTORRENT
-
+/* NDPI_PROTOCOL_BITTORRENT */
typedef struct spinlock {
volatile int val;
} spinlock_t;
@@ -348,9 +345,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 +355,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 +375,230 @@ 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_WHATSAPP */
+ u_int8_t wa_matched_so_far;
+
+/* 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
- 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_SSL */
+ 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;
-#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
+
+/* NDPI_PROTOCOL_MEMCACHED */
+ u_int8_t memcached_matches;
+
+/* NDPI_PROTOCOL_NEST_LOG_SINK */
+ u_int8_t nest_log_sink_matches;
}
#ifndef WIN32
__attribute__ ((__packed__))
@@ -611,50 +608,52 @@ 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
+
+/* NDPI_PROTOCOL_MEMCACHED */
+ u_int8_t memcached_matches;
}
#ifndef WIN32
__attribute__ ((__packed__))
@@ -684,7 +683,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,12 +797,23 @@ typedef enum {
NDPI_CONTENT_CATEGORY_WINDOWSMEDIA,
NDPI_CONTENT_CATEGORY_WEBM,
- /* Out custom categories */
- CUSTOM_CATEGORY_MINING = 99,
- CUSTOM_CATEGORY_MALWARE = 100,
- CUSTOM_CATEGORY_ADVERTISEMENT = 101,
- CUSTOM_CATEGORY_BANNED_SITE = 102,
-
+ /* Some custom categories */
+ CUSTOM_CATEGORY_MINING = 99,
+ CUSTOM_CATEGORY_MALWARE = 100,
+ 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
@@ -817,13 +826,14 @@ 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 */
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;
@@ -842,6 +852,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;
@@ -851,15 +866,25 @@ typedef struct ndpi_proto {
#define NUM_CUSTOM_CATEGORIES 5
#define CUSTOM_CATEGORY_LABEL_LEN 32
+#ifdef NDPI_LIB_COMPILATION
+
+/* Needed to have access to HAVE_* defines */
+#include "ndpi_config.h"
+
#ifdef HAVE_HYPERSCAN
+#include <hs/hs.h>
+
struct hs_list {
- char *expression;
- unsigned int id;
- struct hs_list *next;
+ char *expression;
+ unsigned int id;
+ struct hs_list *next;
};
-#endif
-#ifdef NDPI_LIB_COMPILATION
+struct hs {
+ hs_database_t *database;
+ hs_scratch_t *scratch;
+};
+#endif
struct ndpi_detection_module_struct {
NDPI_PROTOCOL_BITMASK detection_bitmask;
@@ -961,19 +986,21 @@ 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_OOKLA */
+ void *ookla_cache;
+
+ /* NDPI_PROTOCOL_TINC */
struct cache *tinc_cache;
-#endif
ndpi_proto_defaults_t proto_defaults[NDPI_MAX_SUPPORTED_PROTOCOLS+NDPI_MAX_NUM_CUSTOM_PROTOCOLS];
@@ -985,7 +1012,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];
@@ -996,7 +1024,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;
/*
@@ -1007,6 +1034,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);
/*
@@ -1055,7 +1084,7 @@ struct ndpi_flow_struct {
struct {
struct {
- char client_certificate[48], server_certificate[48];
+ char client_certificate[64], server_certificate[64];
} ssl;
struct {
@@ -1099,97 +1128,94 @@ 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;
-
-#ifdef NDPI_PROTOCOL_REDIS
+ ndpi_protocol_category_t category;
+
+/* 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;
@@ -1201,7 +1227,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;
@@ -1211,4 +1237,10 @@ typedef struct {
u_int8_t value;
} ndpi_network;
-#endif/* __NDPI_TYPEDEFS_H__ */
+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.am b/src/lib/Makefile.am
deleted file mode 100644
index 10a54c719..000000000
--- 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/Makefile.in b/src/lib/Makefile.in
new file mode 100644
index 000000000..0ffeb9db5
--- /dev/null
+++ b/src/lib/Makefile.in
@@ -0,0 +1,67 @@
+#
+# Simple non-autotools dependent makefile
+#
+# ./autogen.sh
+# cd src/lib
+# make Makefile
+#
+
+
+#
+# Installation directories
+#
+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
+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@
+NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED)
+
+ifneq ($(OS),Windows_NT)
+OS := $(shell uname)
+endif
+
+ifeq ($(OS),Darwin)
+CC=clang
+SONAME_FLAG=
+else
+SONAME_FLAG=-Wl,-soname,$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR)
+endif
+
+all: $(NDPI_LIBS)
+
+ndpi_main.c: ndpi_content_match.c.inc
+
+$(NDPI_LIB_STATIC): $(OBJECTS)
+ ar rc $@ $(OBJECTS)
+ $(RANLIB) $@
+
+$(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 $@
+
+clean:
+ /bin/rm -f $(NDPI_LIB_STATIC) $(OBJECTS) *.o *.so *.lo $(NDPI_LIB_SHARED)
+
+distclean: clean
+ /bin/rm -f Makefile
+
+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)
diff --git a/src/lib/Makefile.simple b/src/lib/Makefile.simple
deleted file mode 100644
index 1aae55636..000000000
--- a/src/lib/Makefile.simple
+++ /dev/null
@@ -1,22 +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
-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)
-
-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
diff --git a/src/lib/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc
index d65565b3c..e8cc040e1 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
*/
@@ -71,7 +70,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 },
@@ -82,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 },
@@ -112,11 +112,12 @@ 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
@@ -542,7 +543,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.
@@ -609,10 +610,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 +623,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)
@@ -706,6 +708,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
@@ -809,11 +812,11 @@ static ndpi_network host_protocol_list[] = {
/*
Canonical Ltd (Ubuntu)
- origin AS41231
+ origin AS41231z
*/
- { 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 },
/*
@@ -7925,7 +7928,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,18 +7946,18 @@ 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 },
+ { 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 }
};
+
/* ****************************************************** */
/*
@@ -8007,70 +8010,102 @@ 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
+
+(?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(?:m)?)?\\.[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 },
- { "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\\.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 },
+ { "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, "\\.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 },
- { ".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 },
+ /* Detected "instagram.c10r.facebook.com". Omitted "*amazonaws.com" and "*facebook.com" CDNs e.g. "ig-telegraph-shv-04-frc3.facebook.com" */
+ { ".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 },
+
+ { "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 },
- { "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 },
+ { "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 },
- { ".speedtest.net", NULL, NULL, "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 },
- { "docs.googleusercontent.com", NULL, NULL, "GoogleDocs", NDPI_PROTOCOL_GOOGLE_DOCS, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE },
+ { "ntop.org", NULL, "ntop\\.org$", "ntop", NDPI_PROTOCOL_NTOP, 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 },
+ { "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 },
- { "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 },
+ { "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 },
- { "ntop.org", NULL, NULL, "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE },
+ { "android.clients.google.com", NULL, "android\\.clients\\.google" TLD, "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE },
/*
See https://better.fyi/trackers/
@@ -8091,289 +8126,302 @@ 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 },
-
- /* Google Hangout */
- { "images2-hangout-opensocial.googleusercontent.com", NULL, NULL, "GoogleHangout", NDPI_PROTOCOL_HANGOUT, NDPI_PROTOCOL_CATEGORY_CHAT, 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, "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 },
+ { ".googlezip.net", NULL, "\\.googlezip" TLD, "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 },
+ { "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 },
- { "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 },
+ { "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 },
- { "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 },
+ { ".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 },
- { ".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 },
+ { "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 },
- { "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 },
+ { "mail.outlook.com", NULL, "mail\\.outlook" TLD, "Hotmail", NDPI_PROTOCOL_HOTMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE },
- { "mail.outlook.com", NULL, NULL, "Hotmail", NDPI_PROTOCOL_HOTMAIL, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE },
+ { ".last.fm", NULL, "\\.last\\.fm$", "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN },
- { ".last.fm", NULL, NULL, "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN },
+ { "msn.com", NULL, "msn" TLD, "MSN", NDPI_PROTOCOL_MSN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* News site */
- { "msn.com", NULL, NULL, "MSN", NDPI_PROTOCOL_MSN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE }, /* News site */
+ { "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 },
- { "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 },
+ { ".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\\.", "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 },
- { ".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 },
+ { ".tuenti.com", NULL, "\\.tuenti" TLD, "Tuenti", NDPI_PROTOCOL_TUENTI, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE },
- { ".tuenti.com", NULL, NULL, "Tuenti", NDPI_PROTOCOL_TUENTI, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE },
+ { ".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 },
- { ".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 },
+ { ".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 },
- { ".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 },
+ { "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 },
- { "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 },
+ { "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 },
- { "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 },
+ { ".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 },
- { ".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 },
+ { "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 },
- { "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 },
- { "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 },
+ { ".vevo.com", NULL, "\\.vevo" TLD, "Vevo", NDPI_PROTOCOL_VEVO, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN },
- { ".vevo.com", NULL, NULL, "Vevo", NDPI_PROTOCOL_VEVO, 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 },
- { ".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 },
+ { "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 },
- { "edge-mqtt.facebook.com", NULL, NULL, "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 },
- { ".pandora.com", NULL, NULL, "Pandora", NDPI_PROTOCOL_PANDORA, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN },
+ { ".torproject.org", NULL, "\\.torproject\\.org$", "Tor", NDPI_PROTOCOL_TOR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS },
- { ".torproject.org", NULL, NULL, "Tor", NDPI_PROTOCOL_TOR, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS },
+ { ".kakao.com", NULL, "\\.kakao" TLD, "KakaoTalk", NDPI_PROTOCOL_KAKAOTALK, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE },
- { ".kakao.com", NULL, NULL, "KakaoTalk", NDPI_PROTOCOL_KAKAOTALK, NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_ACCEPTABLE },
+ { "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 },
- { "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 },
+ { ".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 },
- { "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 },
-
- { ".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 },
+ { ".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 },
+ { ".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 },
-
- /* 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 },
-
- { ".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 },
-
- { "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 },
-
- { "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 },
-
- { ".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 },
- { ".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 },
-
- { ".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 },
-
- { ".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 },
-
- { ".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 },
-
- { ".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 },
-
- { ".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 },
+ { "slack-assets2.s3-", NULL, "slack-assets2\\.s3-", "Slack", NDPI_PROTOCOL_SLACK, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE },
+
+ { "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 },
+ { "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\\.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 },
+ { ".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, "\\.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, "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 },
+ { ".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 },
+
+ { "baidu.com", NULL, "baidu" TLD, "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 },
+
+
+ /* RapidVideo streaming */
+ { ".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, "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 },
+ { "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 }
};
@@ -8498,12 +8546,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 };
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 5f1f9800d..e882feaa6 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -27,8 +27,10 @@
#include <stdlib.h>
#include <errno.h>
+#include <sys/types.h>
#include "ahocorasick.h"
#include "libcache.h"
+#include "lruc.h"
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UNKNOWN
@@ -42,23 +44,14 @@
#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"
+#include "third_party/include/ht_hash.h"
-#ifdef HAVE_HYPERSCAN
-#include <hs.h>
-#endif
-
-#ifdef HAVE_HYPERSCAN
-struct hs {
- hs_database_t *database;
- hs_scratch_t *scratch;
-};
-#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)
{
@@ -409,15 +402,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++)
@@ -434,8 +425,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++;
@@ -454,8 +444,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++;
@@ -523,13 +512,12 @@ 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) {
(*(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);
@@ -540,6 +528,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) {
@@ -566,13 +555,19 @@ 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));
for(j=0; j<MAX_DEFAULT_PORTS; j++) {
- 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__);
+ 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__);
}
}
@@ -670,7 +665,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)) {
@@ -679,8 +676,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
@@ -695,22 +700,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));
}
/* ****************************************************** */
@@ -731,29 +739,37 @@ 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];
-
- 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;
+
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,
+ 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,
+ 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);
}
/* ******************************************************************** */
@@ -784,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;
@@ -795,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);
@@ -857,24 +911,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);
}
/* ******************************************************************** */
@@ -912,14 +967,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 },
custom_master[2];
@@ -928,981 +999,1021 @@ 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_SMB,
- no_master,
- no_master, "SMB", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS,
- ndpi_build_default_ports(ports_a, 445, 0, 0, 0, 0) /* TCP */,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV1,
+ 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_MUSICALLY,
- no_master,
- no_master, "Musical.ly", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WECHAT,
+ 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_FUN, NDPI_PROTOCOL_FREE_40,
- no_master,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEMCACHED,
+ 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,
+ 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,
+ 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,
+ 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,
+ 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_41,
- no_master,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_45,
+ 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_42,
- no_master,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_46,
+ 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_43,
- no_master,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SIGNAL,
+ 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_44,
- no_master,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_196,
+ 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,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_FREE_205,
+ 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,
- no_master, "Free", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VIDTO,
+ 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,
- no_master, "RTP", NDPI_PROTOCOL_CATEGORY_VOIP,
+ 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,
+ 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_APPLICATION_ACTIVESYNC,
- no_master,
- no_master, "HTTP_Application_ActiveSync", NDPI_PROTOCOL_CATEGORY_CLOUD,
+ ndpi_set_proto_defaults(ndpi_mod, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_ACTIVESYNC,
+ 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,
- no_master, "Webex", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE,
+ 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,
- 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 */);
+ 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 */);
/* 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);
}
/* ****************************************************** */
-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 buf[64] = { '\0' };
+ 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][%s]\n",
+ buf, txt->length, m->patterns->astring, m->patterns->length, min_len,
+ m->match_num, m->patterns->astring);
+#endif
+
/*
Return 1 for stopping to the first match.
We might consider searching for the more
specific match, paying more cpu cycles.
*/
- *matching_protocol_id = m->patterns[0].rep.number;
- if(strncmp(txt->astring, m->patterns->astring, min_len) == 0)
+ memcpy(match, &m->patterns[0].rep, sizeof(AC_REP_t));
+
+ 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][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
+ } else
return 0; /* 0 to continue searching, !0 to stop */
}
/* ******************************************************************** */
-#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)
@@ -1979,6 +2090,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,
@@ -1990,7 +2102,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;
}
}
@@ -2020,8 +2133,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; }
@@ -2043,7 +2154,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 {
@@ -2152,6 +2263,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);
@@ -2168,7 +2280,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;
@@ -2178,10 +2290,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);
}
/* ****************************************************** */
@@ -2189,7 +2301,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)
@@ -2197,10 +2310,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);
}
/* *********************************************** */
@@ -2225,6 +2340,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);
@@ -2262,6 +2379,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) { ; }
/* ****************************************************** */
@@ -2275,17 +2428,19 @@ 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->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)
+
+ 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)
@@ -2340,7 +2495,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);
}
@@ -2381,7 +2537,27 @@ 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,
u_int8_t *user_defined_proto) {
@@ -2390,8 +2566,19 @@ 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)
+ && is_udp_guessable_protocol(guessed_proto)
+ )
+ return(NDPI_PROTOCOL_UNKNOWN);
+ else {
+ *user_defined_proto = found->customUserProto;
+ return(guessed_proto);
+ }
}
} else {
/* No TCP/UDP */
@@ -2446,10 +2633,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);
}
@@ -2457,9 +2644,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;
@@ -2487,7 +2673,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, char* rule,
}
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;
@@ -2511,7 +2697,7 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, char* rule,
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 */
@@ -2549,12 +2735,13 @@ int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_mod, char* rule,
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_CATEGORY_UNSPECIFIED,
+ NDPI_PROTOCOL_ACCEPTABLE);
else
ndpi_remove_host_url_subprotocol(ndpi_mod, value, subprotocol_id);
}
@@ -2575,7 +2762,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;
@@ -2823,6 +3009,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);
@@ -3027,6 +3216,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);
@@ -3104,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);
@@ -3116,6 +3311,12 @@ 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);
+
+ /* Nest Log Sink */
+ init_nest_log_sink_dissector(ndpi_struct, &a, detection_bitmask);
+
/* ----------------------------------------------------------------- */
ndpi_struct->callback_buffer_size = a;
@@ -3231,7 +3432,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)
@@ -3350,7 +3551,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;
@@ -3428,7 +3629,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
@@ -3438,15 +3639,22 @@ 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);
+ 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;
+ 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");
-
}
} else {
/* tcp header not complete */
@@ -3459,6 +3667,7 @@ static int ndpi_init_packet_header(struct ndpi_detection_module_struct *ndpi_str
} else {
flow->packet.generic_l4_ptr = l4ptr;
}
+
return 0;
}
@@ -3616,9 +3825,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) {
@@ -3736,8 +3944,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);
@@ -3749,7 +3956,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,
@@ -3783,7 +3989,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);
@@ -3794,29 +4000,42 @@ 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(!enable_guess)
+ return(ret);
+
if((flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN)
&& (flow->packet.l4_protocol == IPPROTO_TCP)
&& (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)
+ && 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)
- && (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)
+ && is_udp_guessable_protocol(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)) {
+
+ 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);
@@ -3834,17 +4053,39 @@ 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) {
- 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);
+ if(/* (flow->protos.stun_ssl.stun.num_processed_pkts >= NDPI_MIN_NUM_STUN_DETECTION) */
+ flow->protos.stun_ssl.stun.is_skype) {
+ ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE);
} else
- 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;
+ }
+
+ 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);
}
@@ -3883,8 +4124,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;
}
@@ -3903,7 +4144,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);
}
@@ -3916,6 +4157,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)
@@ -3934,6 +4183,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));
@@ -3951,7 +4202,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);
@@ -4042,21 +4293,25 @@ 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
}
+ 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);
@@ -4064,28 +4319,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) {
ret->category = (ndpi_protocol_category_t)node->value.user_value;
- return;
+ 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;
}
}
@@ -4094,23 +4363,23 @@ 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;
}
}
- if(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')) {
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) {
- 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);
}
/* ********************************************************************************* */
@@ -4132,6 +4401,8 @@ ndpi_protocol ndpi_detection_process_packet(struct ndpi_detection_module_struct
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;
@@ -4154,7 +4425,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);
@@ -4209,12 +4479,13 @@ 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)) {
/* 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);
}
@@ -4223,7 +4494,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);
@@ -4242,8 +4513,22 @@ 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);
}
@@ -4272,6 +4557,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, 0);
+ }
+
return(ret);
}
@@ -4425,7 +4728,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;
@@ -4466,15 +4768,18 @@ 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((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));
@@ -4492,7 +4797,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);
@@ -4655,9 +4959,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 */
}
}
@@ -4818,10 +5119,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);
}
/* ********************************************************************************* */
@@ -4829,8 +5131,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;
@@ -4866,7 +5167,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;
}
/* ********************************************************************************* */
@@ -4907,6 +5209,17 @@ 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)) {
+ 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;
+ }
+ }
+ }
+
ndpi_int_change_flow_protocol(ndpi_struct, flow,
upper_detected_protocol, lower_detected_protocol);
ndpi_int_change_packet_protocol(ndpi_struct, flow,
@@ -4915,24 +5228,11 @@ void ndpi_int_change_protocol(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; */
-
-/* } */
-/* } */
+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;
+}
/* ********************************************************************************* */
@@ -5153,6 +5453,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) {
@@ -5162,27 +5463,42 @@ 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;
-
- return(ret);
+ 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,
+ 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;
- else
- return(ret);
+ 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;
+
+ if(rc == NDPI_PROTOCOL_SSL)
+ goto check_guessed_skype;
+ else {
+ ret.category = ndpi_get_proto_category(ndpi_struct, ret);
+ return(ret);
+ }
+ }
}
check_guessed_skype:
@@ -5195,13 +5511,32 @@ 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, NULL, proto, sport,
+ dport, &user_defined_proto);
+ ret.category = ndpi_get_proto_category(ndpi_struct, ret);
return(ret);
}
/* ****************************************************** */
+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)
@@ -5307,14 +5642,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) {
@@ -5340,8 +5754,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
@@ -5445,7 +5861,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')
@@ -5453,10 +5869,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);
}
/* ****************************************************** */
@@ -5497,38 +5914,90 @@ 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) {
- int matching_protocol_id = NDPI_PROTOCOL_UNKNOWN;
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, (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));
+
+ ret_match->protocol_id = match.number,
+ ret_match->protocol_category = match.category,
+ ret_match->protocol_breed = match.breed;
+
+ return(match.number);
+}
+
+#ifdef 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;
- return(matching_protocol_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
-#ifndef HAVE_HYPERSCAN
+/* ****************************************************** */
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 matching_protocol_id = ndpi_match_string_subprotocol(ndpi_struct, string_to_match, string_to_match_len, is_host_match);
+ 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];
@@ -5550,6 +6019,9 @@ 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];
+ if(flow->category == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)
+ flow->category = ret_match->protocol_category;
+
return(packet->detected_protocol_stack[0]);
}
@@ -5561,45 +6033,16 @@ 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,
- u_int8_t is_host_match) {
- int rv = NDPI_PROTOCOL_UNKNOWN;
- struct hs *hs = (struct hs*)ndpi_struct->hyperscan;
-
- 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,
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));
}
/* ****************************************************** */
@@ -5607,10 +6050,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));
}
/* ****************************************************** */
@@ -5618,10 +6062,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);
@@ -5629,20 +6073,18 @@ 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);
}
/* ****************************************************** */
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);
}
}
@@ -5728,3 +6170,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/protocols/afp.c b/src/lib/protocols/afp.c
index ee8dc5973..ffe303cea 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 fb439f817..dec8118c2 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 ed7bb83f7..7cae40f20 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 6b530c16d..793b3699e 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 734be6e96..6930dba86 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 a80c39d7f..95e6b4458 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 7f4fb9ec0..53c36a5f9 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 bc47ee881..eb27807d7 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 2e06aec9a..19604089c 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 3b1db0df5..71fdaeaff 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 4bd040efe..c5b0447df 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 d475dc386..487c03597 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 bc993cfe3..c44c723b5 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 23a3749b2..b4ec74cfe 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 f7896968b..aaa5730f7 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 fceafc188..ad7de6b42 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 f9f690308..759f810be 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 ac456f364..5992c1b28 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 <vel21ripn@gmail.com>
*
* This file is part of nDPI, an open source deep packet inspection
@@ -22,6 +22,8 @@
*
*/
+#include "ndpi_api.h"
+
#ifndef NDPI_NO_STD_INC
#include <stdlib.h>
#include <stdio.h>
diff --git a/src/lib/protocols/checkmk.c b/src/lib/protocols/checkmk.c
index 81ac543b6..991885fce 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 e04fba936..d98f91e02 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 7d6406bff..89e520815 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 288d15f23..5ac8cb80e 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 2d4a06bb3..6f96871ea 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 94e9f324a..ffb12fec1 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 ea1dce66a..03f3b4264 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 3bf0b4fe9..7f4479419 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 3aef077cd..ae1266a01 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 6ac07e832..52415946b 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 98ed08cda..77be89e40 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 24317f498..7fb443c34 100644
--- a/src/lib/protocols/diameter.c
+++ b/src/lib/protocols/diameter.c
@@ -1,8 +1,7 @@
/*
- * aimini.c
+ * diameter.c
*
* Copyright (C) 2018 - ntop.org
- * Written by Michele Campus - <campus@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
@@ -19,22 +18,22 @@
*
* You should have received a copy of the GNU Lesser General Public License
* along with nDPI. If not, see <http://www.gnu.org/licenses/>.
- *
+ *
+ * Based on code of:
+ * Michele Campus - <campus@ntop.org>
*/
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_DIAMETER
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_DIAMETER
#include "ndpi_api.h"
// 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 +72,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);
@@ -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 725e53348..5088685e4 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"
@@ -80,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;
@@ -446,5 +443,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 0a4d528f2..cd8243786 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 7b56c3c02..90be9544c 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"
@@ -209,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,
@@ -247,5 +249,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 baed6c262..997f999a0 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 72d708d13..7dc24ffcc 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 6e8a2dcb0..39bb96ff2 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"
@@ -50,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(strncmp((const char *)packet->payload, "{\"host_int\"", 11) == 0) {
-
- 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;
+ }
}
}
}
@@ -91,7 +99,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 3929b4ef6..8768cac6f 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"
@@ -55,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) {
@@ -68,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);
@@ -88,5 +90,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 34276bbcb..547bafc5f 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"
@@ -37,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;
}
@@ -161,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. */
@@ -183,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 {
@@ -205,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);
}
}
@@ -225,4 +224,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 016a15621..074468558 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 31acd0c9a..6c818e3c7 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"
@@ -86,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);
@@ -101,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;
}
@@ -129,4 +129,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 9a9c78852..dc7a86fd4 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 4f3f9849b..3cc9e070c 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 217874a6a..cca63485f 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 f23476db0..893f83d68 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 ec1e8d7d8..8d3e6fa8c 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 0b4192289..1e358d79b 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 <stdlib.h>
@@ -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 295cfaecd..5bc2980cc 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 0bdc4d8ee..ffe2b2498 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 7b6581851..1cf3888cf 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 31c353a27..ddbcdadf3 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 <mudingay@ill.fr>
*
*/
-
#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 5319424fa..446703220 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 de35653ea..fc94aad5f 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 1c7617c88..02a559af8 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 ac5b9d173..09b816129 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,12 +23,10 @@
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_HTTP
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HTTP
#include "ndpi_api.h"
-
+#include "lruc.h"
/* global variables used for 1kxun protocol and iqiyi service */
@@ -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) {
@@ -179,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';
/**
@@ -189,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);
}
}
@@ -356,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);
@@ -402,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",
@@ -428,34 +431,32 @@ 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",
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);
+ }
}
}
@@ -471,10 +472,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 +549,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
}
/*************************************************************************************************/
@@ -615,7 +613,23 @@ static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct
<allow-access-from domain="*.speedtest.net" to-ports="8080"/>
</cross-domain-policy>
*/
+ 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;
}
@@ -665,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 */
@@ -784,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,
@@ -1007,7 +1018,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 +1026,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 +1034,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 +1079,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 55451f6bf..0bf267290 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 7f6e960f1..104a59be4 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 23aca33e9..515d5b572 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 fcf25a758..4f4f2438f 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 7bdd543c3..12660b528 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 05950d8c5..3917b8b20 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 87c1ef061..1869e06db 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 71f4a8636..8b059a1a2 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 425fd6b1b..4882c7797 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 4adb7c471..49b1a39d4 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 e507be9f9..7343ca034 100644
--- a/src/lib/protocols/lisp.c
+++ b/src/lib/protocols/lisp.c
@@ -1,12 +1,30 @@
-#include "ndpi_protocol_ids.h"
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ */
-#ifdef NDPI_PROTOCOL_LISP
+#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,
@@ -68,4 +86,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 5750c50cd..d5f8f1310 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 2c3d3d2d7..65341cdc8 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 4f9a6ea5f..83847f1f8 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 252c74ffe..f7fbd337c 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 a55c2cc11..e45729b8b 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_proto.c
index 17a6d921d..77bdf4208 100644
--- a/src/lib/protocols/mdns.c
+++ b/src/lib/protocols/mdns_proto.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 bb317f5d5..e4b694ea6 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/memcached.c b/src/lib/protocols/memcached.c
new file mode 100644
index 000000000..e9deb5cc9
--- /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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#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/src/lib/protocols/mgcp.c b/src/lib/protocols/mgcp.c
index 69fe33fac..86fadcb63 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/mining.c b/src/lib/protocols/mining.c
new file mode 100644
index 000000000..ec094e7d3
--- /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 <http://www.gnu.org/licenses/>.
+ *
+ */
+#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/src/lib/protocols/mpegts.c b/src/lib/protocols/mpegts.c
index 3558bdce7..c1f227565 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 950dde5d1..45669c03a 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"
@@ -232,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;
}
@@ -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 ec090cf00..8ab45ad32 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 75507fd52..621ea2b0e 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 d1e695e55..d1602a2fe 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/nest_log_sink.c b/src/lib/protocols/nest_log_sink.c
new file mode 100644
index 000000000..62e8fa75f
--- /dev/null
+++ b/src/lib/protocols/nest_log_sink.c
@@ -0,0 +1,79 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#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;
+
+ 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/src/lib/protocols/netbios.c b/src/lib/protocols/netbios.c
index 634284121..925b864ad 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"
@@ -332,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");
@@ -390,5 +387,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 a553e4b6a..23c4bc587 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 c074b9d3b..c9e3265a5 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 8b76f33a6..bbc87a495 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 9899b056b..da572b6c0 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 668a158d7..b7cc4a4d0 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 3b8eb3d7d..9290fbfb3 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/ookla.c b/src/lib/protocols/ookla.c
new file mode 100644
index 000000000..b1eb295a7
--- /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 <http://www.gnu.org/licenses/>.
+ *
+ */
+#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/openft.c b/src/lib/protocols/openft.c
index d0b50c8a2..30fb1c68f 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 6756c173d..6bd480ea1 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 5fda78672..6ad6bac4c 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 6dec353a5..010a620e9 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 ccf1ee12d..ece78559d 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 56b68b567..0d205d5f3 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 e23d316e4..089be4e31 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 6f874d7b6..2e41d64f5 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 08d2f8ade..20eb0d428 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 9bacdeded..cfe360b5b 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 f3b713132..077d385fa 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 6bf5cb0b2..e28db634a 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 - <andrea.buscarinu@gmail.com>
- * Michele Campus - <campus@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
* 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 <http://www.gnu.org/licenses/>.
*
+ * Based on code of:
+ * Andrea Buscarinu - <andrea.buscarinu@gmail.com>
+ * Michele Campus - <campus@ntop.org>
+ *
*/
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_QUIC
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_QUIC
#include "ndpi_api.h"
@@ -109,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;
@@ -120,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);
}
}
@@ -148,5 +148,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 e0eb2657b..1c85f48d7 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 9ce692893..bc59ea1fb 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 4b51908fd..cb1e2e39b 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 157b2e0e0..8cc3dd16d 100644
--- a/src/lib/protocols/rsync.c
+++ b/src/lib/protocols/rsync.c
@@ -2,7 +2,7 @@
* rsync.c
*
* Copyright (C) 2013 Remy Mudingay <mudingay@ill.fr>
- * 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 b924b476d..77903d6cc 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 52492a290..9bf73fecd 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 38cd62504..0ccc08594 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 e20c53065..9620dd504 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 6eb9bf149..522d9ef5c 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 <gio@debian.org>
*
@@ -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 75b631abc..cb1acff8d 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 2115c574f..10486c0bd 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 5edd377c6..1436b2cec 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 0acebf271..5ec54dbdf 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 ea571961f..35dcb0161 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,20 +19,26 @@
*/
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_SKYPE
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SKYPE
#include "ndpi_api.h"
+static void ndpi_skype_report_protocol(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, NDPI_PROTOCOL_SKYPE_CALL, NDPI_PROTOCOL_SKYPE);
+}
-static void ndpi_check_skype(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow)
-{
+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;
@@ -41,25 +47,33 @@ 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 */
&& (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;
+
+ // return;
}
+
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) {
@@ -73,9 +87,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);
}
@@ -112,5 +126,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 6ac7e282a..c6b0676b6 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,10 +22,6 @@
*/
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_SMB
-
-#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SMB
-
#include "ndpi_api.h"
@@ -45,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,
@@ -66,4 +66,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 1bd2a870b..444516cd3 100644
--- a/src/lib/protocols/smpp.c
+++ b/src/lib/protocols/smpp.c
@@ -2,7 +2,7 @@
* smpp.c
*
* Copyright (C) 2016 - Damir Franusic <df@release14.org>
- * 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_proto.c
index 6a2f2624f..77ad4d233 100644
--- a/src/lib/protocols/snmp.c
+++ b/src/lib/protocols/snmp_proto.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"
@@ -125,7 +123,6 @@ void ndpi_search_snmp(struct ndpi_detection_module_struct *ndpi_struct, struct n
}
excl:
NDPI_EXCLUDE_PROTO(ndpi_struct, flow);
-
}
@@ -141,4 +138,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 32c83934a..36c18ef54 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 <tomasz@skatnet.dk>
*
* 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 604022714..9211a4b85 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"
@@ -192,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.
@@ -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 3e8009454..c40213bf7 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 8f4bbb32c..de1b548be 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"
@@ -51,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) {
@@ -278,5 +278,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 f3b23aadb..a180a1ea7 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"
@@ -90,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);
@@ -140,4 +146,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 ce681d9b6..6b2bbd188 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"
@@ -45,7 +43,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) {
@@ -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 89b359040..1a20078c3 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 5c65b83c1..25d535a57 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,14 +23,11 @@
#include "ndpi_protocol_ids.h"
-
-#ifdef NDPI_PROTOCOL_SSL
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_SSL
#include "ndpi_api.h"
-/* #define CERTIFICATE_DEBUG 1 */
+// #define CERTIFICATE_DEBUG 1
#define NDPI_MAX_SSL_REQUEST_SIZE 10000
/* Skype.c */
@@ -42,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
@@ -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;
}
@@ -251,32 +246,56 @@ 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;
+#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])
@@ -289,13 +308,15 @@ 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) {
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 */);
}
@@ -321,24 +342,25 @@ 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++;
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;
}
/* 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;
@@ -373,36 +395,40 @@ 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 <g.costa@xplico.org> */
- }
-#ifdef NDPI_PROTOCOL_TOR
- if(ndpi_is_ssl_tor(ndpi_struct, flow, certificate) != 0)
- return(rc);
-#endif
+ /* 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->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);
+ }
+
+ 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 <g.costa@xplico.org> */
+ }
+
+ if(ndpi_is_ssl_tor(ndpi_struct, flow, certificate) != 0)
+ return(rc);
}
if(((packet->ssl_certificate_num_checks >= 2)
&& 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);
- }
+ }
+ }
}
- }
return(0);
}
@@ -410,24 +436,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 +462,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 +498,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);
@@ -491,7 +512,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);
}
}
@@ -502,13 +523,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
@@ -527,16 +545,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;
}
}
@@ -547,16 +565,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;
}
}
@@ -614,7 +632,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 */
@@ -670,6 +688,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 &&
@@ -696,7 +725,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;
@@ -726,5 +755,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 73cdd0b12..8c344d78d 100644
--- a/src/lib/protocols/starcraft.c
+++ b/src/lib/protocols/starcraft.c
@@ -2,7 +2,7 @@
* starcraft.c
*
* Copyright (C) 2015 - Matteo Bracci <matteobracci1@gmail.com>
-* 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 8bd75b1a3..00c7ba648 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 64eaa04fe..0a737baf9 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 8f374ff59..c169a47db 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"
@@ -108,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)
@@ -121,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)
@@ -191,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,
@@ -209,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,
@@ -242,5 +255,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 d83cd99f7..fc51fc065 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 407d36b3b..2d28182df 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 df13c9756..214a2fe99 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 f06e40a73..1fa39ff43 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 d80f5f6b5..79be38eae 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 264e83aa1..33d19e1dc 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 2439f997b..e377d09a4 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"
@@ -34,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");
@@ -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 082e04326..f3da3463c 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 384436f13..754f68f60 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 19bfa34aa..7ee4105e8 100644
--- a/src/lib/protocols/tinc.c
+++ b/src/lib/protocols/tinc.c
@@ -2,7 +2,7 @@
* tinc.c
*
* Copyright (C) 2017 - William Guglielmo <william@deselmo.com>
- * 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 462833db0..f1c6f586a 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 <mudingay@ill.fr>
*
*/
#include "ndpi_protocol_ids.h"
-#ifdef NDPI_PROTOCOL_TOR
-
#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_TOR
#include "ndpi_api.h"
@@ -22,7 +20,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 +71,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 {
@@ -133,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 ceee278b9..eafce38c4 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 2160a5afa..ce84c7de3 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 d8392fda7..2e35d1d98 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/upnp.c b/src/lib/protocols/upnp.c
new file mode 100644
index 000000000..1706d021d
--- /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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#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, "<?xml", 5) == 0)
+ ) {
+ NDPI_LOG_INFO(ndpi_struct,"found teredo\n");
+ ndpi_int_change_protocol(ndpi_struct, flow, NDPI_PROTOCOL_UPNP, NDPI_PROTOCOL_UNKNOWN);
+ } else {
+ NDPI_EXCLUDE_PROTO(ndpi_struct, flow);
+ }
+}
+
+
+void init_upnp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id,
+ NDPI_PROTOCOL_BITMASK *detection_bitmask) {
+ ndpi_set_bitmask_protocol_detection("UPNP", ndpi_struct, detection_bitmask, *id,
+ NDPI_PROTOCOL_UPNP,
+ ndpi_search_upnp,
+ NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD,
+ SAVE_DETECTION_BITMASK_AS_UNKNOWN,
+ ADD_TO_DETECTION_BITMASK);
+ *id += 1;
+}
+
diff --git a/src/lib/protocols/usenet.c b/src/lib/protocols/usenet.c
index 0a995d6f8..6a2970d6e 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 844eaf84f..eef5c065f 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 517b74b91..65e227234 100644
--- a/src/lib/protocols/viber.c
+++ b/src/lib/protocols/viber.c
@@ -2,7 +2,7 @@
* viber.c
*
* Copyright (C) 2013 Remy Mudingay <mudingay@ill.fr>
- * 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 34fe84ab9..138d09bbc 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 6bbb26c6d..65988bce6 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 bbc1d8388..3f970bd25 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 b079dcd01..6964a8e0e 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"
@@ -35,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);
}
@@ -55,6 +71,3 @@ void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct,
ADD_TO_DETECTION_BITMASK);
*id += 1;
}
-
-
-#endif
diff --git a/src/lib/protocols/whoisdas.c b/src/lib/protocols/whoisdas.c
index 291ae15ca..335aa6f65 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 534addc7d..d179ef526 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 bfcf3f4e1..acb010a85 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 3182c191c..5d1f64d43 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 71bcd9c69..35b08b91b 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 1144fb4ef..3be953939 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 c3e514dda..3b0c02d80 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 c7c8e9519..aa73d4a6d 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
diff --git a/src/lib/third_party/include/actypes.h b/src/lib/third_party/include/actypes.h
index 807e5026a..5a94b63a1 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;
+ unsigned int 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 ea92e4a1b..192a0e728 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/include/hash.h b/src/lib/third_party/include/ht_hash.h
index 8862671b1..2251706e4 100644
--- a/src/lib/third_party/include/hash.h
+++ b/src/lib/third_party/include/ht_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;
@@ -23,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_ */
diff --git a/src/lib/third_party/include/lruc.h b/src/lib/third_party/include/lruc.h
new file mode 100644
index 000000000..55fb271fe
--- /dev/null
+++ b/src/lib/third_party/include/lruc.h
@@ -0,0 +1,55 @@
+#include <pthread.h>
+#include <stdint.h>
+#include <time.h>
+
+#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/include/ndpi_patricia.h b/src/lib/third_party/include/ndpi_patricia.h
index bb1806877..c61513f92 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 {
diff --git a/src/lib/third_party/src/ahocorasick.c b/src/lib/third_party/src/ahocorasick.c
index fd6541dd7..371dc06f8 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/hash.c b/src/lib/third_party/src/ht_hash.c
index 792d6086e..4eaac9bcb 100644
--- a/src/lib/third_party/src/hash.c
+++ b/src/lib/third_party/src/ht_hash.c
@@ -1,11 +1,13 @@
/* Based on https://gist.github.com/tonious/1377667 */
+#include <stdint.h>
+#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
-#include "hash.h"
+#include "ht_hash.h"
/* #define HASH_DEBUG 1 */
diff --git a/src/lib/third_party/src/lruc.c b/src/lib/third_party/src/lruc.c
new file mode 100644
index 000000000..f08fb2ce1
--- /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 <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <err.h>
+
+// ------------------------------------------
+// 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;
+}
diff --git a/src/lib/third_party/src/node.c b/src/lib/third_party/src/node.c
index a43cc59a6..4da04de9b 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++;
}
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 000000000..3e4932147
--- /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 <stdint.h>
+
+
+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;
+}