diff options
Diffstat (limited to 'src/lib')
332 files changed, 19928 insertions, 14458 deletions
diff --git a/src/lib/inc_generated/ndpi_amazon_aws_match.c.inc b/src/lib/inc_generated/ndpi_amazon_aws_match.c.inc index 43e4509f0..1543fcaa8 100644 --- a/src/lib/inc_generated/ndpi_amazon_aws_match.c.inc +++ b/src/lib/inc_generated/ndpi_amazon_aws_match.c.inc @@ -27,6 +27,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x03020800 /* 3.2.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03023000 /* 3.2.48.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03023800 /* 3.2.56.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03023A00 /* 3.2.58.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03030000 /* 3.3.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03030200 /* 3.3.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03030500 /* 3.3.5.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, @@ -100,40 +101,13 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x03A00000 /* 3.160.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03A80000 /* 3.168.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03AC0000 /* 3.172.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x03AD0000 /* 3.173.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x03AD8000 /* 3.173.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x03AD0000 /* 3.173.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03AE0000 /* 3.174.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03D00000 /* 3.208.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03E00000 /* 3.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x03F80000 /* 3.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C0000 /* 5.60.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C0800 /* 5.60.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C1000 /* 5.60.16.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C1800 /* 5.60.24.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C2000 /* 5.60.32.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C2800 /* 5.60.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C3000 /* 5.60.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C3800 /* 5.60.56.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C4000 /* 5.60.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C4800 /* 5.60.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C5000 /* 5.60.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C5800 /* 5.60.88.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C6000 /* 5.60.96.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C6800 /* 5.60.104.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C7000 /* 5.60.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C7800 /* 5.60.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C8000 /* 5.60.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C8800 /* 5.60.136.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C9000 /* 5.60.144.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053C9800 /* 5.60.152.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CA400 /* 5.60.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CAC00 /* 5.60.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CB400 /* 5.60.180.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CBC00 /* 5.60.188.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CC400 /* 5.60.196.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CC800 /* 5.60.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CD000 /* 5.60.208.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x053CE000 /* 5.60.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x05AE0000 /* 5.174.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x05B36000 /* 5.179.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D200000 /* 13.32.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D230000 /* 13.35.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D240000 /* 13.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, @@ -141,8 +115,17 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0D300000 /* 13.48.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D700000 /* 13.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D7C0000 /* 13.124.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D800000 /* 13.128.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D820000 /* 13.130.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D860000 /* 13.134.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D900000 /* 13.144.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D920000 /* 13.146.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0D960000 /* 13.150.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D980000 /* 13.152.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D9A0000 /* 13.154.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0D9E0000 /* 13.158.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DA00000 /* 13.160.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DA60000 /* 13.166.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DB80000 /* 13.184.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DC00000 /* 13.192.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DE00000 /* 13.224.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, @@ -152,10 +135,14 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0DF84800 /* 13.248.72.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DF84B00 /* 13.248.75.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DF84C00 /* 13.248.76.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0DF85000 /* 13.248.80.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DF86000 /* 13.248.96.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DF88000 /* 13.248.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DF90000 /* 13.249.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0DFA0000 /* 13.250.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F670000 /* 15.103.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F800000 /* 15.128.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0F860000 /* 15.134.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0F910000 /* 15.145.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0F910400 /* 15.145.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0F910800 /* 15.145.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -173,6 +160,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FB16400 /* 15.177.100.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FB16600 /* 15.177.102.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FB16800 /* 15.177.104.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FB16A00 /* 15.177.106.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FB50000 /* 15.181.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FB58000 /* 15.181.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FB5C000 /* 15.181.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, @@ -189,9 +177,13 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FBE2000 /* 15.190.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FBE5000 /* 15.190.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FBE6000 /* 15.190.96.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x0FBE8000 /* 15.190.128.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBE8000 /* 15.190.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FBEEC00 /* 15.190.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FBEF000 /* 15.190.240.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FC10000 /* 15.193.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC18000 /* 15.193.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC1A000 /* 15.193.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FC1B000 /* 15.193.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FC50000 /* 15.197.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FC52000 /* 15.197.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FC54000 /* 15.197.64.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, @@ -199,6 +191,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FC80000 /* 15.200.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FCD0000 /* 15.205.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FCE0000 /* 15.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FD80000 /* 15.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FDC0000 /* 15.220.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FDC2000 /* 15.220.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FDC2800 /* 15.220.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, @@ -220,6 +213,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FDDA000 /* 15.221.160.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FDDB000 /* 15.221.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FDE0000 /* 15.222.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE00000 /* 15.224.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE40000 /* 15.228.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60004 /* 15.230.0.4/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60008 /* 15.230.0.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, @@ -227,6 +221,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FE6000E /* 15.230.0.14/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60100 /* 15.230.1.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60300 /* 15.230.3.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE60410 /* 15.230.4.16/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60413 /* 15.230.4.19/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60480 /* 15.230.4.128/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE60494 /* 15.230.4.148/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, @@ -301,6 +296,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FE67900 /* 15.230.121.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE67908 /* 15.230.121.8/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE67A00 /* 15.230.122.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE67B00 /* 15.230.123.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE68100 /* 15.230.129.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE68200 /* 15.230.130.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE68400 /* 15.230.132.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, @@ -356,7 +352,9 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FE6FE00 /* 15.230.254.0/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE6FE04 /* 15.230.254.4/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FE6FF00 /* 15.230.255.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FE80000 /* 15.232.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FEC0000 /* 15.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF00000 /* 15.240.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF80800 /* 15.248.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF81000 /* 15.248.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF82000 /* 15.248.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -365,12 +363,13 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x0FF84000 /* 15.248.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF85000 /* 15.248.80.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF86800 /* 15.248.104.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF86A00 /* 15.248.106.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF87000 /* 15.248.112.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF88000 /* 15.248.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF88800 /* 15.248.136.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FF88A00 /* 15.248.138.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x0FF88C00 /* 15.248.140.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x0FF89000 /* 15.248.144.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF88C00 /* 15.248.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x0FF89000 /* 15.248.144.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FFB0000 /* 15.251.0.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FFB0014 /* 15.251.0.20/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x0FFB0018 /* 15.251.0.24/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, @@ -396,32 +395,50 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x100C4700 /* 16.12.71.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x100C4800 /* 16.12.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x100C5000 /* 16.12.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C5400 /* 16.12.84.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100C5600 /* 16.12.86.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x100F0000 /* 16.15.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x100F1000 /* 16.15.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x100FB000 /* 16.15.176.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x100FC000 /* 16.15.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10100000 /* 16.16.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10120000 /* 16.18.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10160000 /* 16.22.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10180000 /* 16.24.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x10320000 /* 16.50.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x10340000 /* 16.52.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x10380000 /* 16.56.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10300000 /* 16.48.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10380000 /* 16.56.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10388000 /* 16.56.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10390000 /* 16.57.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x103E0000 /* 16.62.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103A0000 /* 16.58.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x103C0000 /* 16.60.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10400000 /* 16.64.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10410000 /* 16.65.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10420000 /* 16.66.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x104E0000 /* 16.78.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x109A0000 /* 16.154.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x104C0000 /* 16.76.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x106A0000 /* 16.106.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10700000 /* 16.112.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x108C0000 /* 16.140.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10900000 /* 16.144.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10980000 /* 16.152.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x109C0000 /* 16.156.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10A20000 /* 16.162.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10A40000 /* 16.164.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10A80000 /* 16.168.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10AE0000 /* 16.174.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10B00000 /* 16.176.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10B40000 /* 16.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10B60000 /* 16.182.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x10B80000 /* 16.184.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x12220000 /* 18.34.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10BC0000 /* 16.188.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10C00000 /* 16.192.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10CE0000 /* 16.206.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x10D00000 /* 16.208.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12220000 /* 18.34.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12223000 /* 18.34.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12224800 /* 18.34.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x1222E800 /* 18.34.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x1222F000 /* 18.34.240.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222F400 /* 18.34.244.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1222FC00 /* 18.34.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x123C0000 /* 18.60.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12400000 /* 18.64.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12440000 /* 18.68.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, @@ -437,7 +454,8 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x12604000 /* 18.96.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12608000 /* 18.96.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12610000 /* 18.97.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x12614000 /* 18.97.64.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12614000 /* 18.97.64.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x12616000 /* 18.97.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12618000 /* 18.97.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12620000 /* 18.98.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x12640000 /* 18.100.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, @@ -467,13 +485,24 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x12FE0000 /* 18.254.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x17140000 /* 23.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x17A00000 /* 23.160.0.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x17E4C000 /* 23.228.192.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x17E4C200 /* 23.228.194.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x17FE0000 /* 23.254.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x17FE1000 /* 23.254.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x1B000000 /* 27.0.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1FDCDC00 /* 31.220.220.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x1FDCEB00 /* 31.220.235.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x20C00000 /* 32.192.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x20EC0000 /* 32.236.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x20F00000 /* 32.240.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x22C00000 /* 34.192.0.0/10 */, 10, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23328000 /* 35.50.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23328400 /* 35.50.132.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23328600 /* 35.50.134.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23120000 /* 35.18.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x231A0000 /* 35.26.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x231C0000 /* 35.28.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x232A0000 /* 35.42.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x232C0000 /* 35.44.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23300000 /* 35.48.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23328000 /* 35.50.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23328E00 /* 35.50.142.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23329000 /* 35.50.144.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2332B000 /* 35.50.176.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, @@ -484,36 +513,36 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x2332D200 /* 35.50.210.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2332D400 /* 35.50.212.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2332D600 /* 35.50.214.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x2332E900 /* 35.50.233.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2332E000 /* 35.50.224.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2332E200 /* 35.50.226.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2332E400 /* 35.50.228.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2332E800 /* 35.50.232.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23340000 /* 35.52.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23380000 /* 35.56.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x233C0000 /* 35.60.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23474000 /* 35.71.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23474800 /* 35.71.72.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23476000 /* 35.71.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23477000 /* 35.71.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23477800 /* 35.71.120.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23477C00 /* 35.71.124.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23477E00 /* 35.71.126.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23476000 /* 35.71.96.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23478000 /* 35.71.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23480000 /* 35.72.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23500000 /* 35.80.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23600000 /* 35.96.0.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23600400 /* 35.96.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23600600 /* 35.96.6.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23600800 /* 35.96.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23600C00 /* 35.96.12.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23601000 /* 35.96.16.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23602000 /* 35.96.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x23604000 /* 35.96.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x23600000 /* 35.96.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23608000 /* 35.96.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2360F000 /* 35.96.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2360F800 /* 35.96.248.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23980000 /* 35.152.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23A00000 /* 35.160.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x23B00000 /* 35.176.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2467E800 /* 36.103.232.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2467E880 /* 36.103.232.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28260000 /* 40.38.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x28A40000 /* 40.164.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x28AC0000 /* 40.172.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x28B00000 /* 40.176.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x28B40000 /* 40.180.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28BA0000 /* 40.186.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x28C00000 /* 40.192.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x28EE0000 /* 40.238.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2BC00000 /* 43.192.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2BC10000 /* 43.193.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2BC14000 /* 43.193.64.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, @@ -528,6 +557,8 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x2BF92C00 /* 43.249.44.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2BFAC000 /* 43.250.192.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2CC00000 /* 44.192.0.0/10 */, 10, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2D220000 /* 45.34.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2D398000 /* 45.57.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2D718000 /* 45.113.128.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2E338000 /* 46.51.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2E33C000 /* 46.51.192.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, @@ -535,6 +566,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x2E33D800 /* 46.51.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2E33E000 /* 46.51.224.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2E890000 /* 46.137.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x2EA80000 /* 46.168.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x2F800000 /* 47.128.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x32100000 /* 50.16.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x32700000 /* 50.112.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, @@ -548,18 +580,21 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x33006000 /* 51.0.96.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33007000 /* 51.0.112.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33008000 /* 51.0.128.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x3300FC00 /* 51.0.252.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33100000 /* 51.16.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33140000 /* 51.20.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33180000 /* 51.24.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33220000 /* 51.34.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x332C0000 /* 51.44.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33300000 /* 51.48.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33540000 /* 51.84.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x335C0000 /* 51.92.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33600000 /* 51.96.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33640000 /* 51.100.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33700000 /* 51.112.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x33760000 /* 51.118.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x33C80000 /* 51.200.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33760000 /* 51.118.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33A80000 /* 51.168.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x33C80000 /* 51.200.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x33E00000 /* 51.224.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x34000000 /* 52.0.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, { 0x34200000 /* 52.32.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, @@ -611,13 +646,17 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x345D20B4 /* 52.93.32.180/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D20B7 /* 52.93.32.183/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D20B8 /* 52.93.32.184/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D2108 /* 52.93.33.8/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D21E0 /* 52.93.33.224/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D21E6 /* 52.93.33.230/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D2200 /* 52.93.34.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D2400 /* 52.93.36.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D2800 /* 52.93.40.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D2C00 /* 52.93.44.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D2F00 /* 52.93.47.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D3000 /* 52.93.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D34A0 /* 52.93.52.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D3500 /* 52.93.53.0/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D3790 /* 52.93.55.144/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D3794 /* 52.93.55.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D3798 /* 52.93.55.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, @@ -632,7 +671,15 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x345D4728 /* 52.93.71.40/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D4800 /* 52.93.72.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D5000 /* 52.93.80.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D54A0 /* 52.93.84.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D54C0 /* 52.93.84.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D56A0 /* 52.93.86.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D56C0 /* 52.93.86.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D5760 /* 52.93.87.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D58A0 /* 52.93.88.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D58C0 /* 52.93.88.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5AA0 /* 52.93.90.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D5AC0 /* 52.93.90.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D5B60 /* 52.93.91.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D5B70 /* 52.93.91.112/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D5C00 /* 52.93.92.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, @@ -725,7 +772,12 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x345D9480 /* 52.93.148.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D9500 /* 52.93.149.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D9600 /* 52.93.150.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D98A0 /* 52.93.152.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D98C0 /* 52.93.152.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9940 /* 52.93.153.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D9950 /* 52.93.153.80/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9960 /* 52.93.153.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345D9980 /* 52.93.153.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D9994 /* 52.93.153.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D99A8 /* 52.93.153.168/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345D99B0 /* 52.93.153.176/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, @@ -745,6 +797,11 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x345DC760 /* 52.93.199.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345DC950 /* 52.93.201.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345DC960 /* 52.93.201.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE4A0 /* 52.93.228.160/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE4C0 /* 52.93.228.192/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE540 /* 52.93.229.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE560 /* 52.93.229.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345DE580 /* 52.93.229.128/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345DE594 /* 52.93.229.148/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345DEC00 /* 52.93.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345DF000 /* 52.93.240.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, @@ -803,6 +860,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x345EFA50 /* 52.94.250.80/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345EFA60 /* 52.94.250.96/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345EFA80 /* 52.94.250.128/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x345EFAA0 /* 52.94.250.160/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345EFC00 /* 52.94.252.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345F0000 /* 52.95.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x345F1000 /* 52.95.16.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -921,16 +979,20 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x34DE0000 /* 52.222.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x34DF0000 /* 52.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x34DFC000 /* 52.223.192.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36060000 /* 54.6.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36140000 /* 54.20.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36190000 /* 54.25.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x36190F00 /* 54.25.15.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36190E00 /* 54.25.14.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36191400 /* 54.25.20.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36195200 /* 54.25.82.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x361AA600 /* 54.26.166.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36200000 /* 54.32.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x362E0000 /* 54.46.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36360000 /* 54.54.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36400000 /* 54.64.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36700000 /* 54.112.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36740000 /* 54.116.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36880000 /* 54.136.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36900000 /* 54.144.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36A00000 /* 54.160.0.0/11 */, 11, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36C00000 /* 54.192.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, @@ -958,6 +1020,9 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x36EE0000 /* 54.238.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36EF0000 /* 54.239.0.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36EF2000 /* 54.239.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF2880 /* 54.239.40.128/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF2884 /* 54.239.40.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x36EF2886 /* 54.239.40.134/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36EF2898 /* 54.239.40.152/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36EF3000 /* 54.239.48.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36EF4000 /* 54.239.64.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1042,6 +1107,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x36F20000 /* 54.242.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36F40000 /* 54.244.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x36F80000 /* 54.248.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x380A0000 /* 56.10.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x38300000 /* 56.48.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x38440000 /* 56.68.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x38450000 /* 56.69.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1058,7 +1124,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x38A40000 /* 56.164.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x38B80000 /* 56.184.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x38E40000 /* 56.228.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x38F00000 /* 56.240.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x38F00000 /* 56.240.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x39B40000 /* 57.180.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x3AFE8A00 /* 58.254.138.0/25 */, 25, NDPI_PROTOCOL_AMAZON_AWS }, { 0x3AFE8A80 /* 58.254.138.128/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1101,32 +1167,36 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x47840000 /* 71.132.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x47884000 /* 71.136.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x47890000 /* 71.137.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x478D0000 /* 71.141.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x47980000 /* 71.152.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4815C000 /* 72.21.192.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x48290000 /* 72.41.0.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x482C2000 /* 72.44.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x48F20000 /* 72.242.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B020000 /* 75.2.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B028000 /* 75.2.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B030000 /* 75.3.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B038000 /* 75.3.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4B2D8000 /* 75.45.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B4F0000 /* 75.79.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4B658000 /* 75.101.128.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4CDF0000 /* 76.223.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4CDFA800 /* 76.223.168.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4CDFAA00 /* 76.223.170.0/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4CDFAA20 /* 76.223.170.32/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x4CDFAA40 /* 76.223.170.64/27 */, 27, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x4CDFAA60 /* 76.223.170.96/28 */, 28, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4CDFAA40 /* 76.223.170.64/26 */, 26, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4CDFAC00 /* 76.223.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x4D700000 /* 77.112.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4E0C0000 /* 78.12.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x4F7D0000 /* 79.125.0.0/17 */, 17, NDPI_PROTOCOL_AMAZON_AWS }, { 0x5376F000 /* 83.118.240.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x53774000 /* 83.119.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x53778000 /* 83.119.128.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x57EE5000 /* 87.238.80.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x586C0000 /* 88.108.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x58680000 /* 88.104.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x59300000 /* 89.48.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x5D4D8000 /* 93.77.128.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x5E240000 /* 94.36.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x5F280000 /* 95.40.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x60000000 /* 96.0.0.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, { 0x60004000 /* 96.0.64.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0x60006000 /* 96.0.96.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1177,8 +1247,10 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x6397A000 /* 99.151.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x6397B800 /* 99.151.184.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x63B54000 /* 99.181.64.0/18 */, 18, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x63C80000 /* 99.200.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, { 0x64140000 /* 100.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x64180000 /* 100.24.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x64300000 /* 100.48.0.0/12 */, 12, NDPI_PROTOCOL_AMAZON_AWS }, { 0x67040800 /* 103.4.8.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x6708AC00 /* 103.8.172.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x67353000 /* 103.53.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1186,14 +1258,16 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x68997000 /* 104.153.112.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68997400 /* 104.153.116.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68997600 /* 104.153.118.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68D80000 /* 104.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF380B /* 104.255.56.11/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF380C /* 104.255.56.12/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF380F /* 104.255.56.15/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3810 /* 104.255.56.16/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3814 /* 104.255.56.20/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3817 /* 104.255.56.23/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x68FF3818 /* 104.255.56.24/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x68FF381C /* 104.255.56.28/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3818 /* 104.255.56.24/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF381A /* 104.255.56.26/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF381D /* 104.255.56.29/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3962 /* 104.255.57.98/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3964 /* 104.255.57.100/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3B51 /* 104.255.59.81/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1218,6 +1292,8 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x68FF3BCE /* 104.255.59.206/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3BD0 /* 104.255.59.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x68FF3BD8 /* 104.255.59.216/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3BEE /* 104.255.59.238/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x68FF3BF0 /* 104.255.59.240/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x6B140000 /* 107.20.0.0/14 */, 14, NDPI_PROTOCOL_AMAZON_AWS }, { 0x6BB00000 /* 107.176.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x6C800000 /* 108.128.0.0/13 */, 13, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1254,9 +1330,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x82B0E000 /* 130.176.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0x82B0FE00 /* 130.176.254.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x88080000 /* 136.8.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x88120000 /* 136.18.0.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x88120200 /* 136.18.2.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x88120400 /* 136.18.4.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x88120000 /* 136.18.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x88121200 /* 136.18.18.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x88121400 /* 136.18.20.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x88122000 /* 136.18.32.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1268,12 +1342,13 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x8B382000 /* 139.56.32.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8B382200 /* 139.56.34.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8CB30000 /* 140.179.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, - { 0x8E04A400 /* 142.4.164.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x8DE60000 /* 141.230.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8E04B100 /* 142.4.177.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8E04B200 /* 142.4.178.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8E04B400 /* 142.4.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x8FCC0000 /* 143.204.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x90DC0000 /* 144.220.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96660000 /* 150.102.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE0000 /* 150.222.0.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE0800 /* 150.222.8.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE0C00 /* 150.222.12.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1281,6 +1356,9 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x96DE0F7C /* 150.222.15.124/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE0F80 /* 150.222.15.128/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE0F84 /* 150.222.15.132/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1820 /* 150.222.24.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1840 /* 150.222.24.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE1920 /* 150.222.25.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE1A00 /* 150.222.26.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE1C00 /* 150.222.28.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE2000 /* 150.222.32.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1292,6 +1370,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x96DE2E00 /* 150.222.46.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE3000 /* 150.222.48.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE3400 /* 150.222.52.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE3600 /* 150.222.54.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE4000 /* 150.222.64.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE4474 /* 150.222.68.116/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE4500 /* 150.222.69.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1309,9 +1388,17 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x96DE8B74 /* 150.222.139.116/30 */, 30, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE8B78 /* 150.222.139.120/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DE8C00 /* 150.222.140.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9020 /* 150.222.144.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9040 /* 150.222.144.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9060 /* 150.222.144.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9820 /* 150.222.152.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9840 /* 150.222.152.64/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DE9860 /* 150.222.152.96/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA020 /* 150.222.160.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEA4D0 /* 150.222.164.208/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEA4DC /* 150.222.164.220/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEA4DE /* 150.222.164.222/32 */, 32, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x96DEA820 /* 150.222.168.32/29 */, 29, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEB000 /* 150.222.176.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEB400 /* 150.222.180.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x96DEB60E /* 150.222.182.14/31 */, 31, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1356,6 +1443,8 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0x9C040000 /* 156.4.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0x9DAF0000 /* 157.175.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0x9DF10000 /* 157.241.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9EFC0000 /* 158.252.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, + { 0x9FF88500 /* 159.248.133.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0x9FF8C800 /* 159.248.200.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x9FF8D800 /* 159.248.216.0/21 */, 21, NDPI_PROTOCOL_AMAZON_AWS }, { 0x9FF8E000 /* 159.248.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1377,9 +1466,11 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0xA2FAEC00 /* 162.250.236.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0xA6750000 /* 166.117.0.0/16 */, 16, NDPI_PROTOCOL_AMAZON_AWS }, { 0xA8B90400 /* 168.185.4.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xA8C00000 /* 168.192.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAC606100 /* 172.96.97.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAC606200 /* 172.96.98.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAC606E00 /* 172.96.110.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xAC6A0000 /* 172.106.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAD53C000 /* 173.83.192.0/22 */, 22, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAD53C400 /* 173.83.196.0/23 */, 23, NDPI_PROTOCOL_AMAZON_AWS }, { 0xAD53C600 /* 173.83.198.0/24 */, 24, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1448,6 +1539,7 @@ static ndpi_network ndpi_protocol_amazon_aws_protocol_list[] = { { 0xD827A000 /* 216.39.160.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, { 0xD8892000 /* 216.137.32.0/19 */, 19, NDPI_PROTOCOL_AMAZON_AWS }, { 0xD8B6E000 /* 216.182.224.0/20 */, 20, NDPI_PROTOCOL_AMAZON_AWS }, + { 0xD8D80000 /* 216.216.0.0/15 */, 15, NDPI_PROTOCOL_AMAZON_AWS }, /* End */ { 0x0, 0, 0 } }; @@ -1457,16 +1549,17 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2001:3fc1:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc2:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2001:3fc3:1800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:5800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:6800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc3:a800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2001:3fc4:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc5:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc5:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc6::", 55, NDPI_PROTOCOL_AMAZON_AWS }, + { "2001:3fc6:100::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc7:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc7:1800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc7:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1481,6 +1574,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2001:3fc7:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc7:e800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2001:3fc7:f800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2400:6500:0:3::", 64, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:6500:0:9::1", 128, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:6500:0:9::2", 127, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:6500:0:9::4", 128, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1493,15 +1587,14 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2400:7fc0::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:500::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2400:7fc0:2100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2400:7fc0:2200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2400:7fc0:2000::", 38, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2400:7fc0:2600::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2a00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2c00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2e80::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:2f00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2400:7fc0:3000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2400:7fc0:a000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1510,8 +1603,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2404:c2c0::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:500::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2404:c2c0:2100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2404:c2c0:2200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2404:c2c0:2000::", 38, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:2400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:2600::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1519,14 +1611,14 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2404:c2c0:2c00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:2e80::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:2f00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2404:c2c0:3100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2404:c2c0:3000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2404:c2c0:c000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:da00:2800::", 64, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da00:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da00:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1554,6 +1646,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:da18:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da19::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da1a::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da1a:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da1b::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da1c::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da1c:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1574,12 +1667,30 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:da28:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da29::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2a::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da2a:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2b::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2c::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2c:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2d::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2e::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da2f::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:da30:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da32:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da32:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:da32:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1733,24 +1844,24 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:daa0:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daa0:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daa0:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dab8:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dab9:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2406:daef:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf0:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf0:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf0:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1768,23 +1879,6 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:daf0:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf0:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf0:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf1:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf2:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf2:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf2:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1819,23 +1913,6 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:daf4:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf4:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf4:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:c800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:daf5:f000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf6:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf6:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:daf6:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -1926,13 +2003,11 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2406:dafc:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dafc:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:4800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:7000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2406:dafc:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2406:dafc:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2037,6 +2112,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1f12::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f12:4000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f12:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f12:c000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f13::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f13:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f14::", 34, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2077,6 +2153,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1f21:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f22::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f22:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f22:c000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f23::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f23:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f24::", 36, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2110,6 +2187,16 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1f2e:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f2f:4000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f2f:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1f30:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f32:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f32:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1f32:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2200,16 +2287,17 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1fa0:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1fa0:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1fa0:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1fb8:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1fb8:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1fef:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff0:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff0:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff0:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2220,16 +2308,8 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1ff0:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff0:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff0:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff1:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff1:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff1:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff2:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff2:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff2:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2250,16 +2330,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1ff4:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff4:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff4:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff5:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff5:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff6:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff6:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff6:4000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2297,18 +2368,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:1ff9:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff9:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff9:7400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8100::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8110::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8120::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8140::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8150::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8180::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:8190::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:81a0::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:81c0::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:81d0::", 46, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:1ff9:81e0::", 46, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:1ff9:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff9:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff9:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:1ff9:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2414,16 +2474,29 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:9000:f000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f000:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f001::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f001:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f002::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f002:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f002:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f003:a200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f004::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f004:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f004:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f004:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f005:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f007::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00c::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00c:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f00d::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f00d:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00e::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00e:400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00e:600::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f00f::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f00f:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f00f:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f00f:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:0:100::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:0:200::", 59, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:0:300::", 56, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2443,6 +2516,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:f0f0:1:fe00::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:2::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:4::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f0f0:8::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:10::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:20::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:30::", 44, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2458,7 +2532,10 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:f0f0:f00::", 54, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:f00:400::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:1000::", 44, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f0f0:11ff::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:4000::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f0f0:5400::", 47, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f0f0:5402::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:5500::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:5502::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f0:5510::", 44, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2467,11 +2544,8 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2600:f0f1:8801::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f1:8802::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f2:7000::", 44, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:f0f3:ce00::", 48, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:f0f3:ce40::", 48, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:f0f3:ce80::", 48, NDPI_PROTOCOL_AMAZON_AWS }, - { "2600:f0f3:cec0::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0f3:f000::", 44, NDPI_PROTOCOL_AMAZON_AWS }, + { "2600:f0fb:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0fb:e000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2600:f0fb:f000::", 44, NDPI_PROTOCOL_AMAZON_AWS }, { "2602:f7db::", 44, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2492,28 +2566,59 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2605:b140:1000::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:400::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:a00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:1000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:1400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:1800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:2100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:2200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:2400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:2800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:2a00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:3200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:3e00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:5800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:6100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:8000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:8400::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:8800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:8a00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:9000::", 39, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:9400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:9800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:a100::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:a200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:a400::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:a800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:aa00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:b200::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:be00::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffd2::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffd4::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffe0::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffe2::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffe4::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffe6::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffe8::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffeb::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffed::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:f40:ffef::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:fff0::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:fff2::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:fff6::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:f40:fff8::", 45, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:9fc::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:2000::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:2270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:3000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:7000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:7200::", 59, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:7220::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1000:7240::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:7270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:7280::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1000:72d0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:72e0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1000:8000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1042::", 56, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2525,17 +2630,19 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2606:7b40:10ff:9000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:a000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:a200::", 58, NDPI_PROTOCOL_AMAZON_AWS }, - { "2606:7b40:10ff:a250::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:10ff:a240::", 59, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:a270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:a280::", 59, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:10ff:a2d0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:a2e0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:b000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:d000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:d200::", 58, NDPI_PROTOCOL_AMAZON_AWS }, - { "2606:7b40:10ff:d250::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:10ff:d240::", 59, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:d270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:d280::", 59, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:10ff:d2d0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:d2f0::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:e000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:e270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2543,14 +2650,38 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2606:7b40:10ff:f270::", 60, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:10ff:ff00::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1800::", 48, NDPI_PROTOCOL_AMAZON_AWS }, - { "2606:7b40:1b00:700::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1a2f:c310::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1a3f:c310::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1a4f:c310::", 60, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b00:500::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b00:600::", 55, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b05:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b06:8000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b06:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b07:4000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b08::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b09::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0c::", 56, NDPI_PROTOCOL_AMAZON_AWS }, - { "2606:7b40:1b0f:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0c:4000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0c:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0d::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0d:4000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0d:8000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0d:c000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0e::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0e:4000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0f::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0f:4000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0f:8000::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0f:c000::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0f:ef00::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0f:f000::", 54, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0f:f400::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:1b0f:f900::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0f:fa00::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2606:7b40:1b0f:fd00::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:f000:1500::", 56, NDPI_PROTOCOL_AMAZON_AWS }, + { "2606:7b40:f000:1600::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2620:107:3000::", 47, NDPI_PROTOCOL_AMAZON_AWS }, { "2620:107:3002::", 64, NDPI_PROTOCOL_AMAZON_AWS }, { "2620:107:300f::", 48, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2605,7 +2736,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2620:108:d000::", 44, NDPI_PROTOCOL_AMAZON_AWS }, { "2804:800::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2804:800:ff00::", 48, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a01:578:0:13::", 64, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a01:578:0:12::", 63, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:0:7000::", 55, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:0:7200::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:0:7300::1", 128, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2620,8 +2751,10 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a01:578:0:7602::1", 128, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:0:7700::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:0:7800::", 55, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a01:578:0:7a00::", 56, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:3::", 48, NDPI_PROTOCOL_AMAZON_AWS }, { "2a01:578:13::", 48, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d000:800::", 64, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d000:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d000:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d000:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2632,6 +2765,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d000:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d000:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d000:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d010:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d011::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d012::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d014::", 35, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2645,6 +2779,8 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d01c::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d01d::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d01e::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d01f::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d020:8000::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d021::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d022::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d024::", 36, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2658,6 +2794,8 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d02c::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d02d::", 36, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d02e::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d02f::", 36, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d030:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d030:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d030:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d030:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2669,6 +2807,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d030:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d030:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d030:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d031:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d031:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d031:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d031:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2680,6 +2819,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d031:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d031:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d031:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d032:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d032:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d032:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d032:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2691,6 +2831,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d032:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d032:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d032:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d034:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d034:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d034:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d034:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2702,6 +2843,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d034:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d034:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d034:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d035:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d035:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d035:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d035:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2713,6 +2855,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d035:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d035:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d035:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d036:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d036:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d036:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d036:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2724,6 +2867,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d036:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d036:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d036:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d038:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d038:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d038:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d038:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2735,6 +2879,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d038:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d038:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d038:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d03a:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d03a:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d03a:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d03a:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2746,6 +2891,19 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d03a:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d03a:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d03a:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d040:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d050:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d050:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d050:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d050:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2757,17 +2915,19 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d050:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d050:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d050:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d058:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d06f:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d070:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d070:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d070:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d070:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2779,17 +2939,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d070:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d070:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d070:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d071:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d072:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d072:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d072:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d072:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2801,6 +2951,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d072:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d072:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d072:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d074:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d074:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d074:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d074:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2812,17 +2963,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d074:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d074:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d074:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:5000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:6000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d075:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d076:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d076:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d076:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d076:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2834,6 +2975,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d076:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d076:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d076:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d077:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d077:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d077:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d077:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2855,6 +2997,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d078:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d078:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d078:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d079:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d079:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d079:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d079:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2873,6 +3016,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d07a:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07a:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07a:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d07b:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07b:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07b:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07b:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2892,9 +3036,9 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d07c:8000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07c:9000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07c:a000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, - { "2a05:d07c:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07c:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07c:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d07e:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07e:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07e:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07e:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, @@ -2906,6 +3050,7 @@ static ndpi_network6 ndpi_protocol_amazon_aws_protocol_list_6[] = { { "2a05:d07e:b000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07e:c000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07e:e000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, + { "2a05:d07f:800::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07f:1000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07f:2000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, { "2a05:d07f:4000::", 40, NDPI_PROTOCOL_AMAZON_AWS }, diff --git a/src/lib/inc_generated/ndpi_asn_alibaba.c.inc b/src/lib/inc_generated/ndpi_asn_alibaba.c.inc index 1177396a3..a4d0f60c7 100644 --- a/src/lib/inc_generated/ndpi_asn_alibaba.c.inc +++ b/src/lib/inc_generated/ndpi_asn_alibaba.c.inc @@ -22,18 +22,26 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x05B5E000 /* 5.181.224.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x08802000 /* 8.128.32.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x08804000 /* 8.128.64.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x08806000 /* 8.128.96.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, { 0x08810000 /* 8.129.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x08820000 /* 8.130.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x08840000 /* 8.132.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x08880000 /* 8.136.0.0/13 */, 13, NDPI_PROTOCOL_ALIBABA }, { 0x08900000 /* 8.144.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x08940000 /* 8.148.0.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, - { 0x08942000 /* 8.148.32.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08942400 /* 8.148.36.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08942800 /* 8.148.40.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x08944000 /* 8.148.64.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, { 0x08948000 /* 8.148.128.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x08950000 /* 8.149.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, - { 0x08960000 /* 8.150.0.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, - { 0x08980000 /* 8.152.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, - { 0x089C0000 /* 8.156.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, + { 0x08960000 /* 8.150.0.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0x08964000 /* 8.150.64.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x08980000 /* 8.152.0.0/13 */, 13, NDPI_PROTOCOL_ALIBABA }, + { 0x08A00000 /* 8.160.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, + { 0x08A20000 /* 8.162.0.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x08A30000 /* 8.163.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x08D00000 /* 8.208.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x08D10000 /* 8.209.0.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, { 0x08D12400 /* 8.209.36.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, @@ -49,43 +57,47 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x08D5B000 /* 8.213.176.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, { 0x08D5C000 /* 8.213.192.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, { 0x08D60000 /* 8.214.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, - { 0x08D80000 /* 8.216.0.0/13 */, 13, NDPI_PROTOCOL_ALIBABA }, + { 0x08D80000 /* 8.216.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, + { 0x08DC4000 /* 8.220.64.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, + { 0x08DC8000 /* 8.220.128.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, + { 0x08DD0000 /* 8.221.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, + { 0x08DE0000 /* 8.222.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x0E017000 /* 14.1.112.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x262F8000 /* 38.47.128.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, { 0x27600000 /* 39.96.0.0/13 */, 13, NDPI_PROTOCOL_ALIBABA }, { 0x27680000 /* 39.104.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x276C0000 /* 39.108.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x2A608000 /* 42.96.128.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x2A780000 /* 42.120.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2A9C8000 /* 42.156.128.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, - { 0x2B100000 /* 43.16.0.0/12 */, 12, NDPI_PROTOCOL_ALIBABA }, - { 0x2B200000 /* 43.32.0.0/11 */, 11, NDPI_PROTOCOL_ALIBABA }, - { 0x2B400000 /* 43.64.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, - { 0x2B440000 /* 43.68.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2B5B0000 /* 43.91.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, - { 0x2B600000 /* 43.96.0.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, - { 0x2B600200 /* 43.96.2.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2B600300 /* 43.96.3.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B600400 /* 43.96.4.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2B600700 /* 43.96.7.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B600800 /* 43.96.8.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B600A00 /* 43.96.10.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0x2B600C00 /* 43.96.12.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0x2B601000 /* 43.96.16.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, - { 0x2B601200 /* 43.96.18.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B601400 /* 43.96.20.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x2B601800 /* 43.96.24.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0x2B601A00 /* 43.96.26.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, - { 0x2B601C00 /* 43.96.28.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B602000 /* 43.96.32.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0x2B602400 /* 43.96.36.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2B602800 /* 43.96.40.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2B604200 /* 43.96.66.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2B604400 /* 43.96.68.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x2B604800 /* 43.96.72.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x2B605000 /* 43.96.80.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0x2B605500 /* 43.96.85.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2B605400 /* 43.96.84.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2B605800 /* 43.96.88.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2B606000 /* 43.96.96.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2B606400 /* 43.96.100.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2B606600 /* 43.96.102.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2B620000 /* 43.98.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, + { 0x2B640000 /* 43.100.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, + { 0x2B680000 /* 43.104.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, + { 0x2B6C0000 /* 43.108.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x2D59C800 /* 45.89.200.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2D712800 /* 45.113.40.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0x2DC23D00 /* 45.194.61.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2DC23800 /* 45.194.56.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2DC23C00 /* 45.194.60.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2DC23E00 /* 45.194.62.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2DC41C00 /* 45.196.28.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2DC7B300 /* 45.199.179.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2F340000 /* 47.52.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, @@ -101,17 +113,23 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x2F4D8000 /* 47.77.128.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x2F4E0000 /* 47.78.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x2F4F0000 /* 47.79.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, + { 0x2F4F8000 /* 47.79.128.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x2F4FC000 /* 47.79.192.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, { 0x2F500000 /* 47.80.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2F520000 /* 47.82.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x2F530000 /* 47.83.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x2F540000 /* 47.84.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2F560000 /* 47.86.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, + { 0x2F570000 /* 47.87.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, + { 0x2F578000 /* 47.87.128.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, + { 0x2F57C000 /* 47.87.192.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x2F57E000 /* 47.87.224.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0x2F57E800 /* 47.87.232.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x2F580000 /* 47.88.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x2F590000 /* 47.89.0.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, - { 0x2F594700 /* 47.89.71.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2F594800 /* 47.89.72.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0x2F595000 /* 47.89.80.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0x2F595400 /* 47.89.84.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2F595400 /* 47.89.84.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2F595800 /* 47.89.88.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0x2F596000 /* 47.89.96.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, { 0x2F597A00 /* 47.89.122.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, @@ -121,17 +139,15 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x2F5C0000 /* 47.92.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x2F600000 /* 47.96.0.0/12 */, 12, NDPI_PROTOCOL_ALIBABA }, { 0x2F700000 /* 47.112.0.0/13 */, 13, NDPI_PROTOCOL_ALIBABA }, - { 0x2F780000 /* 47.120.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, - { 0x2F7A0000 /* 47.122.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, - { 0x2F7A8000 /* 47.122.128.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, - { 0x2F7AC000 /* 47.122.192.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, - { 0x2F7B0000 /* 47.123.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, - { 0x2FEB0000 /* 47.235.0.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x2F780000 /* 47.120.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB0000 /* 47.235.0.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB0800 /* 47.235.8.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB0C00 /* 47.235.12.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2FEB1000 /* 47.235.16.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, { 0x2FEC0000 /* 47.236.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x2FF00000 /* 47.240.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, { 0x2FF40000 /* 47.244.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2FF62000 /* 47.246.32.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0x2FF64000 /* 47.246.64.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x2FF64200 /* 47.246.66.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2FF64400 /* 47.246.68.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2FF64800 /* 47.246.72.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, @@ -141,18 +157,19 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x2FF65800 /* 47.246.88.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x2FF65C00 /* 47.246.92.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2FF66000 /* 47.246.96.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, - { 0x2FF67800 /* 47.246.120.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF67800 /* 47.246.120.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF67A00 /* 47.246.122.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x2FF67C00 /* 47.246.124.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0x2FF68000 /* 47.246.128.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF68000 /* 47.246.128.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF69000 /* 47.246.144.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF69600 /* 47.246.150.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF69800 /* 47.246.152.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0x2FF6A000 /* 47.246.160.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, { 0x2FF6C000 /* 47.246.192.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0x2FFA0000 /* 47.250.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2FFC0000 /* 47.252.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x2FFE0000 /* 47.254.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, - { 0x3B520000 /* 59.82.0.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, - { 0x3B524000 /* 59.82.64.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, - { 0x3B526000 /* 59.82.96.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0x3B526800 /* 59.82.104.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, - { 0x3B527000 /* 59.82.112.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0x3B520000 /* 59.82.0.0/17 */, 17, NDPI_PROTOCOL_ALIBABA }, { 0x3B528000 /* 59.82.128.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0x3B528800 /* 59.82.136.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x3B6E0000 /* 59.110.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, @@ -163,6 +180,7 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x65C80000 /* 101.200.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, { 0x6734C400 /* 103.52.196.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x6751BA00 /* 103.81.186.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x67AD0C00 /* 103.173.12.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0x67CE2800 /* 103.206.40.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0x6A0B0000 /* 106.11.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x6A0E0000 /* 106.14.0.0/15 */, 15, NDPI_PROTOCOL_ALIBABA }, @@ -199,7 +217,11 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x8BE00000 /* 139.224.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x8CCD0000 /* 140.205.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0x938B0000 /* 147.139.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, - { 0x95810000 /* 149.129.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, + { 0x95810000 /* 149.129.0.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, + { 0x95811000 /* 149.129.16.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0x95812000 /* 149.129.32.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0x95814000 /* 149.129.64.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, + { 0x9581C000 /* 149.129.192.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, { 0x9586B300 /* 149.134.179.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x9CE31400 /* 156.227.20.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0x9CEC0C00 /* 156.236.12.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, @@ -208,6 +230,7 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0x9CF50100 /* 156.245.1.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0xA1750000 /* 161.117.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0xA3B52900 /* 163.181.41.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0xA3B5D000 /* 163.181.208.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0xAA210000 /* 170.33.0.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0xAA210800 /* 170.33.8.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0xAA211000 /* 170.33.16.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, @@ -219,9 +242,15 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0xAA215000 /* 170.33.80.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0xAA215800 /* 170.33.88.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, { 0xAA215C00 /* 170.33.92.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, - { 0xAA216000 /* 170.33.96.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA216000 /* 170.33.96.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, + { 0xAA216400 /* 170.33.100.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0xAA216800 /* 170.33.104.0/22 */, 22, NDPI_PROTOCOL_ALIBABA }, - { 0xB284F000 /* 178.132.240.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, + { 0xAA218800 /* 170.33.136.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xAA218A00 /* 170.33.138.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0xB284F100 /* 178.132.241.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, + { 0xB284F200 /* 178.132.242.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xB284F400 /* 178.132.244.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, + { 0xB284F700 /* 178.132.247.0/24 */, 24, NDPI_PROTOCOL_ALIBABA }, { 0xB65C0000 /* 182.92.0.0/16 */, 16, NDPI_PROTOCOL_ALIBABA }, { 0xB94E6A00 /* 185.78.106.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0xC60B8000 /* 198.11.128.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, @@ -248,7 +277,9 @@ static ndpi_network ndpi_protocol_alibaba_protocol_list[] = { { 0xCB77B000 /* 203.119.176.0/20 */, 20, NDPI_PROTOCOL_ALIBABA }, { 0xCB77C000 /* 203.119.192.0/18 */, 18, NDPI_PROTOCOL_ALIBABA }, { 0xCBD1E000 /* 203.209.224.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0xCDC62800 /* 205.198.40.0/21 */, 21, NDPI_PROTOCOL_ALIBABA }, { 0xCDCC6000 /* 205.204.96.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, + { 0xD1927600 /* 209.146.118.0/23 */, 23, NDPI_PROTOCOL_ALIBABA }, { 0xDAF48000 /* 218.244.128.0/19 */, 19, NDPI_PROTOCOL_ALIBABA }, { 0xDF040000 /* 223.4.0.0/14 */, 14, NDPI_PROTOCOL_ALIBABA }, /* End */ @@ -259,6 +290,8 @@ static ndpi_network6 ndpi_protocol_alibaba_protocol_list_6[] = { { "2400:3200::", 32, NDPI_PROTOCOL_ALIBABA }, { "2400:b200::", 32, NDPI_PROTOCOL_ALIBABA }, { "2401:2e00::", 32, NDPI_PROTOCOL_ALIBABA }, + { "2401:8680:4004::", 46, NDPI_PROTOCOL_ALIBABA }, + { "2401:8680:4100::", 48, NDPI_PROTOCOL_ALIBABA }, { "2401:b180::", 32, NDPI_PROTOCOL_ALIBABA }, { "2404:2280:1000::", 36, NDPI_PROTOCOL_ALIBABA }, { "2404:2280:2000::", 35, NDPI_PROTOCOL_ALIBABA }, @@ -268,7 +301,6 @@ static ndpi_network6 ndpi_protocol_alibaba_protocol_list_6[] = { { "2408:4000::", 22, NDPI_PROTOCOL_ALIBABA }, { "240b:4000::", 31, NDPI_PROTOCOL_ALIBABA }, { "240b:4002::", 32, NDPI_PROTOCOL_ALIBABA }, - { "240b:4003:e::", 48, NDPI_PROTOCOL_ALIBABA }, { "240b:4004::", 31, NDPI_PROTOCOL_ALIBABA }, { "240b:4006::", 48, NDPI_PROTOCOL_ALIBABA }, { "240b:4006:1000::", 43, NDPI_PROTOCOL_ALIBABA }, @@ -279,6 +311,8 @@ static ndpi_network6 ndpi_protocol_alibaba_protocol_list_6[] = { { "240b:400c::", 30, NDPI_PROTOCOL_ALIBABA }, { "240b:4011::", 32, NDPI_PROTOCOL_ALIBABA }, { "240b:4012::", 48, NDPI_PROTOCOL_ALIBABA }, + { "240b:4013::", 32, NDPI_PROTOCOL_ALIBABA }, + { "240b:4014::", 32, NDPI_PROTOCOL_ALIBABA }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_apple.c.inc b/src/lib/inc_generated/ndpi_asn_apple.c.inc index fb1004464..4332d8a4c 100644 --- a/src/lib/inc_generated/ndpi_asn_apple.c.inc +++ b/src/lib/inc_generated/ndpi_asn_apple.c.inc @@ -33,6 +33,7 @@ static ndpi_network ndpi_protocol_apple_protocol_list[] = { static ndpi_network6 ndpi_protocol_apple_protocol_list_6[] = { { "2403:300::", 32, NDPI_PROTOCOL_APPLE }, + { "2620:0:1b00::", 48, NDPI_PROTOCOL_APPLE }, { "2620:149::", 32, NDPI_PROTOCOL_APPLE }, { "2a01:b740::", 32, NDPI_PROTOCOL_APPLE }, { "2a01:b747::", 32, NDPI_PROTOCOL_APPLE }, diff --git a/src/lib/inc_generated/ndpi_asn_avast.c.inc b/src/lib/inc_generated/ndpi_asn_avast.c.inc index c9be7755c..05a58c6f4 100644 --- a/src/lib/inc_generated/ndpi_asn_avast.c.inc +++ b/src/lib/inc_generated/ndpi_asn_avast.c.inc @@ -21,7 +21,6 @@ static ndpi_network ndpi_protocol_avast_protocol_list[] = { - { 0x052D3800 /* 5.45.56.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x052D3A00 /* 5.45.58.0/23 */, 23, NDPI_PROTOCOL_AVAST }, { 0x052D3C00 /* 5.45.60.0/22 */, 22, NDPI_PROTOCOL_AVAST }, { 0x053E1000 /* 5.62.16.0/22 */, 22, NDPI_PROTOCOL_AVAST }, @@ -30,31 +29,32 @@ static ndpi_network ndpi_protocol_avast_protocol_list[] = { { 0x053E2000 /* 5.62.32.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x053E2400 /* 5.62.36.0/22 */, 22, NDPI_PROTOCOL_AVAST }, { 0x053E2800 /* 5.62.40.0/21 */, 21, NDPI_PROTOCOL_AVAST }, - { 0x053E3000 /* 5.62.48.0/23 */, 23, NDPI_PROTOCOL_AVAST }, { 0x053E3200 /* 5.62.50.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x053E3400 /* 5.62.52.0/22 */, 22, NDPI_PROTOCOL_AVAST }, - { 0x053E3800 /* 5.62.56.0/21 */, 21, NDPI_PROTOCOL_AVAST }, + { 0x053E3800 /* 5.62.56.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x053E3C00 /* 5.62.60.0/22 */, 22, NDPI_PROTOCOL_AVAST }, { 0x1F0E4900 /* 31.14.73.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x1F0E4A00 /* 31.14.74.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x259CBB00 /* 37.156.187.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x455E4000 /* 69.94.64.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x455E4300 /* 69.94.67.0/24 */, 24, NDPI_PROTOCOL_AVAST }, - { 0x455E4400 /* 69.94.68.0/23 */, 23, NDPI_PROTOCOL_AVAST }, - { 0x455E4600 /* 69.94.70.0/24 */, 24, NDPI_PROTOCOL_AVAST }, - { 0x455E4800 /* 69.94.72.0/21 */, 21, NDPI_PROTOCOL_AVAST }, - { 0x4DEA2800 /* 77.234.40.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x455E4400 /* 69.94.68.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x455E4800 /* 69.94.72.0/22 */, 22, NDPI_PROTOCOL_AVAST }, + { 0x455E4D00 /* 69.94.77.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0x455E4E00 /* 69.94.78.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x4DEA2800 /* 77.234.40.0/23 */, 23, NDPI_PROTOCOL_AVAST }, + { 0x4DEA2B00 /* 77.234.43.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x4DEA2C00 /* 77.234.44.0/23 */, 23, NDPI_PROTOCOL_AVAST }, { 0x4DEA2E00 /* 77.234.46.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x5BD58F00 /* 91.213.143.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x5F8E7000 /* 95.142.112.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x5F8E7300 /* 95.142.115.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x5F8E7600 /* 95.142.118.0/24 */, 24, NDPI_PROTOCOL_AVAST }, - { 0x5F8E7900 /* 95.142.121.0/24 */, 24, NDPI_PROTOCOL_AVAST }, - { 0x5F8E7C00 /* 95.142.124.0/24 */, 24, NDPI_PROTOCOL_AVAST }, - { 0x5F8E7F00 /* 95.142.127.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x9FF2E300 /* 159.242.227.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x9FF2EA00 /* 159.242.234.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0x9FF2EF00 /* 159.242.239.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xA6620800 /* 166.98.8.0/24 */, 24, NDPI_PROTOCOL_AVAST }, + { 0xB9195500 /* 185.25.85.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0xB933E500 /* 185.51.229.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0xB933E600 /* 185.51.230.0/24 */, 24, NDPI_PROTOCOL_AVAST }, { 0xB9BD5C00 /* 185.189.92.0/22 */, 22, NDPI_PROTOCOL_AVAST }, diff --git a/src/lib/inc_generated/ndpi_asn_badoo.c.inc b/src/lib/inc_generated/ndpi_asn_badoo.c.inc new file mode 100644 index 000000000..480b0800e --- /dev/null +++ b/src/lib/inc_generated/ndpi_asn_badoo.c.inc @@ -0,0 +1,37 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_network ndpi_protocol_badoo_protocol_list[] = { + { 0x1FDE4000 /* 31.222.64.0/20 */, 20, NDPI_PROTOCOL_BADOO }, + { 0x9FFDB000 /* 159.253.176.0/22 */, 22, NDPI_PROTOCOL_BADOO }, + { 0x9FFDB400 /* 159.253.180.0/23 */, 23, NDPI_PROTOCOL_BADOO }, + { 0xB9998300 /* 185.153.131.0/24 */, 24, NDPI_PROTOCOL_BADOO }, + /* End */ + { 0x0, 0, 0 } +}; + +static ndpi_network6 ndpi_protocol_badoo_protocol_list_6[] = { + { "2a00:aea0:100::", 40, NDPI_PROTOCOL_BADOO }, + { "2a00:aea0:200::", 40, NDPI_PROTOCOL_BADOO }, + /* End */ + { NULL, 0, 0 } +}; diff --git a/src/lib/inc_generated/ndpi_asn_blizzard.c.inc b/src/lib/inc_generated/ndpi_asn_blizzard.c.inc new file mode 100644 index 000000000..e5f9ad203 --- /dev/null +++ b/src/lib/inc_generated/ndpi_asn_blizzard.c.inc @@ -0,0 +1,96 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_network ndpi_protocol_blizzard_protocol_list[] = { + { 0x052AA000 /* 5.42.160.0/20 */, 20, NDPI_PROTOCOL_BLIZZARD }, + { 0x052AB200 /* 5.42.178.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x18691200 /* 24.105.18.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x18691900 /* 24.105.25.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x18691C00 /* 24.105.28.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x18692000 /* 24.105.32.0/20 */, 20, NDPI_PROTOCOL_BLIZZARD }, + { 0x18693200 /* 24.105.50.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x18693400 /* 24.105.52.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x18693800 /* 24.105.56.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x18693B00 /* 24.105.59.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x18693C00 /* 24.105.60.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F40000 /* 37.244.0.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F40200 /* 37.244.2.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F40400 /* 37.244.4.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F40800 /* 37.244.8.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41000 /* 37.244.16.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41300 /* 37.244.19.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41400 /* 37.244.20.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41700 /* 37.244.23.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41800 /* 37.244.24.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41B00 /* 37.244.27.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F41C00 /* 37.244.28.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F42000 /* 37.244.32.0/20 */, 20, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F43000 /* 37.244.48.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F43200 /* 37.244.50.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F43400 /* 37.244.52.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x25F43800 /* 37.244.56.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x3B992800 /* 59.153.40.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x40E00000 /* 64.224.0.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x40E01800 /* 64.224.24.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x4228B000 /* 66.40.176.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x4228B800 /* 66.40.184.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x4228BE00 /* 66.40.190.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x67047200 /* 103.4.114.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x67C62000 /* 103.198.32.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x6E2DD000 /* 110.45.208.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x75340600 /* 117.52.6.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x75341A00 /* 117.52.26.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x75341C00 /* 117.52.28.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x75342100 /* 117.52.33.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x75342200 /* 117.52.34.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x75342400 /* 117.52.36.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x79FE8900 /* 121.254.137.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x79FECE00 /* 121.254.206.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x79FEDA00 /* 121.254.218.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x89DD4000 /* 137.221.64.0/19 */, 19, NDPI_PROTOCOL_BLIZZARD }, + { 0x89DD6000 /* 137.221.96.0/20 */, 20, NDPI_PROTOCOL_BLIZZARD }, + { 0x89DD7000 /* 137.221.112.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x96740900 /* 150.116.9.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x9E73C000 /* 158.115.192.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0x9E73C400 /* 158.115.196.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0x9E73C700 /* 158.115.199.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0x9E73C800 /* 158.115.200.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0x9E73D800 /* 158.115.216.0/21 */, 21, NDPI_PROTOCOL_BLIZZARD }, + { 0xB6A21F00 /* 182.162.31.0/24 */, 24, NDPI_PROTOCOL_BLIZZARD }, + { 0xB93C7000 /* 185.60.112.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0xC64A2000 /* 198.74.32.0/22 */, 22, NDPI_PROTOCOL_BLIZZARD }, + { 0xC64A2400 /* 198.74.36.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + { 0xCA094200 /* 202.9.66.0/23 */, 23, NDPI_PROTOCOL_BLIZZARD }, + /* End */ + { 0x0, 0, 0 } +}; + +static ndpi_network6 ndpi_protocol_blizzard_protocol_list_6[] = { + { "2a04:e800:5010::", 47, NDPI_PROTOCOL_BLIZZARD }, + { "2a04:e800:5016::", 48, NDPI_PROTOCOL_BLIZZARD }, + { "2a04:e800:5020::", 48, NDPI_PROTOCOL_BLIZZARD }, + { "2a04:e800:5040::", 48, NDPI_PROTOCOL_BLIZZARD }, + { "2a04:e800:5407::", 48, NDPI_PROTOCOL_BLIZZARD }, + { "2a04:e802::", 32, NDPI_PROTOCOL_BLIZZARD }, + /* End */ + { NULL, 0, 0 } +}; diff --git a/src/lib/inc_generated/ndpi_asn_bloomberg.c.inc b/src/lib/inc_generated/ndpi_asn_bloomberg.c.inc index 97b3ac0b6..2cfd6944a 100644 --- a/src/lib/inc_generated/ndpi_asn_bloomberg.c.inc +++ b/src/lib/inc_generated/ndpi_asn_bloomberg.c.inc @@ -23,49 +23,13 @@ static ndpi_network ndpi_protocol_bloomberg_protocol_list[] = { { 0x3F580300 /* 63.88.3.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, { 0x4173E200 /* 65.115.226.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB1000 /* 69.187.16.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB1800 /* 69.187.24.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB1D00 /* 69.187.29.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB1F00 /* 69.187.31.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB2000 /* 69.187.32.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB3000 /* 69.187.48.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB4900 /* 69.187.73.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BB4B00 /* 69.187.75.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BD9000 /* 69.189.144.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BDA000 /* 69.189.160.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BECE00 /* 69.190.206.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BF4A00 /* 69.191.74.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BF5000 /* 69.191.80.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BF8800 /* 69.191.136.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFB000 /* 69.191.176.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFB800 /* 69.191.184.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFBA00 /* 69.191.186.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFBF00 /* 69.191.191.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFC000 /* 69.191.192.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFC600 /* 69.191.198.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFC800 /* 69.191.200.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFCA00 /* 69.191.202.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFCC00 /* 69.191.204.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFD000 /* 69.191.208.0/22 */, 22, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFD400 /* 69.191.212.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFD600 /* 69.191.214.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFD800 /* 69.191.216.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFDA00 /* 69.191.218.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFDC00 /* 69.191.220.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFDE00 /* 69.191.222.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFE200 /* 69.191.226.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFE500 /* 69.191.229.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFE600 /* 69.191.230.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFE900 /* 69.191.233.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFEA00 /* 69.191.234.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFED00 /* 69.191.237.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFEE00 /* 69.191.238.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0x45BFF000 /* 69.191.240.0/20 */, 20, NDPI_PROTOCOL_BLOOMBERG }, + { 0x45B80000 /* 69.184.0.0/13 */, 13, NDPI_PROTOCOL_BLOOMBERG }, { 0x67FBCC00 /* 103.251.204.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, { 0x67FBCF00 /* 103.251.207.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, - { 0xA02BFA00 /* 160.43.250.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, - { 0xA02BFD00 /* 160.43.253.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, + { 0xA02B0000 /* 160.43.0.0/16 */, 16, NDPI_PROTOCOL_BLOOMBERG }, { 0xB90A7400 /* 185.10.116.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, + { 0xC769B000 /* 199.105.176.0/21 */, 21, NDPI_PROTOCOL_BLOOMBERG }, + { 0xC769B800 /* 199.105.184.0/23 */, 23, NDPI_PROTOCOL_BLOOMBERG }, { 0xC7ACA900 /* 199.172.169.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, { 0xCCB3F000 /* 204.179.240.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, { 0xCDD87000 /* 205.216.112.0/24 */, 24, NDPI_PROTOCOL_BLOOMBERG }, diff --git a/src/lib/inc_generated/ndpi_asn_canonical.c.inc b/src/lib/inc_generated/ndpi_asn_canonical.c.inc new file mode 100644 index 000000000..2023950f1 --- /dev/null +++ b/src/lib/inc_generated/ndpi_asn_canonical.c.inc @@ -0,0 +1,41 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_network ndpi_protocol_canonical_protocol_list[] = { + { 0x5BBD5800 /* 91.189.88.0/21 */, 21, NDPI_PROTOCOL_CANONICAL }, + { 0xA2D52000 /* 162.213.32.0/24 */, 24, NDPI_PROTOCOL_CANONICAL }, + { 0xA2D52200 /* 162.213.34.0/23 */, 23, NDPI_PROTOCOL_CANONICAL }, + { 0xB97DBC00 /* 185.125.188.0/23 */, 23, NDPI_PROTOCOL_CANONICAL }, + { 0xB97DBE00 /* 185.125.190.0/24 */, 24, NDPI_PROTOCOL_CANONICAL }, + { 0xC2A9FE00 /* 194.169.254.0/24 */, 24, NDPI_PROTOCOL_CANONICAL }, + /* End */ + { 0x0, 0, 0 } +}; + +static ndpi_network6 ndpi_protocol_canonical_protocol_list_6[] = { + { "2001:67c:1560::", 48, NDPI_PROTOCOL_CANONICAL }, + { "2001:67c:1562::", 48, NDPI_PROTOCOL_CANONICAL }, + { "2620:2d:4000::", 46, NDPI_PROTOCOL_CANONICAL }, + { "2a06:bc80::", 47, NDPI_PROTOCOL_CANONICAL }, + /* End */ + { NULL, 0, 0 } +}; diff --git a/src/lib/inc_generated/ndpi_asn_discord.c.inc b/src/lib/inc_generated/ndpi_asn_discord.c.inc index c8e919c40..cd50f1fbe 100644 --- a/src/lib/inc_generated/ndpi_asn_discord.c.inc +++ b/src/lib/inc_generated/ndpi_asn_discord.c.inc @@ -30,7 +30,9 @@ static ndpi_network ndpi_protocol_discord_protocol_list[] = { { 0x2D991200 /* 45.153.18.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x4216C400 /* 66.22.196.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0x4216C800 /* 66.22.200.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, - { 0x4216D000 /* 66.22.208.0/20 */, 20, NDPI_PROTOCOL_DISCORD }, + { 0x4216D000 /* 66.22.208.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, + { 0x4216DA00 /* 66.22.218.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x4216DC00 /* 66.22.220.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0x4216E000 /* 66.22.224.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0x4216E600 /* 66.22.230.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x4216E800 /* 66.22.232.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, @@ -38,15 +40,18 @@ static ndpi_network ndpi_protocol_discord_protocol_list[] = { { 0x4216F400 /* 66.22.244.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x4216F600 /* 66.22.246.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0x4216F800 /* 66.22.248.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, - { 0x5968A000 /* 89.104.160.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, - { 0x5968A800 /* 89.104.168.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, + { 0x5968A000 /* 89.104.160.0/20 */, 20, NDPI_PROTOCOL_DISCORD }, { 0x5BC3EA00 /* 91.195.234.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x5BC69800 /* 91.198.152.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0x5BD8CF00 /* 91.216.207.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x5BDDD000 /* 91.221.208.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0x5BE94300 /* 91.233.67.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0x679F7A00 /* 103.159.122.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x67C2A400 /* 103.194.164.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0x68995400 /* 104.153.84.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0x6DC8C000 /* 109.200.192.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, + { 0x82FE5000 /* 130.254.80.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0x82FE5800 /* 130.254.88.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0x8A808800 /* 138.128.136.0/21 */, 21, NDPI_PROTOCOL_DISCORD }, { 0xA2F43400 /* 162.244.52.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0xA2F5CC00 /* 162.245.204.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, @@ -65,14 +70,14 @@ static ndpi_network ndpi_protocol_discord_protocol_list[] = { { 0xB9C51800 /* 185.197.24.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0xB9DAA400 /* 185.218.164.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, { 0xB9DAA600 /* 185.218.166.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, - { 0xB9E28A00 /* 185.226.138.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xBC7A4000 /* 188.122.64.0/19 */, 19, NDPI_PROTOCOL_DISCORD }, - { 0xC12E5000 /* 193.46.80.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xC23D3B00 /* 194.61.59.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xC355E100 /* 195.85.225.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xC71BD400 /* 199.27.212.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, - { 0xCB841000 /* 203.132.16.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xCB841000 /* 203.132.16.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, + { 0xCB841500 /* 203.132.21.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xCB841800 /* 203.132.24.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, + { 0xCB841D00 /* 203.132.29.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xD412E600 /* 212.18.230.0/24 */, 24, NDPI_PROTOCOL_DISCORD }, { 0xD413E000 /* 212.19.224.0/22 */, 22, NDPI_PROTOCOL_DISCORD }, { 0xD468C800 /* 212.104.200.0/23 */, 23, NDPI_PROTOCOL_DISCORD }, @@ -86,11 +91,10 @@ static ndpi_network ndpi_protocol_discord_protocol_list[] = { }; static ndpi_network6 ndpi_protocol_discord_protocol_list_6[] = { - { "2402:b180:9000::", 36, NDPI_PROTOCOL_DISCORD }, { "2406:d140:8000::", 34, NDPI_PROTOCOL_DISCORD }, { "2a00:1630::", 29, NDPI_PROTOCOL_DISCORD }, { "2a00:1708::", 32, NDPI_PROTOCOL_DISCORD }, - { "2a00:1d20::", 34, NDPI_PROTOCOL_DISCORD }, + { "2a00:1d20::", 33, NDPI_PROTOCOL_DISCORD }, { "2a00:1d21::", 32, NDPI_PROTOCOL_DISCORD }, { "2a00:1d22::", 31, NDPI_PROTOCOL_DISCORD }, { "2a00:1d24::", 30, NDPI_PROTOCOL_DISCORD }, diff --git a/src/lib/inc_generated/ndpi_asn_disney_plus.c.inc b/src/lib/inc_generated/ndpi_asn_disney_plus.c.inc index 4cf983f26..60d4294c7 100644 --- a/src/lib/inc_generated/ndpi_asn_disney_plus.c.inc +++ b/src/lib/inc_generated/ndpi_asn_disney_plus.c.inc @@ -24,8 +24,9 @@ static ndpi_network ndpi_protocol_disneyplus_protocol_list[] = { { 0x08050500 /* 8.5.5.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, { 0x8B686000 /* 139.104.96.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, { 0x8B686200 /* 139.104.98.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, - { 0x8B687000 /* 139.104.112.0/23 */, 23, NDPI_PROTOCOL_DISNEYPLUS }, - { 0x8B687C00 /* 139.104.124.0/22 */, 22, NDPI_PROTOCOL_DISNEYPLUS }, + { 0x8B687000 /* 139.104.112.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, + { 0x8B687C00 /* 139.104.124.0/23 */, 23, NDPI_PROTOCOL_DISNEYPLUS }, + { 0x8B687E00 /* 139.104.126.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, { 0x8B68C000 /* 139.104.192.0/22 */, 22, NDPI_PROTOCOL_DISNEYPLUS }, { 0x8B68C500 /* 139.104.197.0/24 */, 24, NDPI_PROTOCOL_DISNEYPLUS }, { 0x8B68C600 /* 139.104.198.0/23 */, 23, NDPI_PROTOCOL_DISNEYPLUS }, @@ -43,7 +44,8 @@ static ndpi_network ndpi_protocol_disneyplus_protocol_list[] = { static ndpi_network6 ndpi_protocol_disneyplus_protocol_list_6[] = { { "2405:dc0:8001::", 48, NDPI_PROTOCOL_DISNEYPLUS }, - { "2405:dc0:8008::", 46, NDPI_PROTOCOL_DISNEYPLUS }, + { "2405:dc0:8008::", 47, NDPI_PROTOCOL_DISNEYPLUS }, + { "2405:dc0:800a::", 48, NDPI_PROTOCOL_DISNEYPLUS }, { "2620:138:3000::", 46, NDPI_PROTOCOL_DISNEYPLUS }, { "2620:138:3006::", 47, NDPI_PROTOCOL_DISNEYPLUS }, { "2620:138:3008::", 45, NDPI_PROTOCOL_DISNEYPLUS }, diff --git a/src/lib/inc_generated/ndpi_asn_dropbox.c.inc b/src/lib/inc_generated/ndpi_asn_dropbox.c.inc index 442bcdde4..883a8ad32 100644 --- a/src/lib/inc_generated/ndpi_asn_dropbox.c.inc +++ b/src/lib/inc_generated/ndpi_asn_dropbox.c.inc @@ -26,7 +26,6 @@ static ndpi_network ndpi_protocol_dropbox_protocol_list[] = { { 0x6CA0A000 /* 108.160.160.0/20 */, 20, NDPI_PROTOCOL_DROPBOX }, { 0xA27D0000 /* 162.125.0.0/16 */, 16, NDPI_PROTOCOL_DROPBOX }, { 0xB92D0800 /* 185.45.8.0/22 */, 22, NDPI_PROTOCOL_DROPBOX }, - { 0xC0BDC800 /* 192.189.200.0/23 */, 23, NDPI_PROTOCOL_DROPBOX }, /* End */ { 0x0, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_edgecast.c.inc b/src/lib/inc_generated/ndpi_asn_edgecast.c.inc index 9d6a274b9..75f1c9a3c 100644 --- a/src/lib/inc_generated/ndpi_asn_edgecast.c.inc +++ b/src/lib/inc_generated/ndpi_asn_edgecast.c.inc @@ -21,188 +21,59 @@ static ndpi_network ndpi_protocol_edgecast_protocol_list[] = { - { 0x05684000 /* 5.104.64.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x05684200 /* 5.104.66.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x2E164200 /* 46.22.66.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x2E164400 /* 46.22.68.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x2E164600 /* 46.22.70.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x2E164800 /* 46.22.72.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x2E164A00 /* 46.22.74.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x2E164C00 /* 46.22.76.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x31E77E00 /* 49.231.126.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C0000 /* 64.12.0.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C1000 /* 64.12.16.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C2000 /* 64.12.32.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C3000 /* 64.12.48.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C4100 /* 64.12.65.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C4200 /* 64.12.66.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400C4400 /* 64.12.68.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x400C4800 /* 64.12.72.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C4B00 /* 64.12.75.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x400C8200 /* 64.12.130.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C8400 /* 64.12.132.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400C8900 /* 64.12.137.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C8A00 /* 64.12.138.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400C8C00 /* 64.12.140.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400C8F00 /* 64.12.143.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C9000 /* 64.12.144.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400C9200 /* 64.12.146.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C9400 /* 64.12.148.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400C9600 /* 64.12.150.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400CA600 /* 64.12.166.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x400CAA00 /* 64.12.170.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400CAC00 /* 64.12.172.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x400CB000 /* 64.12.176.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x400CB300 /* 64.12.179.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x44E82000 /* 68.232.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x44E82A00 /* 68.232.42.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x44E82C00 /* 68.232.44.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x48155000 /* 72.21.80.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x400C8A00 /* 64.12.138.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82200 /* 68.232.34.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82400 /* 68.232.36.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x44E82600 /* 68.232.38.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x48155000 /* 72.21.80.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x48155500 /* 72.21.85.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x48155600 /* 72.21.86.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x48155800 /* 72.21.88.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x48155C00 /* 72.21.92.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x48155F00 /* 72.21.95.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x5DB8D700 /* 93.184.215.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x5DB8D800 /* 93.184.216.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x5DB8DB00 /* 93.184.219.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x5DB8DC00 /* 93.184.220.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, { 0x6CA1F000 /* 108.161.240.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0x6CA1F500 /* 108.161.245.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x6CA1F700 /* 108.161.247.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x6CA1FD00 /* 108.161.253.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x6CA1FE00 /* 108.161.254.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x6EA42400 /* 110.164.36.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x6EE8B000 /* 110.232.176.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x6EE8B200 /* 110.232.178.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x7512E800 /* 117.18.232.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x7512ED00 /* 117.18.237.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x7512EE00 /* 117.18.238.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x772E5500 /* 119.46.85.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x88E49000 /* 136.228.144.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C30400 /* 152.195.4.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C30800 /* 152.195.8.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C30B00 /* 152.195.11.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C30C00 /* 152.195.12.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C31000 /* 152.195.16.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C31600 /* 152.195.22.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C31900 /* 152.195.25.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C32000 /* 152.195.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C33200 /* 152.195.50.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C33400 /* 152.195.52.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C33800 /* 152.195.56.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C34000 /* 152.195.64.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C34400 /* 152.195.68.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C34800 /* 152.195.72.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C34C00 /* 152.195.76.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C35000 /* 152.195.80.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C35400 /* 152.195.84.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C35800 /* 152.195.88.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C36000 /* 152.195.96.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C36400 /* 152.195.100.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C36800 /* 152.195.104.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C37000 /* 152.195.112.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C38400 /* 152.195.132.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C38800 /* 152.195.136.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C39000 /* 152.195.144.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C39400 /* 152.195.148.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C39800 /* 152.195.152.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C39C00 /* 152.195.156.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3A400 /* 152.195.164.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3A600 /* 152.195.166.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3B300 /* 152.195.179.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3B500 /* 152.195.181.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3B600 /* 152.195.182.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3B800 /* 152.195.184.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3BA00 /* 152.195.186.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3BC00 /* 152.195.188.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C35800 /* 152.195.88.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C36800 /* 152.195.104.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C39F00 /* 152.195.159.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3A100 /* 152.195.161.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3A200 /* 152.195.162.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3A800 /* 152.195.168.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3AA00 /* 152.195.170.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C3C000 /* 152.195.192.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, { 0x98C3C400 /* 152.195.196.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3CC00 /* 152.195.204.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3D200 /* 152.195.210.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3D400 /* 152.195.212.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3DB00 /* 152.195.219.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3DD00 /* 152.195.221.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3E400 /* 152.195.228.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3EC00 /* 152.195.236.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3F200 /* 152.195.242.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3F600 /* 152.195.246.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C3FE00 /* 152.195.254.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C70000 /* 152.199.0.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C70400 /* 152.199.4.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C70600 /* 152.199.6.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C71000 /* 152.199.16.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C71800 /* 152.199.24.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C72000 /* 152.199.32.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C72800 /* 152.199.40.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C72C00 /* 152.199.44.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C73000 /* 152.199.48.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C73800 /* 152.199.56.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C75A00 /* 152.199.90.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C76000 /* 152.199.96.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0x98C76800 /* 152.199.104.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C76B00 /* 152.199.107.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C76C00 /* 152.199.108.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C76E00 /* 152.199.110.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C77000 /* 152.199.112.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0x98C77800 /* 152.199.120.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0x98C73500 /* 152.199.53.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0x98C77A00 /* 152.199.122.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0x98C77C00 /* 152.199.124.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0x98C79B00 /* 152.199.155.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0x98C78800 /* 152.199.136.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, { 0x98C7BF00 /* 152.199.191.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0100600 /* 192.16.6.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0100E00 /* 192.16.14.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0100200 /* 192.16.2.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC0101000 /* 192.16.16.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0101600 /* 192.16.22.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0101800 /* 192.16.24.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC0102000 /* 192.16.32.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, { 0xC0102400 /* 192.16.36.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC0102600 /* 192.16.38.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0102A00 /* 192.16.42.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0102E00 /* 192.16.46.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0103000 /* 192.16.48.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0xC0103A00 /* 192.16.58.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC0103C00 /* 192.16.60.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0103F00 /* 192.16.63.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0xC01E1800 /* 192.30.24.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E58000 /* 192.229.128.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E58800 /* 192.229.136.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E58D00 /* 192.229.141.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E58E00 /* 192.229.142.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E59000 /* 192.229.144.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E59200 /* 192.229.146.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E59500 /* 192.229.149.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E58600 /* 192.229.134.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC0E59600 /* 192.229.150.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E59800 /* 192.229.152.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E59C00 /* 192.229.156.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5A200 /* 192.229.162.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5A900 /* 192.229.169.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5AD00 /* 192.229.173.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5B200 /* 192.229.178.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5B600 /* 192.229.182.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5BD00 /* 192.229.189.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E59C00 /* 192.229.156.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5A800 /* 192.229.168.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5B400 /* 192.229.180.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5B700 /* 192.229.183.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5B800 /* 192.229.184.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0xC0E5BE00 /* 192.229.190.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5C200 /* 192.229.194.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5C600 /* 192.229.198.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5CA00 /* 192.229.202.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5D000 /* 192.229.208.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5D500 /* 192.229.213.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5DA00 /* 192.229.218.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5DC00 /* 192.229.220.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5E000 /* 192.229.224.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5E300 /* 192.229.227.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5E700 /* 192.229.231.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5E800 /* 192.229.232.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5D000 /* 192.229.208.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5D300 /* 192.229.211.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5DD00 /* 192.229.221.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5DE00 /* 192.229.222.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E000 /* 192.229.224.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5E800 /* 192.229.232.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0xC0E5EA00 /* 192.229.234.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5EC00 /* 192.229.236.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5F200 /* 192.229.242.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5F600 /* 192.229.246.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, - { 0xC0E5F800 /* 192.229.248.0/21 */, 21, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5EC00 /* 192.229.236.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, + { 0xC0E5FE00 /* 192.229.254.0/23 */, 23, NDPI_PROTOCOL_EDGECAST }, { 0xC6071000 /* 198.7.16.0/22 */, 22, NDPI_PROTOCOL_EDGECAST }, - { 0xC6071400 /* 198.7.20.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC6071600 /* 198.7.22.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xC6071B00 /* 198.7.27.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, { 0xC6071D00 /* 198.7.29.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, - { 0xD5AF5000 /* 213.175.80.0/24 */, 24, NDPI_PROTOCOL_EDGECAST }, /* End */ { 0x0, 0, 0 } }; @@ -213,233 +84,47 @@ static ndpi_network6 ndpi_protocol_edgecast_protocol_list_6[] = { { "2606:2800:8::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:c::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:e::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:15::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:16::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:10c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:10e::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:11c::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:11f::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:120::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:130::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:133::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:134::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:144::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:147::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:148::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:154::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:157::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:158::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:20c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:20e::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:21f::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:220::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:233::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:234::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:247::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:248::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:257::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:258::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:30c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:30e::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:31f::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:320::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:333::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:334::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:347::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:348::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:357::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:358::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:40c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:40e::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:41f::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:420::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:433::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:434::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:447::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:448::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:457::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:458::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50e::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:51f::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:520::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:533::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:534::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:547::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:548::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:557::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:558::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:60c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:647::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:747::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:3fff::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4001::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4002::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4006::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4008::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:400c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:400e::", 47, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:400f::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4014::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4016::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4029::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4062::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4071::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4100::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4104::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4108::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:410b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4111::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4112::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4130::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4150::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4204::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:420a::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4211::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4212::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4214::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4219::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:421a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4226::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4229::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:422c::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:4109::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:420b::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:420c::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:420e::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4233::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:424a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4255::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4256::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4262::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:4267::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4268::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:426a::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:426d::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4273::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4290::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a08::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a0a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a10::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a12::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a18::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a1a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a20::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a22::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a24::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a2c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a2e::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a68::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a8a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a8c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a94::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4a96::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4aa8::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4aaa::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ac4::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ac6::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ad0::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ad4::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ad6::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4adc::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ade::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ae1::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ae4::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ae6::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4ae9::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4aea::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4aec::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4aee::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4af4::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:4af6::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5009::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:500b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5012::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5033::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:4adc::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:504c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5054::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5064::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5081::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5088::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:508a::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:508c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5091::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5092::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50a0::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50a4::", 46, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50a8::", 45, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50b0::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:50b2::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5100::", 46, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5104::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5110::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:511b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5121::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5122::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5130::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5140::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5150::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a0c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a3c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a40::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a48::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a7c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:5a80::", 47, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:50a7::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:50a8::", 47, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:6002::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6007::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:601b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:601c::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6023::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6024::", 46, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:6028::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6030::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6032::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6038::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6040::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6050::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6060::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6070::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6072::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:60e0::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:60f5::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:60f7::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:60f9::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a18::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a28::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a2a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a34::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a38::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a40::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a42::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a4d::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a4e::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a68::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:6a6a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7001::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:7003::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:700b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:700d::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:700e::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7011::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7012::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7022::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7030::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7032::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7100::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:7a10::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e400::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e403::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e404::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e408::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e40b::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e40c::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e40e::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e410::", 47, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:700e::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:e401::", 48, NDPI_PROTOCOL_EDGECAST }, + { "2606:2800:e409::", 48, NDPI_PROTOCOL_EDGECAST }, { "2606:2800:e413::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e415::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e425::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e429::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e430::", 46, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e434::", 47, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e436::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e438::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2606:2800:e43a::", 48, NDPI_PROTOCOL_EDGECAST }, - { "2a02:16d8:103::", 48, NDPI_PROTOCOL_EDGECAST }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_facebook.c.inc b/src/lib/inc_generated/ndpi_asn_facebook.c.inc index ba520f3ed..4f0716df2 100644 --- a/src/lib/inc_generated/ndpi_asn_facebook.c.inc +++ b/src/lib/inc_generated/ndpi_asn_facebook.c.inc @@ -25,12 +25,12 @@ static ndpi_network ndpi_protocol_facebook_protocol_list[] = { { 0x1F0D4000 /* 31.13.64.0/18 */, 18, NDPI_PROTOCOL_FACEBOOK }, { 0x2D402800 /* 45.64.40.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, { 0x398D0000 /* 57.141.0.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x398D0300 /* 57.141.3.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x398D0500 /* 57.141.5.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x398D0700 /* 57.141.7.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x398D0200 /* 57.141.2.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x398D0400 /* 57.141.4.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x398D0600 /* 57.141.6.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x398D0800 /* 57.141.8.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x398D0A00 /* 57.141.10.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x398D0D00 /* 57.141.13.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x398D0C00 /* 57.141.12.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x39900000 /* 57.144.0.0/14 */, 14, NDPI_PROTOCOL_FACEBOOK }, { 0x42DC9000 /* 66.220.144.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, { 0x453FB000 /* 69.63.176.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, @@ -56,18 +56,12 @@ static ndpi_network ndpi_protocol_facebook_protocol_list[] = { { 0x81869000 /* 129.134.144.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x81869300 /* 129.134.147.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x81869400 /* 129.134.148.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, - { 0x81869600 /* 129.134.150.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x81869A00 /* 129.134.154.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, { 0x81869C00 /* 129.134.156.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, { 0x8186A000 /* 129.134.160.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, { 0x8186A400 /* 129.134.164.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186A800 /* 129.134.168.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186AA00 /* 129.134.170.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186AC00 /* 129.134.172.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186B000 /* 129.134.176.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186B800 /* 129.134.184.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186BC00 /* 129.134.188.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, - { 0x8186BE00 /* 129.134.190.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186A800 /* 129.134.168.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, + { 0x8186B000 /* 129.134.176.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF00000 /* 157.240.0.0/17 */, 17, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF08000 /* 157.240.128.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF08300 /* 157.240.131.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, @@ -75,12 +69,11 @@ static ndpi_network ndpi_protocol_facebook_protocol_list[] = { { 0x9DF0A900 /* 157.240.169.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0AA00 /* 157.240.170.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0AF00 /* 157.240.175.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, - { 0x9DF0B000 /* 157.240.176.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B100 /* 157.240.177.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0B300 /* 157.240.179.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0B500 /* 157.240.181.0/24 */, 24, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0B600 /* 157.240.182.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, - { 0x9DF0B800 /* 157.240.184.0/22 */, 22, NDPI_PROTOCOL_FACEBOOK }, - { 0x9DF0BC00 /* 157.240.188.0/23 */, 23, NDPI_PROTOCOL_FACEBOOK }, + { 0x9DF0B800 /* 157.240.184.0/21 */, 21, NDPI_PROTOCOL_FACEBOOK }, { 0x9DF0C000 /* 157.240.192.0/18 */, 18, NDPI_PROTOCOL_FACEBOOK }, { 0xA3468000 /* 163.70.128.0/17 */, 17, NDPI_PROTOCOL_FACEBOOK }, { 0xA3728000 /* 163.114.128.0/20 */, 20, NDPI_PROTOCOL_FACEBOOK }, @@ -98,13 +91,13 @@ static ndpi_network6 ndpi_protocol_facebook_protocol_list_6[] = { { "2620:0:1c00::", 40, NDPI_PROTOCOL_FACEBOOK }, { "2620:10d:c090::", 44, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2880::", 32, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff00::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff03::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff04::", 46, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff09::", 48, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff19::", 48, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff0a::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff1b::", 48, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff1c::", 47, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff1e::", 48, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff1c::", 46, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff23::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff27::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff28::", 46, NDPI_PROTOCOL_FACEBOOK }, @@ -116,18 +109,16 @@ static ndpi_network6 ndpi_protocol_facebook_protocol_list_6[] = { { "2a03:2887:ff3f::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff40::", 46, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff44::", 47, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff48::", 48, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff4a::", 47, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff48::", 46, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff4d::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff4e::", 47, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff50::", 47, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff53::", 48, NDPI_PROTOCOL_FACEBOOK }, - { "2a03:2887:ff54::", 46, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff50::", 45, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff58::", 47, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff60::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff62::", 47, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff64::", 46, NDPI_PROTOCOL_FACEBOOK }, { "2a03:2887:ff68::", 47, NDPI_PROTOCOL_FACEBOOK }, + { "2a03:2887:ff70::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2c0f:ef78:3::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2c0f:ef78:5::", 48, NDPI_PROTOCOL_FACEBOOK }, { "2c0f:ef78:9::", 48, NDPI_PROTOCOL_FACEBOOK }, diff --git a/src/lib/inc_generated/ndpi_asn_imo.c.inc b/src/lib/inc_generated/ndpi_asn_imo.c.inc new file mode 100644 index 000000000..846cb538c --- /dev/null +++ b/src/lib/inc_generated/ndpi_asn_imo.c.inc @@ -0,0 +1,57 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_network ndpi_protocol_imo_protocol_list[] = { + { 0x05969C00 /* 5.150.156.0/22 */, 22, NDPI_PROTOCOL_IMO }, + { 0x265A6000 /* 38.90.96.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0x4539AD00 /* 69.57.173.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0x53E55800 /* 83.229.88.0/22 */, 22, NDPI_PROTOCOL_IMO }, + { 0x53E56000 /* 83.229.96.0/22 */, 22, NDPI_PROTOCOL_IMO }, + { 0x67D0FD00 /* 103.208.253.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0x67D0FF00 /* 103.208.255.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0x6824E000 /* 104.36.224.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA45A6300 /* 164.90.99.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA45A6400 /* 164.90.100.0/23 */, 23, NDPI_PROTOCOL_IMO }, + { 0xA45A7600 /* 164.90.118.0/23 */, 23, NDPI_PROTOCOL_IMO }, + { 0xA45A7800 /* 164.90.120.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA9884000 /* 169.136.64.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA9884600 /* 169.136.70.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA9884800 /* 169.136.72.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA9888400 /* 169.136.132.0/23 */, 23, NDPI_PROTOCOL_IMO }, + { 0xA9888D00 /* 169.136.141.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xA9889100 /* 169.136.145.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xB9162800 /* 185.22.40.0/23 */, 23, NDPI_PROTOCOL_IMO }, + { 0xB9162A00 /* 185.22.42.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xC00C1F00 /* 192.12.31.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xC6336000 /* 198.51.96.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xC71EF000 /* 199.30.240.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xC71EF200 /* 199.30.242.0/23 */, 23, NDPI_PROTOCOL_IMO }, + { 0xCAA86200 /* 202.168.98.0/24 */, 24, NDPI_PROTOCOL_IMO }, + { 0xD17E5900 /* 209.126.89.0/24 */, 24, NDPI_PROTOCOL_IMO }, + /* End */ + { 0x0, 0, 0 } +}; + +static ndpi_network6 ndpi_protocol_imo_protocol_list_6[] = { + /* End */ + { NULL, 0, 0 } +}; diff --git a/src/lib/inc_generated/ndpi_asn_nvidia.c.inc b/src/lib/inc_generated/ndpi_asn_nvidia.c.inc index 7ea7d5a8b..d039d5550 100644 --- a/src/lib/inc_generated/ndpi_asn_nvidia.c.inc +++ b/src/lib/inc_generated/ndpi_asn_nvidia.c.inc @@ -30,21 +30,22 @@ static ndpi_network ndpi_protocol_nvidia_protocol_list[] = { { 0x082F4300 /* 8.47.67.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x18330000 /* 24.51.0.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x18330200 /* 24.51.2.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, - { 0x18330400 /* 24.51.4.0/22 */, 22, NDPI_PROTOCOL_NVIDIA }, + { 0x18330400 /* 24.51.4.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, { 0x18330800 /* 24.51.8.0/21 */, 21, NDPI_PROTOCOL_NVIDIA }, { 0x18331000 /* 24.51.16.0/20 */, 20, NDPI_PROTOCOL_NVIDIA }, { 0x25BA6F00 /* 37.186.111.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x42168000 /* 66.22.128.0/20 */, 20, NDPI_PROTOCOL_NVIDIA }, - { 0x42169000 /* 66.22.144.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, - { 0x42169200 /* 66.22.146.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, - { 0x48194000 /* 72.25.64.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, - { 0x48194200 /* 72.25.66.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, - { 0x48194400 /* 72.25.68.0/22 */, 22, NDPI_PROTOCOL_NVIDIA }, + { 0x42169000 /* 66.22.144.0/22 */, 22, NDPI_PROTOCOL_NVIDIA }, + { 0x42169400 /* 66.22.148.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, + { 0x42169600 /* 66.22.150.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, + { 0x42169F00 /* 66.22.159.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, + { 0x48194000 /* 72.25.64.0/21 */, 21, NDPI_PROTOCOL_NVIDIA }, { 0x48196000 /* 72.25.96.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, { 0x4D6FF800 /* 77.111.248.0/22 */, 22, NDPI_PROTOCOL_NVIDIA }, { 0x5054A000 /* 80.84.160.0/20 */, 20, NDPI_PROTOCOL_NVIDIA }, - { 0x50FA6000 /* 80.250.96.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, - { 0x50FA6200 /* 80.250.98.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, + { 0x50FA6000 /* 80.250.96.0/22 */, 22, NDPI_PROTOCOL_NVIDIA }, + { 0x50FA6400 /* 80.250.100.0/23 */, 23, NDPI_PROTOCOL_NVIDIA }, + { 0x50FA6600 /* 80.250.102.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x551D0E00 /* 85.29.14.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x551D1200 /* 85.29.18.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, { 0x551D2100 /* 85.29.33.0/24 */, 24, NDPI_PROTOCOL_NVIDIA }, diff --git a/src/lib/inc_generated/ndpi_asn_opendns.c.inc b/src/lib/inc_generated/ndpi_asn_opendns.c.inc index 85fa48f89..623bb65f1 100644 --- a/src/lib/inc_generated/ndpi_asn_opendns.c.inc +++ b/src/lib/inc_generated/ndpi_asn_opendns.c.inc @@ -27,15 +27,15 @@ static ndpi_network ndpi_protocol_opendns_protocol_list[] = { { 0x43D74600 /* 67.215.70.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x43D74900 /* 67.215.73.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x43D74C00 /* 67.215.76.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, - { 0x43D75000 /* 67.215.80.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75000 /* 67.215.80.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x43D75200 /* 67.215.82.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x43D75400 /* 67.215.84.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x43D75600 /* 67.215.86.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x43D75800 /* 67.215.88.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x43D75A00 /* 67.215.90.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x43D75E00 /* 67.215.94.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x6CAB8000 /* 108.171.128.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x6CAB8200 /* 108.171.130.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x6CAB9E00 /* 108.171.158.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x6CAB9E00 /* 108.171.158.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x92700000 /* 146.112.0.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, { 0x92700800 /* 146.112.8.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x92700B00 /* 146.112.11.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, @@ -94,27 +94,31 @@ static ndpi_network ndpi_protocol_opendns_protocol_list[] = { { 0x9270EC00 /* 146.112.236.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x9270F000 /* 146.112.240.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, { 0x97BA0000 /* 151.186.0.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1000 /* 151.186.16.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1200 /* 151.186.18.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1500 /* 151.186.21.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1600 /* 151.186.22.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1800 /* 151.186.24.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA1000 /* 151.186.16.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA1400 /* 151.186.20.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA1900 /* 151.186.25.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA1A00 /* 151.186.26.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x97BA1C00 /* 151.186.28.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA1E00 /* 151.186.30.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA1E00 /* 151.186.30.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA2100 /* 151.186.33.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x97BA4000 /* 151.186.64.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x97BA4400 /* 151.186.68.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x97BA4600 /* 151.186.70.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0x97BA4800 /* 151.186.72.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA4A00 /* 151.186.74.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x97BA4C00 /* 151.186.76.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x97BA4E00 /* 151.186.78.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x97BA5000 /* 151.186.80.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA6300 /* 151.186.99.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x97BA6400 /* 151.186.100.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x97BA6800 /* 151.186.104.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x97BA6C00 /* 151.186.108.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x97BA7000 /* 151.186.112.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x97BA8000 /* 151.186.128.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x97BA8400 /* 151.186.132.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0x97BAD000 /* 151.186.208.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, - { 0x97BAD800 /* 151.186.216.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BAD000 /* 151.186.208.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, + { 0x97BAD400 /* 151.186.212.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x97BAD600 /* 151.186.214.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x97BAD800 /* 151.186.216.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x97BAE000 /* 151.186.224.0/20 */, 20, NDPI_PROTOCOL_OPENDNS }, { 0x97BAF000 /* 151.186.240.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x97BAF400 /* 151.186.244.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, @@ -148,33 +152,33 @@ static ndpi_network ndpi_protocol_opendns_protocol_list[] = { { 0x9BBE4D00 /* 155.190.77.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE4E00 /* 155.190.78.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5000 /* 155.190.80.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE5300 /* 155.190.83.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE5400 /* 155.190.84.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5700 /* 155.190.87.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5900 /* 155.190.89.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5A00 /* 155.190.90.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5C00 /* 155.190.92.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE5E00 /* 155.190.94.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE6000 /* 155.190.96.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE6300 /* 155.190.99.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE6400 /* 155.190.100.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE6800 /* 155.190.104.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE6D00 /* 155.190.109.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE6E00 /* 155.190.110.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE7300 /* 155.190.115.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE7400 /* 155.190.116.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE7600 /* 155.190.118.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE7600 /* 155.190.118.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE8000 /* 155.190.128.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE8800 /* 155.190.136.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE8C00 /* 155.190.140.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBE9300 /* 155.190.147.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBE9200 /* 155.190.146.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBE9C00 /* 155.190.156.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEA000 /* 155.190.160.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEB300 /* 155.190.179.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEB700 /* 155.190.183.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEB800 /* 155.190.184.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEBB00 /* 155.190.187.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEBC00 /* 155.190.188.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEBE00 /* 155.190.190.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEC000 /* 155.190.192.0/19 */, 19, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEE000 /* 155.190.224.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBEE400 /* 155.190.228.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEE400 /* 155.190.228.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEE600 /* 155.190.230.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEE800 /* 155.190.232.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEEB00 /* 155.190.235.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, @@ -185,14 +189,13 @@ static ndpi_network ndpi_protocol_opendns_protocol_list[] = { { 0x9BBEF600 /* 155.190.246.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEF800 /* 155.190.248.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0x9BBEFA00 /* 155.190.250.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0x9BBEFE00 /* 155.190.254.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0xA2D25000 /* 162.210.80.0/22 */, 22, NDPI_PROTOCOL_OPENDNS }, - { 0xA2D25400 /* 162.210.84.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, - { 0xA2D25600 /* 162.210.86.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0x9BBEFF00 /* 155.190.255.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xA2D25000 /* 162.210.80.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, { 0xB93C5400 /* 185.60.84.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0xB93C5600 /* 185.60.86.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0xC6290D00 /* 198.41.13.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0xCCC2E800 /* 204.194.232.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, + { 0xCCC2EA00 /* 204.194.234.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0xCCC2ED00 /* 204.194.237.0/24 */, 24, NDPI_PROTOCOL_OPENDNS }, { 0xCCC2EE00 /* 204.194.238.0/23 */, 23, NDPI_PROTOCOL_OPENDNS }, { 0xD043D800 /* 208.67.216.0/21 */, 21, NDPI_PROTOCOL_OPENDNS }, @@ -230,15 +233,15 @@ static ndpi_network6 ndpi_protocol_opendns_protocol_list_6[] = { { "2a04:e4c0:54::", 47, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c0:59::", 48, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c0:60::", 45, NDPI_PROTOCOL_OPENDNS }, - { "2a04:e4c0:68::", 47, NDPI_PROTOCOL_OPENDNS }, - { "2a04:e4c0:70::", 46, NDPI_PROTOCOL_OPENDNS }, - { "2a04:e4c0:74::", 48, NDPI_PROTOCOL_OPENDNS }, - { "2a04:e4c0:76::", 47, NDPI_PROTOCOL_OPENDNS }, + { "2a04:e4c0:68::", 48, NDPI_PROTOCOL_OPENDNS }, + { "2a04:e4c0:70::", 45, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c0:78::", 47, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c0:170::", 47, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c4:1::", 48, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c4:2::", 47, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c4:4::", 48, NDPI_PROTOCOL_OPENDNS }, + { "2a04:e4c4:10::", 48, NDPI_PROTOCOL_OPENDNS }, + { "2a04:e4c4:20::", 48, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c7:fe01::", 48, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c7:fffd::", 48, NDPI_PROTOCOL_OPENDNS }, { "2a04:e4c7:fffe::", 47, NDPI_PROTOCOL_OPENDNS }, diff --git a/src/lib/inc_generated/ndpi_asn_riotgames.c.inc b/src/lib/inc_generated/ndpi_asn_riotgames.c.inc index 71d3be011..86506feb2 100644 --- a/src/lib/inc_generated/ndpi_asn_riotgames.c.inc +++ b/src/lib/inc_generated/ndpi_asn_riotgames.c.inc @@ -29,7 +29,9 @@ static ndpi_network ndpi_protocol_riotgames_protocol_list[] = { { 0x68A08000 /* 104.160.128.0/19 */, 19, NDPI_PROTOCOL_RIOTGAMES }, { 0x8A000C00 /* 138.0.12.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, { 0x976AF600 /* 151.106.246.0/23 */, 23, NDPI_PROTOCOL_RIOTGAMES }, - { 0x976AF800 /* 151.106.248.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AF800 /* 151.106.248.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AFC00 /* 151.106.252.0/23 */, 23, NDPI_PROTOCOL_RIOTGAMES }, + { 0x976AFE00 /* 151.106.254.0/24 */, 24, NDPI_PROTOCOL_RIOTGAMES }, { 0xA2F94800 /* 162.249.72.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, { 0xB9284000 /* 185.40.64.0/22 */, 22, NDPI_PROTOCOL_RIOTGAMES }, { 0xC040A800 /* 192.64.168.0/21 */, 21, NDPI_PROTOCOL_RIOTGAMES }, diff --git a/src/lib/inc_generated/ndpi_asn_roblox.c.inc b/src/lib/inc_generated/ndpi_asn_roblox.c.inc index 5b0b59aa6..2895673dd 100644 --- a/src/lib/inc_generated/ndpi_asn_roblox.c.inc +++ b/src/lib/inc_generated/ndpi_asn_roblox.c.inc @@ -25,7 +25,6 @@ static ndpi_network ndpi_protocol_roblox_protocol_list[] = { { 0x80740000 /* 128.116.0.0/17 */, 17, NDPI_PROTOCOL_ROBLOX }, { 0x8DC10300 /* 141.193.3.0/24 */, 24, NDPI_PROTOCOL_ROBLOX }, { 0xCDC93E00 /* 205.201.62.0/24 */, 24, NDPI_PROTOCOL_ROBLOX }, - { 0xD1CE2800 /* 209.206.40.0/21 */, 21, NDPI_PROTOCOL_ROBLOX }, /* End */ { 0x0, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_starcraft.c.inc b/src/lib/inc_generated/ndpi_asn_starcraft.c.inc deleted file mode 100644 index e8b49c000..000000000 --- a/src/lib/inc_generated/ndpi_asn_starcraft.c.inc +++ /dev/null @@ -1,94 +0,0 @@ -/* - * - * This file is generated automatically and part of nDPI - * - * 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/>. - * - */ - -/* ****************************************************** */ - - -static ndpi_network ndpi_protocol_starcraft_protocol_list[] = { - { 0x052AA000 /* 5.42.160.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, - { 0x052AB200 /* 5.42.178.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x18691200 /* 24.105.18.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x18691D00 /* 24.105.29.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x18691E00 /* 24.105.30.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x18692000 /* 24.105.32.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, - { 0x18693200 /* 24.105.50.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x18693400 /* 24.105.52.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x18693800 /* 24.105.56.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x18693C00 /* 24.105.60.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F40000 /* 37.244.0.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F40200 /* 37.244.2.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F40400 /* 37.244.4.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F40800 /* 37.244.8.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41000 /* 37.244.16.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41300 /* 37.244.19.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41400 /* 37.244.20.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41700 /* 37.244.23.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41800 /* 37.244.24.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41B00 /* 37.244.27.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F41C00 /* 37.244.28.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F42000 /* 37.244.32.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F43000 /* 37.244.48.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F43400 /* 37.244.52.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x25F43800 /* 37.244.56.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x3B992800 /* 59.153.40.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x40E00000 /* 64.224.0.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x40E01800 /* 64.224.24.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x4228B000 /* 66.40.176.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x4228B800 /* 66.40.184.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x4228BE00 /* 66.40.190.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x67047200 /* 103.4.114.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x67C62000 /* 103.198.32.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x6E2DD000 /* 110.45.208.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x75340600 /* 117.52.6.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x75341A00 /* 117.52.26.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x75341C00 /* 117.52.28.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x75342100 /* 117.52.33.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x75342200 /* 117.52.34.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x75342400 /* 117.52.36.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x79FE8900 /* 121.254.137.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x79FECE00 /* 121.254.206.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x79FEDA00 /* 121.254.218.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x89DD4000 /* 137.221.64.0/19 */, 19, NDPI_PROTOCOL_STARCRAFT }, - { 0x89DD6000 /* 137.221.96.0/20 */, 20, NDPI_PROTOCOL_STARCRAFT }, - { 0x89DD7000 /* 137.221.112.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x96740900 /* 150.116.9.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x9E73C000 /* 158.115.192.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0x9E73C400 /* 158.115.196.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0x9E73C700 /* 158.115.199.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0x9E73C800 /* 158.115.200.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0x9E73D800 /* 158.115.216.0/21 */, 21, NDPI_PROTOCOL_STARCRAFT }, - { 0xB6A21F00 /* 182.162.31.0/24 */, 24, NDPI_PROTOCOL_STARCRAFT }, - { 0xB93C7000 /* 185.60.112.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0xC64A2000 /* 198.74.32.0/22 */, 22, NDPI_PROTOCOL_STARCRAFT }, - { 0xC64A2400 /* 198.74.36.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - { 0xCA094200 /* 202.9.66.0/23 */, 23, NDPI_PROTOCOL_STARCRAFT }, - /* End */ - { 0x0, 0, 0 } -}; - -static ndpi_network6 ndpi_protocol_starcraft_protocol_list_6[] = { - { "2a04:e800:5010::", 47, NDPI_PROTOCOL_STARCRAFT }, - { "2a04:e800:5016::", 48, NDPI_PROTOCOL_STARCRAFT }, - { "2a04:e800:5020::", 48, NDPI_PROTOCOL_STARCRAFT }, - { "2a04:e800:5040::", 48, NDPI_PROTOCOL_STARCRAFT }, - { "2a04:e800:5407::", 48, NDPI_PROTOCOL_STARCRAFT }, - { "2a04:e802::", 32, NDPI_PROTOCOL_STARCRAFT }, - /* End */ - { NULL, 0, 0 } -}; diff --git a/src/lib/inc_generated/ndpi_asn_steam.c.inc b/src/lib/inc_generated/ndpi_asn_steam.c.inc index 827a56f01..ec2342253 100644 --- a/src/lib/inc_generated/ndpi_asn_steam.c.inc +++ b/src/lib/inc_generated/ndpi_asn_steam.c.inc @@ -34,10 +34,10 @@ static ndpi_network ndpi_protocol_steam_protocol_list[] = { { 0x9B85F000 /* 155.133.240.0/23 */, 23, NDPI_PROTOCOL_STEAM }, { 0x9B85F400 /* 155.133.244.0/24 */, 24, NDPI_PROTOCOL_STEAM }, { 0x9B85F600 /* 155.133.246.0/24 */, 24, NDPI_PROTOCOL_STEAM }, - { 0x9B85F800 /* 155.133.248.0/21 */, 21, NDPI_PROTOCOL_STEAM }, - { 0xA2FEC000 /* 162.254.192.0/23 */, 23, NDPI_PROTOCOL_STEAM }, - { 0xA2FEC300 /* 162.254.195.0/24 */, 24, NDPI_PROTOCOL_STEAM }, - { 0xA2FEC400 /* 162.254.196.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + { 0x9B85F800 /* 155.133.248.0/22 */, 22, NDPI_PROTOCOL_STEAM }, + { 0x9B85FC00 /* 155.133.252.0/24 */, 24, NDPI_PROTOCOL_STEAM }, + { 0x9B85FE00 /* 155.133.254.0/23 */, 23, NDPI_PROTOCOL_STEAM }, + { 0xA2FEC000 /* 162.254.192.0/21 */, 21, NDPI_PROTOCOL_STEAM }, { 0xB919B600 /* 185.25.182.0/23 */, 23, NDPI_PROTOCOL_STEAM }, { 0xC0456000 /* 192.69.96.0/22 */, 22, NDPI_PROTOCOL_STEAM }, { 0xCDC40600 /* 205.196.6.0/24 */, 24, NDPI_PROTOCOL_STEAM }, @@ -51,13 +51,11 @@ static ndpi_network6 ndpi_protocol_steam_protocol_list_6[] = { { "2404:3fc0::", 46, NDPI_PROTOCOL_STEAM }, { "2404:3fc0:8::", 47, NDPI_PROTOCOL_STEAM }, { "2404:3fc0:a::", 48, NDPI_PROTOCOL_STEAM }, - { "2602:801:f000::", 47, NDPI_PROTOCOL_STEAM }, - { "2602:801:f002::", 48, NDPI_PROTOCOL_STEAM }, + { "2602:801:f000::", 46, NDPI_PROTOCOL_STEAM }, { "2602:801:f005::", 48, NDPI_PROTOCOL_STEAM }, { "2602:801:f006::", 47, NDPI_PROTOCOL_STEAM }, { "2602:801:f008::", 46, NDPI_PROTOCOL_STEAM }, { "2602:801:f00d::", 48, NDPI_PROTOCOL_STEAM }, - { "2602:801:f00e::", 48, NDPI_PROTOCOL_STEAM }, { "2a01:bc80:1::", 48, NDPI_PROTOCOL_STEAM }, { "2a01:bc80:2::", 47, NDPI_PROTOCOL_STEAM }, { "2a01:bc80:4::", 46, NDPI_PROTOCOL_STEAM }, diff --git a/src/lib/inc_generated/ndpi_asn_teamviewer.c.inc b/src/lib/inc_generated/ndpi_asn_teamviewer.c.inc index 5a4bd582d..9c58d17c3 100644 --- a/src/lib/inc_generated/ndpi_asn_teamviewer.c.inc +++ b/src/lib/inc_generated/ndpi_asn_teamviewer.c.inc @@ -62,6 +62,7 @@ static ndpi_network6 ndpi_protocol_teamviewer_protocol_list_6[] = { { "2a0b:b580:ffff::", 48, NDPI_PROTOCOL_TEAMVIEWER }, { "2a0b:b581::", 48, NDPI_PROTOCOL_TEAMVIEWER }, { "2a0b:b582::", 48, NDPI_PROTOCOL_TEAMVIEWER }, + { "2a0b:b583::", 48, NDPI_PROTOCOL_TEAMVIEWER }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_tencent.c.inc b/src/lib/inc_generated/ndpi_asn_tencent.c.inc index 3a4f71d06..f7f08318e 100644 --- a/src/lib/inc_generated/ndpi_asn_tencent.c.inc +++ b/src/lib/inc_generated/ndpi_asn_tencent.c.inc @@ -28,14 +28,25 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x2ABB8000 /* 42.187.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2AC00000 /* 42.192.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, { 0x2AC28000 /* 42.194.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, - { 0x2B800000 /* 43.128.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B800000 /* 43.128.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2B808000 /* 43.128.128.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2B80C000 /* 43.128.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B810000 /* 43.129.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x2B820000 /* 43.130.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2B828000 /* 43.130.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x2B82E000 /* 43.130.224.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2B830000 /* 43.131.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x2B83E000 /* 43.131.224.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2B840000 /* 43.132.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, - { 0x2B844400 /* 43.132.68.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B844000 /* 43.132.64.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B844800 /* 43.132.72.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B844D00 /* 43.132.77.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B844E00 /* 43.132.78.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B845000 /* 43.132.80.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B845900 /* 43.132.89.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B845A00 /* 43.132.90.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B845D00 /* 43.132.93.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B845E00 /* 43.132.94.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0x2B846000 /* 43.132.96.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2B848000 /* 43.132.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2B850000 /* 43.133.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, @@ -45,6 +56,28 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x2B87C000 /* 43.135.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2B880000 /* 43.136.0.0/13 */, 13, NDPI_PROTOCOL_TENCENT }, { 0x2B900000 /* 43.144.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2B980000 /* 43.152.0.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B980800 /* 43.152.8.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B980A00 /* 43.152.10.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B980C00 /* 43.152.12.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B981100 /* 43.152.17.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B981200 /* 43.152.18.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B981400 /* 43.152.20.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B981800 /* 43.152.24.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B982000 /* 43.152.32.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B982300 /* 43.152.35.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B982400 /* 43.152.36.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B982800 /* 43.152.40.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B982C00 /* 43.152.44.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B982F00 /* 43.152.47.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B983100 /* 43.152.49.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B983200 /* 43.152.50.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B983400 /* 43.152.52.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B983700 /* 43.152.55.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B983900 /* 43.152.57.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B983A00 /* 43.152.58.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B983C00 /* 43.152.60.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B983E00 /* 43.152.62.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0x2B984000 /* 43.152.64.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, { 0x2B985000 /* 43.152.80.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, { 0x2B985A00 /* 43.152.90.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, @@ -52,23 +85,187 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x2B986000 /* 43.152.96.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, { 0x2B987000 /* 43.152.112.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x2B987400 /* 43.152.116.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, - { 0x2B98C000 /* 43.152.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B988100 /* 43.152.129.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B988200 /* 43.152.130.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B988400 /* 43.152.132.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B988800 /* 43.152.136.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B988C00 /* 43.152.140.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B988E00 /* 43.152.142.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B989000 /* 43.152.144.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B989400 /* 43.152.148.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B989800 /* 43.152.152.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B98A000 /* 43.152.160.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B98A200 /* 43.152.162.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98A600 /* 43.152.166.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98A800 /* 43.152.168.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B98AD00 /* 43.152.173.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98AE00 /* 43.152.174.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B98B100 /* 43.152.177.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98B200 /* 43.152.178.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B98B400 /* 43.152.180.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B98B800 /* 43.152.184.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B98BA00 /* 43.152.186.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98BC00 /* 43.152.188.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98BE00 /* 43.152.190.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B98E000 /* 43.152.224.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2B990000 /* 43.153.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x2B9A0000 /* 43.154.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, { 0x2B9C0000 /* 43.156.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, { 0x2B9E0000 /* 43.158.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, - { 0x2B9EC000 /* 43.158.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x2B9F0000 /* 43.159.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4000 /* 43.159.64.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4500 /* 43.159.69.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4800 /* 43.159.72.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4A00 /* 43.159.74.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4D00 /* 43.159.77.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F4E00 /* 43.159.78.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F5000 /* 43.159.80.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F5400 /* 43.159.84.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F5700 /* 43.159.87.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F5A00 /* 43.159.90.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F5E00 /* 43.159.94.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F6100 /* 43.159.97.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F6200 /* 43.159.98.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F6600 /* 43.159.102.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F6800 /* 43.159.104.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F7000 /* 43.159.112.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F7800 /* 43.159.120.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F7D00 /* 43.159.125.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2B9F7E00 /* 43.159.126.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0x2B9F8000 /* 43.159.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2BA00000 /* 43.160.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2BA08000 /* 43.160.128.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2BA0A000 /* 43.160.160.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, { 0x2BA0C000 /* 43.160.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, - { 0x2BA10000 /* 43.161.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2BA10000 /* 43.161.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2BA18000 /* 43.161.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2BA20000 /* 43.162.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x2BA40000 /* 43.164.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x2BA48000 /* 43.164.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x2BA50000 /* 43.165.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2BA60000 /* 43.166.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x2BA68000 /* 43.166.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x2BA6E000 /* 43.166.224.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0x2BA70000 /* 43.167.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x2BAC0F00 /* 43.172.15.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAD0000 /* 43.173.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE0000 /* 43.174.0.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE1000 /* 43.174.16.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE1800 /* 43.174.24.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE1C00 /* 43.174.28.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE1F00 /* 43.174.31.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE2000 /* 43.174.32.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3000 /* 43.174.48.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3300 /* 43.174.51.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3400 /* 43.174.52.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3800 /* 43.174.56.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3A00 /* 43.174.58.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE3E00 /* 43.174.62.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4200 /* 43.174.66.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4500 /* 43.174.69.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4600 /* 43.174.70.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4800 /* 43.174.72.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4C00 /* 43.174.76.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE4F00 /* 43.174.79.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE5000 /* 43.174.80.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE5600 /* 43.174.86.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE5800 /* 43.174.88.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE5D00 /* 43.174.93.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE5F00 /* 43.174.95.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE6000 /* 43.174.96.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE6800 /* 43.174.104.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE6A00 /* 43.174.106.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE6C00 /* 43.174.108.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE8300 /* 43.174.131.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE8F00 /* 43.174.143.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE9300 /* 43.174.147.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE9400 /* 43.174.148.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAE9600 /* 43.174.150.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAEC000 /* 43.174.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x2BAEE000 /* 43.174.224.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAEE400 /* 43.174.228.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAEF800 /* 43.174.248.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF0000 /* 43.175.0.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF0500 /* 43.175.5.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF0700 /* 43.175.7.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF0C00 /* 43.175.12.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1000 /* 43.175.16.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1600 /* 43.175.22.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1800 /* 43.175.24.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1C00 /* 43.175.28.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF1E00 /* 43.175.30.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2000 /* 43.175.32.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2200 /* 43.175.34.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2400 /* 43.175.36.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2800 /* 43.175.40.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2A00 /* 43.175.42.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF2C00 /* 43.175.44.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3100 /* 43.175.49.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3200 /* 43.175.50.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3400 /* 43.175.52.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3800 /* 43.175.56.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3A00 /* 43.175.58.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF3C00 /* 43.175.60.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4100 /* 43.175.65.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4200 /* 43.175.66.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4400 /* 43.175.68.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4700 /* 43.175.71.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4900 /* 43.175.73.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4A00 /* 43.175.74.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4D00 /* 43.175.77.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF4E00 /* 43.175.78.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF5000 /* 43.175.80.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF5500 /* 43.175.85.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF5600 /* 43.175.86.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF5D00 /* 43.175.93.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF5E00 /* 43.175.94.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6000 /* 43.175.96.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6500 /* 43.175.101.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6600 /* 43.175.102.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6800 /* 43.175.104.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6B00 /* 43.175.107.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6C00 /* 43.175.108.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF6E00 /* 43.175.110.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7000 /* 43.175.112.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7500 /* 43.175.117.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7600 /* 43.175.118.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7800 /* 43.175.120.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7A00 /* 43.175.122.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF7C00 /* 43.175.124.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8100 /* 43.175.129.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8200 /* 43.175.130.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8400 /* 43.175.132.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8800 /* 43.175.136.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8A00 /* 43.175.138.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8C00 /* 43.175.140.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF8E00 /* 43.175.142.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9000 /* 43.175.144.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9200 /* 43.175.146.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9500 /* 43.175.149.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9600 /* 43.175.150.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9800 /* 43.175.152.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAF9C00 /* 43.175.156.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFA000 /* 43.175.160.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFB200 /* 43.175.178.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFB400 /* 43.175.180.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFB800 /* 43.175.184.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFBD00 /* 43.175.189.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFC100 /* 43.175.193.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFC400 /* 43.175.196.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFCA00 /* 43.175.202.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFCC00 /* 43.175.204.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFD000 /* 43.175.208.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFD200 /* 43.175.210.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFD400 /* 43.175.212.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFD700 /* 43.175.215.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFD800 /* 43.175.216.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFDC00 /* 43.175.220.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFDE00 /* 43.175.222.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFE000 /* 43.175.224.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFF000 /* 43.175.240.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFF800 /* 43.175.248.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFFC00 /* 43.175.252.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x2BAFFF00 /* 43.175.255.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0x2BF2FC00 /* 43.242.252.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x2BF7C400 /* 43.247.196.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x2D28C000 /* 45.40.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, @@ -89,14 +286,30 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x3EEA0000 /* 62.234.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x51440000 /* 81.68.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, { 0x529C0000 /* 82.156.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x56335C00 /* 86.51.92.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0x5EBF0000 /* 94.191.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, - { 0x65200000 /* 101.32.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, - { 0x65210000 /* 101.33.0.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, - { 0x65210400 /* 101.33.4.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65200000 /* 101.32.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x65204000 /* 101.32.64.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x65205E00 /* 101.32.94.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65206000 /* 101.32.96.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x65208000 /* 101.32.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x6520C000 /* 101.32.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x6520E000 /* 101.32.224.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x6520EE00 /* 101.32.238.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x6520F000 /* 101.32.240.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x65210400 /* 101.33.4.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x65210800 /* 101.33.8.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x65211100 /* 101.33.17.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, - { 0x65211A00 /* 101.33.26.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211200 /* 101.33.18.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65211400 /* 101.33.20.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x65211800 /* 101.33.24.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x65211E00 /* 101.33.30.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, - { 0x65212000 /* 101.33.32.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x65212000 /* 101.33.32.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x65212900 /* 101.33.41.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, + { 0x65212A00 /* 101.33.42.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x65212C00 /* 101.33.44.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x65213000 /* 101.33.48.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x65213800 /* 101.33.56.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0x65214000 /* 101.33.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x65218000 /* 101.33.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x65220000 /* 101.34.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, @@ -119,7 +332,11 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x767E4000 /* 118.126.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x76C38000 /* 118.195.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x771BA000 /* 119.27.160.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, - { 0x771C0000 /* 119.28.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, + { 0x771C0000 /* 119.28.0.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, + { 0x771C8000 /* 119.28.128.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x771CC000 /* 119.28.192.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x771CE000 /* 119.28.224.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x771D0000 /* 119.29.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x772D0000 /* 119.45.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x775B0000 /* 119.91.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x78350000 /* 120.53.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, @@ -139,13 +356,17 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x7A330000 /* 122.51.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x7A98C000 /* 122.152.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x7BCE0000 /* 123.206.0.0/15 */, 15, NDPI_PROTOCOL_TENCENT }, - { 0x7C9C0000 /* 124.156.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x7C9C6000 /* 124.156.96.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x7C9C8000 /* 124.156.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x7CDC0000 /* 124.220.0.0/14 */, 14, NDPI_PROTOCOL_TENCENT }, { 0x806C0000 /* 128.108.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x811C0000 /* 129.28.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x81CC0000 /* 129.204.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x81D30000 /* 129.211.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, - { 0x81E20000 /* 129.226.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x81E20000 /* 129.226.0.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x81E23000 /* 129.226.48.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x81E24000 /* 129.226.64.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x81E28000 /* 129.226.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, { 0x84E80000 /* 132.232.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x86AF0000 /* 134.175.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x8B9B0000 /* 139.155.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, @@ -154,7 +375,18 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0x8C8F0000 /* 140.143.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x9238C000 /* 146.56.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x94460000 /* 148.70.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, - { 0x966D0000 /* 150.109.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, + { 0x966D0000 /* 150.109.0.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, + { 0x966D4000 /* 150.109.64.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x966D5000 /* 150.109.80.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x966D5A00 /* 150.109.90.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x966D5C00 /* 150.109.92.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x966D6000 /* 150.109.96.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x966D8000 /* 150.109.128.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, + { 0x966D8A00 /* 150.109.138.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0x966D8C00 /* 150.109.140.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0x966D9000 /* 150.109.144.0/20 */, 20, NDPI_PROTOCOL_TENCENT }, + { 0x966DA000 /* 150.109.160.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, + { 0x966DC000 /* 150.109.192.0/18 */, 18, NDPI_PROTOCOL_TENCENT }, { 0x969E0000 /* 150.158.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x98880000 /* 152.136.0.0/16 */, 16, NDPI_PROTOCOL_TENCENT }, { 0x9A088000 /* 154.8.128.0/17 */, 17, NDPI_PROTOCOL_TENCENT }, @@ -193,7 +425,7 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0xCBCD8800 /* 203.205.136.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, { 0xCBCD9000 /* 203.205.144.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0xCBCD9B00 /* 203.205.155.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, - { 0xCBCD9C00 /* 203.205.156.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, + { 0xCBCD9D00 /* 203.205.157.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0xCBCDBC00 /* 203.205.188.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0xCBCDBF00 /* 203.205.191.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0xCBCDC000 /* 203.205.192.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, @@ -201,14 +433,12 @@ static ndpi_network ndpi_protocol_tencent_protocol_list[] = { { 0xCBCDDC00 /* 203.205.220.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, { 0xCBCDE000 /* 203.205.224.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0xCBCDE800 /* 203.205.232.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, - { 0xCBCDF000 /* 203.205.240.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, - { 0xCBCDF200 /* 203.205.242.0/24 */, 24, NDPI_PROTOCOL_TENCENT }, { 0xCBCDF800 /* 203.205.248.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, { 0xD249A000 /* 210.73.160.0/19 */, 19, NDPI_PROTOCOL_TENCENT }, { 0xD2ABE800 /* 210.171.232.0/21 */, 21, NDPI_PROTOCOL_TENCENT }, { 0xD2B44A00 /* 210.180.74.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0xD3385C00 /* 211.56.92.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, - { 0xD3988000 /* 211.152.128.0/22 */, 22, NDPI_PROTOCOL_TENCENT }, + { 0xD3988000 /* 211.152.128.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0xD3988400 /* 211.152.132.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0xD3989400 /* 211.152.148.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, { 0xD3989A00 /* 211.152.154.0/23 */, 23, NDPI_PROTOCOL_TENCENT }, @@ -227,20 +457,117 @@ static ndpi_network6 ndpi_protocol_tencent_protocol_list_6[] = { { "240d:c000:2000::", 35, NDPI_PROTOCOL_TENCENT }, { "240d:c000:6000::", 36, NDPI_PROTOCOL_TENCENT }, { "240d:c000:7000::", 44, NDPI_PROTOCOL_TENCENT }, - { "240d:c000:f000::", 41, NDPI_PROTOCOL_TENCENT }, + { "240d:c000:f000::", 44, NDPI_PROTOCOL_TENCENT }, + { "240d:c000:f020::", 43, NDPI_PROTOCOL_TENCENT }, + { "240d:c000:f040::", 42, NDPI_PROTOCOL_TENCENT }, { "240d:c000:f0c0::", 42, NDPI_PROTOCOL_TENCENT }, - { "240d:c010::", 47, NDPI_PROTOCOL_TENCENT }, - { "240d:c010:11::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:10::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:13::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c010:14::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c010:16::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:18::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:1d::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:1f::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c010:20::", 44, NDPI_PROTOCOL_TENCENT }, { "240d:c010:30::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:41::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:42::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c010:50::", 48, NDPI_PROTOCOL_TENCENT }, - { "240d:c010:58::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:54::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:56::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:58::", 47, NDPI_PROTOCOL_TENCENT }, { "240d:c010:5b::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c010:5c::", 48, NDPI_PROTOCOL_TENCENT }, - { "240d:c010:68::", 48, NDPI_PROTOCOL_TENCENT }, - { "240d:c010:6c::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:5e::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:60::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:64::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:68::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:6a::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:6f::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:72::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:74::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:77::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:78::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:7b::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:7c::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:81::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:82::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:84::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:88::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:8a::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:8d::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:8e::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:93::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:95::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:97::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:99::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:9a::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:9d::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:a1::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:a4::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ab::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ad::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:b2::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:b9::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ba::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:bf::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:c0::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:c2::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:c8::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ca::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:cc::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ce::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:d1::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:d2::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:d4::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:d8::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:db::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:dc::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:f1::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:f4::", 46, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:f8::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:fa::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:fc::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:ff::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:104::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:106::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:108::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:112::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:116::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:118::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:11a::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:11c::", 46, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:121::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:122::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:126::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:12a::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:12c::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:12f::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:131::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:132::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:139::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:13a::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:13d::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:142::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:144::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:149::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:14a::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:14d::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:14e::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:150::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:153::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:154::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:159::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:15a::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:15c::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:15e::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:164::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:168::", 46, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:16c::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:16e::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:176::", 48, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:17a::", 47, NDPI_PROTOCOL_TENCENT }, + { "240d:c010:17d::", 48, NDPI_PROTOCOL_TENCENT }, { "240d:c040::", 43, NDPI_PROTOCOL_TENCENT }, /* End */ { NULL, 0, 0 } diff --git a/src/lib/inc_generated/ndpi_asn_threema.c.inc b/src/lib/inc_generated/ndpi_asn_threema.c.inc index 46885f3f0..d8166be76 100644 --- a/src/lib/inc_generated/ndpi_asn_threema.c.inc +++ b/src/lib/inc_generated/ndpi_asn_threema.c.inc @@ -22,23 +22,80 @@ static ndpi_network ndpi_protocol_threema_protocol_list[] = { { 0x0594A000 /* 5.148.160.0/19 */, 19, NDPI_PROTOCOL_THREEMA }, + { 0x1F840800 /* 31.132.8.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, { 0x2D09A000 /* 45.9.160.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, { 0x2D09A200 /* 45.9.162.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0x5576D800 /* 85.118.216.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, + { 0x57EDAC00 /* 87.237.172.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0x58D60400 /* 88.214.4.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0x5BC64F00 /* 91.198.79.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0x5BC6E500 /* 91.198.229.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0x5BC7C600 /* 91.199.198.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, { 0x5C2AB800 /* 92.42.184.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, + { 0x5E7EF800 /* 94.126.248.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, + { 0x5EB0C000 /* 94.176.192.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, { 0x5EE6D000 /* 94.230.208.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + { 0xB0DF7700 /* 176.223.119.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, { 0xB2D12000 /* 178.209.32.0/19 */, 19, NDPI_PROTOCOL_THREEMA }, + { 0xB93E6800 /* 185.62.104.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xB93F9400 /* 185.63.148.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xB94B9900 /* 185.75.153.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xB94FC800 /* 185.79.200.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xB94FCA00 /* 185.79.202.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, { 0xB958EC00 /* 185.88.236.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xB9629800 /* 185.98.152.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xB9BB7800 /* 185.187.120.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, + { 0xB9DAF000 /* 185.218.240.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xB9F3A000 /* 185.243.160.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, + { 0xB9FDC000 /* 185.253.192.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xB9FE4C00 /* 185.254.76.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xBC5CE000 /* 188.92.224.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, + { 0xC1084D00 /* 193.8.77.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC1114C00 /* 193.17.76.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, { 0xC1115500 /* 193.17.85.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, - { 0xCB387000 /* 203.56.112.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, + { 0xC12B1B00 /* 193.43.27.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC12BB700 /* 193.43.183.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC12F6700 /* 193.47.103.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC12FBE00 /* 193.47.190.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC1687400 /* 193.104.116.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC18AD400 /* 193.138.212.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xC1C89D00 /* 193.200.157.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC1DE8A00 /* 193.222.138.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC20BA000 /* 194.11.160.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC2995E00 /* 194.153.94.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC2B07400 /* 194.176.116.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC389AC00 /* 195.137.172.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xC3BDFC00 /* 195.189.252.0/23 */, 23, NDPI_PROTOCOL_THREEMA }, + { 0xC3D8E300 /* 195.216.227.0/24 */, 24, NDPI_PROTOCOL_THREEMA }, + { 0xCB387000 /* 203.56.112.0/22 */, 22, NDPI_PROTOCOL_THREEMA }, + { 0xD4674000 /* 212.103.64.0/19 */, 19, NDPI_PROTOCOL_THREEMA }, + { 0xD90BD000 /* 217.11.208.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + { 0xD944E000 /* 217.68.224.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + { 0xD992A000 /* 217.146.160.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, { 0xD996F000 /* 217.150.240.0/20 */, 20, NDPI_PROTOCOL_THREEMA }, + { 0xD9C58000 /* 217.197.128.0/21 */, 21, NDPI_PROTOCOL_THREEMA }, /* End */ { 0x0, 0, 0 } }; static ndpi_network6 ndpi_protocol_threema_protocol_list_6[] = { + { "2001:67c:168::", 48, NDPI_PROTOCOL_THREEMA }, + { "2001:67c:66c::", 48, NDPI_PROTOCOL_THREEMA }, + { "2001:67c:18c4::", 48, NDPI_PROTOCOL_THREEMA }, { "2001:67c:2f98::", 48, NDPI_PROTOCOL_THREEMA }, + { "2a00:c38::", 32, NDPI_PROTOCOL_THREEMA }, + { "2a01:a480::", 32, NDPI_PROTOCOL_THREEMA }, { "2a02:418::", 29, NDPI_PROTOCOL_THREEMA }, + { "2a02:ce40::", 32, NDPI_PROTOCOL_THREEMA }, + { "2a03:580::", 32, NDPI_PROTOCOL_THREEMA }, + { "2a06:5100::", 29, NDPI_PROTOCOL_THREEMA }, + { "2a06:6400::", 29, NDPI_PROTOCOL_THREEMA }, + { "2a09:900::", 46, NDPI_PROTOCOL_THREEMA }, + { "2a09:900:100::", 40, NDPI_PROTOCOL_THREEMA }, + { "2a09:900:200::", 40, NDPI_PROTOCOL_THREEMA }, + { "2a0b:9e80::", 36, NDPI_PROTOCOL_THREEMA }, { "2a14:3e40::", 32, NDPI_PROTOCOL_THREEMA }, + { "2a14:3e44::", 32, NDPI_PROTOCOL_THREEMA }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_twitch.c.inc b/src/lib/inc_generated/ndpi_asn_twitch.c.inc index 116f96f27..d9a2a1434 100644 --- a/src/lib/inc_generated/ndpi_asn_twitch.c.inc +++ b/src/lib/inc_generated/ndpi_asn_twitch.c.inc @@ -24,8 +24,13 @@ static ndpi_network ndpi_protocol_twitch_protocol_list[] = { { 0x17A00000 /* 23.160.0.0/24 */, 24, NDPI_PROTOCOL_TWITCH }, { 0x2D718000 /* 45.113.128.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, { 0x34818000 /* 52.129.128.0/20 */, 20, NDPI_PROTOCOL_TWITCH }, - { 0x34DFC000 /* 52.223.192.0/18 */, 18, NDPI_PROTOCOL_TWITCH }, - { 0x63B54000 /* 99.181.64.0/18 */, 18, NDPI_PROTOCOL_TWITCH }, + { 0x3481CC00 /* 52.129.204.0/23 */, 23, NDPI_PROTOCOL_TWITCH }, + { 0x34DFC000 /* 52.223.192.0/20 */, 20, NDPI_PROTOCOL_TWITCH }, + { 0x34DFD800 /* 52.223.216.0/21 */, 21, NDPI_PROTOCOL_TWITCH }, + { 0x34DFE000 /* 52.223.224.0/19 */, 19, NDPI_PROTOCOL_TWITCH }, + { 0x63B54000 /* 99.181.64.0/20 */, 20, NDPI_PROTOCOL_TWITCH }, + { 0x63B55800 /* 99.181.88.0/21 */, 21, NDPI_PROTOCOL_TWITCH }, + { 0x63B56000 /* 99.181.96.0/19 */, 19, NDPI_PROTOCOL_TWITCH }, { 0x67353000 /* 103.53.48.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, { 0xB92ACC00 /* 185.42.204.0/22 */, 22, NDPI_PROTOCOL_TWITCH }, { 0xC0104000 /* 192.16.64.0/21 */, 21, NDPI_PROTOCOL_TWITCH }, diff --git a/src/lib/inc_generated/ndpi_asn_ubuntuone.c.inc b/src/lib/inc_generated/ndpi_asn_ubuntuone.c.inc deleted file mode 100644 index 44565d6c8..000000000 --- a/src/lib/inc_generated/ndpi_asn_ubuntuone.c.inc +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * This file is generated automatically and part of nDPI - * - * 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/>. - * - */ - -/* ****************************************************** */ - - -static ndpi_network ndpi_protocol_ubuntuone_protocol_list[] = { - { 0x5BBD5900 /* 91.189.89.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, - { 0x5BBD5B00 /* 91.189.91.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, - { 0x5BBD5C00 /* 91.189.92.0/22 */, 22, NDPI_PROTOCOL_UBUNTUONE }, - { 0xA2D52000 /* 162.213.32.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, - { 0xA2D52200 /* 162.213.34.0/23 */, 23, NDPI_PROTOCOL_UBUNTUONE }, - { 0xB97DBC00 /* 185.125.188.0/23 */, 23, NDPI_PROTOCOL_UBUNTUONE }, - { 0xB97DBE00 /* 185.125.190.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, - { 0xC2A9FE00 /* 194.169.254.0/24 */, 24, NDPI_PROTOCOL_UBUNTUONE }, - /* End */ - { 0x0, 0, 0 } -}; - -static ndpi_network6 ndpi_protocol_ubuntuone_protocol_list_6[] = { - { "2001:67c:1560::", 48, NDPI_PROTOCOL_UBUNTUONE }, - { "2001:67c:1562::", 48, NDPI_PROTOCOL_UBUNTUONE }, - { "2620:2d:4000::", 46, NDPI_PROTOCOL_UBUNTUONE }, - { "2a06:bc80::", 47, NDPI_PROTOCOL_UBUNTUONE }, - /* End */ - { NULL, 0, 0 } -}; diff --git a/src/lib/inc_generated/ndpi_asn_vk.c.inc b/src/lib/inc_generated/ndpi_asn_vk.c.inc index fd40d6ef8..7b253461c 100644 --- a/src/lib/inc_generated/ndpi_asn_vk.c.inc +++ b/src/lib/inc_generated/ndpi_asn_vk.c.inc @@ -21,27 +21,115 @@ static ndpi_network ndpi_protocol_vk_protocol_list[] = { + { 0x053D1000 /* 5.61.16.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x053DE800 /* 5.61.232.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x05652800 /* 5.101.40.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x05B53C00 /* 5.181.60.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x05BC8C00 /* 5.188.140.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x1FB16800 /* 31.177.104.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x258B2000 /* 37.139.32.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x258B2800 /* 37.139.40.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x2D548000 /* 45.84.128.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x2D881400 /* 45.136.20.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x3ED9A000 /* 62.217.160.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0x4F898400 /* 79.137.132.0/24 */, 24, NDPI_PROTOCOL_VK }, { 0x4F898B00 /* 79.137.139.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0x4F899D00 /* 79.137.157.0/24 */, 24, NDPI_PROTOCOL_VK }, { 0x4F89A400 /* 79.137.164.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0x4F89A700 /* 79.137.167.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0x4F89AE00 /* 79.137.174.0/23 */, 23, NDPI_PROTOCOL_VK }, { 0x4F89B400 /* 79.137.180.0/24 */, 24, NDPI_PROTOCOL_VK }, { 0x4F89B700 /* 79.137.183.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0x4F89F000 /* 79.137.240.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x53A6E800 /* 83.166.232.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x53A6F800 /* 83.166.248.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x53D9D800 /* 83.217.216.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x53DE1C00 /* 83.222.28.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x54173400 /* 84.23.52.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x55C02000 /* 85.192.32.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x57EF6800 /* 87.239.104.0/21 */, 21, NDPI_PROTOCOL_VK }, { 0x57F08000 /* 87.240.128.0/18 */, 18, NDPI_PROTOCOL_VK }, + { 0x57F27000 /* 87.242.112.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59D05400 /* 89.208.84.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59D0C400 /* 89.208.196.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59D0D000 /* 89.208.208.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59D0D800 /* 89.208.216.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x59D0E400 /* 89.208.228.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59DDE400 /* 89.221.228.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x59DDE800 /* 89.221.232.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x5A9C9400 /* 90.156.148.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5A9CD400 /* 90.156.212.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5A9CD800 /* 90.156.216.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5A9CE800 /* 90.156.232.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x5BDBE000 /* 91.219.224.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5BE78400 /* 91.231.132.0/22 */, 22, NDPI_PROTOCOL_VK }, { 0x5DBAE000 /* 93.186.224.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0x5E64B000 /* 94.100.176.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0x5E8BF400 /* 94.139.244.0/22 */, 22, NDPI_PROTOCOL_VK }, { 0x5F8EC000 /* 95.142.192.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0x5FA32000 /* 95.163.32.0/19 */, 19, NDPI_PROTOCOL_VK }, + { 0x5FA38500 /* 95.163.133.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0x5FA3B400 /* 95.163.180.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5FA3D000 /* 95.163.208.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x5FA3D800 /* 95.163.216.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x5FA3F800 /* 95.163.248.0/21 */, 21, NDPI_PROTOCOL_VK }, { 0x5FD50000 /* 95.213.0.0/17 */, 17, NDPI_PROTOCOL_VK }, + { 0x6D78B400 /* 109.120.180.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x6D78BC00 /* 109.120.188.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x808CA800 /* 128.140.168.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0x92B9D000 /* 146.185.208.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0x92B9F000 /* 146.185.240.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB070A800 /* 176.112.168.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0xB2165800 /* 178.22.88.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0xB2ED1000 /* 178.237.16.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0xB9058800 /* 185.5.136.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9109400 /* 185.16.148.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB910F400 /* 185.16.244.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB91D8200 /* 185.29.130.0/24 */, 24, NDPI_PROTOCOL_VK }, { 0xB920F800 /* 185.32.248.0/22 */, 22, NDPI_PROTOCOL_VK }, - { 0xB9834400 /* 185.131.68.0/23 */, 23, NDPI_PROTOCOL_VK }, + { 0xB9569000 /* 185.86.144.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9646800 /* 185.100.104.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9827000 /* 185.130.112.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9834400 /* 185.131.68.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9B4C800 /* 185.180.200.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9BB3F00 /* 185.187.63.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0xB9E23400 /* 185.226.52.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xB9F1C000 /* 185.241.192.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xBC5D3800 /* 188.93.56.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0xC1CB2800 /* 193.203.40.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xC2BA3F00 /* 194.186.63.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0xC3D31400 /* 195.211.20.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xC3DAA800 /* 195.218.168.0/24 */, 24, NDPI_PROTOCOL_VK }, + { 0xC3DABE00 /* 195.218.190.0/23 */, 23, NDPI_PROTOCOL_VK }, + { 0xD46F5400 /* 212.111.84.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xD4E94800 /* 212.233.72.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0xD4E95800 /* 212.233.88.0/21 */, 21, NDPI_PROTOCOL_VK }, + { 0xD4E96000 /* 212.233.96.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xD4E97800 /* 212.233.120.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xD5DBD400 /* 213.219.212.0/22 */, 22, NDPI_PROTOCOL_VK }, + { 0xD9101000 /* 217.16.16.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0xD9149000 /* 217.20.144.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0xD9458000 /* 217.69.128.0/20 */, 20, NDPI_PROTOCOL_VK }, + { 0xD9AEBC00 /* 217.174.188.0/22 */, 22, NDPI_PROTOCOL_VK }, /* End */ { 0x0, 0, 0 } }; static ndpi_network6 ndpi_protocol_vk_protocol_list_6[] = { + { "2a00:1148::", 29, NDPI_PROTOCOL_VK }, + { "2a00:b4c0::", 32, NDPI_PROTOCOL_VK }, { "2a00:bdc0::", 33, NDPI_PROTOCOL_VK }, { "2a00:bdc0:8000::", 34, NDPI_PROTOCOL_VK }, { "2a00:bdc0:c000::", 35, NDPI_PROTOCOL_VK }, + { "2a00:bdc0:e002::", 47, NDPI_PROTOCOL_VK }, + { "2a00:bdc0:e004::", 47, NDPI_PROTOCOL_VK }, + { "2a00:bdc0:e007::", 48, NDPI_PROTOCOL_VK }, + { "2a00:bdc0:f000::", 36, NDPI_PROTOCOL_VK }, { "2a00:bdc1::", 32, NDPI_PROTOCOL_VK }, { "2a00:bdc2::", 31, NDPI_PROTOCOL_VK }, { "2a00:bdc4::", 30, NDPI_PROTOCOL_VK }, + { "2a14:25c0::", 32, NDPI_PROTOCOL_VK }, + { "2a14:25c5::", 32, NDPI_PROTOCOL_VK }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_webex.c.inc b/src/lib/inc_generated/ndpi_asn_webex.c.inc index 356369a39..16aba0baa 100644 --- a/src/lib/inc_generated/ndpi_asn_webex.c.inc +++ b/src/lib/inc_generated/ndpi_asn_webex.c.inc @@ -22,19 +22,21 @@ static ndpi_network ndpi_protocol_webex_protocol_list[] = { { 0x0826D800 /* 8.38.216.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, + { 0x08F48900 /* 8.244.137.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, + { 0x08F50B00 /* 8.245.11.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, { 0x17590000 /* 23.89.0.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, - { 0x17598000 /* 23.89.128.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, - { 0x1759A000 /* 23.89.160.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, - { 0x1759B000 /* 23.89.176.0/21 */, 21, NDPI_PROTOCOL_WEBEX }, + { 0x17598000 /* 23.89.128.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, { 0x1759C000 /* 23.89.192.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0x3E6DC000 /* 62.109.192.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, { 0x40446000 /* 64.68.96.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, + { 0x4272A000 /* 66.114.160.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, { 0x42A32000 /* 66.163.32.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0x451AA000 /* 69.26.160.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0x721DC000 /* 114.29.192.0/23 */, 23, NDPI_PROTOCOL_WEBEX }, { 0x721DC400 /* 114.29.196.0/23 */, 23, NDPI_PROTOCOL_WEBEX }, { 0x721DC800 /* 114.29.200.0/21 */, 21, NDPI_PROTOCOL_WEBEX }, { 0x721DD000 /* 114.29.208.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0x8754AF00 /* 135.84.175.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, { 0x8BB15400 /* 139.177.84.0/22 */, 22, NDPI_PROTOCOL_WEBEX }, { 0x8BB15800 /* 139.177.88.0/22 */, 22, NDPI_PROTOCOL_WEBEX }, { 0x8BB15C00 /* 139.177.92.0/23 */, 23, NDPI_PROTOCOL_WEBEX }, @@ -43,10 +45,12 @@ static ndpi_network ndpi_protocol_webex_protocol_list[] = { { 0x90C46000 /* 144.196.96.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, { 0x90C47000 /* 144.196.112.0/21 */, 21, NDPI_PROTOCOL_WEBEX }, { 0x90C47800 /* 144.196.120.0/22 */, 22, NDPI_PROTOCOL_WEBEX }, + { 0x90C47C00 /* 144.196.124.0/23 */, 23, NDPI_PROTOCOL_WEBEX }, { 0x90C48000 /* 144.196.128.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, { 0x96FD8000 /* 150.253.128.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, { 0xA3810000 /* 163.129.0.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0xA3812000 /* 163.129.32.0/22 */, 22, NDPI_PROTOCOL_WEBEX }, + { 0xA3812800 /* 163.129.40.0/21 */, 21, NDPI_PROTOCOL_WEBEX }, { 0xA3813000 /* 163.129.48.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, { 0xA3814000 /* 163.129.64.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, { 0xAA480000 /* 170.72.0.0/17 */, 17, NDPI_PROTOCOL_WEBEX }, @@ -55,6 +59,7 @@ static ndpi_network ndpi_protocol_webex_protocol_list[] = { { 0xAA858000 /* 170.133.128.0/18 */, 18, NDPI_PROTOCOL_WEBEX }, { 0xAD27E000 /* 173.39.224.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0xADF30000 /* 173.243.0.0/20 */, 20, NDPI_PROTOCOL_WEBEX }, + { 0xC713C400 /* 199.19.196.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, { 0xCFB6A000 /* 207.182.160.0/19 */, 19, NDPI_PROTOCOL_WEBEX }, { 0xD0FDFE00 /* 208.253.254.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, { 0xD0FE7200 /* 208.254.114.0/24 */, 24, NDPI_PROTOCOL_WEBEX }, @@ -71,9 +76,20 @@ static ndpi_network6 ndpi_protocol_webex_protocol_list_6[] = { { "2402:2500:3::", 48, NDPI_PROTOCOL_WEBEX }, { "2402:2500:10::", 44, NDPI_PROTOCOL_WEBEX }, { "2402:2500:20::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:40::", 44, NDPI_PROTOCOL_WEBEX }, { "2402:2500:100::", 40, NDPI_PROTOCOL_WEBEX }, { "2402:2500:200::", 39, NDPI_PROTOCOL_WEBEX }, { "2402:2500:400::", 39, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:1010::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:1040::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:1200::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:1400::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:1500::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:2010::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:2040::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:2200::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:2400::", 44, NDPI_PROTOCOL_WEBEX }, + { "2402:2500:2500::", 44, NDPI_PROTOCOL_WEBEX }, { "2607:fcf0::", 32, NDPI_PROTOCOL_WEBEX }, { "2a00:a640:100::", 40, NDPI_PROTOCOL_WEBEX }, { "2a00:a640:200::", 39, NDPI_PROTOCOL_WEBEX }, @@ -81,6 +97,10 @@ static ndpi_network6 ndpi_protocol_webex_protocol_list_6[] = { { "2a00:a640:1100::", 44, NDPI_PROTOCOL_WEBEX }, { "2a00:a640:1200::", 44, NDPI_PROTOCOL_WEBEX }, { "2a00:a640:1300::", 44, NDPI_PROTOCOL_WEBEX }, + { "2a00:a640:2100::", 44, NDPI_PROTOCOL_WEBEX }, + { "2a00:a640:2200::", 44, NDPI_PROTOCOL_WEBEX }, + { "2a00:a640:2300::", 44, NDPI_PROTOCOL_WEBEX }, + { "2a05:4200:7::", 48, NDPI_PROTOCOL_WEBEX }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_yandex.c.inc b/src/lib/inc_generated/ndpi_asn_yandex.c.inc index 340a532d8..5a8d5bebf 100644 --- a/src/lib/inc_generated/ndpi_asn_yandex.c.inc +++ b/src/lib/inc_generated/ndpi_asn_yandex.c.inc @@ -26,19 +26,22 @@ static ndpi_network ndpi_protocol_yandex_protocol_list[] = { { 0x25094000 /* 37.9.64.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, { 0x258C8000 /* 37.140.128.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, { 0x4D580000 /* 77.88.0.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, + { 0x4E9DE800 /* 78.157.232.0/23 */, 23, NDPI_PROTOCOL_YANDEX }, { 0x54FCA000 /* 84.252.160.0/19 */, 19, NDPI_PROTOCOL_YANDEX }, { 0x57FAE000 /* 87.250.224.0/19 */, 19, NDPI_PROTOCOL_YANDEX }, - { 0x5A9CB000 /* 90.156.176.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, - { 0x5A9CB500 /* 90.156.181.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, - { 0x5A9CB600 /* 90.156.182.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, { 0x5A9CB800 /* 90.156.184.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, { 0x5A9CBA00 /* 90.156.186.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, + { 0x5B6B5000 /* 91.107.80.0/22 */, 22, NDPI_PROTOCOL_YANDEX }, { 0x5CFF7000 /* 92.255.112.0/20 */, 20, NDPI_PROTOCOL_YANDEX }, { 0x5D9E8000 /* 93.158.128.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, { 0x5F6C8000 /* 95.108.128.0/17 */, 17, NDPI_PROTOCOL_YANDEX }, { 0x8D088000 /* 141.8.128.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, { 0xB29A8000 /* 178.154.128.0/18 */, 18, NDPI_PROTOCOL_YANDEX }, { 0xB920B800 /* 185.32.184.0/22 */, 22, NDPI_PROTOCOL_YANDEX }, + { 0xBCBF0200 /* 188.191.2.0/23 */, 23, NDPI_PROTOCOL_YANDEX }, + { 0xBCBF0400 /* 188.191.4.0/23 */, 23, NDPI_PROTOCOL_YANDEX }, + { 0xBCBF0700 /* 188.191.7.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, + { 0xBCBF0800 /* 188.191.8.0/24 */, 24, NDPI_PROTOCOL_YANDEX }, { 0xD5B4C000 /* 213.180.192.0/19 */, 19, NDPI_PROTOCOL_YANDEX }, /* End */ { 0x0, 0, 0 } @@ -46,10 +49,8 @@ static ndpi_network ndpi_protocol_yandex_protocol_list[] = { static ndpi_network6 ndpi_protocol_yandex_protocol_list_6[] = { { "2001:678:384::", 48, NDPI_PROTOCOL_YANDEX }, - { "2620:10f:d000::", 44, NDPI_PROTOCOL_YANDEX }, { "2a02:6b8::", 29, NDPI_PROTOCOL_YANDEX }, { "2a0b:1440::", 32, NDPI_PROTOCOL_YANDEX }, - { "2a0e:fd87:5::", 48, NDPI_PROTOCOL_YANDEX }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_asn_yandex_cloud.c.inc b/src/lib/inc_generated/ndpi_asn_yandex_cloud.c.inc index f49d22496..7e4e58ecc 100644 --- a/src/lib/inc_generated/ndpi_asn_yandex_cloud.c.inc +++ b/src/lib/inc_generated/ndpi_asn_yandex_cloud.c.inc @@ -21,6 +21,7 @@ static ndpi_network ndpi_protocol_yandex_cloud_protocol_list[] = { + { 0x1F2C0800 /* 31.44.8.0/21 */, 21, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x25E6AC00 /* 37.230.172.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x25E6BC00 /* 37.230.188.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x2D856000 /* 45.133.96.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, @@ -32,8 +33,10 @@ static ndpi_network ndpi_protocol_yandex_cloud_protocol_list[] = { { 0x59A98000 /* 89.169.128.0/18 */, 18, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x59DF1400 /* 89.223.20.0/24 */, 24, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x59E8BC00 /* 89.232.188.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, + { 0x5CFF0100 /* 92.255.1.0/24 */, 24, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x5D4DA000 /* 93.77.160.0/19 */, 19, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x5E7ECC00 /* 94.126.204.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, + { 0x5E8BF800 /* 94.139.248.0/22 */, 22, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x82C12000 /* 130.193.32.0/19 */, 19, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0x9EA00000 /* 158.160.0.0/16 */, 16, NDPI_PROTOCOL_YANDEX_CLOUD }, { 0xB29AC000 /* 178.154.192.0/18 */, 18, NDPI_PROTOCOL_YANDEX_CLOUD }, diff --git a/src/lib/inc_generated/ndpi_azure_match.c.inc b/src/lib/inc_generated/ndpi_azure_match.c.inc index 3d6a9ff9f..75ac64ff6 100644 --- a/src/lib/inc_generated/ndpi_azure_match.c.inc +++ b/src/lib/inc_generated/ndpi_azure_match.c.inc @@ -23,11 +23,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x04900000 /* 4.144.0.0/12 */, 12, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04A00000 /* 4.160.0.0/12 */, 12, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x04B00000 /* 4.176.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x04B20000 /* 4.178.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x04B28000 /* 4.178.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x04B30000 /* 4.179.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x04B40000 /* 4.180.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04B00000 /* 4.176.0.0/13 */, 13, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04B80000 /* 4.184.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04B83800 /* 4.184.56.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04B84000 /* 4.184.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -39,6 +35,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x04C40000 /* 4.196.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04C60000 /* 4.198.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04C68000 /* 4.198.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x04C6C000 /* 4.198.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04C70000 /* 4.199.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04C80000 /* 4.200.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x04CA0000 /* 4.202.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -62,7 +59,9 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x09A30000 /* 9.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x09A90000 /* 9.169.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x09CD0000 /* 9.205.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x09DF0000 /* 9.223.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x09DF0000 /* 9.223.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x09EA0000 /* 9.234.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x09EB0000 /* 9.235.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D400000 /* 13.64.0.0/13 */, 13, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D484000 /* 13.72.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D48C000 /* 13.72.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -157,10 +156,8 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x0D6BC510 /* 13.107.197.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BD000 /* 13.107.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BD500 /* 13.107.213.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x0D6BDB00 /* 13.107.219.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BE000 /* 13.107.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x0D6BE200 /* 13.107.226.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x0D6BE400 /* 13.107.228.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x0D6BE200 /* 13.107.226.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BE700 /* 13.107.231.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BEA00 /* 13.107.234.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x0D6BED00 /* 13.107.237.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -173,37 +170,71 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x14100000 /* 20.16.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14142000 /* 20.20.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14144000 /* 20.20.64.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144080 /* 20.20.64.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144090 /* 20.20.64.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144094 /* 20.20.64.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144080 /* 20.20.64.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141440A0 /* 20.20.64.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x141440B0 /* 20.20.64.176/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14144400 /* 20.20.68.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144440 /* 20.20.68.64/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144800 /* 20.20.72.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144820 /* 20.20.72.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144830 /* 20.20.72.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144838 /* 20.20.72.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144C00 /* 20.20.76.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144C40 /* 20.20.76.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144C50 /* 20.20.76.80/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14144C58 /* 20.20.76.88/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144440 /* 20.20.68.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144448 /* 20.20.68.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144800 /* 20.20.72.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144840 /* 20.20.72.64/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144C00 /* 20.20.76.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144D00 /* 20.20.77.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144D80 /* 20.20.77.128/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144D88 /* 20.20.77.136/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14144D8C /* 20.20.77.140/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145000 /* 20.20.80.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145020 /* 20.20.80.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145030 /* 20.20.80.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145038 /* 20.20.80.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1414503C /* 20.20.80.60/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145400 /* 20.20.84.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145420 /* 20.20.84.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145428 /* 20.20.84.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1414542C /* 20.20.84.44/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14145800 /* 20.20.88.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14145880 /* 20.20.88.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14145890 /* 20.20.88.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14145894 /* 20.20.88.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145890 /* 20.20.88.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145898 /* 20.20.88.152/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145C00 /* 20.20.92.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145D00 /* 20.20.93.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145D20 /* 20.20.93.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145D30 /* 20.20.93.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14145D38 /* 20.20.93.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146400 /* 20.20.100.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146500 /* 20.20.101.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146580 /* 20.20.101.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146584 /* 20.20.101.132/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14146800 /* 20.20.104.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146820 /* 20.20.104.32/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146828 /* 20.20.104.40/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14146900 /* 20.20.105.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14146920 /* 20.20.105.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14146930 /* 20.20.105.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14146C00 /* 20.20.108.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14146C20 /* 20.20.108.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147800 /* 20.20.120.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147840 /* 20.20.120.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147844 /* 20.20.120.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147C00 /* 20.20.124.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147C20 /* 20.20.124.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147C30 /* 20.20.124.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14147C38 /* 20.20.124.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146930 /* 20.20.105.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146938 /* 20.20.105.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146C00 /* 20.20.108.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146D00 /* 20.20.109.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146D80 /* 20.20.109.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146DC0 /* 20.20.109.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146DE0 /* 20.20.109.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146DF0 /* 20.20.109.240/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146DF8 /* 20.20.109.248/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14146DFC /* 20.20.109.252/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147000 /* 20.20.112.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147040 /* 20.20.112.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147044 /* 20.20.112.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147400 /* 20.20.116.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147440 /* 20.20.116.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147444 /* 20.20.116.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147800 /* 20.20.120.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147880 /* 20.20.120.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147C00 /* 20.20.124.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14147C80 /* 20.20.124.128/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14148000 /* 20.20.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14148800 /* 20.20.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14148C00 /* 20.20.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1414BE00 /* 20.20.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x1414C000 /* 20.20.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14150000 /* 20.21.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14160000 /* 20.22.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14180000 /* 20.24.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -214,6 +245,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x14260000 /* 20.38.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14262000 /* 20.38.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14263000 /* 20.38.48.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14263400 /* 20.38.52.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14264000 /* 20.38.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14268000 /* 20.38.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x1426C400 /* 20.38.196.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -259,18 +291,16 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x145F0000 /* 20.95.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145F4000 /* 20.95.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145F6000 /* 20.95.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145F8000 /* 20.95.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145F8800 /* 20.95.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145F8C00 /* 20.95.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145F8E00 /* 20.95.142.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F7000 /* 20.95.112.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F8000 /* 20.95.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145F9000 /* 20.95.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145FC000 /* 20.95.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145FC800 /* 20.95.200.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145FCC00 /* 20.95.204.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145FD000 /* 20.95.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145FE000 /* 20.95.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145FF000 /* 20.95.240.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145FF800 /* 20.95.248.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x145FFA00 /* 20.95.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FE000 /* 20.95.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FF000 /* 20.95.240.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x145FF800 /* 20.95.248.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x145FFF00 /* 20.95.255.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14600000 /* 20.96.0.0/13 */, 13, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14680000 /* 20.104.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -288,19 +318,19 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x1487F800 /* 20.135.248.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14880000 /* 20.136.0.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14880400 /* 20.136.4.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14880600 /* 20.136.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14880700 /* 20.136.7.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14888000 /* 20.136.128.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14888100 /* 20.136.129.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x148F0000 /* 20.143.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x148F4000 /* 20.143.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x148F6000 /* 20.143.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x148F6800 /* 20.143.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x148F6000 /* 20.143.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14960000 /* 20.150.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14980000 /* 20.152.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14990000 /* 20.153.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14998000 /* 20.153.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14998800 /* 20.153.136.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14998000 /* 20.153.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14999000 /* 20.153.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14999800 /* 20.153.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14999C00 /* 20.153.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x149D0000 /* 20.157.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14A00000 /* 20.160.0.0/12 */, 12, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14B80000 /* 20.184.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -323,10 +353,9 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x14C90000 /* 20.201.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C98000 /* 20.201.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C9A000 /* 20.201.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9B000 /* 20.201.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C9C000 /* 20.201.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14C9D000 /* 20.201.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14C9D400 /* 20.201.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14C9D600 /* 20.201.214.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14C9D000 /* 20.201.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C9D800 /* 20.201.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C9DC00 /* 20.201.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14C9DF00 /* 20.201.223.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -336,10 +365,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x14CA0000 /* 20.202.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14CA8000 /* 20.202.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14CAC000 /* 20.202.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14CAE000 /* 20.202.224.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14CAE800 /* 20.202.232.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14CAEC00 /* 20.202.236.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x14CAEE00 /* 20.202.238.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x14CAE000 /* 20.202.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14CAF000 /* 20.202.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14CAF800 /* 20.202.248.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x14CAFC00 /* 20.202.252.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -400,8 +426,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x17657000 /* 23.101.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x17658000 /* 23.101.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x17660000 /* 23.102.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x17674020 /* 23.103.64.32/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x17674040 /* 23.103.64.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x17674000 /* 23.103.64.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28400000 /* 40.64.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28408000 /* 40.64.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28409000 /* 40.64.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -412,7 +437,13 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x28410000 /* 40.65.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28422000 /* 40.66.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28427800 /* 40.66.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28430000 /* 40.67.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28430000 /* 40.67.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28432800 /* 40.67.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28433000 /* 40.67.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28434000 /* 40.67.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28436000 /* 40.67.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28437800 /* 40.67.120.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28438000 /* 40.67.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28440000 /* 40.68.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28450000 /* 40.69.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28458000 /* 40.69.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -518,7 +549,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x28506000 /* 40.80.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28509000 /* 40.80.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2850A000 /* 40.80.160.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2850A100 /* 40.80.161.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2850A100 /* 40.80.161.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2850A800 /* 40.80.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2850B000 /* 40.80.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2850C000 /* 40.80.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -634,6 +665,8 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x28657200 /* 40.101.114.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28657300 /* 40.101.115.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28657380 /* 40.101.115.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28657400 /* 40.101.116.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28657480 /* 40.101.116.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28661000 /* 40.102.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28661200 /* 40.102.18.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x286B0000 /* 40.107.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -660,60 +693,51 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x28777000 /* 40.119.112.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28778000 /* 40.119.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28780000 /* 40.120.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788000 /* 40.120.128.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788040 /* 40.120.128.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788060 /* 40.120.128.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788070 /* 40.120.128.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788000 /* 40.120.128.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788080 /* 40.120.128.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28788400 /* 40.120.132.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28788500 /* 40.120.133.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788540 /* 40.120.133.64/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788544 /* 40.120.133.68/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788540 /* 40.120.133.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788560 /* 40.120.133.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788570 /* 40.120.133.112/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788574 /* 40.120.133.116/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28788800 /* 40.120.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788C00 /* 40.120.140.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788C80 /* 40.120.140.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788CC0 /* 40.120.140.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788CE0 /* 40.120.140.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28788CF0 /* 40.120.140.240/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788C00 /* 40.120.140.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28788D00 /* 40.120.141.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28789000 /* 40.120.144.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789100 /* 40.120.145.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789104 /* 40.120.145.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789100 /* 40.120.145.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789120 /* 40.120.145.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789124 /* 40.120.145.36/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28789400 /* 40.120.148.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789800 /* 40.120.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789A00 /* 40.120.154.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789A80 /* 40.120.154.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789AC0 /* 40.120.154.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789C00 /* 40.120.156.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789E00 /* 40.120.158.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789F00 /* 40.120.159.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789F80 /* 40.120.159.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x28789FA0 /* 40.120.159.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A000 /* 40.120.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A400 /* 40.120.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A600 /* 40.120.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A700 /* 40.120.167.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A740 /* 40.120.167.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A760 /* 40.120.167.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A768 /* 40.120.167.104/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x28789800 /* 40.120.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878A000 /* 40.120.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2878A800 /* 40.120.168.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x2878A880 /* 40.120.168.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878A890 /* 40.120.168.144/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878AC00 /* 40.120.172.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878AC80 /* 40.120.172.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878ACC0 /* 40.120.172.192/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878ACD0 /* 40.120.172.208/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878ACD8 /* 40.120.172.216/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878ACDC /* 40.120.172.220/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B000 /* 40.120.176.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B080 /* 40.120.176.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B0A0 /* 40.120.176.160/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B400 /* 40.120.180.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B480 /* 40.120.180.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B490 /* 40.120.180.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B800 /* 40.120.184.0/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878B804 /* 40.120.184.4/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878BC00 /* 40.120.188.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878BC80 /* 40.120.188.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x2878BCA0 /* 40.120.188.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878A890 /* 40.120.168.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878A898 /* 40.120.168.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878A89C /* 40.120.168.156/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878AC00 /* 40.120.172.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878AD00 /* 40.120.173.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B000 /* 40.120.176.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B100 /* 40.120.177.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B180 /* 40.120.177.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B190 /* 40.120.177.144/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B194 /* 40.120.177.148/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B400 /* 40.120.180.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B500 /* 40.120.181.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B580 /* 40.120.181.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B5A0 /* 40.120.181.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B5B0 /* 40.120.181.176/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B5B4 /* 40.120.181.180/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B800 /* 40.120.184.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B880 /* 40.120.184.128/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B890 /* 40.120.184.144/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878B898 /* 40.120.184.152/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878BC00 /* 40.120.188.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878BE00 /* 40.120.190.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878BE40 /* 40.120.190.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878BE60 /* 40.120.190.96/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x2878BE70 /* 40.120.190.112/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x28790000 /* 40.121.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287A0000 /* 40.122.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287B0000 /* 40.123.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -722,21 +746,12 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x287B8C00 /* 40.123.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287B9000 /* 40.123.144.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287B9400 /* 40.123.148.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287B9500 /* 40.123.149.0/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287B9510 /* 40.123.149.16/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287B9518 /* 40.123.149.24/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287B951C /* 40.123.149.28/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9500 /* 40.123.149.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9520 /* 40.123.149.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9530 /* 40.123.149.48/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287B9534 /* 40.123.149.52/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287B9800 /* 40.123.152.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA000 /* 40.123.160.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA400 /* 40.123.164.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA600 /* 40.123.166.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA700 /* 40.123.167.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA780 /* 40.123.167.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA7C0 /* 40.123.167.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA7E0 /* 40.123.167.224/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA7E8 /* 40.123.167.232/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BA800 /* 40.123.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x287BB000 /* 40.123.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x287BA000 /* 40.123.160.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287BC000 /* 40.123.192.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287C0000 /* 40.124.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287D0000 /* 40.125.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -747,14 +762,8 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x287F4000 /* 40.127.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287F6000 /* 40.127.96.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x287F8000 /* 40.127.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D00000 /* 48.208.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D02000 /* 48.208.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D03000 /* 48.208.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D03800 /* 48.208.56.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D03A00 /* 48.208.58.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D03F00 /* 48.208.63.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D04000 /* 48.208.64.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D04800 /* 48.208.72.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30D00000 /* 48.208.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30D04000 /* 48.208.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x30D05000 /* 48.208.80.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x30D08000 /* 48.208.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x30D0C000 /* 48.208.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -768,15 +777,10 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x30D10000 /* 48.209.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x30D20000 /* 48.210.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x30D58000 /* 48.213.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D60000 /* 48.214.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D70000 /* 48.215.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30D80000 /* 48.216.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DA0000 /* 48.218.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DB0000 /* 48.219.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DB8000 /* 48.219.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DBC000 /* 48.219.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DBE000 /* 48.219.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x30DBF000 /* 48.219.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30D60000 /* 48.214.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30D80000 /* 48.216.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30DC0000 /* 48.220.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x30DD0000 /* 48.221.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x32550000 /* 50.85.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x33040000 /* 51.4.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x33080000 /* 51.8.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -840,11 +844,24 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x34600B00 /* 52.96.11.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34640000 /* 52.100.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346A0000 /* 52.106.0.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x346A1000 /* 52.106.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A1000 /* 52.106.16.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7800 /* 52.106.120.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7880 /* 52.106.120.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A78C0 /* 52.106.120.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7900 /* 52.106.121.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7A00 /* 52.106.122.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7A40 /* 52.106.122.64/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A7A80 /* 52.106.122.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346A8000 /* 52.106.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x346ABB00 /* 52.106.187.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346A8800 /* 52.106.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346AB800 /* 52.106.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346ABC00 /* 52.106.188.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346ABD00 /* 52.106.189.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346ABF00 /* 52.106.191.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346AC000 /* 52.106.192.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346AD800 /* 52.106.216.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346ADA00 /* 52.106.218.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346ADA80 /* 52.106.218.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346C0000 /* 52.108.0.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346C1000 /* 52.108.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346C2000 /* 52.108.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -864,8 +881,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x346C8400 /* 52.108.132.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346C8800 /* 52.108.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346C9000 /* 52.108.144.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x346C9800 /* 52.108.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x346C9A00 /* 52.108.154.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x346C9800 /* 52.108.152.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346CA500 /* 52.108.165.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346CA600 /* 52.108.166.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x346CA800 /* 52.108.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -905,13 +921,16 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x34708A00 /* 52.112.138.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34708C00 /* 52.112.140.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34709000 /* 52.112.144.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470A200 /* 52.112.162.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470A400 /* 52.112.164.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470A800 /* 52.112.168.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3470B000 /* 52.112.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3470B800 /* 52.112.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3470BE00 /* 52.112.190.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470B000 /* 52.112.176.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C000 /* 52.112.192.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C200 /* 52.112.194.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470C500 /* 52.112.197.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470C600 /* 52.112.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470C800 /* 52.112.200.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3470D200 /* 52.112.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470D400 /* 52.112.212.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470D800 /* 52.112.216.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470E000 /* 52.112.224.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -920,11 +939,14 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x3470E600 /* 52.112.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470E800 /* 52.112.232.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3470F000 /* 52.112.240.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710200 /* 52.113.2.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34710400 /* 52.113.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34710600 /* 52.113.6.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34710900 /* 52.113.9.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34710A00 /* 52.113.10.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34710C00 /* 52.113.12.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34711000 /* 52.113.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34712100 /* 52.113.33.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34712400 /* 52.113.36.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34712800 /* 52.113.40.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34713000 /* 52.113.48.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -958,9 +980,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x3472A000 /* 52.114.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3472B400 /* 52.114.180.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3472B800 /* 52.114.184.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3472C000 /* 52.114.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3472D000 /* 52.114.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3472D800 /* 52.114.216.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3472C000 /* 52.114.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3472E000 /* 52.114.224.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3472F000 /* 52.114.240.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3472F400 /* 52.114.244.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -985,17 +1005,17 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x3473F000 /* 52.115.240.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34780000 /* 52.120.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x34790000 /* 52.121.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x34798000 /* 52.121.128.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3479A000 /* 52.121.160.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x3479B000 /* 52.121.176.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x34798000 /* 52.121.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3479C000 /* 52.121.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x3479D000 /* 52.121.208.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x3479E000 /* 52.121.224.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347A0000 /* 52.122.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B0000 /* 52.123.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B2000 /* 52.123.32.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B3000 /* 52.123.48.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B3800 /* 52.123.56.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x347B3C00 /* 52.123.60.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B3C00 /* 52.123.60.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347B3E00 /* 52.123.62.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B8500 /* 52.123.133.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B8600 /* 52.123.134.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347B8800 /* 52.123.136.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1005,7 +1025,8 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x347BC600 /* 52.123.198.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347BC800 /* 52.123.200.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347BCC00 /* 52.123.204.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x347BD000 /* 52.123.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BD000 /* 52.123.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x347BD200 /* 52.123.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347D8000 /* 52.125.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347D8800 /* 52.125.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x347D8C00 /* 52.125.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1154,8 +1175,37 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x34FE0000 /* 52.254.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x39960000 /* 57.150.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x39980000 /* 57.152.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x399D0800 /* 57.157.8.0/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0000 /* 57.157.0.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0100 /* 57.157.1.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0140 /* 57.157.1.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0160 /* 57.157.1.96/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0400 /* 57.157.4.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0500 /* 57.157.5.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0540 /* 57.157.5.64/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0560 /* 57.157.5.96/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0568 /* 57.157.5.104/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D056C /* 57.157.5.108/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0800 /* 57.157.8.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0880 /* 57.157.8.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D08C0 /* 57.157.8.192/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0C00 /* 57.157.12.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0C80 /* 57.157.12.128/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D0CA0 /* 57.157.12.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1000 /* 57.157.16.0/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1040 /* 57.157.16.64/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1048 /* 57.157.16.72/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1400 /* 57.157.20.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1420 /* 57.157.20.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1430 /* 57.157.20.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1438 /* 57.157.20.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1800 /* 57.157.24.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1820 /* 57.157.24.32/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1830 /* 57.157.24.48/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1838 /* 57.157.24.56/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1C00 /* 57.157.28.0/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399D1C20 /* 57.157.28.32/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x399E0000 /* 57.158.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x399E8000 /* 57.158.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x399F0000 /* 57.159.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x40040800 /* 64.4.8.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x40043600 /* 64.4.54.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1211,8 +1261,7 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x4137DA00 /* 65.55.218.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4137FA00 /* 65.55.250.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4137FC00 /* 65.55.252.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x449A0000 /* 68.154.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x449B0000 /* 68.155.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x449A0000 /* 68.154.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x44D20000 /* 68.210.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x44D28000 /* 68.210.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x44D2C000 /* 68.210.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1230,11 +1279,12 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x46251000 /* 70.37.16.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46252000 /* 70.37.32.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46254000 /* 70.37.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x46259800 /* 70.37.152.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4625A000 /* 70.37.160.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46980000 /* 70.152.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46988000 /* 70.152.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x4698C000 /* 70.152.192.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x4698D000 /* 70.152.208.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4698C000 /* 70.152.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4698E000 /* 70.152.224.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46990000 /* 70.153.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x46998000 /* 70.153.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4699C000 /* 70.153.192.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1248,9 +1298,9 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x489A0000 /* 72.154.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x489B0000 /* 72.155.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4A070000 /* 74.7.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x4AA10000 /* 74.161.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AA10000 /* 74.161.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4AA20000 /* 74.162.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x4AA30000 /* 74.163.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x4AA30000 /* 74.163.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4AB00000 /* 74.176.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4AE00000 /* 74.224.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x4AE20000 /* 74.226.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1444,11 +1494,12 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x80CB0000 /* 128.203.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x80FB0000 /* 128.251.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x82210000 /* 130.33.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x826B0000 /* 130.107.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x826B0000 /* 130.107.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x82830000 /* 130.131.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x82D50000 /* 130.213.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x82D50000 /* 130.213.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83910000 /* 131.145.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83A30000 /* 131.163.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x83BD0000 /* 131.189.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83FD0300 /* 131.253.3.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83FD0C00 /* 131.253.12.0/29 */, 29, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83FD0C10 /* 131.253.12.16/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1501,10 +1552,27 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x83FD28A0 /* 131.253.40.160/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83FD28C0 /* 131.253.40.192/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x83FD2900 /* 131.253.41.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x84A40000 /* 132.164.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x84C40000 /* 132.196.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x84DC0000 /* 132.220.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x84F5E600 /* 132.245.230.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86210000 /* 134.33.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86700000 /* 134.112.0.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x868A0000 /* 134.138.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x86950000 /* 134.149.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x86AAC000 /* 134.170.192.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x86AADC00 /* 134.170.220.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x86AADE00 /* 134.170.222.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x870D0000 /* 135.13.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87120000 /* 135.18.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87740000 /* 135.116.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87770000 /* 135.119.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87820000 /* 135.130.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87950000 /* 135.149.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87AB0000 /* 135.171.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87DC0000 /* 135.220.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87DE0000 /* 135.222.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x87DE8000 /* 135.222.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x87E00000 /* 135.224.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x87E80000 /* 135.232.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x87EC0000 /* 135.236.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1530,12 +1598,11 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0x96AB5200 /* 150.171.82.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x96AB5400 /* 150.171.84.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x96AB5800 /* 150.171.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x96AB6100 /* 150.171.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x96AB6200 /* 150.171.98.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x96AB6400 /* 150.171.100.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x97CE4000 /* 151.206.64.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x97CE5000 /* 151.206.80.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0x97CE5800 /* 151.206.88.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x97CE4000 /* 151.206.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x97CE6000 /* 151.206.96.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0x97CE6800 /* 151.206.104.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x97CE8000 /* 151.206.128.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x97CE8800 /* 151.206.136.0/22 */, 22, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0x97CE8C00 /* 151.206.140.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1648,11 +1715,13 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0xACB80000 /* 172.184.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACBC0000 /* 172.188.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACBD0000 /* 172.189.0.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACBD8000 /* 172.189.128.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACBE0000 /* 172.190.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACC80000 /* 172.200.0.0/13 */, 13, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACD00000 /* 172.208.0.0/14 */, 14, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACD40000 /* 172.212.0.0/16 */, 16, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACD50000 /* 172.213.0.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xACD54000 /* 172.213.64.0/18 */, 18, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACD58000 /* 172.213.128.0/17 */, 17, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xACD60000 /* 172.214.0.0/15 */, 15, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xBFE81000 /* 191.232.16.0/21 */, 21, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1711,7 +1780,11 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0xBFEFD000 /* 191.239.208.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xBFEFE000 /* 191.239.224.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xC1954000 /* 193.149.64.0/19 */, 19, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0xC6B46100 /* 198.180.97.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B46100 /* 198.180.97.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B46180 /* 198.180.97.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B461C0 /* 198.180.97.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B461E0 /* 198.180.97.224/30 */, 30, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xC6B461E4 /* 198.180.97.228/31 */, 31, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xC71E1000 /* 199.30.16.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xC71E1200 /* 199.30.18.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xC71E1400 /* 199.30.20.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1768,6 +1841,10 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0xD1C72000 /* 209.199.32.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD1C72100 /* 209.199.33.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD1C72180 /* 209.199.33.128/26 */, 26, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1C721C0 /* 209.199.33.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1C721E0 /* 209.199.33.224/28 */, 28, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1C72200 /* 209.199.34.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD1C72300 /* 209.199.35.0/25 */, 25, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD1F0D400 /* 209.240.212.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD5C78000 /* 213.199.128.0/20 */, 20, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD5C7A900 /* 213.199.169.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1775,7 +1852,8 @@ static ndpi_network ndpi_protocol_microsoft_azure_protocol_list[] = { { 0xD5C7B460 /* 213.199.180.96/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD5C7B4C0 /* 213.199.180.192/27 */, 27, NDPI_PROTOCOL_MICROSOFT_AZURE }, { 0xD5C7B700 /* 213.199.183.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { 0xD8DCD000 /* 216.220.208.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD8DCD000 /* 216.220.208.0/23 */, 23, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { 0xD8DCD200 /* 216.220.210.0/24 */, 24, NDPI_PROTOCOL_MICROSOFT_AZURE }, /* End */ { 0x0, 0, 0 } }; @@ -1899,6 +1977,7 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1026:900:40::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1026:2400::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1026:2410::", 46, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1026:2415::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1026:2500::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1026:2500:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1026:2500:8::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1919,11 +1998,12 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1030::", 45, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:8::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:9::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:9:400::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:9:500::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:9:580::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:9:5c0::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:9:5c2::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:400::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:600::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:680::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:6c0::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:6c8::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:9:6cc::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:a::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:d::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:e::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1935,6 +2015,7 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1030:100:40::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:100:44::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:100:46::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:100:48::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:101::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:103::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:104::", 46, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1948,13 +2029,11 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1030:301::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:302::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:400::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:400::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:600::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:700::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:780::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:7a0::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:401:7b0::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:401::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:401:800::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:401:880::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:401:890::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:401:898::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:402::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:405::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:406::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -1981,14 +2060,12 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1030:704::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:800::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:802::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:200::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:300::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:380::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:3c0::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:3d0::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:3d8::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1030:804:3dc::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804:400::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804:480::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804:4a0::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804:4b0::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:804:4b2::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:805::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:806::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:809::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2037,14 +2114,20 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1030:1301::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:1302::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1030:1304::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1401::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1402::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1404::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1501::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1502::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1030:1504::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:6::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:8::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:10::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:903:30::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:903:32::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:903:30::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:903:34::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:36::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:38::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:903:3d::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2055,7 +2138,7 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1036:d20::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:120d::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2400::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2410::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:2410::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2500::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2500:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2500:8::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2072,15 +2155,10 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1036:2500:34::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2500:38::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:2500:3c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:40::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:50::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:58::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:60::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:62::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:64::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:68::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:70::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1036:2500:78::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:2500:40::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:2500:48::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:2500:60::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1036:2500:68::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1036:3000::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1037:1::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1039:205::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2200,81 +2278,99 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1061:10::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1000::", 46, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1004::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1004:80::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1004:82::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1004:80::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1004:90::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1004:92::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1005::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1005:20::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1005:28::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1005:2c::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1005:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1005:30::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1005:34::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1006::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1006:80::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1006:88::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1006:8c::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1006:80::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1006:90::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1006:94::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1007::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1007:80::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008:40::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008:60::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008:70::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008:74::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1008:76::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1007:80::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1007:88::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1007:8c::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1008::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1008:80::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1008:88::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1008:8a::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1009::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1009:20::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1009:28::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100a::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100a:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1009:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1009:30::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1009:34::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100a::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:100b::", 57, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100b:80::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100b:90::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100b:94::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100b:96::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100b:80::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100b:a0::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100b:b0::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100b:b2::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:100c::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:100c:40::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100c:60::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100c:68::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100c:6c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100d::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100d:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100d:30::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100d:38::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100d:3c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100c:60::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100c:70::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100c:78::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100d::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100d:40::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100d:42::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100d:44::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:100e::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:100e:40::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100e:60::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:100e:62::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010:30::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010:38::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010:3c::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1010:3e::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100e:60::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100e:70::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100e:74::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:100e:78::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1010::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1010:40::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1010:50::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1011::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1011:10::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1011:14::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1012::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1012:10::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013:30::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013:38::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013:3c::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1013:3e::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1016::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1016:10::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1016:14::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1016:16::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1017::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1017:10::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1011:10::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1011:18::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1011:1c::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1012::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1013::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1013:40::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1013:44::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1014::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1014:10::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1014:18::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1014:1a::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1015::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1015:10::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1015:14::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1015:16::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1015:18::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1016::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1017::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1017:20::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1017:30::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1017:38::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1018::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1018:10::", 61, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1018:18::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1018:1c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1019::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1019:10::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1019:14::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:101a::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:101a:10::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:101a:14::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1310::", 50, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1310:4000::", 52, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1310:4000::", 51, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1311::", 50, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1311:4000::", 52, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1311:5000::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:1311:5800::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1311:4000::", 51, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1311:6000::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1312::", 51, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1312:2000::", 52, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1312:3000::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1312:3800::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1312:4000::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1312:4800::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1312:5400::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1312:5800::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:1312:6000::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1313::", 53, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1314::", 52, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1314:1000::", 54, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2287,9 +2383,11 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1061:1747::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:1748::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:174a::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:174b::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:174c::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:2000::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:2000:100::", 58, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2603:1061:2000:140::", 60, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1061:2000:140::", 59, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:2000:400::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:2000:408::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1061:2000:410::", 62, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2496,6 +2594,13 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1063:134:200::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:135::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:135:200::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:136::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:137::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:138::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:139::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:13a::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:13b::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:13c::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:180::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:200::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:201::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2601,6 +2706,8 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1063:431::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:432::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:433::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:434::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:435::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:600::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:601::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:602::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2652,6 +2759,30 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1063:630::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:631::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:632::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:633::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:634::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:635::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:636::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c00::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c01::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c02::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c03::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c04::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c05::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c06::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c07::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c08::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c09::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0a::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0b::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0c::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0d::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0e::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c0f::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c10::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c11::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c12::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:1c13::", 55, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2200::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2200:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2200:8::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2702,6 +2833,8 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1063:2204:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2204:8::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2204:c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:2204:10::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:2204:14::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2206::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2206:4::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2206:8::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2722,6 +2855,8 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2603:1063:2206:44::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2206:48::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:2206:4c::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:2206:50::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2603:1063:2206:54::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:1063:c000::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:10e1:0:100::", 56, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2603:10e1:1::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2756,7 +2891,11 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2620:1ec:34::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2620:1ec:39::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2620:1ec:3e::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, - { "2620:1ec:40::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2620:1ec:41::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2620:1ec:42::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2620:1ec:44::", 46, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2620:1ec:48::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2620:1ec:4c::", 46, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2620:1ec:50::", 47, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2620:1ec:8f0::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2620:1ec:900::", 44, NDPI_PROTOCOL_MICROSOFT_AZURE }, @@ -2793,6 +2932,8 @@ static ndpi_network6 ndpi_protocol_microsoft_azure_protocol_list_6[] = { { "2a01:111:f100:a000::", 63, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2a01:111:f100:a002::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2a01:111:f100:a004::", 64, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2a01:111:f102:8001::1761:4c10", 128, NDPI_PROTOCOL_MICROSOFT_AZURE }, + { "2a01:111:f102:8001::1761:4f3b", 128, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2a01:111:f400::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, { "2a01:111:f403::", 48, NDPI_PROTOCOL_MICROSOFT_AZURE }, /* End */ diff --git a/src/lib/inc_generated/ndpi_cachefly_match.c.inc b/src/lib/inc_generated/ndpi_cachefly_match.c.inc index 13fc23e0a..59c76a3ed 100644 --- a/src/lib/inc_generated/ndpi_cachefly_match.c.inc +++ b/src/lib/inc_generated/ndpi_cachefly_match.c.inc @@ -27,6 +27,7 @@ static ndpi_network ndpi_protocol_cachefly_protocol_list[] = { { 0x5250E0BE /* 82.80.224.190/32 */, 32, NDPI_PROTOCOL_CACHEFLY }, { 0xA747EE9F /* 167.71.238.159/32 */, 32, NDPI_PROTOCOL_CACHEFLY }, { 0xA7589E00 /* 167.88.158.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, + { 0xC3BF6600 /* 195.191.102.0/23 */, 23, NDPI_PROTOCOL_CACHEFLY }, { 0xCC5D8E00 /* 204.93.142.0/23 */, 23, NDPI_PROTOCOL_CACHEFLY }, { 0xCC5D9600 /* 204.93.150.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, { 0xCDEAAF00 /* 205.234.175.0/24 */, 24, NDPI_PROTOCOL_CACHEFLY }, diff --git a/src/lib/inc_generated/ndpi_crawlers_match.c.inc b/src/lib/inc_generated/ndpi_crawlers_match.c.inc index 5db10e81e..c3e1fc8ba 100644 --- a/src/lib/inc_generated/ndpi_crawlers_match.c.inc +++ b/src/lib/inc_generated/ndpi_crawlers_match.c.inc @@ -45,15 +45,15 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x22590A50 /* 34.89.10.80/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x2259C650 /* 34.89.198.80/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x2260A230 /* 34.96.162.48/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, - { 0x22628800 /* 34.98.136.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x22628880 /* 34.98.136.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, - { 0x226288C0 /* 34.98.136.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x22628800 /* 34.98.136.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x22628900 /* 34.98.137.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22628A00 /* 34.98.138.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x22628A80 /* 34.98.138.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22628B00 /* 34.98.139.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22628B80 /* 34.98.139.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x22628C00 /* 34.98.140.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22628C80 /* 34.98.140.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x22628CC0 /* 34.98.140.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22628D00 /* 34.98.141.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22628D80 /* 34.98.141.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22628E00 /* 34.98.142.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, @@ -79,16 +79,20 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x22741F40 /* 34.116.31.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742000 /* 34.116.32.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22742100 /* 34.116.33.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x22742180 /* 34.116.33.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x22742180 /* 34.116.33.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x227421C0 /* 34.116.33.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742200 /* 34.116.34.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x22742240 /* 34.116.34.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742300 /* 34.116.35.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22742400 /* 34.116.36.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x22742440 /* 34.116.36.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742500 /* 34.116.37.0/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x22742700 /* 34.116.39.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x22742700 /* 34.116.39.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x22742780 /* 34.116.39.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x227427C0 /* 34.116.39.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742800 /* 34.116.40.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x22742900 /* 34.116.41.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, + { 0x22742A00 /* 34.116.42.0/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x22742B00 /* 34.116.43.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x22764200 /* 34.118.66.0/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x2276FE00 /* 34.118.254.0/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, @@ -97,6 +101,7 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x227F8040 /* 34.127.128.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x227F8100 /* 34.127.129.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x227F8140 /* 34.127.129.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x227F8400 /* 34.127.132.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x22929690 /* 34.146.150.144/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x22936E90 /* 34.147.110.144/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x22974A90 /* 34.151.74.144/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, @@ -116,27 +121,29 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x23BB8400 /* 35.187.132.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8600 /* 35.187.134.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8700 /* 35.187.135.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x23BB8780 /* 35.187.135.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x23BB8780 /* 35.187.135.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8800 /* 35.187.136.0/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8880 /* 35.187.136.128/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8A00 /* 35.187.138.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8C00 /* 35.187.140.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8C80 /* 35.187.140.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x23BB8CC0 /* 35.187.140.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8D00 /* 35.187.141.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8D40 /* 35.187.141.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8D80 /* 35.187.141.128/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8E00 /* 35.187.142.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8E40 /* 35.187.142.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23BB8F00 /* 35.187.143.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x23BB8F80 /* 35.187.143.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31000 /* 35.243.16.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31080 /* 35.243.16.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31100 /* 35.243.17.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x23F31180 /* 35.243.17.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31200 /* 35.243.18.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31240 /* 35.243.18.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31300 /* 35.243.19.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31380 /* 35.243.19.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x23F31400 /* 35.243.20.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x23F31480 /* 35.243.20.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x23F31400 /* 35.243.20.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31500 /* 35.243.21.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31600 /* 35.243.22.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x23F31640 /* 35.243.22.64/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, @@ -164,15 +171,15 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x42F94080 /* 66.249.64.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x42F940E0 /* 66.249.64.224/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94100 /* 66.249.65.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F94200 /* 66.249.66.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F942A0 /* 66.249.66.160/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F942C0 /* 66.249.66.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x42F94200 /* 66.249.66.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94400 /* 66.249.68.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x42F94480 /* 66.249.68.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94500 /* 66.249.69.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94600 /* 66.249.70.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94800 /* 66.249.72.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94A00 /* 66.249.74.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F94A80 /* 66.249.74.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x42F94A80 /* 66.249.74.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x42F94AC0 /* 66.249.74.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94B00 /* 66.249.75.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94C00 /* 66.249.76.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x42F94E00 /* 66.249.78.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, @@ -182,41 +189,37 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0x42F95980 /* 66.249.89.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x42F959E0 /* 66.249.89.224/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x42F95A00 /* 66.249.90.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F95C00 /* 66.249.92.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F95C60 /* 66.249.92.96/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F95C80 /* 66.249.92.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, - { 0x42F95CC0 /* 66.249.92.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x42F95C00 /* 66.249.92.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x453FB000 /* 69.63.176.0/20 */, 20, NDPI_HTTP_CRAWLER_BOT }, { 0x45ABE000 /* 69.171.224.0/19 */, 19, NDPI_HTTP_CRAWLER_BOT }, { 0x480EC700 /* 72.14.199.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x4A774C00 /* 74.119.76.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7D9400 /* 74.125.148.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7D9600 /* 74.125.150.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x4A7D9680 /* 74.125.150.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7D9700 /* 74.125.151.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7DD800 /* 74.125.216.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7DD900 /* 74.125.217.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x4A7DD980 /* 74.125.217.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x4A7DD980 /* 74.125.217.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x4A7DD9C0 /* 74.125.217.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7DDA00 /* 74.125.218.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x4A7DDB00 /* 74.125.219.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x66846000 /* 102.132.96.0/20 */, 20, NDPI_HTTP_CRAWLER_BOT }, { 0x67046000 /* 103.4.96.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C000 /* 107.178.192.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C0A0 /* 107.178.192.160/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C0C0 /* 107.178.192.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, + { 0x6BB2C000 /* 107.178.192.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2C100 /* 107.178.193.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2C180 /* 107.178.193.128/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2C1C0 /* 107.178.193.192/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C200 /* 107.178.194.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C300 /* 107.178.195.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C360 /* 107.178.195.96/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0x6BB2C380 /* 107.178.195.128/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x6BB2C200 /* 107.178.194.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2C400 /* 107.178.196.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2CA00 /* 107.178.202.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2CA80 /* 107.178.202.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2CAC0 /* 107.178.202.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2CB00 /* 107.178.203.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0x6BB2E000 /* 107.178.224.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, - { 0x6CB10200 /* 108.177.2.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x6CB10200 /* 108.177.2.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0x6CB10280 /* 108.177.2.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0x6CB102C0 /* 108.177.2.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0x81860000 /* 129.134.0.0/16 */, 16, NDPI_HTTP_CRAWLER_BOT }, { 0x8BD93400 /* 139.217.52.0/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0x934BD000 /* 147.75.208.0/20 */, 20, NDPI_HTTP_CRAWLER_BOT }, @@ -228,10 +231,13 @@ static ndpi_network ndpi_http_crawler_bot_protocol_list[] = { { 0xB33CC000 /* 179.60.192.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0xB93CD800 /* 185.60.216.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0xB959D800 /* 185.89.216.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, + { 0xBDF74700 /* 189.247.71.0/24 */, 24, NDPI_HTTP_CRAWLER_BOT }, { 0xBFE9CCE0 /* 191.233.204.224/28 */, 28, NDPI_HTTP_CRAWLER_BOT }, { 0xC0854C00 /* 192.133.76.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0xC0B20500 /* 192.178.5.0/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, - { 0xC0B20600 /* 192.178.6.0/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0xC0B20600 /* 192.178.6.0/25 */, 25, NDPI_HTTP_CRAWLER_BOT }, + { 0xC0B20680 /* 192.178.6.128/26 */, 26, NDPI_HTTP_CRAWLER_BOT }, + { 0xC0B206C0 /* 192.178.6.192/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0xC0B21100 /* 192.178.17.0/27 */, 27, NDPI_HTTP_CRAWLER_BOT }, { 0xC7109C00 /* 199.16.156.0/22 */, 22, NDPI_HTTP_CRAWLER_BOT }, { 0xC71E1800 /* 199.30.24.0/23 */, 23, NDPI_HTTP_CRAWLER_BOT }, @@ -257,17 +263,20 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2001:4860:4801:3e::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:40::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:48::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:50::", 63, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:53::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:4c::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:50::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:54::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:56::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:60::", 60, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:70::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:78::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:80::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:88::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:90::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:94::", 64, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:a0::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:94::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:96::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:a0::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:a4::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2008::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:200c::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2010::", 60, NDPI_HTTP_CRAWLER_BOT }, @@ -280,16 +289,20 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2001:4860:4801:203e::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2040::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2048::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:204c::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2050::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:2054::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:2054::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:2056::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2060::", 60, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2070::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2078::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2080::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2088::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2001:4860:4801:2090::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:2094::", 64, NDPI_HTTP_CRAWLER_BOT }, - { "2001:4860:4801:20a0::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:2094::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:2096::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:20a0::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2001:4860:4801:20a4::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2401:db00::", 32, NDPI_HTTP_CRAWLER_BOT }, { "2404:f340:10:4000::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2404:f340:10:4004::", 63, NDPI_HTTP_CRAWLER_BOT }, @@ -320,14 +333,14 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2600:1900:0:5e::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:60::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:68::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:6c::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:70::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:78::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:7c::", 64, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:80::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:84::", 63, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:86::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:7c::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:80::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:90::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:94::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:94::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:96::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:a0::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:a4::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:b0::", 61, NDPI_HTTP_CRAWLER_BOT }, @@ -353,9 +366,8 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2600:1900:0:142::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:150::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:158::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:160::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:164::", 63, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:166::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:160::", 61, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:168::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:170::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:180::", 60, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:190::", 63, NDPI_HTTP_CRAWLER_BOT }, @@ -365,16 +377,19 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2600:1900:0:1c4::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:1d0::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:1e0::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:1e4::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:1f0::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:1f4::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:200::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:204::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:204::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:206::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:210::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:214::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:220::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:230::", 61, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:238::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:240::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:242::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:250::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:254::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:260::", 62, NDPI_HTTP_CRAWLER_BOT }, @@ -382,10 +397,11 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2600:1900:0:280::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:290::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2a0::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:2b0::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:2b0::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2c0::", 62, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2d0::", 62, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:2d4::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:2d4::", 63, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:2d6::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2e0::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2e2::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:2f0::", 62, NDPI_HTTP_CRAWLER_BOT }, @@ -399,10 +415,14 @@ static ndpi_network6 ndpi_http_crawler_bot_protocol_list_6[] = { { "2600:1900:0:340::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:350::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:352::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:360::", 64, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:370::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2600:1900:0:372::", 64, NDPI_HTTP_CRAWLER_BOT }, - { "2600:1900:0:380::", 64, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:380::", 62, NDPI_HTTP_CRAWLER_BOT }, + { "2600:1900:0:384::", 63, NDPI_HTTP_CRAWLER_BOT }, { "2620:0:1c00::", 40, NDPI_HTTP_CRAWLER_BOT }, + { "2806:1090:cbff::", 48, NDPI_HTTP_CRAWLER_BOT }, + { "2806:10a0:cbff::", 48, NDPI_HTTP_CRAWLER_BOT }, { "2a03:2880::", 31, NDPI_HTTP_CRAWLER_BOT }, { "2a03:2887:ff2c::", 47, NDPI_HTTP_CRAWLER_BOT }, { "2a03:83e0::", 32, NDPI_HTTP_CRAWLER_BOT }, diff --git a/src/lib/inc_generated/ndpi_digitalocean_match.c.inc b/src/lib/inc_generated/ndpi_digitalocean_match.c.inc index 213410308..0692f261a 100644 --- a/src/lib/inc_generated/ndpi_digitalocean_match.c.inc +++ b/src/lib/inc_generated/ndpi_digitalocean_match.c.inc @@ -25,6 +25,7 @@ static ndpi_network ndpi_protocol_digitalocean_protocol_list[] = { { 0x05656800 /* 5.101.104.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x18904000 /* 24.144.64.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x18904400 /* 24.144.68.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x18904A00 /* 24.144.74.0/23 */, 23, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x18904C00 /* 24.144.76.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x18905000 /* 24.144.80.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x18906000 /* 24.144.96.0/19 */, 19, NDPI_PROTOCOL_DIGITALOCEAN }, @@ -115,12 +116,15 @@ static ndpi_network ndpi_protocol_digitalocean_protocol_list[] = { { 0x44B7F400 /* 68.183.244.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x44B7F800 /* 68.183.248.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x44B7FC00 /* 68.183.252.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x45373000 /* 69.55.48.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373100 /* 69.55.49.0/24 */, 24, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373600 /* 69.55.54.0/24 */, 24, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373700 /* 69.55.55.0/24 */, 24, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x45373A00 /* 69.55.58.0/23 */, 23, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373B40 /* 69.55.59.64/26 */, 26, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373B80 /* 69.55.59.128/26 */, 26, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373BC0 /* 69.55.59.192/27 */, 27, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x45373C00 /* 69.55.60.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373C60 /* 69.55.60.96/27 */, 27, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373C80 /* 69.55.60.128/26 */, 26, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x45373D40 /* 69.55.61.64/26 */, 26, NDPI_PROTOCOL_DIGITALOCEAN }, @@ -275,6 +279,20 @@ static ndpi_network ndpi_protocol_digitalocean_protocol_list[] = { { 0x867A5000 /* 134.122.80.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x867A6000 /* 134.122.96.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x867A7000 /* 134.122.112.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C78200 /* 134.199.130.0/23 */, 23, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C78400 /* 134.199.132.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C78800 /* 134.199.136.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C78C00 /* 134.199.140.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C79000 /* 134.199.144.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7A000 /* 134.199.160.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7B000 /* 134.199.176.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7B400 /* 134.199.180.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7B800 /* 134.199.184.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7BC00 /* 134.199.188.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7C000 /* 134.199.192.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7D000 /* 134.199.208.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7E000 /* 134.199.224.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0x86C7F000 /* 134.199.240.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x86D10000 /* 134.209.0.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x86D11000 /* 134.209.16.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, { 0x86D12000 /* 134.209.32.0/20 */, 20, NDPI_PROTOCOL_DIGITALOCEAN }, @@ -1015,6 +1033,7 @@ static ndpi_network ndpi_protocol_digitalocean_protocol_list[] = { { 0xD1267000 /* 209.38.112.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0xD1267400 /* 209.38.116.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0xD1267800 /* 209.38.120.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, + { 0xD1267C00 /* 209.38.124.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0xD1268000 /* 209.38.128.0/19 */, 19, NDPI_PROTOCOL_DIGITALOCEAN }, { 0xD126A000 /* 209.38.160.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, { 0xD126A400 /* 209.38.164.0/22 */, 22, NDPI_PROTOCOL_DIGITALOCEAN }, @@ -1084,6 +1103,7 @@ static ndpi_network6 ndpi_protocol_digitalocean_protocol_list_6[] = { { "2604:a880:2:d0::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, { "2604:a880:2:d1::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, { "2604:a880:4:1d0::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, + { "2604:a880:5:1::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, { "2604:a880:400:d0::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, { "2604:a880:400:d1::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, { "2604:a880:800:10::", 64, NDPI_PROTOCOL_DIGITALOCEAN }, diff --git a/src/lib/inc_generated/ndpi_domains_ms_azure_match.c.inc b/src/lib/inc_generated/ndpi_domains_ms_azure_match.c.inc new file mode 100644 index 000000000..d008025f5 --- /dev/null +++ b/src/lib/inc_generated/ndpi_domains_ms_azure_match.c.inc @@ -0,0 +1,52 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_protocol_match azure_host_match[] = { + { "accesscontrol.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azmk8s.io", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azure-api.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurecontainer.io", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurecr.io", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azureedge.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurefd.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azure-mobile.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurewebsites.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "biztalk.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blob.core.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cloudapp.azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cloudapp.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cosmos.azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "database.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "documents.azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "file.core.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "graph.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "management.core.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "origin.mediaservices.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "queue.core.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "servicebus.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "table.core.windows.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "trafficmanager.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "vault.azure.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "visualstudio.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "vo.msecnd.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } +}; diff --git a/src/lib/inc_generated/ndpi_domains_ms_office365_match.c.inc b/src/lib/inc_generated/ndpi_domains_ms_office365_match.c.inc new file mode 100644 index 000000000..38ebf2ac4 --- /dev/null +++ b/src/lib/inc_generated/ndpi_domains_ms_office365_match.c.inc @@ -0,0 +1,158 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_protocol_match microsoft365_host_match[] = { + { "aadrm.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "account.activedirectory.windowsazure.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "account.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "accounts.accesscontrol.windows.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "acompli.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "activation.sls.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "activity.windows.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "admin.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "adminwebservice.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ajax.aspnetcdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "amp.azure.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "api.passwordreset.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "apis.live.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "appex.bing.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "appex-rf.msn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "appsforoffice.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "aria.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "assets.onestore.ms", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "assets-yammer.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "auth.gfx.ms", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "auth.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "autologon.microsoftazuread-sso.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azure-apim.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurerms.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "becws.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "c1.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "c.bing.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "c.bing.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ccs.login.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cdn.odc.officeapps.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cdn.uci.officeapps.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "clientconfig.microsoftonline-p.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "c.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cloud.microsoft", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "companymanager.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "compliance.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cortana.ai", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "crl.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dc.services.visualstudio.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "d.docs.live.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "defender.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "device.login.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dgps.support.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "docs.live.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "docs.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ecn.dev.virtualearth.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "enterpriseregistration.windows.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "eus-www.sway-cdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "eus-www.sway-extensions.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "events.data.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "flow.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "go.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "graph.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "graph.windows.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hip.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "informationprotection.azure.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "informationprotection.hosting.portal.azure.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "logincert.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "loginex.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.microsoftonline-p.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login-us.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.windows.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "login.windows-ppe.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mem.gfx.ms", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "microsoftonline-p.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "microsoftusercontent.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msauthimages.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msauth.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msdn.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msecnd.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftauthimages.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftauth.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftidentity.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msidentity.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "nexus.microsoftonline-p.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "o15.officeredir.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "o365weve.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocos-office365-s2s.msedge.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office15client.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office365.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officeapps.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officecdn.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officecdn.microsoft.com.edgesuite.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officeclient.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "office.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officepreviewredir.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officeredir.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officespeech.platform.bing.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "onenote.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "online.office.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "otelrules.azureedge.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlookmobile.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "partnerservices.getmicrosoftkey.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "passwordreset.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "phonefactor.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "platform.linkedin.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "portal.cloudappsecurity.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "powerapps.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "powerautomate.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "prod.msocdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "protection.office.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "provisioningapi.microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "purview.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "r.office.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "security.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sharepointonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "shellprod.msocdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "signup.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "staffhub.ms", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "staffhubweb.azureedge.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "static.microsoft", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "support.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sway.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "technet.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tse1.mm.bing.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "usercontent.microsoft", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "virtualearth.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wus-www.sway-cdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wus-www.sway-extensions.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.acompli.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.bing.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.microsoft365.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.onedrive.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.outlook.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "www.sway.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yammer.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yammerusercontent.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } +}; diff --git a/src/lib/inc_generated/ndpi_domains_ms_onedrive_match.c.inc b/src/lib/inc_generated/ndpi_domains_ms_onedrive_match.c.inc new file mode 100644 index 000000000..32c4f2747 --- /dev/null +++ b/src/lib/inc_generated/ndpi_domains_ms_onedrive_match.c.inc @@ -0,0 +1,39 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_protocol_match ms_onedrive_host_match[] = { + { "admin.onedrive.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "g.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "officeclient.microsoft.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "oneclient.sfx.ms", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "search.production.apac.trafficmanager.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "search.production.emea.trafficmanager.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "search.production.us.trafficmanager.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sharepoint.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sharepointonline.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "spoprod-a.akamaihd.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ssw.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "storage.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "svc.ms", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "wns.windows.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } +}; diff --git a/src/lib/inc_generated/ndpi_domains_ms_outlook_match.c.inc b/src/lib/inc_generated/ndpi_domains_ms_outlook_match.c.inc new file mode 100644 index 000000000..ba4597993 --- /dev/null +++ b/src/lib/inc_generated/ndpi_domains_ms_outlook_match.c.inc @@ -0,0 +1,33 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_protocol_match outlook_host_match[] = { + { "mail.protection.outlook.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mx.microsoft", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlook.cloud.microsoft", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlook.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlook.office365.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "outlook.office.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "protection.outlook.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "smtp.office365.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } +}; diff --git a/src/lib/inc_generated/ndpi_domains_ms_teams_match.c.inc b/src/lib/inc_generated/ndpi_domains_ms_teams_match.c.inc new file mode 100644 index 000000000..809c9ef39 --- /dev/null +++ b/src/lib/inc_generated/ndpi_domains_ms_teams_match.c.inc @@ -0,0 +1,37 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_protocol_match teams_host_match[] = { + { "adl.windows.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "aka.ms", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "compass-ssl.microsoft.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "join.secure.skypeassets.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "keydelivery.mediaservices.windows.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "lync.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mlccdnprod.azureedge.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "skype.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "streaming.mediaservices.windows.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.cloud.microsoft", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.microsoft.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "users.storage.live.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { NULL, NULL, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL } +}; diff --git a/src/lib/inc_generated/ndpi_ethereum_match.c.inc b/src/lib/inc_generated/ndpi_ethereum_match.c.inc index 3c44aeaca..1030f7ede 100644 --- a/src/lib/inc_generated/ndpi_ethereum_match.c.inc +++ b/src/lib/inc_generated/ndpi_ethereum_match.c.inc @@ -24,6 +24,8 @@ static ndpi_network ndpi_protocol_ethereum_protocol_list[] = { { 0x03D12D4F /* 3.209.45.79/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0x128A6C43 /* 18.138.108.67/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0x416C4665 /* 65.108.70.101/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, + { 0x86C7B817 /* 134.199.184.23/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, + { 0x86D18A54 /* 134.209.138.84/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0x8A447B98 /* 138.68.123.152/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0x8AC533B5 /* 138.197.51.181/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0x8B3B31CE /* 139.59.49.206/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, @@ -32,6 +34,7 @@ static ndpi_network ndpi_protocol_ethereum_protocol_list[] = { { 0x9D5A23A6 /* 157.90.35.166/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0xAA40FA58 /* 170.64.250.88/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, { 0xB28088E9 /* 178.128.136.233/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, + { 0xD1267CA0 /* 209.38.124.160/32 */, 32, NDPI_PROTOCOL_ETHEREUM }, /* End */ { 0x0, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_google_cloud_match.c.inc b/src/lib/inc_generated/ndpi_google_cloud_match.c.inc index 316568f89..85c2cf417 100644 --- a/src/lib/inc_generated/ndpi_google_cloud_match.c.inc +++ b/src/lib/inc_generated/ndpi_google_cloud_match.c.inc @@ -32,15 +32,18 @@ static ndpi_network ndpi_protocol_google_cloud_protocol_list[] = { { 0x2200F000 /* 34.0.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22010000 /* 34.1.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22018000 /* 34.1.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, - { 0x22020000 /* 34.2.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE_CLOUD }, - { 0x22022000 /* 34.2.32.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22020000 /* 34.2.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22024C00 /* 34.2.76.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22028000 /* 34.2.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22080000 /* 34.8.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x220C0000 /* 34.12.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x220D0000 /* 34.13.0.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x220D4400 /* 34.13.68.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x220D4800 /* 34.13.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x220D7000 /* 34.13.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x220D8000 /* 34.13.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x220E0000 /* 34.14.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x220E8000 /* 34.14.128.0/18 */, 18, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22100000 /* 34.16.0.0/12 */, 12, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22200000 /* 34.32.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22220000 /* 34.34.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, @@ -142,6 +145,12 @@ static ndpi_network ndpi_protocol_google_cloud_protocol_list[] = { { 0x22984800 /* 34.152.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22985000 /* 34.152.80.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22985400 /* 34.152.84.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986000 /* 34.152.96.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986200 /* 34.152.98.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986400 /* 34.152.100.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986800 /* 34.152.104.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986E00 /* 34.152.110.0/25 */, 25, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22986F00 /* 34.152.111.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22992000 /* 34.153.32.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22992600 /* 34.153.38.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22992800 /* 34.153.40.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, @@ -154,7 +163,7 @@ static ndpi_network ndpi_protocol_google_cloud_protocol_list[] = { { 0x2299E800 /* 34.153.232.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x2299F000 /* 34.153.240.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x2299FA00 /* 34.153.250.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, - { 0x2299FC00 /* 34.153.252.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x2299FC00 /* 34.153.252.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x229A0000 /* 34.154.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x229D0000 /* 34.157.0.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x229D0800 /* 34.157.8.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, @@ -196,9 +205,23 @@ static ndpi_network ndpi_protocol_google_cloud_protocol_list[] = { { 0x22B12400 /* 34.177.36.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22B12800 /* 34.177.40.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22B13000 /* 34.177.48.0/21 */, 21, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14000 /* 34.177.64.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14200 /* 34.177.66.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14400 /* 34.177.68.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14800 /* 34.177.72.0/22 */, 22, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14E00 /* 34.177.78.0/25 */, 25, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B14F00 /* 34.177.79.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22B30000 /* 34.179.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22B50000 /* 34.181.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x22B60000 /* 34.182.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B70000 /* 34.183.0.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B70200 /* 34.183.2.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B70300 /* 34.183.3.0/25 */, 25, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B70400 /* 34.183.4.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B80000 /* 34.184.0.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B80200 /* 34.184.2.0/24 */, 24, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B80300 /* 34.184.3.0/25 */, 25, NDPI_PROTOCOL_GOOGLE_CLOUD }, + { 0x22B80400 /* 34.184.4.0/23 */, 23, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x23B80000 /* 35.184.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x23BA0000 /* 35.186.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE_CLOUD }, { 0x23BB0000 /* 35.187.0.0/17 */, 17, NDPI_PROTOCOL_GOOGLE_CLOUD }, diff --git a/src/lib/inc_generated/ndpi_google_match.c.inc b/src/lib/inc_generated/ndpi_google_match.c.inc index 798f1fc65..ab615936f 100644 --- a/src/lib/inc_generated/ndpi_google_match.c.inc +++ b/src/lib/inc_generated/ndpi_google_match.c.inc @@ -27,8 +27,11 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0x2200E400 /* 34.0.228.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, { 0x2200E800 /* 34.0.232.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, { 0x22014000 /* 34.1.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, - { 0x22023000 /* 34.2.48.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, - { 0x22024000 /* 34.2.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22024000 /* 34.2.64.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22024800 /* 34.2.72.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, + { 0x22024E00 /* 34.2.78.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22025000 /* 34.2.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22026000 /* 34.2.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, { 0x22030000 /* 34.3.0.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x22030300 /* 34.3.3.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, { 0x22030400 /* 34.3.4.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, @@ -38,10 +41,9 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0x22034000 /* 34.3.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, { 0x22040000 /* 34.4.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE }, { 0x220D4000 /* 34.13.64.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, - { 0x220D4800 /* 34.13.72.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, { 0x220D5000 /* 34.13.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, - { 0x220D6000 /* 34.13.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, - { 0x220E8000 /* 34.14.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x220D6000 /* 34.13.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x220EC000 /* 34.14.192.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, { 0x220F0000 /* 34.15.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, { 0x2222C000 /* 34.34.192.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, { 0x2222D000 /* 34.34.208.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, @@ -104,7 +106,10 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0x22984600 /* 34.152.70.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x22985200 /* 34.152.82.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x22985800 /* 34.152.88.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, - { 0x22986000 /* 34.152.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22986300 /* 34.152.99.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22986C00 /* 34.152.108.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22986E80 /* 34.152.110.128/25 */, 25, NDPI_PROTOCOL_GOOGLE }, + { 0x22987000 /* 34.152.112.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, { 0x22988000 /* 34.152.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, { 0x22990000 /* 34.153.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, { 0x22992200 /* 34.153.34.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, @@ -118,7 +123,6 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0x2299E400 /* 34.153.228.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x2299E700 /* 34.153.231.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, { 0x2299F800 /* 34.153.248.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, - { 0x2299FE00 /* 34.153.254.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x229C0000 /* 34.156.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, { 0x229D0A00 /* 34.157.10.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x229D5600 /* 34.157.86.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, @@ -133,12 +137,31 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0x22B10000 /* 34.177.0.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, { 0x22B12600 /* 34.177.38.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0x22B13800 /* 34.177.56.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, - { 0x22B14000 /* 34.177.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22B14300 /* 34.177.67.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, + { 0x22B14C00 /* 34.177.76.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22B14E80 /* 34.177.78.128/25 */, 25, NDPI_PROTOCOL_GOOGLE }, + { 0x22B15000 /* 34.177.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22B16000 /* 34.177.96.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, { 0x22B18000 /* 34.177.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, { 0x22B20000 /* 34.178.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, { 0x22B40000 /* 34.180.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, - { 0x22B70000 /* 34.183.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, - { 0x22B80000 /* 34.184.0.0/13 */, 13, NDPI_PROTOCOL_GOOGLE }, + { 0x22B70380 /* 34.183.3.128/25 */, 25, NDPI_PROTOCOL_GOOGLE }, + { 0x22B70600 /* 34.183.6.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22B70800 /* 34.183.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22B71000 /* 34.183.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22B72000 /* 34.183.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22B74000 /* 34.183.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22B78000 /* 34.183.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22B80380 /* 34.184.3.128/25 */, 25, NDPI_PROTOCOL_GOOGLE }, + { 0x22B80600 /* 34.184.6.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, + { 0x22B80800 /* 34.184.8.0/21 */, 21, NDPI_PROTOCOL_GOOGLE }, + { 0x22B81000 /* 34.184.16.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, + { 0x22B82000 /* 34.184.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0x22B84000 /* 34.184.64.0/18 */, 18, NDPI_PROTOCOL_GOOGLE }, + { 0x22B88000 /* 34.184.128.0/17 */, 17, NDPI_PROTOCOL_GOOGLE }, + { 0x22B90000 /* 34.185.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0x22BA0000 /* 34.186.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, + { 0x22BC0000 /* 34.188.0.0/14 */, 14, NDPI_PROTOCOL_GOOGLE }, { 0x23BB8000 /* 35.187.128.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, { 0x23BE6000 /* 35.190.96.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, { 0x23BEF000 /* 35.190.240.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, @@ -215,6 +238,7 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0xACD90000 /* 172.217.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, { 0xACFD0000 /* 172.253.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, { 0xADC20000 /* 173.194.0.0/16 */, 16, NDPI_PROTOCOL_GOOGLE }, + { 0xC068A000 /* 192.104.160.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, { 0xC0B20000 /* 192.178.0.0/15 */, 15, NDPI_PROTOCOL_GOOGLE }, { 0xC1BA0400 /* 193.186.4.0/24 */, 24, NDPI_PROTOCOL_GOOGLE }, { 0xC7249A00 /* 199.36.154.0/23 */, 23, NDPI_PROTOCOL_GOOGLE }, @@ -232,6 +256,7 @@ static ndpi_network ndpi_protocol_google_protocol_list[] = { { 0xD83AC000 /* 216.58.192.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, { 0xD8495000 /* 216.73.80.0/20 */, 20, NDPI_PROTOCOL_GOOGLE }, { 0xD8EF2000 /* 216.239.32.0/19 */, 19, NDPI_PROTOCOL_GOOGLE }, + { 0xD8FCDC00 /* 216.252.220.0/22 */, 22, NDPI_PROTOCOL_GOOGLE }, /* End */ { 0x0, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_icloud_private_relay_match.c.inc b/src/lib/inc_generated/ndpi_icloud_private_relay_match.c.inc index 2467988ba..be9f8ab89 100644 --- a/src/lib/inc_generated/ndpi_icloud_private_relay_match.c.inc +++ b/src/lib/inc_generated/ndpi_icloud_private_relay_match.c.inc @@ -1785,173 +1785,61 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x681C8F2C /* 104.28.143.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C8F30 /* 104.28.143.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C8F40 /* 104.28.143.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C8F80 /* 104.28.143.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C8F90 /* 104.28.143.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C8F94 /* 104.28.143.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8F80 /* 104.28.143.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FC0 /* 104.28.143.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FE0 /* 104.28.143.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FF0 /* 104.28.143.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FF8 /* 104.28.143.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FFC /* 104.28.143.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C8FFE /* 104.28.143.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9001 /* 104.28.144.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9002 /* 104.28.144.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9004 /* 104.28.144.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9008 /* 104.28.144.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9011 /* 104.28.144.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9012 /* 104.28.144.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9014 /* 104.28.144.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9018 /* 104.28.144.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9008 /* 104.28.144.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9010 /* 104.28.144.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9020 /* 104.28.144.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9040 /* 104.28.144.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9050 /* 104.28.144.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9054 /* 104.28.144.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C905E /* 104.28.144.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9060 /* 104.28.144.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9080 /* 104.28.144.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9096 /* 104.28.144.150/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9098 /* 104.28.144.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90A0 /* 104.28.144.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90C0 /* 104.28.144.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90C8 /* 104.28.144.200/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90CB /* 104.28.144.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90CC /* 104.28.144.204/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90D0 /* 104.28.144.208/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90D4 /* 104.28.144.212/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90D6 /* 104.28.144.214/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90D9 /* 104.28.144.217/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90DA /* 104.28.144.218/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90DC /* 104.28.144.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90DF /* 104.28.144.223/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90E1 /* 104.28.144.225/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90E6 /* 104.28.144.230/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90E9 /* 104.28.144.233/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90EB /* 104.28.144.235/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90EC /* 104.28.144.236/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C90F0 /* 104.28.144.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9040 /* 104.28.144.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9080 /* 104.28.144.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9101 /* 104.28.145.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9102 /* 104.28.145.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9104 /* 104.28.145.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9108 /* 104.28.145.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9110 /* 104.28.145.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9120 /* 104.28.145.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9140 /* 104.28.145.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9160 /* 104.28.145.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9170 /* 104.28.145.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9174 /* 104.28.145.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C917F /* 104.28.145.127/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9180 /* 104.28.145.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9190 /* 104.28.145.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9197 /* 104.28.145.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9198 /* 104.28.145.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C91A0 /* 104.28.145.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C91B0 /* 104.28.145.176/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C91B2 /* 104.28.145.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C91BF /* 104.28.145.191/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C91C0 /* 104.28.145.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9140 /* 104.28.145.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9180 /* 104.28.145.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9201 /* 104.28.146.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9202 /* 104.28.146.2/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C920A /* 104.28.146.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C920C /* 104.28.146.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9202 /* 104.28.146.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9204 /* 104.28.146.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9208 /* 104.28.146.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9210 /* 104.28.146.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9220 /* 104.28.146.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9240 /* 104.28.146.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9250 /* 104.28.146.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9255 /* 104.28.146.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9256 /* 104.28.146.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9258 /* 104.28.146.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9260 /* 104.28.146.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9270 /* 104.28.146.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9274 /* 104.28.146.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9277 /* 104.28.146.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9278 /* 104.28.146.120/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C927C /* 104.28.146.124/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9280 /* 104.28.146.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92C0 /* 104.28.146.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92CD /* 104.28.146.205/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92CE /* 104.28.146.206/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92D0 /* 104.28.146.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92E0 /* 104.28.146.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92E8 /* 104.28.146.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92EE /* 104.28.146.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C92F0 /* 104.28.146.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9240 /* 104.28.146.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9280 /* 104.28.146.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9301 /* 104.28.147.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9302 /* 104.28.147.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9304 /* 104.28.147.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9308 /* 104.28.147.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9310 /* 104.28.147.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9320 /* 104.28.147.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9324 /* 104.28.147.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9327 /* 104.28.147.39/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9328 /* 104.28.147.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9330 /* 104.28.147.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9320 /* 104.28.147.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9340 /* 104.28.147.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9380 /* 104.28.147.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93A0 /* 104.28.147.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93A8 /* 104.28.147.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93AC /* 104.28.147.172/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93AF /* 104.28.147.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93B0 /* 104.28.147.176/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93C0 /* 104.28.147.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93C8 /* 104.28.147.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93CC /* 104.28.147.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93D3 /* 104.28.147.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93D4 /* 104.28.147.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93D8 /* 104.28.147.216/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93E0 /* 104.28.147.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93E8 /* 104.28.147.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93EA /* 104.28.147.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C93F0 /* 104.28.147.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9380 /* 104.28.147.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9401 /* 104.28.148.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9402 /* 104.28.148.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9404 /* 104.28.148.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9408 /* 104.28.148.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9410 /* 104.28.148.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9420 /* 104.28.148.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9440 /* 104.28.148.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9456 /* 104.28.148.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9458 /* 104.28.148.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9460 /* 104.28.148.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9440 /* 104.28.148.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9480 /* 104.28.148.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9501 /* 104.28.149.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9502 /* 104.28.149.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9504 /* 104.28.149.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9508 /* 104.28.149.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9510 /* 104.28.149.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9514 /* 104.28.149.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9516 /* 104.28.149.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C951B /* 104.28.149.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C951C /* 104.28.149.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9520 /* 104.28.149.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9522 /* 104.28.149.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C952E /* 104.28.149.46/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9530 /* 104.28.149.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9540 /* 104.28.149.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9548 /* 104.28.149.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9554 /* 104.28.149.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9558 /* 104.28.149.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9562 /* 104.28.149.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9564 /* 104.28.149.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9568 /* 104.28.149.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9570 /* 104.28.149.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C9580 /* 104.28.149.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95A0 /* 104.28.149.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95B1 /* 104.28.149.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95B2 /* 104.28.149.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95B4 /* 104.28.149.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95B8 /* 104.28.149.184/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95BB /* 104.28.149.187/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95BC /* 104.28.149.188/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95C0 /* 104.28.149.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95C8 /* 104.28.149.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95CA /* 104.28.149.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95CC /* 104.28.149.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95CE /* 104.28.149.206/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95D0 /* 104.28.149.208/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95D2 /* 104.28.149.210/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95D4 /* 104.28.149.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95D8 /* 104.28.149.216/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95E0 /* 104.28.149.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95E8 /* 104.28.149.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95ED /* 104.28.149.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95EE /* 104.28.149.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95F0 /* 104.28.149.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95F7 /* 104.28.149.247/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x681C95F8 /* 104.28.149.248/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9510 /* 104.28.149.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9520 /* 104.28.149.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9540 /* 104.28.149.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x681C9580 /* 104.28.149.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9601 /* 104.28.150.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9602 /* 104.28.150.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x681C9604 /* 104.28.150.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2068,6 +1956,9 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x8CF80A00 /* 140.248.10.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF80B00 /* 140.248.11.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF80B08 /* 140.248.11.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80C00 /* 140.248.12.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80E00 /* 140.248.14.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF80E20 /* 140.248.14.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81000 /* 140.248.16.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81010 /* 140.248.16.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81018 /* 140.248.16.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2076,9 +1967,6 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x8CF81308 /* 140.248.19.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81400 /* 140.248.20.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81500 /* 140.248.21.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8CF81600 /* 140.248.22.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8CF81700 /* 140.248.23.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8CF81720 /* 140.248.23.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81800 /* 140.248.24.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81840 /* 140.248.24.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF81850 /* 140.248.24.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2144,6 +2032,18 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x8CF82A00 /* 140.248.42.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF82A80 /* 140.248.42.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF82AC0 /* 140.248.42.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B00 /* 140.248.43.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B10 /* 140.248.43.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B16 /* 140.248.43.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B18 /* 140.248.43.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B20 /* 140.248.43.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B40 /* 140.248.43.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82B80 /* 140.248.43.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82BC0 /* 140.248.43.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82BE0 /* 140.248.43.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82BF0 /* 140.248.43.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82BF8 /* 140.248.43.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8CF82BFC /* 140.248.43.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF82C00 /* 140.248.44.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF82C10 /* 140.248.44.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF82C18 /* 140.248.44.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2161,6 +2061,11 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x8CF83000 /* 140.248.48.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF83100 /* 140.248.49.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x8CF83110 /* 140.248.49.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8000 /* 146.75.128.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8200 /* 146.75.130.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8210 /* 146.75.130.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B8218 /* 146.75.130.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B821C /* 146.75.130.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B8600 /* 146.75.134.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B8800 /* 146.75.136.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B8900 /* 146.75.137.0/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2177,7 +2082,10 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x924B9610 /* 146.75.150.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B9614 /* 146.75.150.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B9800 /* 146.75.152.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924B9900 /* 146.75.153.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9900 /* 146.75.153.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9980 /* 146.75.153.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9990 /* 146.75.153.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924B9994 /* 146.75.153.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B9A00 /* 146.75.154.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B9B00 /* 146.75.155.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924B9E00 /* 146.75.158.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2343,11 +2251,10 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0x924BF600 /* 146.75.246.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924BF610 /* 146.75.246.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924BF614 /* 146.75.246.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BF800 /* 146.75.248.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BFA00 /* 146.75.250.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x924BFA20 /* 146.75.250.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0x924BFC00 /* 146.75.252.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE0E000 /* 172.224.224.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE0E040 /* 172.224.224.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE0E050 /* 172.224.224.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE0E058 /* 172.224.224.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0E200 /* 172.224.226.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0E240 /* 172.224.226.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0E250 /* 172.224.226.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2426,6 +2333,7 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE0F800 /* 172.224.248.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0F900 /* 172.224.249.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0F920 /* 172.224.249.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE0F940 /* 172.224.249.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0FA00 /* 172.224.250.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0FA80 /* 172.224.250.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE0FAC0 /* 172.224.250.192/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2486,7 +2394,10 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE11B50 /* 172.225.27.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE11B60 /* 172.225.27.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE11C00 /* 172.225.28.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE11C80 /* 172.225.28.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11C80 /* 172.225.28.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11CC0 /* 172.225.28.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11CD0 /* 172.225.28.208/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE11CE0 /* 172.225.28.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE11D00 /* 172.225.29.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE11E00 /* 172.225.30.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE12000 /* 172.225.32.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2540,8 +2451,6 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE13900 /* 172.225.57.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE13940 /* 172.225.57.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE13950 /* 172.225.57.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE13958 /* 172.225.57.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE13960 /* 172.225.57.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE13A00 /* 172.225.58.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE13C00 /* 172.225.60.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE13C80 /* 172.225.60.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2632,7 +2541,8 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE160C0 /* 172.225.96.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE160E0 /* 172.225.96.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE160E8 /* 172.225.96.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE16100 /* 172.225.97.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16100 /* 172.225.97.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE16140 /* 172.225.97.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE16200 /* 172.225.98.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE16400 /* 172.225.100.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE16480 /* 172.225.100.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2764,23 +2674,39 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE1A354 /* 172.225.163.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A358 /* 172.225.163.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A360 /* 172.225.163.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A400 /* 172.225.164.0/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A410 /* 172.225.164.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A420 /* 172.225.164.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A440 /* 172.225.164.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A480 /* 172.225.164.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A4C0 /* 172.225.164.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A500 /* 172.225.165.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A600 /* 172.225.166.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A700 /* 172.225.167.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A740 /* 172.225.167.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A760 /* 172.225.167.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1A780 /* 172.225.167.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A800 /* 172.225.168.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A880 /* 172.225.168.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A890 /* 172.225.168.144/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A96C /* 172.225.169.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A970 /* 172.225.169.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1A980 /* 172.225.169.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE1AA00 /* 172.225.170.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE1AA40 /* 172.225.170.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE1AA60 /* 172.225.170.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE1AA70 /* 172.225.170.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB00 /* 172.225.171.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB40 /* 172.225.171.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB50 /* 172.225.171.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB54 /* 172.225.171.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB60 /* 172.225.171.96/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AB80 /* 172.225.171.128/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1AC00 /* 172.225.172.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1AC80 /* 172.225.172.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1ACC0 /* 172.225.172.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1ACD0 /* 172.225.172.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1ACE0 /* 172.225.172.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE1AE00 /* 172.225.174.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1AD00 /* 172.225.173.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B000 /* 172.225.176.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B100 /* 172.225.177.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B120 /* 172.225.177.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B200 /* 172.225.178.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B300 /* 172.225.179.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B340 /* 172.225.179.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -2809,6 +2735,8 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE1B8C0 /* 172.225.184.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B8E0 /* 172.225.184.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1B8F0 /* 172.225.184.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B900 /* 172.225.185.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE1B910 /* 172.225.185.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1BA00 /* 172.225.186.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1BA40 /* 172.225.186.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE1BB00 /* 172.225.187.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3041,7 +2969,10 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE20440 /* 172.226.4.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE20500 /* 172.226.5.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE20580 /* 172.226.5.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE20588 /* 172.226.5.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20588 /* 172.226.5.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE20590 /* 172.226.5.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE205A0 /* 172.226.5.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE205C0 /* 172.226.5.192/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE20600 /* 172.226.6.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE20680 /* 172.226.6.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE20688 /* 172.226.6.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3098,14 +3029,6 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE22400 /* 172.226.36.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE22480 /* 172.226.36.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE22488 /* 172.226.36.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE22800 /* 172.226.40.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE22880 /* 172.226.40.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE228A0 /* 172.226.40.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE228A8 /* 172.226.40.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE22900 /* 172.226.41.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE22980 /* 172.226.41.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE229C0 /* 172.226.41.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE229C8 /* 172.226.41.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE22A00 /* 172.226.42.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE22A80 /* 172.226.42.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE22A88 /* 172.226.42.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3192,7 +3115,10 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE25C00 /* 172.226.92.0/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE25C04 /* 172.226.92.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE25D00 /* 172.226.93.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE25D80 /* 172.226.93.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25D80 /* 172.226.93.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25DC0 /* 172.226.93.192/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25DD0 /* 172.226.93.208/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE25DE0 /* 172.226.93.224/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE25E00 /* 172.226.94.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE25E20 /* 172.226.94.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE25E28 /* 172.226.94.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3229,10 +3155,6 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE27058 /* 172.226.112.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2705C /* 172.226.112.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE27060 /* 172.226.112.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE27200 /* 172.226.114.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE27240 /* 172.226.114.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE27250 /* 172.226.114.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE27258 /* 172.226.114.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE27400 /* 172.226.116.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE27420 /* 172.226.116.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE27430 /* 172.226.116.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3293,7 +3215,9 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE28EE0 /* 172.226.142.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE28EE4 /* 172.226.142.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE28EF0 /* 172.226.142.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE28F00 /* 172.226.143.0/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28F00 /* 172.226.143.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28F80 /* 172.226.143.128/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE28FA0 /* 172.226.143.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE29000 /* 172.226.144.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE29100 /* 172.226.145.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE29180 /* 172.226.145.128/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3342,10 +3266,7 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE2AB00 /* 172.226.171.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2AB80 /* 172.226.171.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2AC00 /* 172.226.172.0/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2AE00 /* 172.226.174.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2AE40 /* 172.226.174.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2AE44 /* 172.226.174.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2AF00 /* 172.226.175.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2AE00 /* 172.226.174.0/23 */, 23, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2B000 /* 172.226.176.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2B100 /* 172.226.177.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2B140 /* 172.226.177.64/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3372,12 +3293,7 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE2BA00 /* 172.226.186.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2BA80 /* 172.226.186.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2BA88 /* 172.226.186.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BC00 /* 172.226.188.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BD00 /* 172.226.189.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BD80 /* 172.226.189.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BE00 /* 172.226.190.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BF00 /* 172.226.191.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xACE2BF80 /* 172.226.191.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2BC00 /* 172.226.188.0/22 */, 22, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C000 /* 172.226.192.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C100 /* 172.226.193.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C140 /* 172.226.193.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3388,6 +3304,7 @@ static ndpi_network ndpi_anonymous_subscriber_icloud_private_relay_protocol_list { 0xACE2C500 /* 172.226.197.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C600 /* 172.226.198.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C700 /* 172.226.199.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE2C780 /* 172.226.199.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C800 /* 172.226.200.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2C900 /* 172.226.201.0/25 */, 25, NDPI_ANONYMOUS_SUBSCRIBER }, { 0xACE2CA00 /* 172.226.202.0/24 */, 24, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3576,6 +3493,174 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2606:54c3:0:1a90::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2606:54c3:0:1a98::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2606:54c3:0:1a9c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b000:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b001:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b002:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b003:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b004:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b005:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b006:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b007:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b008:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b009:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b00f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b010:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b011:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b012:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b013:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b014:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b015:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b016:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b017:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b040:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b041:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b042:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b043:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b044:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b045:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b046:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b047:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b048:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b049:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b04f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b050:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b051:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b052:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b053:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b054:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b055:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b056:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b057:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b058:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b059:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b05f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b060:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b061:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b062:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b063:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b064:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b065:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b066:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b067:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b068:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b069:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b06f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b070:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b071:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b072:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b073:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b074:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b075:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b076:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b077:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b078:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b079:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b07f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b080:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b081:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b082:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b083:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b084:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b085:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b086:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b087:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b088:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b089:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b08a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b08b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c6:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c7:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0c9:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0ca:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0cb:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0cc:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0cd:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0ce:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0cf:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d6:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d7:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d8::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d8:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d8:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d8:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b0d9:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b100:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b101:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b102:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b103:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b104:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b105:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b106:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b107:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b108:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b109:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b10f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b110:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b111:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b112:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b113:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b114:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b115:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b116:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b117:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b118:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b119:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:1200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:7400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:7500::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11c:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b11d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b200:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b201:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b202:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3664,10 +3749,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b255:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b256:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b257:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b258:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b259:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b25a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b25b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b25c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b25d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b25e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3780,14 +3861,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b375:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b376:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b377:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b378:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b379:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b37f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b380::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b380:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b380:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3810,7 +3883,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b380:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b380:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b380:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b380:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b380:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b381::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b381:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b381:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3833,7 +3906,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b381:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b381:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b381:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b381:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b381:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b382::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b382:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b382:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3856,7 +3929,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b382:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b382:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b382:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b382:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b382:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b383:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b384::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b384:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3880,7 +3953,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b384:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b384:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b384:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b384:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b384:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b385::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b385:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b385:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3903,7 +3976,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b385:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b385:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b385:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b385:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b385:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b386:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b387:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b388::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3928,7 +4001,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b388:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b388:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b388:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b388:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b388:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b389::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b389:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b389:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3951,7 +4024,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b389:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b389:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b389:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b389:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b389:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38c::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -3976,7 +4049,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b38c:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38c:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38c:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b38c:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b38c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b38f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4057,6 +4130,8 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b408:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b408:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b409:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b440:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b441:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b444:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b445:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b448:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4073,6 +4148,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b489:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b4c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b4c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b4c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b4c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b4c4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b4c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b4c8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b4c9:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b4cc:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4081,12 +4160,16 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b4d1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b500:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b501:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b502:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b503:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b504:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b505:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b50c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b50d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b540:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b541:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b542:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b543:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b544:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b545:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b54c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4470,35 +4553,35 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b740:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b740:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b740:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b740:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b741:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b744:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b744:5380::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b744:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b744:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b744:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b744:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b745:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b745:5380::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b745:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b745:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b745:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b745:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b746:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b746:5380::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b746:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b746:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b746:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b746:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b747:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b748:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b748:5380::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b748:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b748:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b748:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b749:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b748:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b74a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b74c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b74c:5380::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b74c:5390::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b74c:5398::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b74c:539a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:b74c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b750:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b751:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b780::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4510,10 +4593,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b784:800::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b784:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b784:4dc0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b785::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b785:800::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b785:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b785:4dc0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b786::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b786:800::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b786:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -4524,7 +4603,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:b788:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b788:4dc0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b789:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:b790:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b791:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b7c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:b7c0:d260::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5387,6 +5465,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bc80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bc80:cb80::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bc81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bc82:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bc82:cb80::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bc83:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bc84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bc84:cb80::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bc85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5453,6 +5534,11 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bcd1:5fa4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bcd2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bcd3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd00:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd00:4c80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd00:4c88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd00:4c8c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd01:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd04:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd04:4c80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd04:4c88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5478,6 +5564,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bd14:4c88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd14:4c8c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd15:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd40:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd40:4a00::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd41:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd44:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd44:4a00::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd45:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5490,6 +5579,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bd50:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd50:4a00::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd51:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd80:c4e0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bd81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd84:c4e0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5502,10 +5594,22 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bd90:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd90:c4e0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bd91:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc0:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc0:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc2:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc2:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc4:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc4:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc6:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc6:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc6:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bdc7:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc8:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdc8:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5522,6 +5626,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bdd4:4800::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdd4:4804::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bdd5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be00:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be00:d540::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be01:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be04:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be04:d540::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be05:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5534,6 +5641,11 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:be10:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be10:d540::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be11:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be40:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be40:4540::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be40:4550::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be40:4554::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be41:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be44:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be44:4540::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be44:4550::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5554,6 +5666,11 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:be50:4550::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be50:4554::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be51:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be80:43c0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be80:43d0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be80:43d8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:be81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be84:43c0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:be84:43d0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5580,6 +5697,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bec0:42cc::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bec0:42ce::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bec1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec2:42c0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec2:42c8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec2:42cc::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec2:42ce::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bec3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bec4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bec4:42c0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bec4:42c8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5607,6 +5730,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bf00:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf00:c0a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf01:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf02:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf02:c0a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf03:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf04:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf04:c0a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf05:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5625,6 +5751,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bf44:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf44:4980::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf45:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf46:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf46:4980::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf47:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf4c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf4c:4980::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf4d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5643,6 +5772,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bf84:5500::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf84:5510::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf86:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf86:5500::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf86:5510::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bf87:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf8c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf8c:5500::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bf8c:5510::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5657,6 +5790,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:bfc2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bfc2:cea0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bfc3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bfc4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bfc4:cea0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:bfc5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bfcc:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bfcc:cea0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:bfcd:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5734,6 +5870,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c040:cfc0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c040:cfc4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c041:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c042:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c042:cfc0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c042:cfc4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c043:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c048:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c048:cfc0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c048:cfc4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5876,6 +6016,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c200:cd60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c200:cd62::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c201:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c202:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c202:cd60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c202:cd62::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c203:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c204:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c204:cd60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c204:cd62::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5934,7 +6078,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c344:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c344:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c344:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c344:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c344:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c345:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c348::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c348:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5943,7 +6087,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c348:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c348:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c348:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c348:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c348:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c349::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c349:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c349:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5951,7 +6095,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c349:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c349:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c349:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c349:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c349:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34a::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34a:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34a:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5959,7 +6103,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c34a:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34a:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34a:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c34a:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c34a:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34c:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5968,7 +6112,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c34c:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34c:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34c:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c34c:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c34c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34d::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34d:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34d:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5976,9 +6120,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c34d:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34d:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c34d:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c34d:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c34e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c34f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c34d:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c350::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c350:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c350:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5986,7 +6128,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c350:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c350:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c350:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c350:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c350:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c351::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c351:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c351:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -5994,7 +6136,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c351:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c351:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c351:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c351:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c351:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c352::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c352:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c352:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6002,7 +6144,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c352:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c352:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c352:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c352:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c352:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c353::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c353:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c353:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6010,7 +6152,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c353:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c353:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c353:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c353:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c353:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c354::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c354:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c354:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6018,7 +6160,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c354:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c354:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c354:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c354:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c354:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c355::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c355:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c355:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6026,7 +6168,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c355:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c355:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c355:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c355:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c355:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c356::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c356:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c356:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6034,7 +6176,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c356:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c356:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c356:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c356:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c356:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c357:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c358::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c358:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6043,24 +6185,8 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c358:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c358:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c358:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c358:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c358:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c359:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35c:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:1400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:8000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:8200::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:8220::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c35d:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c35e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c35f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c360:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6076,34 +6202,40 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c384:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c384:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c384:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c384:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c385:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c388::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c388:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c388:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c388:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c388:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c388:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c389::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c389:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c389:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c389:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c389:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c389:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38a::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38a:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38a:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38a:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c38a:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38c::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38c:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38c:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38c:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c38c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c38d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c391::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c391:400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c391:440::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c391:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c391:4e40::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:c391:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c393:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c394:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c395:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6741,20 +6873,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c88d:717c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c88e:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c88f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:900::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:980::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:9c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7100::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7140::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7160::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7170::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:7178::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c890:717c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c891:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c894::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c894:800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c894:900::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -6769,20 +6887,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:c894:7178::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c894:717c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c895:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:900::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:980::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:9c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7100::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7140::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7160::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7170::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:7178::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c898:717c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:c899:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c89c::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c89c:800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:c89c:900::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7317,6 +7421,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cc80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cc80:ca20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cc81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc82:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc82:ca20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc83:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc84:ca20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cc85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cc88:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cc88:ca20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cc89:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7379,6 +7489,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd42:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd42:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd42:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd42:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd43:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd46::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd46:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7389,6 +7500,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd46:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd46:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd46:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd46:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd47:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd48::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd48:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7399,6 +7511,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd48:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd48:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd48:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd48:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd49:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd4c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd4c:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7409,6 +7522,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd4c:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd4c:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd4c:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd4c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd4d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd50::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd50:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7419,6 +7533,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd50:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd50:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd50:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd50:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd51:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd54::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd54:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7429,6 +7544,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd54:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd54:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd54:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd54:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd55::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd55:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd55:1200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7438,11 +7554,15 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:cd55:7580::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd55:75c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd55:75e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd55:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd56:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd57:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd80:4580::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd82:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd82:4580::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:cd83:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd84:4580::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:cd85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7730,6 +7850,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d140:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d140:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d140:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d140:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d141:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d142:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d143:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7744,6 +7865,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d144:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d144:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d144:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d144:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d145:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d148::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d148:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7756,6 +7878,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d148:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d148:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d148:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d148:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d149::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d149:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d149:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7767,6 +7890,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d149:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d149:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d149:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d149:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14a:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14b:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7780,6 +7904,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d14c:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14c:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14c:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d14c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14d:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14e::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14e:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7792,6 +7917,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d14e:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14e:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14e:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d14e:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d14f:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d150::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d150:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7804,6 +7930,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d150:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d150:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d150:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d150:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d151:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d154::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d154:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7816,6 +7943,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d154:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d154:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d154:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d154:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d155::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d155:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d155:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7827,6 +7955,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d155:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d155:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d155:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d155:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d156:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d157:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d158::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7840,6 +7969,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d158:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d158:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d158:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d158:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d159::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d159:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d159:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7851,6 +7981,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d159:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d159:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d159:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d159:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15c::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15c:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15c:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7862,6 +7993,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d15c:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15c:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15c:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d15c:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15d::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15d:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15d:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7873,6 +8005,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d15d:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15d:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15d:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d15d:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15e::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15e:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15e:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7884,6 +8017,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d15e:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15e:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15e:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d15e:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15f::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15f:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15f:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7895,6 +8029,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d15f:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15f:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d15f:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d15f:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d160::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d160:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d160:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7906,6 +8041,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d160:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d160:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d160:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d160:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d161::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d161:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d161:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7917,6 +8053,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d161:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d161:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d161:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d161:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d162::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d162:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d162:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7928,6 +8065,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d162:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d162:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d162:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d162:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d163:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d164::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d164:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -7940,6 +8078,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:d164:90a0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d164:90a8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d164:90ac::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:d164:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d165:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d168:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:d169:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9185,6 +9324,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e040:cda0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e040:cda2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e041:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e042:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e042:cda0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e042:cda2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e043:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e044:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e044:cda0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e044:cda2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9719,6 +9862,14 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e680:4f40::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e680:4f42::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e681:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e682:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e682:4f40::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e682:4f42::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e683:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e684:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e684:4f40::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e684:4f42::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e685:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e688:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e688:4f40::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e688:4f42::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9730,6 +9881,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e6c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e6c0:4f00::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e6c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e6c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e6c2:4f00::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e6c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e6c8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e6c8:4f00::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e6c9:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9757,6 +9911,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e704:4ef0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e704:4ef2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e705:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e706:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e706:4ec0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e706:4ee0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e706:4ef0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e706:4ef2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e707:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e70c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e70c:4ec0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e70c:4ee0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9766,6 +9926,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e740:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e740:c920::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e741:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e742:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e742:c920::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e743:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e744:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e744:c920::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e745:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9775,6 +9938,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e780:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e780:c7a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e781:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e782:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e782:c7a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e783:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e784:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e784:c7a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e785:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9787,6 +9953,18 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e7c0:4b8c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e7c0:4b8e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e7c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c2:4b80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c2:4b88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c2:4b8c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c2:4b8e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c4:4b80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c4:4b88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c4:4b8c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c4:4b8e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e7c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e7c8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e7c8:4b80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e7c8:4b88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9817,6 +9995,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e802:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e802:4ac0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e803:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e804:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e804:4ac0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e805:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e808:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e808:4ac0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e809:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9829,6 +10010,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e840:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e840:c580::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e841:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e842:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e842:c580::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e843:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e844:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e844:c580::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e845:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e848:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e848:c580::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e849:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9841,6 +10028,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e880:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e880:c440::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e881:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e882:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e882:c440::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e883:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e888:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e888:c440::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e889:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9853,6 +10043,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e8c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e8c0:cb20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e8c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c2:cb20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c4:cb20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e8c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e8c8:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e8c8:cb20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e8c9:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9881,6 +10077,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e940:cdc0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e940:cdc2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e941:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e942:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e942:cdc0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e942:cdc2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e943:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e944:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e944:cdc0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e944:cdc2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9896,6 +10096,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e980:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e980:c280::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e981:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e982:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e982:c280::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e983:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e988:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e988:c280::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e989:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9905,6 +10108,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:e9c0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e9c0:c260::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e9c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e9c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e9c2:c260::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:e9c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e9c4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e9c4:c260::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:e9c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9922,6 +10128,16 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:ea40:d800::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea40:d808::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea41:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4401::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4402::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4404::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4408::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4410::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:4420::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:d800::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea42:d808::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea43:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea48:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea48:4400::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea48:d800::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9940,6 +10156,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:ea80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea80:c1c0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea82:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea82:c1c0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ea83:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea88:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea88:c1c0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ea89:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9958,6 +10177,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:eb40:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb40:c100::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb41:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb42:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb42:c100::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb43:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb48:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb48:c100::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb49:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9970,6 +10192,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:eb80:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb80:c020::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb81:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb82:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb82:c020::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:eb83:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb84:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb84:c020::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:eb85:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -9979,6 +10204,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:ebc0:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ebc0:c9e0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ebc1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ebc2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ebc2:c9e0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:ebc3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ebc4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ebc4:c9e0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:ebc5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11154,6 +11382,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f340:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f340:c6a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f341:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f342:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f342:c6a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f343:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f348:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f348:c6a0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f349:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11329,7 +11560,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6c0:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c0:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c0:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6c0:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6c0:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c1::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c1:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c1:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11352,7 +11583,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6c1:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c1:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c1:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6c1:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6c1:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c4::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11377,7 +11608,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6c4:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c4:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c4:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6c4:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6c4:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6c5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cc::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cc:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11401,7 +11632,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6cc:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cc:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cc:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6cc:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6cc:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cd::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cd:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cd:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11424,7 +11655,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6cd:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cd:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cd:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6cd:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6cd:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ce:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6cf:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d0::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11449,7 +11680,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6d0:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d0:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d0:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6d0:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6d0:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d4::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d4:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11473,7 +11704,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6d4:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d4:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d4:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6d4:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6d4:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d5::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d5:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d5:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11496,7 +11727,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6d5:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d5:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d5:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6d5:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6d5:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d6:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d7:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d8::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11521,7 +11752,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6d8:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d8:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d8:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6d8:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6d8:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d9::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d9:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d9:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11544,7 +11775,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6d9:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d9:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6d9:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6d9:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6d9:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6da::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6da:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6da:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11567,7 +11798,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6da:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6da:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6da:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6da:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6da:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6db:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6dc::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6dc:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11591,7 +11822,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6dc:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6dc:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6dc:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6dc:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6dc:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6dd:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e0::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e0:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11615,7 +11846,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6e0:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e0:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e0:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e0:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6e0:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e1::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e1:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e1:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11638,33 +11869,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6e1:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e1:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e1:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e1:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6e1:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:2280::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:22a0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a400::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a480::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4c0::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4e0::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4e4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4e7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4e8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a4f0::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a500::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a600::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a700::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a740::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e4:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e8::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e8:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e8:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11687,7 +11894,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6e8:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e8:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e8:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e8:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6e8:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e9::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e9:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e9:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11710,7 +11917,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6e9:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e9:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6e9:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6e9:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6e9:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ea:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6eb:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ec::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11735,7 +11942,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6ec:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ec:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ec:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6ec:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6ec:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ed::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ed:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ed:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11758,7 +11965,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6ed:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ed:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ed:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6ed:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6ed:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ee::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ee:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ee:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11781,7 +11988,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6ee:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ee:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ee:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6ee:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6ee:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ef::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ef:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ef:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11804,7 +12011,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6ef:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ef:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ef:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6ef:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6ef:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f0::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f0:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f0:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11827,7 +12034,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f0:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f0:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f0:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f0:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f0:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f1::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f1:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f1:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11850,7 +12057,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f1:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f1:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f1:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f1:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f1:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f2::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f2:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f2:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11873,7 +12080,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f2:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f2:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f2:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f2:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f2:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f3::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f3:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f3:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11896,7 +12103,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f3:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f3:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f3:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f3:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f3:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f4::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f4:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f4:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11919,7 +12126,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f4:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f4:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f4:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f4:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f4:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f5:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f8::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f8:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11943,7 +12150,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f8:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f8:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f8:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f8:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f8:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f9::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f9:2000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f9:2200::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11966,7 +12173,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6f9:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f9:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6f9:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6f9:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6f9:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fa:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fb:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fc::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11991,7 +12198,7 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f6fc:a760::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fc:a770::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fc:a778::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a02:26f7:f6fc:fff0::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f6fc:fff0::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fd:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6fe:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f6ff:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -11999,6 +12206,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f700:4d80::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f700:4d84::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f701:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f702:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f702:4d80::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f702:4d84::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f703:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f704:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f704:4d80::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f704:4d84::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12015,9 +12226,12 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f740:c820::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f741:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f742:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f743:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f743:c820::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f744:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f744:c820::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f745:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f746:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f74c:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f74c:c820::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f750:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12027,6 +12241,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f780:4640::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f781:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f782:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f783:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f783:4640::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f784:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f788:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f788:4640::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f789:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12049,6 +12266,14 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f7c0:e180::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f7c0:e188::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f7c1:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:500::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:e100::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:e180::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c2:e188::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f7c3:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f7c4::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f7c4:400::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f7c4:500::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12094,6 +12319,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f800:41c2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f801:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f802:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f803:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f803:41c0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f803:41c2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f804:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f808:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f808:41c0::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f808:41c2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12116,6 +12345,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f840:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f840:ca60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f841:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f842:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f842:ca60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f843:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f844:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f844:ca60::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f845:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12128,6 +12360,9 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:f880:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f880:c080::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f881:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f882:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f882:c080::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:26f7:f883:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f884:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f884:c080::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:f885:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12561,32 +12796,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a02:26f7:fc14:4fc8::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:fc14:4fcc::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a02:26f7:fc15:4000::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:1::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:2::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:4::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:40::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:60::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:70::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:1000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:1:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:4::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:6::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:8::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:a::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:c::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:100::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:108::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:10c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:1800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:2:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3:6::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3:d::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3:e::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12613,26 +12822,21 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:5:114::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:5:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:5:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:b::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:c::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:80::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:1800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:8:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:100::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:108::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:9:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:5::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:9::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:11::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:13::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:14::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:18::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:100::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:110::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:114::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:a:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:a:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:a:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12643,45 +12847,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:a:108::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:a:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:a:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:4::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:80::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:1200::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:b:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:5::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:6::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:f::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:1800::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:c:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:4::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:6::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:9::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:12::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:15::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:16::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:18::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:80::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:88::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:1800::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:1c00::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:1e00::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:e:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:f:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:f:6::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:f:c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12714,14 +12879,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:f:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:f:2000::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:f:4000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:20::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:30::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:38::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:2000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:2800::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:10:2a00::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:11:2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:11:9::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:11:d::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -12777,58 +12934,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:14:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:14:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:14:3000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:8::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:12::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:14::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:19::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:1b::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:20::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:28::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:2a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:2c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:2f::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:32::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:35::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:38::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:100::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:120::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:130::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:138::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:140::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:1800::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:1a00::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:1c00::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:3000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:3800::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:16:4000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:2::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:4::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:80::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:90::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:98::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:9c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:9e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:17:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:6::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:1400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:18:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:1a:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:1a:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:1a:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13028,16 +13133,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:4a:d::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4a:e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4a:1000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:4::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:1200::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:4b:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4c::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4c:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4d::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13057,43 +13152,25 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:4e:3000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4e:3400::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:4e:3600::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:3::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:4::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:8::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:1200::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:50:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:8::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:b::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:e::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:12::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:19::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:1b::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:1e::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:21::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:23::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:24::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:28::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:30::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:100::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:120::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:124::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:2000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:2800::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:2a00::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:51:3000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:52::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:52:10::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:52:12::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:52:1000::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:5::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:7::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:9::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:c::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:11::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:13::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:14::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:18::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:80::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:100::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:110::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:114::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:54:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:55::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:55:8::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:55:10::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13111,21 +13188,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:58:4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:58:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:58:1200::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:6::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:d::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:e::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:10::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:20::", 59, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:40::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:80::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:1800::", 54, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:59:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:5a::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:5a:80::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:5a:90::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:5a:1000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:5a:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:5b::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:5b:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:5b:1200::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13160,11 +13222,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:61:2::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:61:4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:61:1000::", 55, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:62::", 57, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:62:80::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:62:90::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:62:1000::", 56, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:62:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:63::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:63:2::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:63:4::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13176,18 +13233,6 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:64:20::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:64:22::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:64:1000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:42::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:44::", 62, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:48::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:50::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:60::", 60, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:70::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:78::", 63, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:7a::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:1000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:2000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:65:3000::", 53, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:66::", 58, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:66:40::", 61, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:66:48::", 64, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13467,6 +13512,10 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:2c09:8000::", 50, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:2c09:c000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:2c0a::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:2c0c::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:2c0e::", 49, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:2c0e:8000::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:2c0e:a000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:2d00::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:2e00::", 45, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:2e08::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13491,11 +13540,13 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:320f:c000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3210::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3300::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:3400::", 45, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:3408::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:3409::", 50, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:3409:4000::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, - { "2a04:4e41:3409:6000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3400::", 44, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3410::", 50, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3410:4000::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3411::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3412::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3414::", 46, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:3418::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3500::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3600::", 44, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:3610::", 49, NDPI_ANONYMOUS_SUBSCRIBER }, @@ -13759,6 +13810,27 @@ static ndpi_network6 ndpi_anonymous_subscriber_icloud_private_relay_protocol_lis { "2a04:4e41:6c06:c000::", 51, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:6c06:e000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a04:4e41:6d00::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e00::", 46, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e04::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e06::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e07::", 50, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e07:4000::", 52, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6e08::", 45, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:6f00::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7000::", 44, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7010::", 49, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7011::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7012::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7014::", 46, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7018::", 45, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7100::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7200::", 44, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7210::", 49, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7211::", 48, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7212::", 47, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7214::", 46, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7218::", 45, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:4e41:7300::", 40, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a09:bac2::", 35, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a09:bac2:2000::", 38, NDPI_ANONYMOUS_SUBSCRIBER }, { "2a09:bac2:2400::", 39, NDPI_ANONYMOUS_SUBSCRIBER }, diff --git a/src/lib/inc_generated/ndpi_mullvad_match.c.inc b/src/lib/inc_generated/ndpi_mullvad_match.c.inc index f1049ee25..8c28f635e 100644 --- a/src/lib/inc_generated/ndpi_mullvad_match.c.inc +++ b/src/lib/inc_generated/ndpi_mullvad_match.c.inc @@ -21,11 +21,40 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { - { 0x17A22804 /* 23.162.40.4/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0x17A2282D /* 23.162.40.45/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0x17A22856 /* 23.162.40.86/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0x1FAA1602 /* 31.170.22.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0x1FAA160F /* 31.170.22.15/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17A20803 /* 23.162.8.3/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17A20843 /* 23.162.8.67/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17A20882 /* 23.162.8.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4402 /* 23.234.68.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA447F /* 23.234.68.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4502 /* 23.234.69.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA457F /* 23.234.69.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4602 /* 23.234.70.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA467F /* 23.234.70.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4702 /* 23.234.71.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA477F /* 23.234.71.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4C02 /* 23.234.76.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4C7F /* 23.234.76.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4D02 /* 23.234.77.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4D7F /* 23.234.77.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4E02 /* 23.234.78.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4E7F /* 23.234.78.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4F02 /* 23.234.79.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA4F7F /* 23.234.79.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5002 /* 23.234.80.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA507F /* 23.234.80.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5102 /* 23.234.81.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA517F /* 23.234.81.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5202 /* 23.234.82.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA527F /* 23.234.82.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5302 /* 23.234.83.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA537F /* 23.234.83.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5402 /* 23.234.84.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA547F /* 23.234.84.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5502 /* 23.234.85.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA557F /* 23.234.85.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5602 /* 23.234.86.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA567F /* 23.234.86.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x17EA5702 /* 23.234.87.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x1FAB9942 /* 31.171.153.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x1FAB9A32 /* 31.171.154.50/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x2513C882 /* 37.19.200.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -76,6 +105,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x423FA792 /* 66.63.167.146/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x423FA7A2 /* 66.63.167.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x423FA7C2 /* 66.63.167.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x43D5D174 /* 67.213.209.116/30 */, 30, NDPI_PROTOCOL_MULLVAD }, + { 0x43D5D178 /* 67.213.209.120/31 */, 31, NDPI_PROTOCOL_MULLVAD }, { 0x44EB2CC2 /* 68.235.44.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x44EB2E02 /* 68.235.46.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x44EB2E21 /* 68.235.46.33/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -92,6 +123,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x4504EA96 /* 69.4.234.150/31 */, 31, NDPI_PROTOCOL_MULLVAD }, { 0x4F7F9582 /* 79.127.149.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x4F7F959F /* 79.127.149.159/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x4F7FB682 /* 79.127.182.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x4F7FB6A0 /* 79.127.182.160/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x4F7FD922 /* 79.127.217.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x4F7FD92F /* 79.127.217.47/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x4F7FDEC2 /* 79.127.222.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -101,9 +134,14 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x57F98601 /* 87.249.134.1/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x57F9860E /* 87.249.134.14/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x57F9861B /* 87.249.134.27/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x59253F0A /* 89.37.63.10/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x59253F42 /* 89.37.63.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x59253F81 /* 89.37.63.129/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x59253FBE /* 89.37.63.190/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x59EE863A /* 89.238.134.58/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x5B5A2C0A /* 91.90.44.10/31 */, 31, NDPI_PROTOCOL_MULLVAD }, - { 0x5B5A2C0C /* 91.90.44.12/30 */, 30, NDPI_PROTOCOL_MULLVAD }, + { 0x5B5A2C0C /* 91.90.44.12/31 */, 31, NDPI_PROTOCOL_MULLVAD }, + { 0x5B5A2C0F /* 91.90.44.15/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x5B5A2C12 /* 91.90.44.18/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x5B5A7B02 /* 91.90.123.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x5BCF3982 /* 91.207.57.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -119,6 +157,7 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x602CBD62 /* 96.44.189.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x602CBF82 /* 96.44.191.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x602CBF92 /* 96.44.191.146/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x62622F82 /* 98.98.47.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x674B0B32 /* 103.75.11.50/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x674B0B42 /* 103.75.11.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x674B0B52 /* 103.75.11.82/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -161,6 +200,7 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x6B961602 /* 107.150.22.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x81E32E82 /* 129.227.46.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x81E32EA2 /* 129.227.46.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x81E376A2 /* 129.227.118.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x8AC706C2 /* 138.199.6.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x8AC706CF /* 138.199.6.207/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x8AC706DC /* 138.199.6.220/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -270,7 +310,6 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x9246AC42 /* 146.70.172.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9246AC82 /* 146.70.172.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9246ACC2 /* 146.70.172.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0x9246AD02 /* 146.70.173.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9246AD42 /* 146.70.173.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9246AD82 /* 146.70.173.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9246ADC2 /* 146.70.173.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -369,6 +408,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0x9A2F1E8F /* 154.47.30.143/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9C3B32C2 /* 156.59.50.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0x9C3B32E2 /* 156.59.50.226/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0x9C3B7FC2 /* 156.59.127.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xA2808162 /* 162.128.129.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xA996C402 /* 169.150.196.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xA996C40F /* 169.150.196.15/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xA996C41C /* 169.150.196.28/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -385,6 +426,11 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xA996E3C5 /* 169.150.227.197/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xA996E3D2 /* 169.150.227.210/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xA996E3DE /* 169.150.227.222/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xAA3E640A /* 170.62.100.10/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xAA3E6442 /* 170.62.100.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xAA3E6481 /* 170.62.100.129/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xAA3E64AA /* 170.62.100.170/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xAA3E64D3 /* 170.62.100.211/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xAD2C3F42 /* 173.44.63.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xADCD5522 /* 173.205.85.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xADCD5D02 /* 173.205.93.2/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -432,9 +478,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xB9C3E846 /* 185.195.232.70/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9C3E855 /* 185.195.232.85/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9C3E856 /* 185.195.232.86/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xB9C3E942 /* 185.195.233.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xB9C3E944 /* 185.195.233.68/31 */, 31, NDPI_PROTOCOL_MULLVAD }, - { 0xB9C3E947 /* 185.195.233.71/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xB9C3E942 /* 185.195.233.66/31 */, 31, NDPI_PROTOCOL_MULLVAD }, + { 0xB9C3E944 /* 185.195.233.68/30 */, 30, NDPI_PROTOCOL_MULLVAD }, { 0xB9C3E94C /* 185.195.233.76/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9C9BC03 /* 185.201.188.3/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9C9BC21 /* 185.201.188.33/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -464,6 +509,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xB9D59B48 /* 185.213.155.72/31 */, 31, NDPI_PROTOCOL_MULLVAD }, { 0xB9D59B4A /* 185.213.155.74/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9D59B75 /* 185.213.155.117/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xB9D5C103 /* 185.213.193.3/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xB9D5C17F /* 185.213.193.127/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9F20422 /* 185.242.4.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9F85503 /* 185.248.85.3/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xB9F85512 /* 185.248.85.18/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -492,8 +539,7 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xC1207F75 /* 193.32.127.117/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC120F842 /* 193.32.248.66/31 */, 31, NDPI_PROTOCOL_MULLVAD }, { 0xC120F844 /* 193.32.248.68/30 */, 30, NDPI_PROTOCOL_MULLVAD }, - { 0xC120F848 /* 193.32.248.72/31 */, 31, NDPI_PROTOCOL_MULLVAD }, - { 0xC120F84B /* 193.32.248.75/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xC120F848 /* 193.32.248.72/30 */, 30, NDPI_PROTOCOL_MULLVAD }, { 0xC120F942 /* 193.32.249.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC120F945 /* 193.32.249.69/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC120F946 /* 193.32.249.70/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -534,9 +580,6 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xC32FC283 /* 195.47.194.131/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC32FC2A1 /* 195.47.194.161/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8062 /* 198.44.128.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC62C8082 /* 198.44.128.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC62C80A2 /* 198.44.128.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC62C80C2 /* 198.44.128.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C80E2 /* 198.44.128.226/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8122 /* 198.44.129.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8142 /* 198.44.129.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -546,6 +589,8 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xC62C8822 /* 198.44.136.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8842 /* 198.44.136.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8862 /* 198.44.136.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xC62C8882 /* 198.44.136.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, + { 0xC62C88A2 /* 198.44.136.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C88C2 /* 198.44.136.194/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8C82 /* 198.44.140.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC62C8CA2 /* 198.44.140.162/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -553,13 +598,6 @@ static ndpi_network ndpi_protocol_mullvad_protocol_list[] = { { 0xC62C8CE2 /* 198.44.140.226/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC6368222 /* 198.54.130.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC6368232 /* 198.54.130.50/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368242 /* 198.54.130.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368252 /* 198.54.130.82/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368262 /* 198.54.130.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368272 /* 198.54.130.114/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368282 /* 198.54.130.130/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC6368292 /* 198.54.130.146/32 */, 32, NDPI_PROTOCOL_MULLVAD }, - { 0xC63682B2 /* 198.54.130.178/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC6368322 /* 198.54.131.34/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC6368342 /* 198.54.131.66/32 */, 32, NDPI_PROTOCOL_MULLVAD }, { 0xC6368362 /* 198.54.131.98/32 */, 32, NDPI_PROTOCOL_MULLVAD }, @@ -737,16 +775,28 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2406:d501:f:dec::a02f", 128, NDPI_PROTOCOL_MULLVAD }, { "2406:d501:f:dee::2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2406:d501:f:def::1f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2602:fa19:4::f001", 128, NDPI_PROTOCOL_MULLVAD }, - { "2602:fa19:4::f101", 128, NDPI_PROTOCOL_MULLVAD }, - { "2602:fa19:4::f201", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:fa1f:1::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:fa1f:1::f033", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:fa1f:3::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:ffe4:c06:11e::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:ffe4:c06:11e::f101", 128, NDPI_PROTOCOL_MULLVAD }, { "2602:ffe4:c09:109::f101", 128, NDPI_PROTOCOL_MULLVAD }, { "2602:ffe4:c09:10a::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2602:ffe4:c0d:801d::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2602:ffe4:c0d:801e::f101", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:ffe4:c20:112::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2602:ffe4:c20:112::f101", 128, NDPI_PROTOCOL_MULLVAD }, + { "2604:980:1002:11::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2604:980:1002:11::f101", 128, NDPI_PROTOCOL_MULLVAD }, { "2604:e8c0:7::b66f", 128, NDPI_PROTOCOL_MULLVAD }, { "2604:e8c0:7::b68f", 128, NDPI_PROTOCOL_MULLVAD }, { "2604:e8c0:7::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f101", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f201", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f301", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f401", 128, NDPI_PROTOCOL_MULLVAD }, + { "2606:2e00:8000:4::f501", 128, NDPI_PROTOCOL_MULLVAD }, { "2606:2e00:8007:a:ae1f:6bff:fef5:7983", 128, NDPI_PROTOCOL_MULLVAD }, { "2606:2e00:8007:a:ae1f:6bff:fef5:7b1b", 128, NDPI_PROTOCOL_MULLVAD }, { "2606:2e00:8007:a:ae1f:6bff:fef5:7b21", 128, NDPI_PROTOCOL_MULLVAD }, @@ -769,11 +819,23 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2607:9000:0:106::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:0:107::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:0:108::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:31::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:32::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:33::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:34::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:35::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:36::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:600:37::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:2000:13::1f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:2000:14::a46f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:2000:15::f001", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:2000:16::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:2000:17::2f", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:41::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:42::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:43::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:44::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:45::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:46::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:47::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:2000:48::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:3000:13::a51f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:3000:14::a50f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:3000:15::a49f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -781,17 +843,27 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2607:9000:3000:17::2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:4000:12::101f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:4000:13::102f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:14::103f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:15::b83f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:16::b84f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:17::b85f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:18::f001", 128, NDPI_PROTOCOL_MULLVAD }, - { "2607:9000:4000:19::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:31::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:32::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:33::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:34::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:35::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:36::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:37::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:4000:38::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:5000:12::101f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:5000:13::102f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:5000:14::b03f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:5000:15::b77f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:5000:16::b78f", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:31::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:32::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:33::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:34::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:35::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:36::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:37::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:5000:38::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:6000:12::1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:6000:13::2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:6000:14::a02f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -821,6 +893,8 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2607:9000:a000:12::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:a000:13::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:a000:14::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:a000:15::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2607:9000:a000:16::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:9000:a000:17::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:fc98:0:8a::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2607:fc98:0:8a::f101", 128, NDPI_PROTOCOL_MULLVAD }, @@ -852,8 +926,6 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2607:ff48:aa81:2603::b26f", 128, NDPI_PROTOCOL_MULLVAD }, { "2804:5364:7000:40::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2804:5364:7000:41::f001", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a00:c68:0:cbcf::1f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a00:c68:0:cbd0::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4120::1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4120::2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4120::a01f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -863,7 +935,6 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a02:20c8:4124::1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4124::2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4124::3f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a02:20c8:4124::4f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4124::a01f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4124::a02f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:20c8:4124::a03f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -877,6 +948,15 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a02:29b8:dc01:1830::1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:29b8:dc01:1831::f002", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:29b8:dc01:1832::a1f", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:1::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:2::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:3::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:4::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:5::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:6::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:7::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:8::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:1508:9::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:1901:2::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:1901:3::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:2901::a02f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -892,6 +972,8 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a02:6ea0:5400:2::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:5500:1::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:5500:2::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:5700:1::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a02:6ea0:5700:2::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:c034:1::a30f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:c034:2::a31f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a02:6ea0:c034:3::a32f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -1043,6 +1125,7 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a03:1b20:4:f011::999f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::a02f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::a09f", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a03:1b20:4:f011::a10f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::a11f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::b07f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::bb01", 128, NDPI_PROTOCOL_MULLVAD }, @@ -1053,6 +1136,7 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a03:1b20:4:f011::f701", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::fb01", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:4:f011::fd01", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a03:1b20:4:f011::fe01", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:5:f011::a05f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:5:f011::a09f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:5:f011::a10f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -1125,6 +1209,7 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a03:1b20:b:f011::a05f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:b:f011::a06f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:1b20:b:f011::f701", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a03:1b20:b:f011::f801", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:d9c0:3000::a20f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:d9c0:3000::a21f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a03:d9c0:3000::a22f", 128, NDPI_PROTOCOL_MULLVAD }, @@ -1181,14 +1266,13 @@ static ndpi_network6 ndpi_protocol_mullvad_protocol_list_6[] = { { "2a0d:5600:6:106::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:6:107::1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:6:108::2f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a0d:5600:8:4::d1f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:8:6::d2f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:8:d::d3f", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:8:2f::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:8:37::f001", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a0d:5600:8:38::d1f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a0d:5600:8:39::d2f", 128, NDPI_PROTOCOL_MULLVAD }, - { "2a0d:5600:8:3a::d3f", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a0d:5600:8:38::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a0d:5600:8:39::f001", 128, NDPI_PROTOCOL_MULLVAD }, + { "2a0d:5600:8:3a::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:8:3b::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:9:c::f001", 128, NDPI_PROTOCOL_MULLVAD }, { "2a0d:5600:9:d::f001", 128, NDPI_PROTOCOL_MULLVAD }, diff --git a/src/lib/inc_generated/ndpi_nordvpn_match.c.inc b/src/lib/inc_generated/ndpi_nordvpn_match.c.inc index 567aa985c..af8d81ab3 100644 --- a/src/lib/inc_generated/ndpi_nordvpn_match.c.inc +++ b/src/lib/inc_generated/ndpi_nordvpn_match.c.inc @@ -163,7 +163,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x05B43EAD /* 5.180.62.173/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05B43EAE /* 5.180.62.174/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0x05B43EB0 /* 5.180.62.176/30 */, 30, NDPI_PROTOCOL_NORDVPN }, - { 0x05B43EB4 /* 5.180.62.180/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x05B43EB5 /* 5.180.62.181/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05B43EB6 /* 5.180.62.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05B5E92B /* 5.181.233.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05B5E93B /* 5.181.233.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -226,6 +226,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x05FD736E /* 5.253.115.110/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0x05FD7370 /* 5.253.115.112/30 */, 30, NDPI_PROTOCOL_NORDVPN }, { 0x05FD7374 /* 5.253.115.116/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x05FD7376 /* 5.253.115.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05FDCD03 /* 5.253.205.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05FDCE33 /* 5.253.206.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x05FDCE3B /* 5.253.206.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -383,10 +384,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2513D4CA /* 37.19.212.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4CF /* 37.19.212.207/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4D4 /* 37.19.212.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2513D4D6 /* 37.19.212.214/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x2513D4D7 /* 37.19.212.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4D9 /* 37.19.212.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4DE /* 37.19.212.222/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2513D4E0 /* 37.19.212.224/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x2513D4E1 /* 37.19.212.225/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4E3 /* 37.19.212.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D4F7 /* 37.19.212.247/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D502 /* 37.19.213.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -451,7 +452,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2513D91E /* 37.19.217.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D921 /* 37.19.217.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D924 /* 37.19.217.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2513D927 /* 37.19.217.39/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D928 /* 37.19.217.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2513D92C /* 37.19.217.44/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0x2513DA8B /* 37.19.218.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -521,7 +521,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x25788AAB /* 37.120.138.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25788AB3 /* 37.120.138.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25788ABB /* 37.120.138.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x25788ABC /* 37.120.138.188/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25788F03 /* 37.120.143.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25788F0B /* 37.120.143.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25788F13 /* 37.120.143.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -535,6 +534,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x257890F3 /* 37.120.144.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x25789153 /* 37.120.145.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578915B /* 37.120.145.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578916B /* 37.120.145.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x257894AB /* 37.120.148.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x257894B3 /* 37.120.148.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x257894BB /* 37.120.148.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -609,8 +609,11 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2578CBCB /* 37.120.203.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CBD3 /* 37.120.203.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CBDB /* 37.120.203.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578CC13 /* 37.120.204.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578CC1B /* 37.120.204.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CC33 /* 37.120.204.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CC3B /* 37.120.204.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578CC63 /* 37.120.204.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CC83 /* 37.120.204.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CC8B /* 37.120.204.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578CC93 /* 37.120.204.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -680,9 +683,15 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2578DDA3 /* 37.120.221.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578DDBB /* 37.120.221.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578DF74 /* 37.120.223.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578ED13 /* 37.120.237.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578ED83 /* 37.120.237.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578ED8B /* 37.120.237.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2578ED93 /* 37.120.237.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578ED9B /* 37.120.237.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578EDAB /* 37.120.237.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2578EDB3 /* 37.120.237.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D09F883 /* 45.9.248.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D09F8D3 /* 45.9.248.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D09F943 /* 45.9.249.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D09F94B /* 45.9.249.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D09F953 /* 45.9.249.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -733,8 +742,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D0EC376 /* 45.14.195.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D0EC378 /* 45.14.195.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D0EC37A /* 45.14.195.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2D0EC37C /* 45.14.195.124/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2D0EC37E /* 45.14.195.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D0EC380 /* 45.14.195.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D0EC382 /* 45.14.195.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D0EC384 /* 45.14.195.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -781,6 +788,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D50B8A0 /* 45.80.184.160/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50B8B6 /* 45.80.184.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50B8CC /* 45.80.184.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D50B8E2 /* 45.80.184.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D50B8EF /* 45.80.184.239/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50B901 /* 45.80.185.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50B917 /* 45.80.185.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50B92D /* 45.80.185.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -791,6 +800,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D50BA03 /* 45.80.186.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50BB01 /* 45.80.187.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D50BB03 /* 45.80.187.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D50BB2D /* 45.80.187.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D50BB43 /* 45.80.187.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D522104 /* 45.82.33.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D522106 /* 45.82.33.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D522108 /* 45.82.33.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -842,7 +853,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D54278C /* 45.84.39.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D54278E /* 45.84.39.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D542790 /* 45.84.39.144/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x2D542792 /* 45.84.39.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D542794 /* 45.84.39.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D559064 /* 45.85.144.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D559066 /* 45.85.144.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -931,7 +941,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D5ED021 /* 45.94.208.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED031 /* 45.94.208.49/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED040 /* 45.94.208.64/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5ED04F /* 45.94.208.79/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED05E /* 45.94.208.94/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5ED06D /* 45.94.208.109/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5ED081 /* 45.94.208.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED091 /* 45.94.208.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED0A1 /* 45.94.208.161/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5ED0B1 /* 45.94.208.177/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -942,12 +955,15 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D5FA001 /* 45.95.160.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA003 /* 45.95.160.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA02D /* 45.95.160.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5FA044 /* 45.95.160.68/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5FA05A /* 45.95.160.90/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA101 /* 45.95.161.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA103 /* 45.95.161.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA201 /* 45.95.162.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA203 /* 45.95.162.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA301 /* 45.95.163.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D5FA303 /* 45.95.163.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D5FA32D /* 45.95.163.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D86BC01 /* 45.134.188.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D86BC03 /* 45.134.188.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D86BD01 /* 45.134.189.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -979,6 +995,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D86E084 /* 45.134.224.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D86E092 /* 45.134.224.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D889B82 /* 45.136.155.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D889B85 /* 45.136.155.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D889B87 /* 45.136.155.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D889B8E /* 45.136.155.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D889B9A /* 45.136.155.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D894C01 /* 45.137.76.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1012,6 +1030,26 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D8D99C9 /* 45.141.153.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D8D99CC /* 45.141.153.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D8D99E3 /* 45.141.153.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907202 /* 45.144.114.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907204 /* 45.144.114.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907206 /* 45.144.114.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907208 /* 45.144.114.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90720A /* 45.144.114.10/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90720C /* 45.144.114.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90720E /* 45.144.114.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907210 /* 45.144.114.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907212 /* 45.144.114.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907214 /* 45.144.114.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907216 /* 45.144.114.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907218 /* 45.144.114.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90721A /* 45.144.114.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90721C /* 45.144.114.28/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D90721E /* 45.144.114.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907220 /* 45.144.114.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907222 /* 45.144.114.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907224 /* 45.144.114.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907226 /* 45.144.114.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D907228 /* 45.144.114.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D96AC02 /* 45.150.172.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D96AC0E /* 45.150.172.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D96AC1A /* 45.150.172.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1032,6 +1070,54 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D96ACCE /* 45.150.172.206/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D96ACDA /* 45.150.172.218/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D96ACE6 /* 45.150.172.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF02 /* 45.150.175.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF04 /* 45.150.175.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF06 /* 45.150.175.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF08 /* 45.150.175.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF0A /* 45.150.175.10/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF0C /* 45.150.175.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF0E /* 45.150.175.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF10 /* 45.150.175.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF12 /* 45.150.175.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF14 /* 45.150.175.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF16 /* 45.150.175.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF18 /* 45.150.175.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF1A /* 45.150.175.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF1C /* 45.150.175.28/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF1E /* 45.150.175.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF20 /* 45.150.175.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF22 /* 45.150.175.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF24 /* 45.150.175.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF26 /* 45.150.175.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF28 /* 45.150.175.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF2A /* 45.150.175.42/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF2C /* 45.150.175.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF2E /* 45.150.175.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D96AF30 /* 45.150.175.48/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F1A /* 45.152.47.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F24 /* 45.152.47.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F2E /* 45.152.47.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F38 /* 45.152.47.56/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F42 /* 45.152.47.66/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F4C /* 45.152.47.76/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F56 /* 45.152.47.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F60 /* 45.152.47.96/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F6A /* 45.152.47.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F74 /* 45.152.47.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F7E /* 45.152.47.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F88 /* 45.152.47.136/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F92 /* 45.152.47.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982F9C /* 45.152.47.156/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FA5 /* 45.152.47.165/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FAE /* 45.152.47.174/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FB7 /* 45.152.47.183/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FC0 /* 45.152.47.192/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FC9 /* 45.152.47.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FD2 /* 45.152.47.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FDB /* 45.152.47.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FE4 /* 45.152.47.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FED /* 45.152.47.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D982FF6 /* 45.152.47.246/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D98B403 /* 45.152.180.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D98B40B /* 45.152.180.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D98B413 /* 45.152.180.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1065,6 +1151,18 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2D98B7BB /* 45.152.183.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D98B7C3 /* 45.152.183.195/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D98B7CB /* 45.152.183.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B2906 /* 45.155.41.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B2919 /* 45.155.41.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B292C /* 45.155.41.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B293F /* 45.155.41.63/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B2952 /* 45.155.41.82/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B2965 /* 45.155.41.101/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B2978 /* 45.155.41.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B298B /* 45.155.41.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B299E /* 45.155.41.158/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B29B1 /* 45.155.41.177/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B29C4 /* 45.155.41.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2D9B29E3 /* 45.155.41.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D9B2A0B /* 45.155.42.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D9B2A35 /* 45.155.42.53/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2D9B2A36 /* 45.155.42.54/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1109,6 +1207,13 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2EB76C2C /* 46.183.108.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76C3A /* 46.183.108.58/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76C48 /* 46.183.108.72/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76C56 /* 46.183.108.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76C65 /* 46.183.108.101/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76C74 /* 46.183.108.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76C83 /* 46.183.108.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76C92 /* 46.183.108.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76CA1 /* 46.183.108.161/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76CB0 /* 46.183.108.176/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76D02 /* 46.183.109.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76D10 /* 46.183.109.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76D1E /* 46.183.109.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1158,6 +1263,9 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x2EB76F8E /* 46.183.111.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76FAA /* 46.183.111.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x2EB76FB8 /* 46.183.111.184/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76FC6 /* 46.183.111.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76FD4 /* 46.183.111.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x2EB76FE4 /* 46.183.111.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x3E032419 /* 62.3.36.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x3E032425 /* 62.3.36.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x3E032432 /* 62.3.36.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1386,12 +1494,18 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x4E9DD193 /* 78.157.209.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4E9DD803 /* 78.157.216.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4E9DDD33 /* 78.157.221.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7F9632 /* 79.127.150.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7F9634 /* 79.127.150.52/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7FB442 /* 79.127.180.66/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7FB444 /* 79.127.180.68/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE582 /* 79.127.229.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE584 /* 79.127.229.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE587 /* 79.127.229.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE589 /* 79.127.229.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE912 /* 79.127.233.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F7FE914 /* 79.127.233.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7FE917 /* 79.127.233.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x4F7FE919 /* 79.127.233.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F8E4D60 /* 79.142.77.96/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F8E4D70 /* 79.142.77.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x4F8E4D80 /* 79.142.77.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1416,9 +1530,9 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x51117917 /* 81.17.121.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117A01 /* 81.17.122.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117A02 /* 81.17.122.2/31 */, 31, NDPI_PROTOCOL_NORDVPN }, - { 0x51117A04 /* 81.17.122.4/30 */, 30, NDPI_PROTOCOL_NORDVPN }, + { 0x51117A04 /* 81.17.122.4/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x51117A06 /* 81.17.122.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117A08 /* 81.17.122.8/31 */, 31, NDPI_PROTOCOL_NORDVPN }, - { 0x51117A0A /* 81.17.122.10/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117AA6 /* 81.17.122.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117ABC /* 81.17.122.188/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x51117AD2 /* 81.17.122.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1479,6 +1593,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x526613D8 /* 82.102.19.216/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x52661423 /* 82.102.20.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x526614D4 /* 82.102.20.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x526614F3 /* 82.102.20.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x52661523 /* 82.102.21.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5266152B /* 82.102.21.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5266157B /* 82.102.21.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1519,6 +1634,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x52C54E03 /* 82.197.78.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x52C54F01 /* 82.197.79.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x52C54F03 /* 82.197.79.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x52C54F2D /* 82.197.79.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x52C54F2F /* 82.197.79.47/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B664 /* 83.136.182.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B666 /* 83.136.182.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B668 /* 83.136.182.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1534,7 +1651,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5388B67C /* 83.136.182.124/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B67E /* 83.136.182.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B680 /* 83.136.182.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5388B682 /* 83.136.182.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B684 /* 83.136.182.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B686 /* 83.136.182.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5388B688 /* 83.136.182.136/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1551,6 +1667,30 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5388B69E /* 83.136.182.158/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x538FF5B3 /* 83.143.245.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x538FF5BB /* 83.143.245.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A02 /* 83.229.26.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A04 /* 83.229.26.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A06 /* 83.229.26.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A08 /* 83.229.26.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A0A /* 83.229.26.10/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A0C /* 83.229.26.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A0E /* 83.229.26.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A10 /* 83.229.26.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A12 /* 83.229.26.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A14 /* 83.229.26.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A16 /* 83.229.26.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A18 /* 83.229.26.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A1A /* 83.229.26.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A1C /* 83.229.26.28/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A1E /* 83.229.26.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A20 /* 83.229.26.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A22 /* 83.229.26.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A24 /* 83.229.26.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A26 /* 83.229.26.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A28 /* 83.229.26.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A2A /* 83.229.26.42/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A2C /* 83.229.26.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A2E /* 83.229.26.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x53E51A30 /* 83.229.26.48/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541123E2 /* 84.17.35.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541123E7 /* 84.17.35.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541123E8 /* 84.17.35.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1582,7 +1722,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x54112551 /* 84.17.37.81/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x54112554 /* 84.17.37.84/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x54112556 /* 84.17.37.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x541125E2 /* 84.17.37.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541125E5 /* 84.17.37.229/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541125E8 /* 84.17.37.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541125EB /* 84.17.37.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1606,7 +1745,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x541127DD /* 84.17.39.221/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x541127FA /* 84.17.39.250/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x54112982 /* 84.17.41.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x54112987 /* 84.17.41.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5411298C /* 84.17.41.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x54112991 /* 84.17.41.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x54112996 /* 84.17.41.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1704,6 +1842,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x55BEE868 /* 85.190.232.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x55BEE86A /* 85.190.232.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x55BEE86C /* 85.190.232.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x55BEE86E /* 85.190.232.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x55BEE870 /* 85.190.232.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x55BEE872 /* 85.190.232.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x55BEE874 /* 85.190.232.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1806,6 +1945,26 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x563E1CD5 /* 86.62.28.213/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x563E1CE1 /* 86.62.28.225/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x563E1CED /* 86.62.28.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D01 /* 86.62.29.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D0E /* 86.62.29.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D1B /* 86.62.29.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D28 /* 86.62.29.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D34 /* 86.62.29.52/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D40 /* 86.62.29.64/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D4C /* 86.62.29.76/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D58 /* 86.62.29.88/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D64 /* 86.62.29.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D70 /* 86.62.29.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D81 /* 86.62.29.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D8E /* 86.62.29.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1D9B /* 86.62.29.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DA8 /* 86.62.29.168/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DB4 /* 86.62.29.180/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DC0 /* 86.62.29.192/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DCC /* 86.62.29.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DD8 /* 86.62.29.216/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DE4 /* 86.62.29.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x563E1DF0 /* 86.62.29.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x563E1E02 /* 86.62.30.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x563E1E0E /* 86.62.30.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x563E1E1A /* 86.62.30.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1829,6 +1988,13 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5668F8AA /* 86.104.248.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5669090B /* 86.105.9.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x56690973 /* 86.105.9.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A146B /* 86.106.20.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A1473 /* 86.106.20.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A147B /* 86.106.20.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A5A33 /* 86.106.90.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A5A63 /* 86.106.90.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A5A6B /* 86.106.90.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x566A5AD3 /* 86.106.90.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x566A5AF3 /* 86.106.90.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x566A6713 /* 86.106.103.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x566A6773 /* 86.106.103.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1916,7 +2082,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x592319E7 /* 89.35.25.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59231C83 /* 89.35.28.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59231E95 /* 89.35.30.149/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x59231EA3 /* 89.35.30.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59231EA4 /* 89.35.30.164/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59231EB3 /* 89.35.30.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59231EB7 /* 89.35.30.183/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1965,6 +2130,30 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5928B71B /* 89.40.183.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5928B71D /* 89.40.183.29/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5928B7E3 /* 89.40.183.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0964 /* 89.46.9.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0966 /* 89.46.9.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0968 /* 89.46.9.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E096A /* 89.46.9.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E096C /* 89.46.9.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E096E /* 89.46.9.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0970 /* 89.46.9.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0972 /* 89.46.9.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0974 /* 89.46.9.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0976 /* 89.46.9.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E0978 /* 89.46.9.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E097A /* 89.46.9.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E097C /* 89.46.9.124/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E3B /* 89.46.62.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E53 /* 89.46.62.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E5B /* 89.46.62.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E63 /* 89.46.62.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E6B /* 89.46.62.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E73 /* 89.46.62.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E7B /* 89.46.62.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E83 /* 89.46.62.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E8B /* 89.46.62.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E93 /* 89.46.62.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x592E3E9B /* 89.46.62.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x592E6673 /* 89.46.102.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x592E67AB /* 89.46.103.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x592FEAAB /* 89.47.234.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -1995,6 +2184,9 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5993658A /* 89.147.101.138/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5993658C /* 89.147.101.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5993658E /* 89.147.101.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59936594 /* 89.147.101.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59936596 /* 89.147.101.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59936598 /* 89.147.101.152/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x599365FB /* 89.147.101.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x599365FD /* 89.147.101.253/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBA122 /* 89.187.161.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2045,9 +2237,11 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x59BBB202 /* 89.187.178.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB207 /* 89.187.178.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB20C /* 89.187.178.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59BBB211 /* 89.187.178.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB216 /* 89.187.178.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB21B /* 89.187.178.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB220 /* 89.187.178.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59BBB225 /* 89.187.178.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB22A /* 89.187.178.42/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB22F /* 89.187.178.47/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB234 /* 89.187.178.52/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2074,14 +2268,21 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x59BBB7BA /* 89.187.183.186/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB956 /* 89.187.185.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59BBB961 /* 89.187.185.97/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE9623 /* 89.238.150.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE9673 /* 89.238.150.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE967B /* 89.238.150.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EE9695 /* 89.238.150.149/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE96A3 /* 89.238.150.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE96AB /* 89.238.150.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EE9A0B /* 89.238.154.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEB0D5 /* 89.238.176.213/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEB2D3 /* 89.238.178.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEBAEB /* 89.238.186.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEBAFB /* 89.238.186.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEBFAD /* 89.238.191.173/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEBFC5 /* 89.238.191.197/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x59EEBFC6 /* 89.238.191.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EEBFCA /* 89.238.191.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x59EEBFCF /* 89.238.191.207/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59EEBFD4 /* 89.238.191.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59F94143 /* 89.249.65.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x59F9414B /* 89.249.65.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2105,13 +2306,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5B848AB3 /* 91.132.138.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848ABB /* 91.132.138.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848AC3 /* 91.132.138.195/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5B848AC4 /* 91.132.138.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848ACB /* 91.132.138.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848AD3 /* 91.132.138.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848ADB /* 91.132.138.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5B848ADC /* 91.132.138.220/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848AE3 /* 91.132.138.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5B848AE4 /* 91.132.138.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848B3B /* 91.132.139.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848B4B /* 91.132.139.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5B848B53 /* 91.132.139.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2170,7 +2368,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5BCD6A8C /* 91.205.106.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BCD6A96 /* 91.205.106.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BCD6AA4 /* 91.205.106.164/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5BCD6AB2 /* 91.205.106.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BCD6AC4 /* 91.205.106.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BCD6AD1 /* 91.205.106.209/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BCD6ADE /* 91.205.106.222/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2230,9 +2427,14 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5BD64195 /* 91.214.65.149/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BD641A9 /* 91.214.65.169/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BD641BD /* 91.214.65.189/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5BEF0643 /* 91.239.6.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BEF0686 /* 91.239.6.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5BEF0688 /* 91.239.6.136/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BEF068A /* 91.239.6.138/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BEF068C /* 91.239.6.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5BEF06C6 /* 91.239.6.198/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x5BEF06C9 /* 91.239.6.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5BEF06CB /* 91.239.6.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BFAF02A /* 91.250.240.42/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BFAF032 /* 91.250.240.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5BFAF03A /* 91.250.240.58/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2307,6 +2509,30 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5C77138C /* 92.119.19.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5C77138E /* 92.119.19.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5C771390 /* 92.119.19.144/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723C01 /* 93.114.60.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723C17 /* 93.114.60.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D01 /* 93.114.61.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D0C /* 93.114.61.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D17 /* 93.114.61.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D22 /* 93.114.61.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D2D /* 93.114.61.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D38 /* 93.114.61.56/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D43 /* 93.114.61.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D4E /* 93.114.61.78/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D59 /* 93.114.61.89/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D64 /* 93.114.61.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D6F /* 93.114.61.111/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D81 /* 93.114.61.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D8D /* 93.114.61.141/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723D99 /* 93.114.61.153/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DA4 /* 93.114.61.164/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DAF /* 93.114.61.175/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DBA /* 93.114.61.186/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DC5 /* 93.114.61.197/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DD0 /* 93.114.61.208/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DDB /* 93.114.61.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DE6 /* 93.114.61.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D723DF1 /* 93.114.61.241/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D728117 /* 93.114.129.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D728119 /* 93.114.129.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D72811D /* 93.114.129.29/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2346,6 +2572,19 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5D72817E /* 93.114.129.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D728180 /* 93.114.129.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D728184 /* 93.114.129.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281B1 /* 93.114.129.177/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281C0 /* 93.114.129.192/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281C2 /* 93.114.129.194/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281C4 /* 93.114.129.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281C6 /* 93.114.129.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281C8 /* 93.114.129.200/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281CA /* 93.114.129.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281CD /* 93.114.129.205/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281CF /* 93.114.129.207/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281D7 /* 93.114.129.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281D9 /* 93.114.129.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281DB /* 93.114.129.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5D7281DD /* 93.114.129.221/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5D762A1A /* 93.118.42.26/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0x5D762A1C /* 93.118.42.28/30 */, 30, NDPI_PROTOCOL_NORDVPN }, { 0x5D762A20 /* 93.118.42.32/30 */, 30, NDPI_PROTOCOL_NORDVPN }, @@ -2403,6 +2642,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5E9C1EC9 /* 94.156.30.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C1EDB /* 94.156.30.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C1EED /* 94.156.30.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9C9504 /* 94.156.149.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C9510 /* 94.156.149.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C951C /* 94.156.149.28/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C9528 /* 94.156.149.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2421,7 +2661,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5E9C95C4 /* 94.156.149.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C95E0 /* 94.156.149.224/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C95E8 /* 94.156.149.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x5E9C95F0 /* 94.156.149.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C9664 /* 94.156.150.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C9666 /* 94.156.150.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9C9668 /* 94.156.150.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2440,6 +2679,32 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x5E9CCDB4 /* 94.156.205.180/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9CCDCA /* 94.156.205.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5E9CCDEC /* 94.156.205.236/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE01 /* 94.156.206.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE03 /* 94.156.206.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE05 /* 94.156.206.5/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE07 /* 94.156.206.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE09 /* 94.156.206.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE0B /* 94.156.206.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE0D /* 94.156.206.13/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE0F /* 94.156.206.15/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE11 /* 94.156.206.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE13 /* 94.156.206.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE15 /* 94.156.206.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE17 /* 94.156.206.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE19 /* 94.156.206.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE1B /* 94.156.206.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE1D /* 94.156.206.29/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE1F /* 94.156.206.31/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE21 /* 94.156.206.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE23 /* 94.156.206.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE25 /* 94.156.206.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5E9CCE27 /* 94.156.206.39/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB11188 /* 94.177.17.136/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB1118A /* 94.177.17.138/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB1118C /* 94.177.17.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB1118E /* 94.177.17.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB11190 /* 94.177.17.144/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x5EB11192 /* 94.177.17.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5EE545F3 /* 94.229.69.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5EE54993 /* 94.229.73.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x5EE549BB /* 94.229.73.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2632,7 +2897,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x67D62E02 /* 103.214.46.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x67D62E0E /* 103.214.46.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x67D62E1A /* 103.214.46.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x67D62E26 /* 103.214.46.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x67D62E32 /* 103.214.46.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x67D62E3E /* 103.214.46.62/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x67D62E4A /* 103.214.46.74/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2831,6 +3095,13 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x797F2F53 /* 121.127.47.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x797F2F58 /* 121.127.47.88/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x797F2F5A /* 121.127.47.90/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA63 /* 130.195.218.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA6B /* 130.195.218.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA73 /* 130.195.218.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA7B /* 130.195.218.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA83 /* 130.195.218.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA8B /* 130.195.218.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x82C3DA93 /* 130.195.218.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70697 /* 138.199.6.151/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70699 /* 138.199.6.153/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70983 /* 138.199.9.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2855,6 +3126,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8AC70AD4 /* 138.199.10.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70AD7 /* 138.199.10.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70AD9 /* 138.199.10.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC70B13 /* 138.199.11.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC70B15 /* 138.199.11.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC70B18 /* 138.199.11.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC70B1A /* 138.199.11.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70B62 /* 138.199.11.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70B64 /* 138.199.11.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC70B67 /* 138.199.11.103/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2959,11 +3234,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8AC72174 /* 138.199.33.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72177 /* 138.199.33.119/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72179 /* 138.199.33.121/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72202 /* 138.199.34.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC7220E /* 138.199.34.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC7221A /* 138.199.34.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72226 /* 138.199.34.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72232 /* 138.199.34.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72AE2 /* 138.199.42.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72AE7 /* 138.199.42.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72AEC /* 138.199.42.236/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -2985,9 +3255,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8AC72FA6 /* 138.199.47.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72FA9 /* 138.199.47.169/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC72FAC /* 138.199.47.172/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72FAF /* 138.199.47.175/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72FB2 /* 138.199.47.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC72FB4 /* 138.199.47.180/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC72FB5 /* 138.199.47.181/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73202 /* 138.199.50.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73207 /* 138.199.50.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC7320C /* 138.199.50.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3035,6 +3303,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8AC73471 /* 138.199.52.113/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73474 /* 138.199.52.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73477 /* 138.199.52.119/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC73482 /* 138.199.52.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC73484 /* 138.199.52.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC73487 /* 138.199.52.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC73489 /* 138.199.52.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC736E2 /* 138.199.54.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC736E4 /* 138.199.54.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC736E7 /* 138.199.54.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3079,11 +3351,14 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8AC73FE6 /* 138.199.63.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73FE8 /* 138.199.63.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8AC73FEA /* 138.199.63.234/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8AC73FEC /* 138.199.63.236/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0x8AC73FED /* 138.199.63.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CD863 /* 139.28.216.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CD8EB /* 139.28.216.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CD8F3 /* 139.28.216.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CD8FB /* 139.28.216.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8B1CDA3B /* 139.28.218.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8B1CDA4B /* 139.28.218.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x8B1CDA73 /* 139.28.218.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDAAB /* 139.28.218.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDAB3 /* 139.28.218.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDABB /* 139.28.218.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3091,7 +3366,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8B1CDACB /* 139.28.218.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDAD3 /* 139.28.218.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDADB /* 139.28.218.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8B1CDB6B /* 139.28.219.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDB6C /* 139.28.219.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDBCB /* 139.28.219.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8B1CDBE3 /* 139.28.219.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3120,7 +3394,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x8FF42939 /* 143.244.41.57/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8FF42941 /* 143.244.41.65/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8FF42949 /* 143.244.41.73/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x8FF42951 /* 143.244.41.81/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8FF42959 /* 143.244.41.89/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8FF42960 /* 143.244.41.96/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x8FF42967 /* 143.244.41.103/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3232,10 +3505,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9246449B /* 146.70.68.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x924644B3 /* 146.70.68.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x924644BB /* 146.70.68.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x924645EB /* 146.70.69.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x92464723 /* 146.70.71.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246472B /* 146.70.71.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x92464733 /* 146.70.71.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9246473B /* 146.70.71.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246494B /* 146.70.73.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x92464953 /* 146.70.73.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246495B /* 146.70.73.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3280,18 +3553,53 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x924669F3 /* 146.70.105.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x924669FB /* 146.70.105.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x924670DB /* 146.70.112.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x92469B03 /* 146.70.155.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x92469B13 /* 146.70.155.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x92469B23 /* 146.70.155.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E983 /* 146.70.233.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E98B /* 146.70.233.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E993 /* 146.70.233.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E99B /* 146.70.233.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E9A3 /* 146.70.233.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E9AB /* 146.70.233.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246E9B3 /* 146.70.233.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246ED1B /* 146.70.237.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246ED23 /* 146.70.237.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246ED2B /* 146.70.237.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246EDEB /* 146.70.237.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9246EDF3 /* 146.70.237.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EE03 /* 146.70.238.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9246EE13 /* 146.70.238.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EE23 /* 146.70.238.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EE33 /* 146.70.238.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EE93 /* 146.70.238.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EEA3 /* 146.70.238.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9246EEB3 /* 146.70.238.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9564 /* 147.93.149.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9566 /* 147.93.149.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9568 /* 147.93.149.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D956A /* 147.93.149.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D956C /* 147.93.149.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D956E /* 147.93.149.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9570 /* 147.93.149.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9572 /* 147.93.149.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9574 /* 147.93.149.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9576 /* 147.93.149.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D9578 /* 147.93.149.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D957A /* 147.93.149.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D957C /* 147.93.149.124/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x935D957E /* 147.93.149.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95165156 /* 149.22.81.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95165158 /* 149.22.81.88/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95165922 /* 149.22.89.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95165926 /* 149.22.89.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EE2 /* 149.22.94.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EE4 /* 149.22.94.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EE7 /* 149.22.94.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EE9 /* 149.22.94.233/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EED /* 149.22.94.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165EEF /* 149.22.94.239/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165FE2 /* 149.22.95.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95165FE4 /* 149.22.95.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F0E2 /* 149.34.240.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F0E4 /* 149.34.240.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F0E7 /* 149.34.240.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3310,6 +3618,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9522F464 /* 149.34.244.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F469 /* 149.34.244.105/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F4C2 /* 149.34.244.194/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F4C8 /* 149.34.244.200/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F4CD /* 149.34.244.205/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F4D2 /* 149.34.244.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F4D7 /* 149.34.244.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F4D8 /* 149.34.244.216/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3322,6 +3632,12 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9522F72E /* 149.34.247.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F731 /* 149.34.247.49/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F733 /* 149.34.247.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F892 /* 149.34.248.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F894 /* 149.34.248.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F8D2 /* 149.34.248.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F8D4 /* 149.34.248.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F8D7 /* 149.34.248.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9522F8D9 /* 149.34.248.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F933 /* 149.34.249.51/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F935 /* 149.34.249.53/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9522F937 /* 149.34.249.55/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3483,6 +3799,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x95581D09 /* 149.88.29.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95581D0C /* 149.88.29.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95581D0E /* 149.88.29.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95581D11 /* 149.88.29.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x95581D13 /* 149.88.29.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95581D16 /* 149.88.29.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95581D18 /* 149.88.29.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95581E82 /* 149.88.30.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3530,6 +3848,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x955864F9 /* 149.88.100.249/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95586BD2 /* 149.88.107.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x95586BD4 /* 149.88.107.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566E042 /* 149.102.224.66/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566E044 /* 149.102.224.68/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566E0E1 /* 149.102.224.225/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566E0E3 /* 149.102.224.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566E0E5 /* 149.102.224.229/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3583,10 +3903,11 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9566F358 /* 149.102.243.88/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F4A2 /* 149.102.244.162/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F4A4 /* 149.102.244.164/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566F64F /* 149.102.246.79/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566F651 /* 149.102.246.81/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F8C2 /* 149.102.248.194/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F8C4 /* 149.102.248.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F8C7 /* 149.102.248.199/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9566F8C9 /* 149.102.248.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F982 /* 149.102.249.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F984 /* 149.102.249.132/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566F987 /* 149.102.249.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3616,6 +3937,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9566FC76 /* 149.102.252.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566FC78 /* 149.102.252.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9566FC7A /* 149.102.252.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566FE62 /* 149.102.254.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566FE64 /* 149.102.254.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566FE68 /* 149.102.254.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9566FE6A /* 149.102.254.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9859CC96 /* 152.89.204.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9859CC98 /* 152.89.204.152/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9859CC9A /* 152.89.204.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3763,7 +4088,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9A2F13F3 /* 154.47.19.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9A2F1572 /* 154.47.21.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9A2F1574 /* 154.47.21.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9A2F1621 /* 154.47.22.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9A2F1622 /* 154.47.22.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9A2F1625 /* 154.47.22.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9A2F162C /* 154.47.22.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3832,8 +4156,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9B850F91 /* 155.133.15.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B850F93 /* 155.133.15.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B851102 /* 155.133.17.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9B851104 /* 155.133.17.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B851106 /* 155.133.17.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0x9B851108 /* 155.133.17.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B85110A /* 155.133.17.10/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B85110C /* 155.133.17.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9B85110E /* 155.133.17.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3908,7 +4232,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0x9C922DF4 /* 156.146.45.244/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9C922DF7 /* 156.146.45.247/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9C922DF9 /* 156.146.45.249/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0x9C922F81 /* 156.146.47.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9C922F83 /* 156.146.47.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9C922F85 /* 156.146.47.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0x9C922F87 /* 156.146.47.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3965,6 +4288,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xA0EE250F /* 160.238.37.15/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA0EE2551 /* 160.238.37.81/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA0EE2553 /* 160.238.37.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA0EE2555 /* 160.238.37.85/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA5E7D29B /* 165.231.210.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA5E7D2A3 /* 165.231.210.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA5E7D2AB /* 165.231.210.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -3997,14 +4321,11 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xA996CBB7 /* 169.150.203.183/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996CBB9 /* 169.150.203.185/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996CBBA /* 169.150.203.186/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC02 /* 169.150.204.2/31 */, 31, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC07 /* 169.150.204.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996CC03 /* 169.150.204.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996CC08 /* 169.150.204.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC0C /* 169.150.204.12/31 */, 31, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC11 /* 169.150.204.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996CC0D /* 169.150.204.13/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996CC12 /* 169.150.204.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC16 /* 169.150.204.22/31 */, 31, NDPI_PROTOCOL_NORDVPN }, - { 0xA996CC1B /* 169.150.204.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996CC17 /* 169.150.204.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996DA63 /* 169.150.218.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996DA65 /* 169.150.218.101/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996DA68 /* 169.150.218.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4063,6 +4384,14 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xA996E8B2 /* 169.150.232.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996E8B5 /* 169.150.232.181/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996E8B7 /* 169.150.232.183/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8BA /* 169.150.232.186/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8BC /* 169.150.232.188/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8BF /* 169.150.232.191/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8C1 /* 169.150.232.193/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8C4 /* 169.150.232.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8C6 /* 169.150.232.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8C9 /* 169.150.232.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xA996E8CB /* 169.150.232.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996EE97 /* 169.150.238.151/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996EE99 /* 169.150.238.153/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xA996FE01 /* 169.150.254.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4144,10 +4473,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB0714843 /* 176.113.72.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB071484B /* 176.113.72.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB0714853 /* 176.113.72.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB071485B /* 176.113.72.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB071485C /* 176.113.72.92/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB07148D3 /* 176.113.72.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB07148D4 /* 176.113.72.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB07148DC /* 176.113.72.220/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB07148EB /* 176.113.72.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB0714A23 /* 176.113.74.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4164,18 +4491,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB2846DB8 /* 178.132.109.184/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB2846DCC /* 178.132.109.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB2846DE6 /* 178.132.109.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03A2 /* 178.159.3.162/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03A4 /* 178.159.3.164/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03A6 /* 178.159.3.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03A8 /* 178.159.3.168/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03AA /* 178.159.3.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03AC /* 178.159.3.172/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03AE /* 178.159.3.174/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03B0 /* 178.159.3.176/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03B2 /* 178.159.3.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03B4 /* 178.159.3.180/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03B6 /* 178.159.3.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB29F03B8 /* 178.159.3.184/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB29F0953 /* 178.159.9.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB29F09D3 /* 178.159.9.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB2AF8DD1 /* 178.175.141.209/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4487,7 +4802,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB93BDDF2 /* 185.59.221.242/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0xB93BDDF5 /* 185.59.221.245/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB93BDDF8 /* 185.59.221.248/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB93BDDFB /* 185.59.221.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB93D9C0E /* 185.61.156.14/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0xB93D9C10 /* 185.61.156.16/29 */, 29, NDPI_PROTOCOL_NORDVPN }, { 0xB93D9C18 /* 185.61.156.24/31 */, 31, NDPI_PROTOCOL_NORDVPN }, @@ -4496,6 +4810,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9413217 /* 185.65.50.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB941321D /* 185.65.50.29/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9413223 /* 185.65.50.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB941325F /* 185.65.50.95/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9413261 /* 185.65.50.97/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9517C01 /* 185.81.124.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9517C0E /* 185.81.124.14/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9517C28 /* 185.81.124.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4558,6 +4874,29 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9517E23 /* 185.81.126.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9517E25 /* 185.81.126.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9517E27 /* 185.81.126.39/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F16 /* 185.81.127.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F22 /* 185.81.127.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F2C /* 185.81.127.44/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F2E /* 185.81.127.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F37 /* 185.81.127.55/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F38 /* 185.81.127.56/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F3A /* 185.81.127.58/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F46 /* 185.81.127.70/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F52 /* 185.81.127.82/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F5E /* 185.81.127.94/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F6A /* 185.81.127.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F76 /* 185.81.127.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F82 /* 185.81.127.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F8E /* 185.81.127.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517F9A /* 185.81.127.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FA6 /* 185.81.127.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FB2 /* 185.81.127.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FBD /* 185.81.127.189/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FC8 /* 185.81.127.200/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FD3 /* 185.81.127.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FDE /* 185.81.127.222/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FE9 /* 185.81.127.233/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9517FF4 /* 185.81.127.244/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB95CD291 /* 185.92.210.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB95D0062 /* 185.93.0.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB95D0067 /* 185.93.0.103/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4572,6 +4911,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB963FCD3 /* 185.99.252.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB968B803 /* 185.104.184.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB968B8D3 /* 185.104.184.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB968B923 /* 185.104.185.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB968B9A3 /* 185.104.185.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB968BB4B /* 185.104.187.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB96DA883 /* 185.109.168.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4711,8 +5051,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9A9EB21 /* 185.169.235.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9A9EB2E /* 185.169.235.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9A9EB3B /* 185.169.235.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9A9EB48 /* 185.169.235.72/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9A9EB55 /* 185.169.235.85/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9A9EB62 /* 185.169.235.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9A9EB6F /* 185.169.235.111/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9A9FF03 /* 185.169.255.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -4836,11 +5174,37 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9BD721C /* 185.189.114.28/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9BD72EB /* 185.189.114.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9BD72F3 /* 185.189.114.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9C5F801 /* 185.197.248.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9C5F803 /* 185.197.248.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9C5F805 /* 185.197.248.5/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9C5F807 /* 185.197.248.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9C5F809 /* 185.197.248.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D01 /* 185.190.141.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D03 /* 185.190.141.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D05 /* 185.190.141.5/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D07 /* 185.190.141.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D09 /* 185.190.141.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D0B /* 185.190.141.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D0D /* 185.190.141.13/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D0F /* 185.190.141.15/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D11 /* 185.190.141.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D13 /* 185.190.141.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D81 /* 185.190.141.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D83 /* 185.190.141.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D85 /* 185.190.141.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D87 /* 185.190.141.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D89 /* 185.190.141.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D8B /* 185.190.141.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D8D /* 185.190.141.141/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D8F /* 185.190.141.143/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D91 /* 185.190.141.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9BE8D93 /* 185.190.141.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C3C813 /* 185.195.200.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F86F /* 185.197.248.111/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F881 /* 185.197.248.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F88E /* 185.197.248.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F89B /* 185.197.248.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8A8 /* 185.197.248.168/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8B6 /* 185.197.248.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8C4 /* 185.197.248.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8D2 /* 185.197.248.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8E0 /* 185.197.248.224/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9C5F8EE /* 185.197.248.238/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9CADC64 /* 185.202.220.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9CADC66 /* 185.202.220.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9CADC68 /* 185.202.220.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5092,6 +5456,13 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9D6618E /* 185.214.97.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9D66190 /* 185.214.97.144/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9D66192 /* 185.214.97.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662D1 /* 185.214.98.209/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662D3 /* 185.214.98.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662D5 /* 185.214.98.213/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662D7 /* 185.214.98.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662D9 /* 185.214.98.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662DB /* 185.214.98.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9D662DD /* 185.214.98.221/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9D7B502 /* 185.215.181.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9D7B511 /* 185.215.181.17/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9D7B520 /* 185.215.181.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5183,7 +5554,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9E38403 /* 185.227.132.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E38501 /* 185.227.133.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E38503 /* 185.227.133.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9E53A03 /* 185.229.58.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E53A81 /* 185.229.58.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E53B06 /* 185.229.59.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E53B13 /* 185.229.59.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5211,9 +5581,20 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9E5BE37 /* 185.229.190.55/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E5BE39 /* 185.229.190.57/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E67D6B /* 185.230.125.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9E67D6C /* 185.230.125.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E67E9B /* 185.230.126.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81403 /* 185.232.20.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E8140B /* 185.232.20.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81413 /* 185.232.20.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E8141B /* 185.232.20.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81423 /* 185.232.20.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E8142B /* 185.232.20.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E8143B /* 185.232.20.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81443 /* 185.232.20.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81453 /* 185.232.20.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81483 /* 185.232.20.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E8148B /* 185.232.20.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9E81493 /* 185.232.20.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E81563 /* 185.232.21.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xB9E8164B /* 185.232.22.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E8164C /* 185.232.22.76/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E81653 /* 185.232.22.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9E8166B /* 185.232.22.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5249,10 +5630,13 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xB9ECC993 /* 185.236.201.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9ECCA53 /* 185.236.202.83/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9ECCA58 /* 185.236.202.88/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9ECCB4B /* 185.236.203.75/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9ECCB5B /* 185.236.203.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9401 /* 185.239.148.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9403 /* 185.239.148.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9501 /* 185.239.149.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9503 /* 185.239.149.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xB9EF952D /* 185.239.149.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9601 /* 185.239.150.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9603 /* 185.239.150.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xB9EF9701 /* 185.239.151.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5541,7 +5925,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xBF65A0B4 /* 191.101.160.180/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xBF65A0C3 /* 191.101.160.195/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xBF65A0D2 /* 191.101.160.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xBF65A0E1 /* 191.101.160.225/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xBF65A0F0 /* 191.101.160.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0917464 /* 192.145.116.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0917466 /* 192.145.116.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5661,13 +6044,20 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC0917C7B /* 192.145.124.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0917D23 /* 192.145.125.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0917FB3 /* 192.145.127.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC40B /* 192.154.196.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC429 /* 192.154.196.41/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC447 /* 192.154.196.71/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC465 /* 192.154.196.101/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC483 /* 192.154.196.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC4A2 /* 192.154.196.162/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC4C1 /* 192.154.196.193/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC09AC4E0 /* 192.154.196.224/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F46C /* 192.166.244.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F46E /* 192.166.244.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F470 /* 192.166.244.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F472 /* 192.166.244.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F474 /* 192.166.244.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F476 /* 192.166.244.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC0A6F478 /* 192.166.244.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F47A /* 192.166.244.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F47C /* 192.166.244.124/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC0A6F47E /* 192.166.244.126/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5748,7 +6138,11 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC10970EB /* 193.9.112.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC10970F3 /* 193.9.112.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC10970FB /* 193.9.112.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1097173 /* 193.9.113.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC109717B /* 193.9.113.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC1097186 /* 193.9.113.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC10971BB /* 193.9.113.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC10971DB /* 193.9.113.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC113CC81 /* 193.19.204.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC113CC91 /* 193.19.204.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC113CCA1 /* 193.19.204.161/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5805,6 +6199,9 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC11D3D40 /* 193.29.61.64/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC11D3D42 /* 193.29.61.66/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC11D3D44 /* 193.29.61.68/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC11D3D46 /* 193.29.61.70/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC11D3D48 /* 193.29.61.72/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC11D3D4A /* 193.29.61.74/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC11D3D4C /* 193.29.61.76/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC11D3D4E /* 193.29.61.78/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC11D3D50 /* 193.29.61.80/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5869,7 +6266,31 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC138FCB3 /* 193.56.252.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC138FCBB /* 193.56.252.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC138FCC3 /* 193.56.252.195/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1502 /* 193.124.21.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1510 /* 193.124.21.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C151E /* 193.124.21.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C152C /* 193.124.21.44/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C153A /* 193.124.21.58/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1548 /* 193.124.21.72/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1556 /* 193.124.21.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1564 /* 193.124.21.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1572 /* 193.124.21.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C1580 /* 193.124.21.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C158E /* 193.124.21.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C159C /* 193.124.21.156/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15AA /* 193.124.21.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15B8 /* 193.124.21.184/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15C6 /* 193.124.21.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15D4 /* 193.124.21.212/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15E2 /* 193.124.21.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC17C15F0 /* 193.124.21.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC1B0573B /* 193.176.87.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E01 /* 193.176.126.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E03 /* 193.176.126.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E05 /* 193.176.126.5/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E07 /* 193.176.126.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E09 /* 193.176.126.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC1B07E0B /* 193.176.126.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC1B07F01 /* 193.176.127.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC1B07F15 /* 193.176.127.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC1B07F29 /* 193.176.127.41/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5950,7 +6371,9 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC222EBF5 /* 194.34.235.245/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E802 /* 194.35.232.2/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0xC223E804 /* 194.35.232.4/30 */, 30, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E808 /* 194.35.232.8/29 */, 29, NDPI_PROTOCOL_NORDVPN }, + { 0xC223E808 /* 194.35.232.8/30 */, 30, NDPI_PROTOCOL_NORDVPN }, + { 0xC223E80C /* 194.35.232.12/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xC223E80F /* 194.35.232.15/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E810 /* 194.35.232.16/29 */, 29, NDPI_PROTOCOL_NORDVPN }, { 0xC223E818 /* 194.35.232.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E823 /* 194.35.232.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5977,7 +6400,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC223E903 /* 194.35.233.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E906 /* 194.35.233.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E909 /* 194.35.233.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E90C /* 194.35.233.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E90F /* 194.35.233.15/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E912 /* 194.35.233.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E915 /* 194.35.233.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -5985,7 +6407,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC223E91B /* 194.35.233.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E91E /* 194.35.233.30/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E921 /* 194.35.233.33/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E924 /* 194.35.233.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E927 /* 194.35.233.39/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E92A /* 194.35.233.42/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E92D /* 194.35.233.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6007,38 +6428,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC223E968 /* 194.35.233.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E96B /* 194.35.233.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E96E /* 194.35.233.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E971 /* 194.35.233.113/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E974 /* 194.35.233.116/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E977 /* 194.35.233.119/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E97A /* 194.35.233.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E97D /* 194.35.233.125/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E980 /* 194.35.233.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E983 /* 194.35.233.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E986 /* 194.35.233.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E989 /* 194.35.233.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E98C /* 194.35.233.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E98F /* 194.35.233.143/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E994 /* 194.35.233.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E997 /* 194.35.233.151/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E99A /* 194.35.233.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E99D /* 194.35.233.157/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9A0 /* 194.35.233.160/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9A3 /* 194.35.233.163/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9A6 /* 194.35.233.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9A9 /* 194.35.233.169/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9AC /* 194.35.233.172/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9AF /* 194.35.233.175/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9B2 /* 194.35.233.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9B5 /* 194.35.233.181/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9B8 /* 194.35.233.184/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9BB /* 194.35.233.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9BE /* 194.35.233.190/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9C1 /* 194.35.233.193/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9C4 /* 194.35.233.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9CA /* 194.35.233.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9CD /* 194.35.233.205/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9D0 /* 194.35.233.208/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC223E9D3 /* 194.35.233.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E9D6 /* 194.35.233.214/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E9D9 /* 194.35.233.217/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC223E9DC /* 194.35.233.220/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6107,24 +6497,30 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC2586024 /* 194.88.96.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2586026 /* 194.88.96.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2586028 /* 194.88.96.40/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586326 /* 194.88.99.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586332 /* 194.88.99.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC258633E /* 194.88.99.62/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC258634A /* 194.88.99.74/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586356 /* 194.88.99.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586362 /* 194.88.99.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC258636E /* 194.88.99.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC258637A /* 194.88.99.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586386 /* 194.88.99.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2586392 /* 194.88.99.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC258639E /* 194.88.99.158/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863AA /* 194.88.99.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863B6 /* 194.88.99.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863C2 /* 194.88.99.194/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863CE /* 194.88.99.206/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863DA /* 194.88.99.218/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863E6 /* 194.88.99.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC25863F2 /* 194.88.99.242/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2636963 /* 194.99.105.99/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26369E3 /* 194.99.105.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26369E8 /* 194.99.105.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26369ED /* 194.99.105.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26369F2 /* 194.99.105.242/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26369F7 /* 194.99.105.247/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5500 /* 194.110.85.0/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5510 /* 194.110.85.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5520 /* 194.110.85.32/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5530 /* 194.110.85.48/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5540 /* 194.110.85.64/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5550 /* 194.110.85.80/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5560 /* 194.110.85.96/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5570 /* 194.110.85.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5580 /* 194.110.85.128/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E5590 /* 194.110.85.144/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E55A0 /* 194.110.85.160/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC26E55B0 /* 194.110.85.176/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26E7083 /* 194.110.112.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26E708B /* 194.110.112.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26E7093 /* 194.110.112.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6134,6 +6530,28 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC26E70B3 /* 194.110.112.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26E70BB /* 194.110.112.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC26E72FB /* 194.110.114.251/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714201 /* 194.113.66.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714203 /* 194.113.66.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714205 /* 194.113.66.5/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714207 /* 194.113.66.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714209 /* 194.113.66.9/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271420B /* 194.113.66.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271420D /* 194.113.66.13/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714281 /* 194.113.66.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714283 /* 194.113.66.131/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714285 /* 194.113.66.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714287 /* 194.113.66.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714289 /* 194.113.66.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271428B /* 194.113.66.139/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271428D /* 194.113.66.141/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271428F /* 194.113.66.143/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714291 /* 194.113.66.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714293 /* 194.113.66.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714295 /* 194.113.66.149/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714297 /* 194.113.66.151/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2714299 /* 194.113.66.153/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271429B /* 194.113.66.155/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC271429D /* 194.113.66.157/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC274D010 /* 194.116.208.16/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC274D012 /* 194.116.208.18/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC274D014 /* 194.116.208.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6160,7 +6578,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC27FAC67 /* 194.127.172.103/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC27FAC6A /* 194.127.172.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC27FAC6D /* 194.127.172.109/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC27FAD22 /* 194.127.173.34/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xC27FAD23 /* 194.127.173.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2B4B304 /* 194.180.179.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2B4B306 /* 194.180.179.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2B4B308 /* 194.180.179.8/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6244,6 +6662,26 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC2E96269 /* 194.233.98.105/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2E96270 /* 194.233.98.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC2E96281 /* 194.233.98.129/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96416 /* 194.233.100.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96422 /* 194.233.100.34/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9642E /* 194.233.100.46/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9643A /* 194.233.100.58/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96446 /* 194.233.100.70/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96452 /* 194.233.100.82/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9645E /* 194.233.100.94/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9646A /* 194.233.100.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96476 /* 194.233.100.118/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E96482 /* 194.233.100.130/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9648E /* 194.233.100.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E9649A /* 194.233.100.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964A6 /* 194.233.100.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964B2 /* 194.233.100.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964BD /* 194.233.100.189/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964C8 /* 194.233.100.200/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964D3 /* 194.233.100.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964DE /* 194.233.100.222/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964E9 /* 194.233.100.233/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC2E964F4 /* 194.233.100.244/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC30C32E3 /* 195.12.50.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC30C32E8 /* 195.12.50.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC30C32ED /* 195.12.50.237/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6253,7 +6691,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC32FC231 /* 195.47.194.49/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC32FC241 /* 195.47.194.65/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC32FC251 /* 195.47.194.81/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC38CD52F /* 195.140.213.47/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC38CD7A7 /* 195.140.215.167/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC38CD7AB /* 195.140.215.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC38CD7B0 /* 195.140.215.176/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6280,6 +6717,21 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC39EF9AE /* 195.158.249.174/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC39EF9B0 /* 195.158.249.176/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC39EF9B2 /* 195.158.249.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C864 /* 195.179.200.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C866 /* 195.179.200.102/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C868 /* 195.179.200.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C86A /* 195.179.200.106/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C86C /* 195.179.200.108/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C86E /* 195.179.200.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C870 /* 195.179.200.112/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C872 /* 195.179.200.114/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C904 /* 195.179.201.4/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C914 /* 195.179.201.20/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C924 /* 195.179.201.36/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C934 /* 195.179.201.52/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C944 /* 195.179.201.68/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C954 /* 195.179.201.84/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3B3C964 /* 195.179.201.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3B5AAC2 /* 195.181.170.194/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0xC3B5AAC5 /* 195.181.170.197/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3B5AAC7 /* 195.181.170.199/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6290,6 +6742,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC3CE685B /* 195.206.104.91/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CE689C /* 195.206.104.156/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CE68B3 /* 195.206.104.179/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3CE68BB /* 195.206.104.187/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CE68F3 /* 195.206.104.243/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CE6973 /* 195.206.105.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CE697B /* 195.206.105.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6353,24 +6806,18 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xC3CEB7B5 /* 195.206.183.181/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7BA /* 195.206.183.186/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7BF /* 195.206.183.191/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7C4 /* 195.206.183.196/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7C9 /* 195.206.183.201/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7CE /* 195.206.183.206/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7D3 /* 195.206.183.211/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7D7 /* 195.206.183.215/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7DC /* 195.206.183.220/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7E1 /* 195.206.183.225/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7E7 /* 195.206.183.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7EB /* 195.206.183.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3CEB7F0 /* 195.206.183.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7F5 /* 195.206.183.245/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3CEB7FA /* 195.206.183.250/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3EA7F03 /* 195.234.127.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3F2D593 /* 195.242.213.147/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3F2D594 /* 195.242.213.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xC3F2D598 /* 195.242.213.152/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xC3F2D598 /* 195.242.213.152/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3F2F201 /* 195.242.242.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC3F2F217 /* 195.242.242.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3F2F301 /* 195.242.243.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xC3F2F315 /* 195.242.243.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC4C4E803 /* 196.196.232.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC4F7180B /* 196.247.24.11/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xC4F71813 /* 196.247.24.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6440,13 +6887,31 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xCFD3D616 /* 207.211.214.22/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xCFD3D618 /* 207.211.214.24/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xCFD3D61A /* 207.211.214.26/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5701 /* 212.15.87.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F570D /* 212.15.87.13/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5719 /* 212.15.87.25/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5725 /* 212.15.87.37/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5731 /* 212.15.87.49/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F573D /* 212.15.87.61/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5749 /* 212.15.87.73/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5755 /* 212.15.87.85/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F5761 /* 212.15.87.97/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD40F576D /* 212.15.87.109/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD417D702 /* 212.23.215.2/31 */, 31, NDPI_PROTOCOL_NORDVPN }, { 0xD417D704 /* 212.23.215.4/30 */, 30, NDPI_PROTOCOL_NORDVPN }, { 0xD417D708 /* 212.23.215.8/29 */, 29, NDPI_PROTOCOL_NORDVPN }, { 0xD417D710 /* 212.23.215.16/30 */, 30, NDPI_PROTOCOL_NORDVPN }, { 0xD417D714 /* 212.23.215.20/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205301 /* 212.32.83.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205315 /* 212.32.83.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205401 /* 212.32.84.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205415 /* 212.32.84.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4205701 /* 212.32.87.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4205717 /* 212.32.87.23/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205A01 /* 212.32.90.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205A15 /* 212.32.90.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205E01 /* 212.32.94.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4205E15 /* 212.32.94.21/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4614001 /* 212.97.64.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4614003 /* 212.97.64.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4614101 /* 212.97.65.1/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6465,14 +6930,16 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD4614703 /* 212.97.71.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD461472D /* 212.97.71.45/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4614743 /* 212.97.71.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4614759 /* 212.97.71.89/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD461476F /* 212.97.71.111/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662162 /* 212.102.33.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662165 /* 212.102.33.101/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662168 /* 212.102.33.104/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD466216B /* 212.102.33.107/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662173 /* 212.102.33.115/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662178 /* 212.102.33.120/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662487 /* 212.102.36.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD466248C /* 212.102.36.140/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD4662491 /* 212.102.36.145/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662496 /* 212.102.36.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662692 /* 212.102.38.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662695 /* 212.102.38.149/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6489,6 +6956,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD4662BCC /* 212.102.43.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662BCF /* 212.102.43.207/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662BD2 /* 212.102.43.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662BD6 /* 212.102.43.214/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662BD8 /* 212.102.43.216/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662C23 /* 212.102.44.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662C26 /* 212.102.44.38/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662C32 /* 212.102.44.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6501,6 +6970,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD4662C85 /* 212.102.44.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662C87 /* 212.102.44.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662C89 /* 212.102.44.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662C92 /* 212.102.44.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662C94 /* 212.102.44.148/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662C98 /* 212.102.44.152/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD4662C9A /* 212.102.44.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D02 /* 212.102.45.2/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D07 /* 212.102.45.7/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D0C /* 212.102.45.12/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6515,7 +6988,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD4662D39 /* 212.102.45.57/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D3E /* 212.102.45.62/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D43 /* 212.102.45.67/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD4662D48 /* 212.102.45.72/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D4D /* 212.102.45.77/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D52 /* 212.102.45.82/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD4662D57 /* 212.102.45.87/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6669,7 +7141,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD598BC64 /* 213.152.188.100/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCCB /* 213.152.188.203/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCCC /* 213.152.188.204/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD598BCE3 /* 213.152.188.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCE4 /* 213.152.188.228/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCE6 /* 213.152.188.230/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCE8 /* 213.152.188.232/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6681,7 +7152,6 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD598BCF5 /* 213.152.188.245/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCF7 /* 213.152.188.247/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD598BCF9 /* 213.152.188.249/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD5E85731 /* 213.232.87.49/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E85732 /* 213.232.87.50/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E85739 /* 213.232.87.57/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E8573B /* 213.232.87.59/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6724,11 +7194,10 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD5E85785 /* 213.232.87.133/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E85787 /* 213.232.87.135/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E85789 /* 213.232.87.137/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD5E8578D /* 213.232.87.141/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E8578E /* 213.232.87.142/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E85792 /* 213.232.87.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD5E857AA /* 213.232.87.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD5E857AE /* 213.232.87.174/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD5E857AB /* 213.232.87.171/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD5E857AF /* 213.232.87.175/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E857B2 /* 213.232.87.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E857B4 /* 213.232.87.180/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD5E857B6 /* 213.232.87.182/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6763,7 +7232,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD8B77D56 /* 216.183.125.86/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD8B77D62 /* 216.183.125.98/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD8B77D6E /* 216.183.125.110/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD8B77D7A /* 216.183.125.122/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD8B77D7B /* 216.183.125.123/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD8B77D86 /* 216.183.125.134/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD8B77D92 /* 216.183.125.146/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD8B77D9E /* 216.183.125.158/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6806,6 +7275,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD97226E9 /* 217.114.38.233/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD97226F0 /* 217.114.38.240/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD97226F7 /* 217.114.38.247/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD98AA213 /* 217.138.162.19/32 */, 32, NDPI_PROTOCOL_NORDVPN }, + { 0xD98AA223 /* 217.138.162.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD98AC01B /* 217.138.192.27/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD98AC023 /* 217.138.192.35/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD98AC02B /* 217.138.192.43/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6901,13 +7372,8 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD98ADEDB /* 217.138.222.219/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD98ADEE3 /* 217.138.222.227/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD98ADEEB /* 217.138.222.235/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925A02 /* 217.146.90.2/31 */, 31, NDPI_PROTOCOL_NORDVPN }, + { 0xD9925A03 /* 217.146.90.3/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925A06 /* 217.146.90.6/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925C96 /* 217.146.92.150/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925C9A /* 217.146.92.154/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925C9E /* 217.146.92.158/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925CA2 /* 217.146.92.162/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925CA6 /* 217.146.92.166/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CAA /* 217.146.92.170/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CAE /* 217.146.92.174/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CB2 /* 217.146.92.178/32 */, 32, NDPI_PROTOCOL_NORDVPN }, @@ -6918,9 +7384,7 @@ static ndpi_network ndpi_protocol_nordvpn_protocol_list[] = { { 0xD9925CC6 /* 217.146.92.198/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CCA /* 217.146.92.202/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CCE /* 217.146.92.206/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925CD2 /* 217.146.92.210/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CD6 /* 217.146.92.214/32 */, 32, NDPI_PROTOCOL_NORDVPN }, - { 0xD9925CDA /* 217.146.92.218/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CDE /* 217.146.92.222/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CE2 /* 217.146.92.226/32 */, 32, NDPI_PROTOCOL_NORDVPN }, { 0xD9925CE7 /* 217.146.92.231/32 */, 32, NDPI_PROTOCOL_NORDVPN }, diff --git a/src/lib/inc_generated/ndpi_protonvpn_in_match.c.inc b/src/lib/inc_generated/ndpi_protonvpn_in_match.c.inc deleted file mode 100644 index e3c506fe2..000000000 --- a/src/lib/inc_generated/ndpi_protonvpn_in_match.c.inc +++ /dev/null @@ -1,636 +0,0 @@ -/* - * - * This file is generated automatically and part of nDPI - * - * 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/>. - * - */ - -/* ****************************************************** */ - - -static ndpi_network ndpi_protocol_protonvpn_protocol_list[] = { - { 0x023AF142 /* 2.58.241.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x059D0D02 /* 5.157.13.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x05FDCCA2 /* 5.253.204.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x1F0DBDE2 /* 31.13.189.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x1F0DBDF2 /* 31.13.189.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x1F0DBF42 /* 31.13.191.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x1F0DBF62 /* 31.13.191.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2432EE01 /* 36.50.238.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x25000CE2 /* 37.0.12.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513C81A /* 37.19.200.26/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513C981 /* 37.19.201.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513C982 /* 37.19.201.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513CD9B /* 37.19.205.155/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513CDDF /* 37.19.205.223/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2513D601 /* 37.19.214.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x252E7305 /* 37.46.115.5/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x25DD70C2 /* 37.221.112.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x25DD70D2 /* 37.221.112.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D0E4706 /* 45.14.71.6/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D537C01 /* 45.83.124.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D537D01 /* 45.83.125.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D537E01 /* 45.83.126.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D537F01 /* 45.83.127.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D538801 /* 45.83.136.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D538901 /* 45.83.137.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D538A01 /* 45.83.138.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D538B01 /* 45.83.139.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539001 /* 45.83.144.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539101 /* 45.83.145.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539119 /* 45.83.145.25/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539132 /* 45.83.145.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D53914A /* 45.83.145.74/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D53914F /* 45.83.145.79/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539154 /* 45.83.145.84/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539159 /* 45.83.145.89/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D53915E /* 45.83.145.94/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539201 /* 45.83.146.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D539301 /* 45.83.147.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D57D5D2 /* 45.87.213.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D57D612 /* 45.87.214.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D5C21A2 /* 45.92.33.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D8085E2 /* 45.128.133.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D8086C2 /* 45.128.134.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D8086C7 /* 45.128.134.199/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D868C21 /* 45.134.140.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D868C2E /* 45.134.140.46/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D868C3B /* 45.134.140.59/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D8B30F2 /* 45.139.48.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D92DEE2 /* 45.146.222.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x2D972D04 /* 45.151.45.4/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x3E7009A4 /* 62.112.9.164/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x40E01101 /* 64.224.17.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x40E01119 /* 64.224.17.25/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x425A48AA /* 66.90.72.170/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x425A521A /* 66.90.82.26/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x450A3FF2 /* 69.10.63.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x480E9402 /* 72.14.148.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x480E9419 /* 72.14.148.25/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4A3FCCD2 /* 74.63.204.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4A767E88 /* 74.118.126.136/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4DF7B236 /* 77.247.178.54/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F6E3702 /* 79.110.55.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F8601 /* 79.127.134.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F861C /* 79.127.134.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F8637 /* 79.127.134.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F8652 /* 79.127.134.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F8841 /* 79.127.136.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F885C /* 79.127.136.92/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F8D01 /* 79.127.141.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9082 /* 79.127.144.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9141 /* 79.127.145.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9201 /* 79.127.146.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9233 /* 79.127.146.51/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9265 /* 79.127.146.101/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F929C /* 79.127.146.156/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F92CE /* 79.127.146.206/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9541 /* 79.127.149.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7F9A01 /* 79.127.154.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7FA441 /* 79.127.164.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7FDCF3 /* 79.127.220.243/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7FDCFB /* 79.127.220.251/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7FFE41 /* 79.127.254.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F7FFE5C /* 79.127.254.92/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87680B /* 79.135.104.11/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87680C /* 79.135.104.12/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876815 /* 79.135.104.21/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876818 /* 79.135.104.24/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87681C /* 79.135.104.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87681E /* 79.135.104.30/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876821 /* 79.135.104.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876822 /* 79.135.104.34/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876824 /* 79.135.104.36/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876828 /* 79.135.104.40/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87682C /* 79.135.104.44/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876830 /* 79.135.104.48/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876834 /* 79.135.104.52/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876836 /* 79.135.104.54/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876839 /* 79.135.104.57/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87683A /* 79.135.104.58/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87683C /* 79.135.104.60/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876843 /* 79.135.104.67/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876844 /* 79.135.104.68/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87684A /* 79.135.104.74/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87684C /* 79.135.104.76/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876850 /* 79.135.104.80/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876855 /* 79.135.104.85/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876856 /* 79.135.104.86/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876858 /* 79.135.104.88/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876861 /* 79.135.104.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876862 /* 79.135.104.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876864 /* 79.135.104.100/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876901 /* 79.135.105.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876904 /* 79.135.105.4/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87690C /* 79.135.105.12/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876910 /* 79.135.105.16/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876914 /* 79.135.105.20/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876918 /* 79.135.105.24/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87692C /* 79.135.105.44/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876930 /* 79.135.105.48/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876934 /* 79.135.105.52/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876938 /* 79.135.105.56/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87693C /* 79.135.105.60/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876944 /* 79.135.105.68/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876948 /* 79.135.105.72/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87694C /* 79.135.105.76/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876950 /* 79.135.105.80/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876954 /* 79.135.105.84/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876958 /* 79.135.105.88/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F87695C /* 79.135.105.92/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876960 /* 79.135.105.96/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876964 /* 79.135.105.100/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876970 /* 79.135.105.112/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876981 /* 79.135.105.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876984 /* 79.135.105.132/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876994 /* 79.135.105.148/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F876998 /* 79.135.105.152/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769A0 /* 79.135.105.160/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769A4 /* 79.135.105.164/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769A8 /* 79.135.105.168/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769B0 /* 79.135.105.176/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769B4 /* 79.135.105.180/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769B8 /* 79.135.105.184/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769BC /* 79.135.105.188/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769C0 /* 79.135.105.192/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769CC /* 79.135.105.204/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769D0 /* 79.135.105.208/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x4F8769D4 /* 79.135.105.212/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x54113F08 /* 84.17.63.8/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x54113F11 /* 84.17.63.17/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x54113F36 /* 84.17.63.54/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x54F732B2 /* 84.247.50.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x54FC7109 /* 84.252.113.9/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5584FC22 /* 85.132.252.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x55CB27E2 /* 85.203.39.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x566A7903 /* 86.106.121.3/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x57F98561 /* 87.249.133.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x57F9868A /* 87.249.134.138/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x57F98BAA /* 87.249.139.170/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59244C82 /* 89.36.76.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x592D0402 /* 89.45.4.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x592DE002 /* 89.45.224.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBA4F1 /* 89.187.164.241/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBA4F6 /* 89.187.164.246/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBAA87 /* 89.187.170.135/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBABEF /* 89.187.171.239/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBABF8 /* 89.187.171.248/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBAF81 /* 89.187.175.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBAF84 /* 89.187.175.132/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBB2AD /* 89.187.178.173/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBB40E /* 89.187.180.14/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBB41B /* 89.187.180.27/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x59BBB428 /* 89.187.180.40/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5B5A7B32 /* 91.90.123.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5B5A7BB2 /* 91.90.123.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5B848B02 /* 91.132.139.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5EBEC318 /* 94.190.195.24/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5F991F72 /* 95.153.31.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADCD81 /* 95.173.205.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADD902 /* 95.173.217.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADD91D /* 95.173.217.29/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADDD21 /* 95.173.221.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADDD41 /* 95.173.221.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x5FADDD5C /* 95.173.221.92/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x6745E002 /* 103.69.224.2/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x6745E004 /* 103.69.224.4/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x6745E006 /* 103.69.224.6/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x674B0B12 /* 103.75.11.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x674B0B82 /* 103.75.11.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x676CE512 /* 103.108.229.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x676CE712 /* 103.108.231.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x676CE7A2 /* 103.108.231.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x677DEB13 /* 103.125.235.19/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x67D61462 /* 103.214.20.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x67D614D2 /* 103.214.20.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x67D8DC62 /* 103.216.220.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x68EAD41A /* 104.234.212.26/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x68FE5F62 /* 104.254.95.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x6BB5B102 /* 107.181.177.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x6BB5B10B /* 107.181.177.11/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x745A4AB2 /* 116.90.74.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3D842 /* 130.195.216.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3D902 /* 130.195.217.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3DDA2 /* 130.195.221.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3F002 /* 130.195.240.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3F102 /* 130.195.241.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3F202 /* 130.195.242.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3F302 /* 130.195.243.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3F502 /* 130.195.245.2/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3FA42 /* 130.195.250.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x82C3FA62 /* 130.195.250.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC706B1 /* 138.199.6.177/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC706B2 /* 138.199.6.178/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC706B5 /* 138.199.6.181/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC70781 /* 138.199.7.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC721E1 /* 138.199.33.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC721EC /* 138.199.33.236/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC722C1 /* 138.199.34.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC72361 /* 138.199.35.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73261 /* 138.199.50.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73267 /* 138.199.50.103/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73268 /* 138.199.50.104/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC735E1 /* 138.199.53.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC735EC /* 138.199.53.236/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73721 /* 138.199.55.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73C55 /* 138.199.60.85/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73C56 /* 138.199.60.86/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x8AC73C59 /* 138.199.60.89/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8B1CDA02 /* 139.28.218.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8B1CDA82 /* 139.28.218.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x8FF42CBA /* 143.244.44.186/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x903027E2 /* 144.48.39.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92460E13 /* 146.70.14.19/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92461DC2 /* 146.70.29.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92462D72 /* 146.70.45.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92462DE2 /* 146.70.45.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92463002 /* 146.70.48.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x924633D2 /* 146.70.51.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92463A82 /* 146.70.58.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92464882 /* 146.70.72.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x924648A2 /* 146.70.72.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92465342 /* 146.70.83.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92465672 /* 146.70.86.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92466042 /* 146.70.96.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92466262 /* 146.70.98.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92466282 /* 146.70.98.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x924662A2 /* 146.70.98.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92467162 /* 146.70.113.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92467172 /* 146.70.113.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x924673A2 /* 146.70.115.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92467892 /* 146.70.120.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x924678D2 /* 146.70.120.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92467FF2 /* 146.70.127.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92468112 /* 146.70.129.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92468582 /* 146.70.133.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92468823 /* 146.70.136.35/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92468E12 /* 146.70.142.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92468E52 /* 146.70.142.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x92469372 /* 146.70.147.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246A1A2 /* 146.70.161.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246A1B2 /* 146.70.161.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AA02 /* 146.70.170.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AA12 /* 146.70.170.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AE52 /* 146.70.174.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AE82 /* 146.70.174.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AE92 /* 146.70.174.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AEA2 /* 146.70.174.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AEB2 /* 146.70.174.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AEC2 /* 146.70.174.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AED2 /* 146.70.174.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AEE2 /* 146.70.174.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246AEF2 /* 146.70.174.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B312 /* 146.70.179.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B322 /* 146.70.179.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B332 /* 146.70.179.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B362 /* 146.70.179.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B522 /* 146.70.181.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B602 /* 146.70.182.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B612 /* 146.70.182.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B622 /* 146.70.182.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B712 /* 146.70.183.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B782 /* 146.70.183.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B792 /* 146.70.183.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246B7A2 /* 146.70.183.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C202 /* 146.70.194.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C212 /* 146.70.194.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C222 /* 146.70.194.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C232 /* 146.70.194.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C242 /* 146.70.194.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C252 /* 146.70.194.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C262 /* 146.70.194.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C272 /* 146.70.194.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C322 /* 146.70.195.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C352 /* 146.70.195.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C362 /* 146.70.195.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C602 /* 146.70.198.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C612 /* 146.70.198.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C622 /* 146.70.198.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246C632 /* 146.70.198.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA12 /* 146.70.202.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA32 /* 146.70.202.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA42 /* 146.70.202.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA62 /* 146.70.202.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA82 /* 146.70.202.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CA92 /* 146.70.202.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CAA2 /* 146.70.202.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CAB2 /* 146.70.202.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CCA2 /* 146.70.204.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246CCB2 /* 146.70.204.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246D942 /* 146.70.217.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246D962 /* 146.70.217.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246DD82 /* 146.70.221.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246E2C2 /* 146.70.226.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246E2E2 /* 146.70.226.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246E503 /* 146.70.229.3/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246E702 /* 146.70.231.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246ED82 /* 146.70.237.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246F582 /* 146.70.245.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9246FC02 /* 146.70.252.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165001 /* 149.22.80.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9516501C /* 149.22.80.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165037 /* 149.22.80.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165052 /* 149.22.80.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165101 /* 149.22.81.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9516511C /* 149.22.81.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165201 /* 149.22.82.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9516521C /* 149.22.82.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165237 /* 149.22.82.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165459 /* 149.22.84.89/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x951655C1 /* 149.22.85.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165E01 /* 149.22.94.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165E1C /* 149.22.94.28/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165E37 /* 149.22.94.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165E56 /* 149.22.94.86/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165E71 /* 149.22.94.113/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95165FC1 /* 149.22.95.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95243081 /* 149.36.48.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9524308D /* 149.36.48.141/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95243099 /* 149.36.48.153/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9524309A /* 149.36.48.154/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x95283041 /* 149.40.48.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9528306A /* 149.40.48.106/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x952830E1 /* 149.40.48.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95283F81 /* 149.40.63.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9532D8C1 /* 149.50.216.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9532D8CD /* 149.50.216.205/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9532D8E1 /* 149.50.216.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9532D8EE /* 149.50.216.238/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9532D9A1 /* 149.50.217.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581181 /* 149.88.17.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x955812C1 /* 149.88.18.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x955813E1 /* 149.88.19.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x955813EE /* 149.88.19.238/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581481 /* 149.88.20.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581881 /* 149.88.24.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x955818B4 /* 149.88.24.180/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581BC1 /* 149.88.27.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581BCE /* 149.88.27.206/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581BDB /* 149.88.27.219/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581BE8 /* 149.88.27.232/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0x95581BEC /* 149.88.27.236/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95586161 /* 149.88.97.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9558616E /* 149.88.97.110/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9558617A /* 149.88.97.122/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95586621 /* 149.88.102.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9558662E /* 149.88.102.46/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95586661 /* 149.88.102.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9558666E /* 149.88.102.110/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x95586E21 /* 149.88.110.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566E0A1 /* 149.102.224.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566E0A2 /* 149.102.224.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566E0AF /* 149.102.224.175/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566E2C1 /* 149.102.226.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566E2E1 /* 149.102.226.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566EB21 /* 149.102.235.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566ED81 /* 149.102.237.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566F411 /* 149.102.244.17/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566F581 /* 149.102.245.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566F59C /* 149.102.245.156/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566FB61 /* 149.102.251.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566FE41 /* 149.102.254.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566FE4D /* 149.102.254.77/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9566FE4E /* 149.102.254.78/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F1051 /* 154.47.16.81/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F13C1 /* 154.47.19.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F13D4 /* 154.47.19.212/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F1641 /* 154.47.22.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F164D /* 154.47.22.77/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F165A /* 154.47.22.90/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F18C1 /* 154.47.24.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F1981 /* 154.47.25.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F1991 /* 154.47.25.145/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F19A1 /* 154.47.25.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9A2F19C1 /* 154.47.25.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C922D81 /* 156.146.45.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C922D8B /* 156.146.45.139/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C923205 /* 156.146.50.5/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C923341 /* 156.146.51.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C92334E /* 156.146.51.78/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C923661 /* 156.146.54.97/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0x9C9237E1 /* 156.146.55.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA305AB02 /* 163.5.171.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA305AB1D /* 163.5.171.29/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA305AB38 /* 163.5.171.56/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA305AB53 /* 163.5.171.83/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA5E7B20A /* 165.231.178.10/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA996CC21 /* 169.150.204.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA996CC2C /* 169.150.204.44/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xA996E2A1 /* 169.150.226.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xAC625292 /* 172.98.82.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB060E2E2 /* 176.96.226.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB060E2F2 /* 176.96.226.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB0714A52 /* 176.113.74.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB2DAA7D2 /* 178.218.167.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB2F9D4A1 /* 178.249.212.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB2F9D4A2 /* 178.249.212.162/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB2F9D641 /* 178.249.214.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB495E582 /* 180.149.229.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB93386C2 /* 185.51.134.194/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB94C0B11 /* 185.76.11.17/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB94C0B16 /* 185.76.11.22/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB94C0B1B /* 185.76.11.27/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB95A3CD2 /* 185.90.60.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB96B2C6E /* 185.107.44.110/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB96B2CC8 /* 185.107.44.200/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB96F6D01 /* 185.111.109.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99C2E21 /* 185.156.46.33/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C1B /* 185.159.156.27/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C1C /* 185.159.156.28/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C25 /* 185.159.156.37/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C31 /* 185.159.156.49/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C36 /* 185.159.156.54/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C38 /* 185.159.156.56/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C3A /* 185.159.156.58/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C40 /* 185.159.156.64/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C42 /* 185.159.156.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C44 /* 185.159.156.68/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C48 /* 185.159.156.72/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C4A /* 185.159.156.74/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C51 /* 185.159.156.81/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C52 /* 185.159.156.82/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C54 /* 185.159.156.84/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C58 /* 185.159.156.88/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C60 /* 185.159.156.96/28 */, 28, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C70 /* 185.159.156.112/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C78 /* 185.159.156.120/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C7A /* 185.159.156.122/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C7C /* 185.159.156.124/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C80 /* 185.159.156.128/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C83 /* 185.159.156.131/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C84 /* 185.159.156.132/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C86 /* 185.159.156.134/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C89 /* 185.159.156.137/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C8B /* 185.159.156.139/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C8C /* 185.159.156.140/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9C94 /* 185.159.156.148/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D06 /* 185.159.157.6/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D0D /* 185.159.157.13/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D17 /* 185.159.157.23/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D18 /* 185.159.157.24/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D1B /* 185.159.157.27/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D23 /* 185.159.157.35/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D25 /* 185.159.157.37/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D2B /* 185.159.157.43/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D38 /* 185.159.157.56/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D3A /* 185.159.157.58/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D3C /* 185.159.157.60/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D3E /* 185.159.157.62/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D41 /* 185.159.157.65/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D50 /* 185.159.157.80/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D52 /* 185.159.157.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D54 /* 185.159.157.84/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D58 /* 185.159.157.88/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D5D /* 185.159.157.93/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D5E /* 185.159.157.94/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D60 /* 185.159.157.96/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D67 /* 185.159.157.103/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D68 /* 185.159.157.104/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D6F /* 185.159.157.111/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D71 /* 185.159.157.113/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D78 /* 185.159.157.120/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D7C /* 185.159.157.124/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D7E /* 185.159.157.126/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D81 /* 185.159.157.129/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D84 /* 185.159.157.132/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D8D /* 185.159.157.141/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D94 /* 185.159.157.148/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D96 /* 185.159.157.150/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9D99 /* 185.159.157.153/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DA5 /* 185.159.157.165/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DB0 /* 185.159.157.176/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DB7 /* 185.159.157.183/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DB8 /* 185.159.157.184/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DBA /* 185.159.157.186/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DBC /* 185.159.157.188/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DC0 /* 185.159.157.192/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DC5 /* 185.159.157.197/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DC6 /* 185.159.157.198/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DD0 /* 185.159.157.208/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DD4 /* 185.159.157.212/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DD6 /* 185.159.157.214/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DD9 /* 185.159.157.217/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DDA /* 185.159.157.218/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DDC /* 185.159.157.220/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DE0 /* 185.159.157.224/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DE8 /* 185.159.157.232/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DEA /* 185.159.157.234/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DEC /* 185.159.157.236/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DF0 /* 185.159.157.240/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DF5 /* 185.159.157.245/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9DFC /* 185.159.157.252/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E01 /* 185.159.158.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E02 /* 185.159.158.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E15 /* 185.159.158.21/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E16 /* 185.159.158.22/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E37 /* 185.159.158.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E43 /* 185.159.158.67/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E76 /* 185.159.158.118/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E78 /* 185.159.158.120/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E8A /* 185.159.158.138/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E91 /* 185.159.158.145/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E92 /* 185.159.158.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9E94 /* 185.159.158.148/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EB1 /* 185.159.158.177/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EB2 /* 185.159.158.178/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EB4 /* 185.159.158.180/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EB6 /* 185.159.158.182/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EB9 /* 185.159.158.185/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EBA /* 185.159.158.186/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EBC /* 185.159.158.188/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EC0 /* 185.159.158.192/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EC4 /* 185.159.158.196/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EC7 /* 185.159.158.199/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EC8 /* 185.159.158.200/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ECA /* 185.159.158.202/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ECC /* 185.159.158.204/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ED0 /* 185.159.158.208/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ED2 /* 185.159.158.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ED4 /* 185.159.158.212/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9ED8 /* 185.159.158.216/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EE0 /* 185.159.158.224/29 */, 29, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EE8 /* 185.159.158.232/30 */, 30, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EEC /* 185.159.158.236/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EF1 /* 185.159.158.241/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EF2 /* 185.159.158.242/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EF4 /* 185.159.158.244/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EF9 /* 185.159.158.249/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB99F9EFA /* 185.159.158.250/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9A32C89 /* 185.163.44.137/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9B564B2 /* 185.181.100.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9B98692 /* 185.185.134.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9E51974 /* 185.229.25.116/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9E67D02 /* 185.230.125.2/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9E67D22 /* 185.230.125.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9E67E92 /* 185.230.126.146/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9F55582 /* 185.245.85.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9F6D348 /* 185.246.211.72/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9F6D3C1 /* 185.246.211.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xB9F74432 /* 185.247.68.50/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD66AB2 /* 188.214.106.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD67A52 /* 188.214.122.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD67DA2 /* 188.214.125.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD698E2 /* 188.214.152.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD69E22 /* 188.214.158.34/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCD7EB52 /* 188.215.235.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBCF1B1E2 /* 188.241.177.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBE02839C /* 190.2.131.156/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBE02847C /* 190.2.132.124/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBE02848B /* 190.2.132.139/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xBE0292B4 /* 190.2.146.180/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC1092401 /* 193.9.36.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC1092501 /* 193.9.37.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC1092601 /* 193.9.38.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC1092701 /* 193.9.39.1/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC11D6A12 /* 193.29.106.18/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC11D6B62 /* 193.29.107.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC11D6BA2 /* 193.29.107.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC11D6BF2 /* 193.29.107.242/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC125FE42 /* 193.37.254.66/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC125FEB2 /* 193.37.254.178/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC1941252 /* 193.148.18.82/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC2228437 /* 194.34.132.55/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC27EB106 /* 194.126.177.6/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xC27EB108 /* 194.126.177.8/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xC27EB10D /* 194.126.177.13/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC27EB10E /* 194.126.177.14/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC35096E2 /* 195.80.150.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC39EF8E2 /* 195.158.248.226/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC3B2ACBC /* 195.178.172.188/31 */, 31, NDPI_PROTOCOL_PROTONVPN }, - { 0xC3B5A7C1 /* 195.181.167.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC4C4CBCA /* 196.196.203.202/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC4C51C82 /* 196.197.28.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC4F03672 /* 196.240.54.114/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xC4F597D2 /* 196.245.151.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xCD8EF0D2 /* 205.142.240.210/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD45C68C1 /* 212.92.104.193/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD45C68D1 /* 212.92.104.209/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD45C68E1 /* 212.92.104.225/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD45C68F1 /* 212.92.104.241/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD4662CA1 /* 212.102.44.161/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD4662CA6 /* 212.102.44.166/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD98AC162 /* 217.138.193.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD98AC6F6 /* 217.138.198.246/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD98AD862 /* 217.138.216.98/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD98AD882 /* 217.138.216.130/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - { 0xD98AD8A2 /* 217.138.216.162/32 */, 32, NDPI_PROTOCOL_PROTONVPN }, - /* End */ - { 0x0, 0, 0 } -}; - -static ndpi_network6 ndpi_protocol_protonvpn_protocol_list_6[] = { - /* End */ - { NULL, 0, 0 } -}; diff --git a/src/lib/inc_generated/ndpi_protonvpn_out_match.c.inc b/src/lib/inc_generated/ndpi_protonvpn_out_match.c.inc deleted file mode 100644 index ad6249c78..000000000 --- a/src/lib/inc_generated/ndpi_protonvpn_out_match.c.inc +++ /dev/null @@ -1,2367 +0,0 @@ -/* - * - * This file is generated automatically and part of nDPI - * - * 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/>. - * - */ - -/* ****************************************************** */ - - -static ndpi_network ndpi_anonymous_subscriber_protonvpn_protocol_list[] = { - { 0x023AF143 /* 2.58.241.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x023AF144 /* 2.58.241.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x023AF148 /* 2.58.241.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x023AF14A /* 2.58.241.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x059D0D03 /* 5.157.13.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x059D0D04 /* 5.157.13.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x059D0D06 /* 5.157.13.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05B59D08 /* 5.181.157.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05B59D70 /* 5.181.157.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCA3 /* 5.253.204.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCA4 /* 5.253.204.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCA8 /* 5.253.204.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCB0 /* 5.253.204.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCB8 /* 5.253.204.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCBC /* 5.253.204.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x05FDCCBE /* 5.253.204.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDE3 /* 31.13.189.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDE4 /* 31.13.189.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDE8 /* 31.13.189.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDEC /* 31.13.189.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDEE /* 31.13.189.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDF3 /* 31.13.189.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDF4 /* 31.13.189.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDF8 /* 31.13.189.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDFC /* 31.13.189.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBDFE /* 31.13.189.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF43 /* 31.13.191.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF44 /* 31.13.191.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF48 /* 31.13.191.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF50 /* 31.13.191.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF58 /* 31.13.191.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF5A /* 31.13.191.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF5C /* 31.13.191.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF5E /* 31.13.191.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF63 /* 31.13.191.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF64 /* 31.13.191.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF68 /* 31.13.191.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF70 /* 31.13.191.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF78 /* 31.13.191.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF7C /* 31.13.191.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x1F0DBF7E /* 31.13.191.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE01 /* 36.50.238.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE02 /* 36.50.238.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE04 /* 36.50.238.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE08 /* 36.50.238.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE10 /* 36.50.238.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2432EE18 /* 36.50.238.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25000CE3 /* 37.0.12.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25000CE4 /* 37.0.12.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25000CE8 /* 37.0.12.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25000CEC /* 37.0.12.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25000CEE /* 37.0.12.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513C983 /* 37.19.201.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513C984 /* 37.19.201.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513C988 /* 37.19.201.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513C98A /* 37.19.201.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513CDC5 /* 37.19.205.197/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513CDE0 /* 37.19.205.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513CDF0 /* 37.19.205.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513CDF4 /* 37.19.205.244/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513D602 /* 37.19.214.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513D604 /* 37.19.214.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2513D606 /* 37.19.214.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x252E7306 /* 37.46.115.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x252E7308 /* 37.46.115.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x252E730C /* 37.46.115.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70C3 /* 37.221.112.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70C4 /* 37.221.112.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70C8 /* 37.221.112.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70CC /* 37.221.112.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70CE /* 37.221.112.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70D3 /* 37.221.112.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70D4 /* 37.221.112.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70D8 /* 37.221.112.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70DC /* 37.221.112.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x25DD70DE /* 37.221.112.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x268473F2 /* 38.132.115.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x268473F4 /* 38.132.115.244/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x268473F6 /* 38.132.115.246/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D0E470C /* 45.14.71.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D0E4710 /* 45.14.71.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D26BD01 /* 45.38.189.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D26BD02 /* 45.38.189.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D26BD04 /* 45.38.189.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D26BD08 /* 45.38.189.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C01 /* 45.83.124.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C02 /* 45.83.124.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C04 /* 45.83.124.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C08 /* 45.83.124.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C10 /* 45.83.124.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537C18 /* 45.83.124.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D01 /* 45.83.125.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D02 /* 45.83.125.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D04 /* 45.83.125.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D08 /* 45.83.125.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D10 /* 45.83.125.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537D18 /* 45.83.125.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E01 /* 45.83.126.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E02 /* 45.83.126.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E04 /* 45.83.126.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E08 /* 45.83.126.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E10 /* 45.83.126.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537E18 /* 45.83.126.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F01 /* 45.83.127.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F02 /* 45.83.127.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F04 /* 45.83.127.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F08 /* 45.83.127.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F10 /* 45.83.127.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D537F18 /* 45.83.127.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538801 /* 45.83.136.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538802 /* 45.83.136.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538804 /* 45.83.136.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538808 /* 45.83.136.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538810 /* 45.83.136.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538818 /* 45.83.136.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538901 /* 45.83.137.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538902 /* 45.83.137.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538904 /* 45.83.137.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538908 /* 45.83.137.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538910 /* 45.83.137.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538918 /* 45.83.137.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A01 /* 45.83.138.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A02 /* 45.83.138.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A04 /* 45.83.138.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A08 /* 45.83.138.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A10 /* 45.83.138.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538A18 /* 45.83.138.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B01 /* 45.83.139.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B02 /* 45.83.139.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B04 /* 45.83.139.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B08 /* 45.83.139.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B10 /* 45.83.139.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D538B18 /* 45.83.139.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539001 /* 45.83.144.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539002 /* 45.83.144.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539004 /* 45.83.144.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539008 /* 45.83.144.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539010 /* 45.83.144.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539018 /* 45.83.144.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539101 /* 45.83.145.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539102 /* 45.83.145.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539104 /* 45.83.145.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539108 /* 45.83.145.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539110 /* 45.83.145.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539118 /* 45.83.145.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53911A /* 45.83.145.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53911C /* 45.83.145.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539120 /* 45.83.145.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539128 /* 45.83.145.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53912C /* 45.83.145.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53912E /* 45.83.145.46/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539130 /* 45.83.145.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539133 /* 45.83.145.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539134 /* 45.83.145.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539138 /* 45.83.145.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539140 /* 45.83.145.64/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539148 /* 45.83.145.72/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53914B /* 45.83.145.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53914C /* 45.83.145.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53914E /* 45.83.145.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539150 /* 45.83.145.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539155 /* 45.83.145.85/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539156 /* 45.83.145.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539158 /* 45.83.145.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53915A /* 45.83.145.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53915C /* 45.83.145.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D53915F /* 45.83.145.95/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539160 /* 45.83.145.96/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539162 /* 45.83.145.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539201 /* 45.83.146.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539202 /* 45.83.146.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539204 /* 45.83.146.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539208 /* 45.83.146.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539210 /* 45.83.146.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539218 /* 45.83.146.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539301 /* 45.83.147.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539302 /* 45.83.147.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539304 /* 45.83.147.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539308 /* 45.83.147.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539310 /* 45.83.147.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D539318 /* 45.83.147.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D5D3 /* 45.87.213.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D5D4 /* 45.87.213.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D5D8 /* 45.87.213.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D5DC /* 45.87.213.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D5DE /* 45.87.213.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D613 /* 45.87.214.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D614 /* 45.87.214.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D618 /* 45.87.214.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D61C /* 45.87.214.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D57D61E /* 45.87.214.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21A3 /* 45.92.33.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21A4 /* 45.92.33.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21A8 /* 45.92.33.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21B0 /* 45.92.33.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21B8 /* 45.92.33.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21BC /* 45.92.33.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D5C21BE /* 45.92.33.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085DA /* 45.128.133.218/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085DC /* 45.128.133.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085DE /* 45.128.133.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085E3 /* 45.128.133.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085E4 /* 45.128.133.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085E8 /* 45.128.133.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8085EA /* 45.128.133.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D808652 /* 45.128.134.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D808654 /* 45.128.134.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D808658 /* 45.128.134.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D80865C /* 45.128.134.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D80865E /* 45.128.134.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8086C3 /* 45.128.134.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8086C4 /* 45.128.134.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C22 /* 45.134.140.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C24 /* 45.134.140.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C28 /* 45.134.140.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C2C /* 45.134.140.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C2F /* 45.134.140.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C30 /* 45.134.140.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C38 /* 45.134.140.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D868C3A /* 45.134.140.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8B30F3 /* 45.139.48.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8B30F4 /* 45.139.48.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8B30F8 /* 45.139.48.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8B30FC /* 45.139.48.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D8B30FE /* 45.139.48.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D92DEE3 /* 45.146.222.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D92DEE4 /* 45.146.222.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D92DEE8 /* 45.146.222.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D92DEEC /* 45.146.222.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D92DEEE /* 45.146.222.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D05 /* 45.151.45.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D06 /* 45.151.45.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D08 /* 45.151.45.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D0C /* 45.151.45.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D0E /* 45.151.45.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D10 /* 45.151.45.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x2D972D20 /* 45.151.45.32/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009A5 /* 62.112.9.165/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009A6 /* 62.112.9.166/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009C0 /* 62.112.9.192/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009ED /* 62.112.9.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009F3 /* 62.112.9.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x3E7009F4 /* 62.112.9.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01101 /* 64.224.17.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01102 /* 64.224.17.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01104 /* 64.224.17.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01108 /* 64.224.17.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01110 /* 64.224.17.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01120 /* 64.224.17.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x40E01130 /* 64.224.17.48/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A432A /* 66.90.67.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A432C /* 66.90.67.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A48AB /* 66.90.72.171/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A48AC /* 66.90.72.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A48AE /* 66.90.72.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A4972 /* 66.90.73.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A4974 /* 66.90.73.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A521B /* 66.90.82.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A521C /* 66.90.82.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x425A521E /* 66.90.82.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x42FB8001 /* 66.251.128.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x42FB8002 /* 66.251.128.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x42FB8004 /* 66.251.128.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x42FB8008 /* 66.251.128.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x450A3FF3 /* 69.10.63.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x450A3FF4 /* 69.10.63.244/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x450A3FF6 /* 69.10.63.246/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9403 /* 72.14.148.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9404 /* 72.14.148.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9408 /* 72.14.148.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9410 /* 72.14.148.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9418 /* 72.14.148.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E941A /* 72.14.148.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E941C /* 72.14.148.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9420 /* 72.14.148.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x480E9430 /* 72.14.148.48/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A3FCCD3 /* 74.63.204.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A3FCCD4 /* 74.63.204.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A3FCCD8 /* 74.63.204.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A3FCCDC /* 74.63.204.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A3FCCDE /* 74.63.204.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4A767E88 /* 74.118.126.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B23A /* 77.247.178.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B25E /* 77.247.178.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B261 /* 77.247.178.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B26B /* 77.247.178.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B26D /* 77.247.178.109/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B26E /* 77.247.178.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B272 /* 77.247.178.114/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B290 /* 77.247.178.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B293 /* 77.247.178.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B29A /* 77.247.178.154/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B2A3 /* 77.247.178.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4DF7B2C7 /* 77.247.178.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F6E3703 /* 79.110.55.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F6E3704 /* 79.110.55.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F6E3708 /* 79.110.55.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F6E370C /* 79.110.55.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F6E370E /* 79.110.55.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8602 /* 79.127.134.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8604 /* 79.127.134.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8608 /* 79.127.134.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8610 /* 79.127.134.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8618 /* 79.127.134.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F861D /* 79.127.134.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F861E /* 79.127.134.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8620 /* 79.127.134.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8630 /* 79.127.134.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8634 /* 79.127.134.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8636 /* 79.127.134.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8638 /* 79.127.134.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8640 /* 79.127.134.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8650 /* 79.127.134.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8653 /* 79.127.134.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8654 /* 79.127.134.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8658 /* 79.127.134.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8660 /* 79.127.134.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8668 /* 79.127.134.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F866C /* 79.127.134.108/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8801 /* 79.127.136.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8802 /* 79.127.136.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8804 /* 79.127.136.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8808 /* 79.127.136.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8810 /* 79.127.136.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8820 /* 79.127.136.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8828 /* 79.127.136.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F882C /* 79.127.136.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8842 /* 79.127.136.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8844 /* 79.127.136.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8848 /* 79.127.136.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8850 /* 79.127.136.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8858 /* 79.127.136.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F885D /* 79.127.136.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F885E /* 79.127.136.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8860 /* 79.127.136.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8870 /* 79.127.136.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8874 /* 79.127.136.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8876 /* 79.127.136.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D02 /* 79.127.141.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D04 /* 79.127.141.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D08 /* 79.127.141.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D10 /* 79.127.141.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D20 /* 79.127.141.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F8D30 /* 79.127.141.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9081 /* 79.127.144.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9083 /* 79.127.144.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9084 /* 79.127.144.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9088 /* 79.127.144.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9090 /* 79.127.144.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9098 /* 79.127.144.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F909C /* 79.127.144.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9142 /* 79.127.145.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9144 /* 79.127.145.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9148 /* 79.127.145.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9150 /* 79.127.145.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9158 /* 79.127.145.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F915C /* 79.127.145.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9202 /* 79.127.146.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9204 /* 79.127.146.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9208 /* 79.127.146.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9210 /* 79.127.146.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9218 /* 79.127.146.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F921C /* 79.127.146.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9234 /* 79.127.146.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9238 /* 79.127.146.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9240 /* 79.127.146.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9266 /* 79.127.146.102/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9268 /* 79.127.146.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9270 /* 79.127.146.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9278 /* 79.127.146.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9281 /* 79.127.146.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9282 /* 79.127.146.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9284 /* 79.127.146.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9286 /* 79.127.146.134/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F929D /* 79.127.146.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F929E /* 79.127.146.158/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92A0 /* 79.127.146.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92B0 /* 79.127.146.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92B8 /* 79.127.146.184/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92CF /* 79.127.146.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92D0 /* 79.127.146.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92E0 /* 79.127.146.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92E8 /* 79.127.146.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F92EA /* 79.127.146.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9542 /* 79.127.149.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9544 /* 79.127.149.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9548 /* 79.127.149.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9550 /* 79.127.149.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9558 /* 79.127.149.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F955C /* 79.127.149.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9A02 /* 79.127.154.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9A04 /* 79.127.154.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9A08 /* 79.127.154.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9A10 /* 79.127.154.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7F9A18 /* 79.127.154.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA442 /* 79.127.164.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA444 /* 79.127.164.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA448 /* 79.127.164.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA450 /* 79.127.164.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA458 /* 79.127.164.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FA45C /* 79.127.164.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF81 /* 79.127.207.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF82 /* 79.127.207.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF84 /* 79.127.207.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF88 /* 79.127.207.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF90 /* 79.127.207.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCF98 /* 79.127.207.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFA1 /* 79.127.207.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFA2 /* 79.127.207.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFA4 /* 79.127.207.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFA8 /* 79.127.207.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFB0 /* 79.127.207.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FCFB8 /* 79.127.207.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FD891 /* 79.127.216.145/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FD892 /* 79.127.216.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FDCF4 /* 79.127.220.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FDCF8 /* 79.127.220.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FDCFA /* 79.127.220.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FE7AF /* 79.127.231.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FE7B0 /* 79.127.231.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FE7B8 /* 79.127.231.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE42 /* 79.127.254.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE44 /* 79.127.254.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE48 /* 79.127.254.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE50 /* 79.127.254.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE58 /* 79.127.254.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE5D /* 79.127.254.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE5E /* 79.127.254.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE60 /* 79.127.254.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE70 /* 79.127.254.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE74 /* 79.127.254.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F7FFE76 /* 79.127.254.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876805 /* 79.135.104.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876806 /* 79.135.104.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876808 /* 79.135.104.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F87680D /* 79.135.104.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F87680E /* 79.135.104.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876810 /* 79.135.104.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876901 /* 79.135.105.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876902 /* 79.135.105.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876904 /* 79.135.105.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876908 /* 79.135.105.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876910 /* 79.135.105.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876920 /* 79.135.105.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F87692C /* 79.135.105.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876930 /* 79.135.105.48/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876940 /* 79.135.105.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876960 /* 79.135.105.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876970 /* 79.135.105.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876978 /* 79.135.105.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876981 /* 79.135.105.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876982 /* 79.135.105.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876984 /* 79.135.105.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876988 /* 79.135.105.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F876990 /* 79.135.105.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F8769A0 /* 79.135.105.160/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F8769C0 /* 79.135.105.192/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F8769CC /* 79.135.105.204/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x4F8769D0 /* 79.135.105.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113E61 /* 84.17.62.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113E64 /* 84.17.62.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F09 /* 84.17.63.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F0A /* 84.17.63.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F0C /* 84.17.63.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F10 /* 84.17.63.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F14 /* 84.17.63.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F37 /* 84.17.63.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F38 /* 84.17.63.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54113F3A /* 84.17.63.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54F732B3 /* 84.247.50.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54F732B4 /* 84.247.50.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54F732B6 /* 84.247.50.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5F92 /* 84.252.95.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5F94 /* 84.252.95.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5F96 /* 84.252.95.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5FA2 /* 84.252.95.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5FA4 /* 84.252.95.164/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC5FA6 /* 84.252.95.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7001 /* 84.252.112.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7002 /* 84.252.112.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7004 /* 84.252.112.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7008 /* 84.252.112.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7101 /* 84.252.113.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7102 /* 84.252.113.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7104 /* 84.252.113.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7108 /* 84.252.113.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7110 /* 84.252.113.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7120 /* 84.252.113.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7130 /* 84.252.113.48/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7201 /* 84.252.114.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7202 /* 84.252.114.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7204 /* 84.252.114.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7208 /* 84.252.114.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7301 /* 84.252.115.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7302 /* 84.252.115.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7304 /* 84.252.115.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x54FC7308 /* 84.252.115.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5584FC23 /* 85.132.252.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5584FC24 /* 85.132.252.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5584FC26 /* 85.132.252.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CB27E3 /* 85.203.39.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CB27E4 /* 85.203.39.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CB27E8 /* 85.203.39.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CB27EC /* 85.203.39.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CB27EE /* 85.203.39.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CC4E01 /* 85.204.78.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CC4E02 /* 85.204.78.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CC4E04 /* 85.204.78.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x55CC4E08 /* 85.204.78.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x566A7903 /* 86.106.121.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x566A7904 /* 86.106.121.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x566A7908 /* 86.106.121.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x566A7910 /* 86.106.121.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98562 /* 87.249.133.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98564 /* 87.249.133.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98568 /* 87.249.133.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F9856C /* 87.249.133.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98570 /* 87.249.133.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985C1 /* 87.249.133.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985C2 /* 87.249.133.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985C4 /* 87.249.133.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985C8 /* 87.249.133.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985D0 /* 87.249.133.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985D8 /* 87.249.133.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985DB /* 87.249.133.219/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985DC /* 87.249.133.220/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985E0 /* 87.249.133.224/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985F0 /* 87.249.133.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F985F2 /* 87.249.133.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98BA2 /* 87.249.139.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98BA4 /* 87.249.139.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x57F98BA8 /* 87.249.139.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C4A /* 89.36.76.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C4C /* 89.36.76.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C4E /* 89.36.76.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C83 /* 89.36.76.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C84 /* 89.36.76.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C88 /* 89.36.76.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C8C /* 89.36.76.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59244C8E /* 89.36.76.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592D0403 /* 89.45.4.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592D0404 /* 89.45.4.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592D0408 /* 89.45.4.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592D040C /* 89.45.4.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592D040E /* 89.45.4.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE002 /* 89.45.224.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE004 /* 89.45.224.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE008 /* 89.45.224.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE010 /* 89.45.224.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE018 /* 89.45.224.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE01C /* 89.45.224.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x592DE01E /* 89.45.224.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBA4F2 /* 89.187.164.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBA4F4 /* 89.187.164.244/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBA4F7 /* 89.187.164.247/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBA4F8 /* 89.187.164.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBA4FA /* 89.187.164.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAA9E /* 89.187.170.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAA3 /* 89.187.170.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAA4 /* 89.187.170.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAA6 /* 89.187.170.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAAD /* 89.187.170.173/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAAE /* 89.187.170.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAB0 /* 89.187.170.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAB4 /* 89.187.170.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAAB6 /* 89.187.170.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBABF0 /* 89.187.171.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBABF8 /* 89.187.171.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAF82 /* 89.187.175.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAF89 /* 89.187.175.137/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAF8D /* 89.187.175.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAF90 /* 89.187.175.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAFA8 /* 89.187.175.168/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBAFAE /* 89.187.175.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB191 /* 89.187.177.145/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB192 /* 89.187.177.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB194 /* 89.187.177.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB2AE /* 89.187.178.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB2B0 /* 89.187.178.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB2C3 /* 89.187.178.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB2C8 /* 89.187.178.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB2CC /* 89.187.178.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB40F /* 89.187.180.15/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB410 /* 89.187.180.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB418 /* 89.187.180.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB41A /* 89.187.180.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB41C /* 89.187.180.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB420 /* 89.187.180.32/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB429 /* 89.187.180.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB42A /* 89.187.180.42/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB42C /* 89.187.180.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB430 /* 89.187.180.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59BBB434 /* 89.187.180.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59F94AEA /* 89.249.74.234/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59F94AEC /* 89.249.74.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x59F94AEE /* 89.249.74.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B33 /* 91.90.123.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B34 /* 91.90.123.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B38 /* 91.90.123.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B3C /* 91.90.123.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B3E /* 91.90.123.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B72 /* 91.90.123.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B74 /* 91.90.123.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7B76 /* 91.90.123.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7BB3 /* 91.90.123.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7BB4 /* 91.90.123.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7BB8 /* 91.90.123.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7BBC /* 91.90.123.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B5A7BBE /* 91.90.123.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B03 /* 91.132.139.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B04 /* 91.132.139.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B08 /* 91.132.139.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B10 /* 91.132.139.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B18 /* 91.132.139.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B1C /* 91.132.139.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5B848B1E /* 91.132.139.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5D71CA01 /* 93.113.202.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5D71CA02 /* 93.113.202.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5D71CA04 /* 93.113.202.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5D71CA08 /* 93.113.202.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895C01 /* 94.137.92.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895C02 /* 94.137.92.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895C04 /* 94.137.92.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895C08 /* 94.137.92.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895E01 /* 94.137.94.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895E02 /* 94.137.94.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895E04 /* 94.137.94.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5E895E08 /* 94.137.94.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5EBEC318 /* 94.190.195.24/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5EBEC3E8 /* 94.190.195.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5F991F73 /* 95.153.31.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5F991F74 /* 95.153.31.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5F991F78 /* 95.153.31.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5F991F7C /* 95.153.31.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5F991F7E /* 95.153.31.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD82 /* 95.173.205.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD84 /* 95.173.205.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD88 /* 95.173.205.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD90 /* 95.173.205.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD98 /* 95.173.205.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADCD9C /* 95.173.205.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD903 /* 95.173.217.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD904 /* 95.173.217.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD908 /* 95.173.217.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD910 /* 95.173.217.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD918 /* 95.173.217.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD91C /* 95.173.217.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD91E /* 95.173.217.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD920 /* 95.173.217.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADD930 /* 95.173.217.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD22 /* 95.173.221.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD24 /* 95.173.221.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD28 /* 95.173.221.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD30 /* 95.173.221.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD38 /* 95.173.221.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD42 /* 95.173.221.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD44 /* 95.173.221.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD48 /* 95.173.221.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD50 /* 95.173.221.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD58 /* 95.173.221.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD5D /* 95.173.221.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD5E /* 95.173.221.94/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD60 /* 95.173.221.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD70 /* 95.173.221.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD74 /* 95.173.221.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x5FADDD76 /* 95.173.221.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626C701 /* 102.38.199.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626C702 /* 102.38.199.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626C704 /* 102.38.199.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626C708 /* 102.38.199.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626CC01 /* 102.38.204.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626CC02 /* 102.38.204.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626CC04 /* 102.38.204.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6626CC08 /* 102.38.204.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x66DA6701 /* 102.218.103.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x66DA6702 /* 102.218.103.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x66DA6704 /* 102.218.103.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x66DA6708 /* 102.218.103.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x66DA670C /* 102.218.103.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E00A /* 103.69.224.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E00C /* 103.69.224.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E010 /* 103.69.224.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E020 /* 103.69.224.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E030 /* 103.69.224.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E038 /* 103.69.224.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E03C /* 103.69.224.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E03E /* 103.69.224.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E040 /* 103.69.224.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E080 /* 103.69.224.128/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6745E0A0 /* 103.69.224.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B13 /* 103.75.11.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B14 /* 103.75.11.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B18 /* 103.75.11.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B1A /* 103.75.11.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B22 /* 103.75.11.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B24 /* 103.75.11.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B26 /* 103.75.11.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B83 /* 103.75.11.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B84 /* 103.75.11.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B88 /* 103.75.11.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B8C /* 103.75.11.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x674B0B8E /* 103.75.11.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE513 /* 103.108.229.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE514 /* 103.108.229.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE518 /* 103.108.229.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE51A /* 103.108.229.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE5F2 /* 103.108.229.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE5F4 /* 103.108.229.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE5F8 /* 103.108.229.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE5FC /* 103.108.229.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE5FE /* 103.108.229.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE713 /* 103.108.231.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE714 /* 103.108.231.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE718 /* 103.108.231.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE71A /* 103.108.231.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7A3 /* 103.108.231.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7A4 /* 103.108.231.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7A8 /* 103.108.231.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7AC /* 103.108.231.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7AE /* 103.108.231.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7B2 /* 103.108.231.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7B4 /* 103.108.231.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x676CE7B6 /* 103.108.231.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x677DEB19 /* 103.125.235.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x677DEB1A /* 103.125.235.26/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x677DEB1C /* 103.125.235.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x677DEB20 /* 103.125.235.32/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x679BE8DC /* 103.155.232.220/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x679BE8E0 /* 103.155.232.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x679BE8E8 /* 103.155.232.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x679BE8EA /* 103.155.232.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D61463 /* 103.214.20.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D61464 /* 103.214.20.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D61468 /* 103.214.20.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D6146A /* 103.214.20.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614D3 /* 103.214.20.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614D4 /* 103.214.20.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614D8 /* 103.214.20.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614DC /* 103.214.20.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614DE /* 103.214.20.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614FA /* 103.214.20.250/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614FC /* 103.214.20.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D614FE /* 103.214.20.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC5A /* 103.216.220.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC5C /* 103.216.220.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC5E /* 103.216.220.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC63 /* 103.216.220.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC64 /* 103.216.220.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC68 /* 103.216.220.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC6C /* 103.216.220.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC6E /* 103.216.220.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC72 /* 103.216.220.114/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC74 /* 103.216.220.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC78 /* 103.216.220.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC7C /* 103.216.220.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x67D8DC7E /* 103.216.220.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD402 /* 104.234.212.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD404 /* 104.234.212.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD408 /* 104.234.212.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD410 /* 104.234.212.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD418 /* 104.234.212.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD41B /* 104.234.212.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD41C /* 104.234.212.28/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD420 /* 104.234.212.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD440 /* 104.234.212.64/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD460 /* 104.234.212.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD470 /* 104.234.212.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD478 /* 104.234.212.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD47C /* 104.234.212.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD47E /* 104.234.212.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD482 /* 104.234.212.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD484 /* 104.234.212.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD488 /* 104.234.212.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68EAD48C /* 104.234.212.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F63 /* 104.254.95.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F64 /* 104.254.95.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F68 /* 104.254.95.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F70 /* 104.254.95.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F78 /* 104.254.95.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F7C /* 104.254.95.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x68FE5F7E /* 104.254.95.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B103 /* 107.181.177.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B104 /* 107.181.177.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B108 /* 107.181.177.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B10A /* 107.181.177.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B10C /* 107.181.177.12/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x6BB5B110 /* 107.181.177.16/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x745A4AB3 /* 116.90.74.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x745A4AB4 /* 116.90.74.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x745A4AB8 /* 116.90.74.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x745A4ABA /* 116.90.74.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D843 /* 130.195.216.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D844 /* 130.195.216.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D848 /* 130.195.216.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D850 /* 130.195.216.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D858 /* 130.195.216.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D85C /* 130.195.216.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D85E /* 130.195.216.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D903 /* 130.195.217.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D904 /* 130.195.217.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D908 /* 130.195.217.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3D910 /* 130.195.217.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3DDA3 /* 130.195.221.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3DDA4 /* 130.195.221.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3DDA8 /* 130.195.221.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3DDAC /* 130.195.221.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3DDAE /* 130.195.221.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F003 /* 130.195.240.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F004 /* 130.195.240.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F008 /* 130.195.240.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F010 /* 130.195.240.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F018 /* 130.195.240.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F01C /* 130.195.240.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F01E /* 130.195.240.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F103 /* 130.195.241.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F104 /* 130.195.241.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F108 /* 130.195.241.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F110 /* 130.195.241.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F118 /* 130.195.241.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F11C /* 130.195.241.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F11E /* 130.195.241.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F203 /* 130.195.242.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F204 /* 130.195.242.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F208 /* 130.195.242.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F210 /* 130.195.242.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F218 /* 130.195.242.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F21C /* 130.195.242.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F21E /* 130.195.242.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F303 /* 130.195.243.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F304 /* 130.195.243.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F308 /* 130.195.243.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F310 /* 130.195.243.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F318 /* 130.195.243.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F31C /* 130.195.243.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F31E /* 130.195.243.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F504 /* 130.195.245.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F508 /* 130.195.245.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F510 /* 130.195.245.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F520 /* 130.195.245.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F530 /* 130.195.245.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3F538 /* 130.195.245.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA43 /* 130.195.250.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA44 /* 130.195.250.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA48 /* 130.195.250.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA50 /* 130.195.250.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA58 /* 130.195.250.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA5C /* 130.195.250.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA5E /* 130.195.250.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA63 /* 130.195.250.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA64 /* 130.195.250.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA68 /* 130.195.250.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA70 /* 130.195.250.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA78 /* 130.195.250.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA7C /* 130.195.250.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x82C3FA7E /* 130.195.250.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC706B6 /* 138.199.6.182/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC706B8 /* 138.199.6.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC70782 /* 138.199.7.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC70784 /* 138.199.7.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC70788 /* 138.199.7.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC7078C /* 138.199.7.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721B1 /* 138.199.33.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721B2 /* 138.199.33.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721B4 /* 138.199.33.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721E2 /* 138.199.33.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721E4 /* 138.199.33.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721E8 /* 138.199.33.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721ED /* 138.199.33.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721EE /* 138.199.33.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721F0 /* 138.199.33.240/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721F4 /* 138.199.33.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721F7 /* 138.199.33.247/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC721F8 /* 138.199.33.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722C2 /* 138.199.34.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722C4 /* 138.199.34.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722C8 /* 138.199.34.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722D0 /* 138.199.34.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722D8 /* 138.199.34.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC722DC /* 138.199.34.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC72362 /* 138.199.35.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC72364 /* 138.199.35.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC72368 /* 138.199.35.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC7236C /* 138.199.35.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC7236E /* 138.199.35.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734C6 /* 138.199.52.198/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734C8 /* 138.199.52.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734CA /* 138.199.52.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734F1 /* 138.199.52.241/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734F2 /* 138.199.52.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734F4 /* 138.199.52.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC734F8 /* 138.199.52.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC735E2 /* 138.199.53.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC735E4 /* 138.199.53.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC735E8 /* 138.199.53.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73722 /* 138.199.55.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73724 /* 138.199.55.36/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73728 /* 138.199.55.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73EC1 /* 138.199.62.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73EC2 /* 138.199.62.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73EC4 /* 138.199.62.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8AC73EC8 /* 138.199.62.200/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA03 /* 139.28.218.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA04 /* 139.28.218.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA08 /* 139.28.218.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA10 /* 139.28.218.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA18 /* 139.28.218.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA1C /* 139.28.218.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA1E /* 139.28.218.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA83 /* 139.28.218.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA84 /* 139.28.218.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA88 /* 139.28.218.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA90 /* 139.28.218.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA98 /* 139.28.218.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA9C /* 139.28.218.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x8B1CDA9E /* 139.28.218.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x903027E3 /* 144.48.39.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x903027E4 /* 144.48.39.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x903027E8 /* 144.48.39.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x903027EA /* 144.48.39.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92460E13 /* 146.70.14.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92460E14 /* 146.70.14.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92460E18 /* 146.70.14.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92460E1C /* 146.70.14.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92460E1E /* 146.70.14.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92461DC3 /* 146.70.29.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92461DC4 /* 146.70.29.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92461DC8 /* 146.70.29.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92461DCC /* 146.70.29.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92461DCE /* 146.70.29.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462D73 /* 146.70.45.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462D74 /* 146.70.45.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462D78 /* 146.70.45.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462D7C /* 146.70.45.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462D7E /* 146.70.45.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462DE3 /* 146.70.45.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462DE4 /* 146.70.45.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462DE8 /* 146.70.45.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462DEC /* 146.70.45.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92462DEE /* 146.70.45.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463003 /* 146.70.48.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463004 /* 146.70.48.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463008 /* 146.70.48.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246300C /* 146.70.48.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246300E /* 146.70.48.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463012 /* 146.70.48.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463014 /* 146.70.48.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463016 /* 146.70.48.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924633D3 /* 146.70.51.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924633D4 /* 146.70.51.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924633D8 /* 146.70.51.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924633DC /* 146.70.51.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924633DE /* 146.70.51.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463A83 /* 146.70.58.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463A84 /* 146.70.58.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463A88 /* 146.70.58.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463A8C /* 146.70.58.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92463A8E /* 146.70.58.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92464883 /* 146.70.72.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92464884 /* 146.70.72.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92464888 /* 146.70.72.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246488C /* 146.70.72.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246488E /* 146.70.72.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924648A3 /* 146.70.72.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924648A4 /* 146.70.72.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924648A8 /* 146.70.72.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924648AC /* 146.70.72.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924648AE /* 146.70.72.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465343 /* 146.70.83.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465344 /* 146.70.83.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465348 /* 146.70.83.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246534C /* 146.70.83.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246534E /* 146.70.83.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465673 /* 146.70.86.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465674 /* 146.70.86.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92465678 /* 146.70.86.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246567C /* 146.70.86.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246567E /* 146.70.86.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466043 /* 146.70.96.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466044 /* 146.70.96.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466048 /* 146.70.96.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246604C /* 146.70.96.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246604E /* 146.70.96.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466263 /* 146.70.98.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466264 /* 146.70.98.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466268 /* 146.70.98.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466270 /* 146.70.98.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466278 /* 146.70.98.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246627C /* 146.70.98.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246627E /* 146.70.98.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466283 /* 146.70.98.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466284 /* 146.70.98.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466288 /* 146.70.98.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466290 /* 146.70.98.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466298 /* 146.70.98.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246629C /* 146.70.98.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246629E /* 146.70.98.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662A3 /* 146.70.98.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662A4 /* 146.70.98.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662A8 /* 146.70.98.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662B0 /* 146.70.98.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662B8 /* 146.70.98.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662BC /* 146.70.98.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924662BE /* 146.70.98.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466432 /* 146.70.100.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466434 /* 146.70.100.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92466436 /* 146.70.100.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467163 /* 146.70.113.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467164 /* 146.70.113.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467168 /* 146.70.113.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246716C /* 146.70.113.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246716E /* 146.70.113.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467173 /* 146.70.113.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467174 /* 146.70.113.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467178 /* 146.70.113.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246717C /* 146.70.113.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246717E /* 146.70.113.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924673A3 /* 146.70.115.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924673A4 /* 146.70.115.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924673A8 /* 146.70.115.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924673AC /* 146.70.115.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924673AE /* 146.70.115.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467893 /* 146.70.120.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467894 /* 146.70.120.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467898 /* 146.70.120.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246789C /* 146.70.120.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246789E /* 146.70.120.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924678D3 /* 146.70.120.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924678D4 /* 146.70.120.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924678D8 /* 146.70.120.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924678DC /* 146.70.120.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x924678DE /* 146.70.120.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467FF3 /* 146.70.127.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467FF4 /* 146.70.127.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467FF8 /* 146.70.127.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467FFC /* 146.70.127.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92467FFE /* 146.70.127.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468113 /* 146.70.129.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468114 /* 146.70.129.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468118 /* 146.70.129.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246811C /* 146.70.129.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246811E /* 146.70.129.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468583 /* 146.70.133.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468584 /* 146.70.133.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468588 /* 146.70.133.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246858A /* 146.70.133.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468823 /* 146.70.136.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468824 /* 146.70.136.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468828 /* 146.70.136.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246882C /* 146.70.136.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246882E /* 146.70.136.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E13 /* 146.70.142.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E14 /* 146.70.142.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E18 /* 146.70.142.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E1A /* 146.70.142.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E53 /* 146.70.142.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E54 /* 146.70.142.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E58 /* 146.70.142.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E5C /* 146.70.142.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E5E /* 146.70.142.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E82 /* 146.70.142.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E84 /* 146.70.142.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E86 /* 146.70.142.134/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E8A /* 146.70.142.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E8C /* 146.70.142.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92468E8E /* 146.70.142.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92469373 /* 146.70.147.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92469374 /* 146.70.147.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x92469378 /* 146.70.147.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246937C /* 146.70.147.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246937E /* 146.70.147.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1A3 /* 146.70.161.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1A4 /* 146.70.161.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1A8 /* 146.70.161.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1AC /* 146.70.161.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1AE /* 146.70.161.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1B3 /* 146.70.161.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1B4 /* 146.70.161.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1B8 /* 146.70.161.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1BC /* 146.70.161.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246A1BE /* 146.70.161.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA03 /* 146.70.170.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA04 /* 146.70.170.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA08 /* 146.70.170.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA0C /* 146.70.170.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA0E /* 146.70.170.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA13 /* 146.70.170.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA14 /* 146.70.170.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA18 /* 146.70.170.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA1C /* 146.70.170.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AA1E /* 146.70.170.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE53 /* 146.70.174.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE54 /* 146.70.174.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE58 /* 146.70.174.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE5C /* 146.70.174.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE5E /* 146.70.174.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE83 /* 146.70.174.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE84 /* 146.70.174.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE88 /* 146.70.174.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE8C /* 146.70.174.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE8E /* 146.70.174.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE93 /* 146.70.174.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE94 /* 146.70.174.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE98 /* 146.70.174.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE9C /* 146.70.174.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AE9E /* 146.70.174.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEA3 /* 146.70.174.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEA4 /* 146.70.174.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEA8 /* 146.70.174.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEAC /* 146.70.174.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEAE /* 146.70.174.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEB3 /* 146.70.174.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEB4 /* 146.70.174.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEB8 /* 146.70.174.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEBC /* 146.70.174.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEBE /* 146.70.174.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEC3 /* 146.70.174.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEC4 /* 146.70.174.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEC8 /* 146.70.174.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AECC /* 146.70.174.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AECE /* 146.70.174.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AED3 /* 146.70.174.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AED4 /* 146.70.174.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AED8 /* 146.70.174.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEDC /* 146.70.174.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEDE /* 146.70.174.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEE3 /* 146.70.174.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEE4 /* 146.70.174.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEE8 /* 146.70.174.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEEC /* 146.70.174.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEEE /* 146.70.174.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEF3 /* 146.70.174.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEF4 /* 146.70.174.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEF8 /* 146.70.174.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEFC /* 146.70.174.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246AEFE /* 146.70.174.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B313 /* 146.70.179.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B314 /* 146.70.179.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B318 /* 146.70.179.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B31C /* 146.70.179.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B31E /* 146.70.179.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B323 /* 146.70.179.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B324 /* 146.70.179.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B328 /* 146.70.179.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B32C /* 146.70.179.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B32E /* 146.70.179.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B333 /* 146.70.179.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B334 /* 146.70.179.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B338 /* 146.70.179.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B33C /* 146.70.179.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B33E /* 146.70.179.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B363 /* 146.70.179.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B364 /* 146.70.179.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B368 /* 146.70.179.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B36C /* 146.70.179.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B36E /* 146.70.179.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B523 /* 146.70.181.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B524 /* 146.70.181.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B528 /* 146.70.181.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B52C /* 146.70.181.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B52E /* 146.70.181.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B603 /* 146.70.182.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B604 /* 146.70.182.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B608 /* 146.70.182.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B60C /* 146.70.182.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B60E /* 146.70.182.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B613 /* 146.70.182.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B614 /* 146.70.182.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B618 /* 146.70.182.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B61C /* 146.70.182.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B61E /* 146.70.182.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B623 /* 146.70.182.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B624 /* 146.70.182.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B628 /* 146.70.182.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B62C /* 146.70.182.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B62E /* 146.70.182.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B713 /* 146.70.183.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B714 /* 146.70.183.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B718 /* 146.70.183.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B71C /* 146.70.183.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B71E /* 146.70.183.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B783 /* 146.70.183.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B784 /* 146.70.183.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B788 /* 146.70.183.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B78C /* 146.70.183.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B78E /* 146.70.183.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B793 /* 146.70.183.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B794 /* 146.70.183.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B798 /* 146.70.183.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B79C /* 146.70.183.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B79E /* 146.70.183.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B7A3 /* 146.70.183.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B7A4 /* 146.70.183.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B7A8 /* 146.70.183.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B7AC /* 146.70.183.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246B7AE /* 146.70.183.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C203 /* 146.70.194.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C204 /* 146.70.194.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C208 /* 146.70.194.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C20C /* 146.70.194.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C20E /* 146.70.194.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C213 /* 146.70.194.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C214 /* 146.70.194.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C218 /* 146.70.194.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C21C /* 146.70.194.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C21E /* 146.70.194.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C223 /* 146.70.194.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C224 /* 146.70.194.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C228 /* 146.70.194.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C22C /* 146.70.194.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C22E /* 146.70.194.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C233 /* 146.70.194.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C234 /* 146.70.194.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C238 /* 146.70.194.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C23C /* 146.70.194.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C23E /* 146.70.194.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C243 /* 146.70.194.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C244 /* 146.70.194.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C248 /* 146.70.194.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C24C /* 146.70.194.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C24E /* 146.70.194.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C253 /* 146.70.194.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C254 /* 146.70.194.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C258 /* 146.70.194.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C25C /* 146.70.194.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C25E /* 146.70.194.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C263 /* 146.70.194.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C264 /* 146.70.194.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C268 /* 146.70.194.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C26C /* 146.70.194.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C26E /* 146.70.194.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C273 /* 146.70.194.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C274 /* 146.70.194.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C278 /* 146.70.194.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C27C /* 146.70.194.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C27E /* 146.70.194.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C323 /* 146.70.195.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C324 /* 146.70.195.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C328 /* 146.70.195.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C32C /* 146.70.195.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C32E /* 146.70.195.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C353 /* 146.70.195.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C354 /* 146.70.195.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C358 /* 146.70.195.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C35C /* 146.70.195.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C35E /* 146.70.195.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C363 /* 146.70.195.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C364 /* 146.70.195.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C368 /* 146.70.195.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C36C /* 146.70.195.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C36E /* 146.70.195.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C603 /* 146.70.198.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C604 /* 146.70.198.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C608 /* 146.70.198.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C60C /* 146.70.198.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C60E /* 146.70.198.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C613 /* 146.70.198.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C614 /* 146.70.198.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C618 /* 146.70.198.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C61C /* 146.70.198.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C61E /* 146.70.198.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C623 /* 146.70.198.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C624 /* 146.70.198.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C628 /* 146.70.198.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C62C /* 146.70.198.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C62E /* 146.70.198.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C633 /* 146.70.198.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C634 /* 146.70.198.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C638 /* 146.70.198.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C63C /* 146.70.198.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246C63E /* 146.70.198.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA13 /* 146.70.202.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA14 /* 146.70.202.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA18 /* 146.70.202.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA1C /* 146.70.202.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA1E /* 146.70.202.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA33 /* 146.70.202.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA34 /* 146.70.202.52/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA38 /* 146.70.202.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA3C /* 146.70.202.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA3E /* 146.70.202.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA43 /* 146.70.202.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA44 /* 146.70.202.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA48 /* 146.70.202.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA4C /* 146.70.202.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA4E /* 146.70.202.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA63 /* 146.70.202.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA64 /* 146.70.202.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA68 /* 146.70.202.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA6C /* 146.70.202.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA6E /* 146.70.202.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA83 /* 146.70.202.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA84 /* 146.70.202.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA88 /* 146.70.202.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA8C /* 146.70.202.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA8E /* 146.70.202.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA93 /* 146.70.202.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA94 /* 146.70.202.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA98 /* 146.70.202.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA9C /* 146.70.202.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CA9E /* 146.70.202.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAA3 /* 146.70.202.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAA4 /* 146.70.202.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAA8 /* 146.70.202.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAAC /* 146.70.202.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAAE /* 146.70.202.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAB3 /* 146.70.202.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAB4 /* 146.70.202.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CAB8 /* 146.70.202.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CABC /* 146.70.202.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CABE /* 146.70.202.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCA3 /* 146.70.204.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCA4 /* 146.70.204.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCA8 /* 146.70.204.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCAC /* 146.70.204.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCAE /* 146.70.204.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCB3 /* 146.70.204.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCB4 /* 146.70.204.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCB8 /* 146.70.204.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCBC /* 146.70.204.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246CCBE /* 146.70.204.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D943 /* 146.70.217.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D944 /* 146.70.217.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D948 /* 146.70.217.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D950 /* 146.70.217.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D958 /* 146.70.217.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D95C /* 146.70.217.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D95E /* 146.70.217.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D963 /* 146.70.217.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D964 /* 146.70.217.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D968 /* 146.70.217.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D970 /* 146.70.217.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D978 /* 146.70.217.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D97C /* 146.70.217.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246D97E /* 146.70.217.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD83 /* 146.70.221.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD84 /* 146.70.221.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD88 /* 146.70.221.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD90 /* 146.70.221.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD98 /* 146.70.221.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD9C /* 146.70.221.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246DD9E /* 146.70.221.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2C3 /* 146.70.226.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2C4 /* 146.70.226.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2C8 /* 146.70.226.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2D0 /* 146.70.226.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2D8 /* 146.70.226.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2DC /* 146.70.226.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2DE /* 146.70.226.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2E3 /* 146.70.226.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2E4 /* 146.70.226.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2E8 /* 146.70.226.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2F0 /* 146.70.226.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2F8 /* 146.70.226.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2FC /* 146.70.226.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E2FE /* 146.70.226.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E48A /* 146.70.228.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E48C /* 146.70.228.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E48E /* 146.70.228.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4A2 /* 146.70.228.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4A4 /* 146.70.228.164/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4A6 /* 146.70.228.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4AA /* 146.70.228.170/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4AC /* 146.70.228.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E4AE /* 146.70.228.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E503 /* 146.70.229.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E504 /* 146.70.229.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E508 /* 146.70.229.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E510 /* 146.70.229.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E518 /* 146.70.229.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E51C /* 146.70.229.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E51E /* 146.70.229.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E703 /* 146.70.231.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E704 /* 146.70.231.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E708 /* 146.70.231.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246E710 /* 146.70.231.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED83 /* 146.70.237.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED84 /* 146.70.237.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED88 /* 146.70.237.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED90 /* 146.70.237.144/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED94 /* 146.70.237.148/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED96 /* 146.70.237.150/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED98 /* 146.70.237.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED9B /* 146.70.237.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED9C /* 146.70.237.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246ED9E /* 146.70.237.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F583 /* 146.70.245.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F584 /* 146.70.245.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F588 /* 146.70.245.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F590 /* 146.70.245.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F598 /* 146.70.245.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F59C /* 146.70.245.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246F59E /* 146.70.245.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC02 /* 146.70.252.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC04 /* 146.70.252.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC08 /* 146.70.252.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC10 /* 146.70.252.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC18 /* 146.70.252.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9246FC1C /* 146.70.252.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165002 /* 149.22.80.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165004 /* 149.22.80.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165008 /* 149.22.80.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165010 /* 149.22.80.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165018 /* 149.22.80.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516501D /* 149.22.80.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516501E /* 149.22.80.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165020 /* 149.22.80.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165030 /* 149.22.80.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165034 /* 149.22.80.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165036 /* 149.22.80.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165038 /* 149.22.80.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165040 /* 149.22.80.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165050 /* 149.22.80.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165053 /* 149.22.80.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165054 /* 149.22.80.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165058 /* 149.22.80.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165060 /* 149.22.80.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165068 /* 149.22.80.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516506C /* 149.22.80.108/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165102 /* 149.22.81.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165104 /* 149.22.81.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165108 /* 149.22.81.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165110 /* 149.22.81.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165118 /* 149.22.81.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516511D /* 149.22.81.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516511E /* 149.22.81.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165120 /* 149.22.81.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165130 /* 149.22.81.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165134 /* 149.22.81.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165136 /* 149.22.81.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165202 /* 149.22.82.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165204 /* 149.22.82.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165208 /* 149.22.82.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165210 /* 149.22.82.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165218 /* 149.22.82.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516521D /* 149.22.82.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516521E /* 149.22.82.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165220 /* 149.22.82.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165230 /* 149.22.82.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165234 /* 149.22.82.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165236 /* 149.22.82.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165238 /* 149.22.82.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165240 /* 149.22.82.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165250 /* 149.22.82.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165401 /* 149.22.84.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165402 /* 149.22.84.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165404 /* 149.22.84.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165408 /* 149.22.84.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165410 /* 149.22.84.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165420 /* 149.22.84.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165440 /* 149.22.84.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165450 /* 149.22.84.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165458 /* 149.22.84.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516545A /* 149.22.84.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9516545C /* 149.22.84.92/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165460 /* 149.22.84.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165470 /* 149.22.84.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165478 /* 149.22.84.120/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655C2 /* 149.22.85.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655C4 /* 149.22.85.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655C8 /* 149.22.85.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655D0 /* 149.22.85.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655D8 /* 149.22.85.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x951655DC /* 149.22.85.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165801 /* 149.22.88.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165802 /* 149.22.88.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165804 /* 149.22.88.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165808 /* 149.22.88.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165810 /* 149.22.88.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165820 /* 149.22.88.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165830 /* 149.22.88.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165838 /* 149.22.88.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165941 /* 149.22.89.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165942 /* 149.22.89.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165944 /* 149.22.89.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165948 /* 149.22.89.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165950 /* 149.22.89.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165960 /* 149.22.89.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165968 /* 149.22.89.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E02 /* 149.22.94.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E04 /* 149.22.94.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E08 /* 149.22.94.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E10 /* 149.22.94.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E18 /* 149.22.94.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E1D /* 149.22.94.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E1E /* 149.22.94.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E20 /* 149.22.94.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E30 /* 149.22.94.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E34 /* 149.22.94.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E36 /* 149.22.94.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E38 /* 149.22.94.56/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E40 /* 149.22.94.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E50 /* 149.22.94.80/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E54 /* 149.22.94.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E57 /* 149.22.94.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E58 /* 149.22.94.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E60 /* 149.22.94.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E70 /* 149.22.94.112/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E81 /* 149.22.94.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E82 /* 149.22.94.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E84 /* 149.22.94.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E88 /* 149.22.94.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165E90 /* 149.22.94.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165EA0 /* 149.22.94.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165EB0 /* 149.22.94.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165EB4 /* 149.22.94.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165FC2 /* 149.22.95.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165FC4 /* 149.22.95.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165FC8 /* 149.22.95.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165FD0 /* 149.22.95.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95165FD8 /* 149.22.95.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F641 /* 149.34.246.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F642 /* 149.34.246.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F644 /* 149.34.246.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F648 /* 149.34.246.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F650 /* 149.34.246.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522F658 /* 149.34.246.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522FDF1 /* 149.34.253.241/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522FDF2 /* 149.34.253.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522FDF4 /* 149.34.253.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522FDF8 /* 149.34.253.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9522FDFA /* 149.34.253.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95243082 /* 149.36.48.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95243084 /* 149.36.48.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95243088 /* 149.36.48.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9524308E /* 149.36.48.142/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95243090 /* 149.36.48.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283042 /* 149.40.48.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283044 /* 149.40.48.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283048 /* 149.40.48.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283050 /* 149.40.48.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283060 /* 149.40.48.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283068 /* 149.40.48.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x952830E2 /* 149.40.48.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x952830E4 /* 149.40.48.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x952830E8 /* 149.40.48.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x952830F0 /* 149.40.48.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x952830F8 /* 149.40.48.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283F82 /* 149.40.63.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283F84 /* 149.40.63.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283F88 /* 149.40.63.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283F90 /* 149.40.63.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95283F98 /* 149.40.63.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D181 /* 149.50.209.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D182 /* 149.50.209.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D184 /* 149.50.209.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D188 /* 149.50.209.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D190 /* 149.50.209.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D198 /* 149.50.209.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1A1 /* 149.50.209.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1A2 /* 149.50.209.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1A4 /* 149.50.209.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1A8 /* 149.50.209.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1B0 /* 149.50.209.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D1B8 /* 149.50.209.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8C2 /* 149.50.216.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8C4 /* 149.50.216.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8C8 /* 149.50.216.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8CC /* 149.50.216.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8CE /* 149.50.216.206/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8D0 /* 149.50.216.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8D8 /* 149.50.216.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8E2 /* 149.50.216.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8E4 /* 149.50.216.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8E8 /* 149.50.216.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8EC /* 149.50.216.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8EF /* 149.50.216.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8F0 /* 149.50.216.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8F8 /* 149.50.216.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D8FA /* 149.50.216.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D9A2 /* 149.50.217.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D9A4 /* 149.50.217.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D9A8 /* 149.50.217.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D9B0 /* 149.50.217.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9532D9B8 /* 149.50.217.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581182 /* 149.88.17.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581184 /* 149.88.17.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581188 /* 149.88.17.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558118C /* 149.88.17.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581191 /* 149.88.17.145/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581192 /* 149.88.17.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581194 /* 149.88.17.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581198 /* 149.88.17.152/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955811A0 /* 149.88.17.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955811B0 /* 149.88.17.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812C2 /* 149.88.18.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812C4 /* 149.88.18.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812C8 /* 149.88.18.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812D0 /* 149.88.18.208/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812E0 /* 149.88.18.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955812E8 /* 149.88.18.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813E2 /* 149.88.19.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813E4 /* 149.88.19.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813E8 /* 149.88.19.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813EC /* 149.88.19.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813EF /* 149.88.19.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813F0 /* 149.88.19.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813F8 /* 149.88.19.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955813FA /* 149.88.19.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581482 /* 149.88.20.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581484 /* 149.88.20.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581488 /* 149.88.20.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558148C /* 149.88.20.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581801 /* 149.88.24.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581802 /* 149.88.24.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581804 /* 149.88.24.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581808 /* 149.88.24.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558180A /* 149.88.24.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581882 /* 149.88.24.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581884 /* 149.88.24.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581888 /* 149.88.24.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581890 /* 149.88.24.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818A0 /* 149.88.24.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818B0 /* 149.88.24.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818B5 /* 149.88.24.181/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818B6 /* 149.88.24.182/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818B8 /* 149.88.24.184/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818C0 /* 149.88.24.192/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818E0 /* 149.88.24.224/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818E4 /* 149.88.24.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955818E6 /* 149.88.24.230/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581986 /* 149.88.25.134/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581988 /* 149.88.25.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558198A /* 149.88.25.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B81 /* 149.88.27.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B82 /* 149.88.27.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B84 /* 149.88.27.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B87 /* 149.88.27.135/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B88 /* 149.88.27.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581B90 /* 149.88.27.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BA0 /* 149.88.27.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BB0 /* 149.88.27.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BB4 /* 149.88.27.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BB6 /* 149.88.27.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BC2 /* 149.88.27.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BC4 /* 149.88.27.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BC8 /* 149.88.27.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BCC /* 149.88.27.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BCF /* 149.88.27.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BD0 /* 149.88.27.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BD8 /* 149.88.27.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BDA /* 149.88.27.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BDC /* 149.88.27.220/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BE0 /* 149.88.27.224/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BED /* 149.88.27.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BEE /* 149.88.27.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BF0 /* 149.88.27.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BF8 /* 149.88.27.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95581BFA /* 149.88.27.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586162 /* 149.88.97.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586164 /* 149.88.97.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586168 /* 149.88.97.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558616C /* 149.88.97.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558616F /* 149.88.97.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586170 /* 149.88.97.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586178 /* 149.88.97.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864C1 /* 149.88.100.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864C2 /* 149.88.100.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864C4 /* 149.88.100.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864C8 /* 149.88.100.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864D0 /* 149.88.100.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955864D8 /* 149.88.100.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586622 /* 149.88.102.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586624 /* 149.88.102.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586628 /* 149.88.102.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558662C /* 149.88.102.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558662F /* 149.88.102.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586630 /* 149.88.102.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586638 /* 149.88.102.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586662 /* 149.88.102.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586664 /* 149.88.102.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586668 /* 149.88.102.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558666C /* 149.88.102.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9558666F /* 149.88.102.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586670 /* 149.88.102.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586678 /* 149.88.102.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586941 /* 149.88.105.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586942 /* 149.88.105.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586944 /* 149.88.105.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586948 /* 149.88.105.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586950 /* 149.88.105.80/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586960 /* 149.88.105.96/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586970 /* 149.88.105.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586978 /* 149.88.105.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869E1 /* 149.88.105.225/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869E2 /* 149.88.105.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869E4 /* 149.88.105.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869E8 /* 149.88.105.232/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869F0 /* 149.88.105.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x955869F8 /* 149.88.105.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586E22 /* 149.88.110.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586E24 /* 149.88.110.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586E28 /* 149.88.110.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586E30 /* 149.88.110.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x95586E38 /* 149.88.110.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0A3 /* 149.102.224.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0A4 /* 149.102.224.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0A8 /* 149.102.224.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0AC /* 149.102.224.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0AE /* 149.102.224.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0B0 /* 149.102.224.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E0B8 /* 149.102.224.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2C2 /* 149.102.226.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2C4 /* 149.102.226.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2C8 /* 149.102.226.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2E2 /* 149.102.226.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2E4 /* 149.102.226.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2E8 /* 149.102.226.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2F0 /* 149.102.226.240/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566E2F8 /* 149.102.226.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EB22 /* 149.102.235.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EB24 /* 149.102.235.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EB28 /* 149.102.235.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EB30 /* 149.102.235.48/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EB32 /* 149.102.235.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECC1 /* 149.102.236.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECC2 /* 149.102.236.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECC4 /* 149.102.236.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECC8 /* 149.102.236.200/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECD0 /* 149.102.236.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECD8 /* 149.102.236.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ECDC /* 149.102.236.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ED82 /* 149.102.237.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ED84 /* 149.102.237.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ED88 /* 149.102.237.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566ED8C /* 149.102.237.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EE01 /* 149.102.238.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EE02 /* 149.102.238.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EE04 /* 149.102.238.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566EE08 /* 149.102.238.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F412 /* 149.102.244.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F414 /* 149.102.244.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F418 /* 149.102.244.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F441 /* 149.102.244.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F442 /* 149.102.244.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F477 /* 149.102.244.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F478 /* 149.102.244.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F582 /* 149.102.245.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F584 /* 149.102.245.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F588 /* 149.102.245.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F590 /* 149.102.245.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F598 /* 149.102.245.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F59D /* 149.102.245.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F59E /* 149.102.245.158/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F5A0 /* 149.102.245.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F5B0 /* 149.102.245.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F5B4 /* 149.102.245.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566F5B6 /* 149.102.245.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FB62 /* 149.102.251.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FB64 /* 149.102.251.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FB68 /* 149.102.251.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FB6C /* 149.102.251.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE42 /* 149.102.254.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE44 /* 149.102.254.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE48 /* 149.102.254.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE4C /* 149.102.254.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE4F /* 149.102.254.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE50 /* 149.102.254.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9566FE58 /* 149.102.254.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1052 /* 154.47.16.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1054 /* 154.47.16.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1058 /* 154.47.16.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F13C2 /* 154.47.19.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F13C4 /* 154.47.19.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F13C8 /* 154.47.19.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F13CE /* 154.47.19.206/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F13D0 /* 154.47.19.208/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1642 /* 154.47.22.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1644 /* 154.47.22.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1648 /* 154.47.22.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F164E /* 154.47.22.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1650 /* 154.47.22.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1658 /* 154.47.22.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F165B /* 154.47.22.91/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1661 /* 154.47.22.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1662 /* 154.47.22.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1664 /* 154.47.22.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1668 /* 154.47.22.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F18C2 /* 154.47.24.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F18C4 /* 154.47.24.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F18C8 /* 154.47.24.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1911 /* 154.47.25.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1912 /* 154.47.25.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1982 /* 154.47.25.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1984 /* 154.47.25.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1988 /* 154.47.25.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1992 /* 154.47.25.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1994 /* 154.47.25.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F1998 /* 154.47.25.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19A2 /* 154.47.25.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19A4 /* 154.47.25.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19A8 /* 154.47.25.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19C2 /* 154.47.25.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19C4 /* 154.47.25.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19C8 /* 154.47.25.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9A2F19CC /* 154.47.25.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C922D82 /* 156.146.45.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C922D84 /* 156.146.45.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C922D88 /* 156.146.45.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923201 /* 156.146.50.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923202 /* 156.146.50.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923204 /* 156.146.50.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923206 /* 156.146.50.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923208 /* 156.146.50.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923342 /* 156.146.51.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923344 /* 156.146.51.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923348 /* 156.146.51.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C92334C /* 156.146.51.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C92334F /* 156.146.51.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923350 /* 156.146.51.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923358 /* 156.146.51.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923662 /* 156.146.54.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923664 /* 156.146.54.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C923668 /* 156.146.54.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C92366C /* 156.146.54.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237E2 /* 156.146.55.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237E4 /* 156.146.55.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237E8 /* 156.146.55.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237EE /* 156.146.55.238/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237F0 /* 156.146.55.240/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0x9C9237F2 /* 156.146.55.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB03 /* 163.5.171.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB04 /* 163.5.171.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB08 /* 163.5.171.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB10 /* 163.5.171.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB18 /* 163.5.171.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB1E /* 163.5.171.30/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB20 /* 163.5.171.32/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB30 /* 163.5.171.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB39 /* 163.5.171.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB3A /* 163.5.171.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB3C /* 163.5.171.60/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB40 /* 163.5.171.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB50 /* 163.5.171.80/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB54 /* 163.5.171.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB58 /* 163.5.171.88/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB60 /* 163.5.171.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB68 /* 163.5.171.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB6C /* 163.5.171.108/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB6F /* 163.5.171.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB70 /* 163.5.171.112/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB80 /* 163.5.171.128/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA305AB88 /* 163.5.171.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA5E7B212 /* 165.231.178.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA5E7B214 /* 165.231.178.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA5E7B218 /* 165.231.178.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C561 /* 169.150.197.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C562 /* 169.150.197.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C564 /* 169.150.197.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C568 /* 169.150.197.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C570 /* 169.150.197.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C578 /* 169.150.197.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996C57A /* 169.150.197.122/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC22 /* 169.150.204.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC24 /* 169.150.204.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC28 /* 169.150.204.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC2D /* 169.150.204.45/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC2E /* 169.150.204.46/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC30 /* 169.150.204.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC34 /* 169.150.204.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC37 /* 169.150.204.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC38 /* 169.150.204.56/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996CC3A /* 169.150.204.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E2A2 /* 169.150.226.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E2A4 /* 169.150.226.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E2A8 /* 169.150.226.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E701 /* 169.150.231.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E702 /* 169.150.231.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E704 /* 169.150.231.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7A1 /* 169.150.231.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7A2 /* 169.150.231.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7A4 /* 169.150.231.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7A8 /* 169.150.231.168/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7B0 /* 169.150.231.176/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996E7B4 /* 169.150.231.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FE21 /* 169.150.254.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FE22 /* 169.150.254.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FE24 /* 169.150.254.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FE28 /* 169.150.254.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FE2A /* 169.150.254.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEA1 /* 169.150.254.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEA2 /* 169.150.254.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEA4 /* 169.150.254.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEA8 /* 169.150.254.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEAC /* 169.150.254.172/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEAE /* 169.150.254.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEB0 /* 169.150.254.176/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xA996FEB2 /* 169.150.254.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAC625293 /* 172.98.82.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAC625294 /* 172.98.82.148/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAC625298 /* 172.98.82.152/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAC62529A /* 172.98.82.154/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAF6E6C01 /* 175.110.108.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAF6E6C02 /* 175.110.108.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAF6E6C04 /* 175.110.108.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAF6E6C08 /* 175.110.108.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xAF6E6C0C /* 175.110.108.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2E3 /* 176.96.226.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2E4 /* 176.96.226.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2E8 /* 176.96.226.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2EC /* 176.96.226.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2EE /* 176.96.226.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2F3 /* 176.96.226.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2F4 /* 176.96.226.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2F8 /* 176.96.226.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2FC /* 176.96.226.252/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB060E2FE /* 176.96.226.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB0714A53 /* 176.113.74.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB0714A54 /* 176.113.74.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB0714A58 /* 176.113.74.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB0714A5C /* 176.113.74.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB0714A5E /* 176.113.74.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2DAA7D3 /* 178.218.167.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2DAA7D4 /* 178.218.167.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2DAA7D8 /* 178.218.167.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2DAA7DA /* 178.218.167.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D206 /* 178.249.210.6/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D208 /* 178.249.210.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D20A /* 178.249.210.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D210 /* 178.249.210.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D218 /* 178.249.210.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D641 /* 178.249.214.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D642 /* 178.249.214.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D644 /* 178.249.214.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D648 /* 178.249.214.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D651 /* 178.249.214.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D652 /* 178.249.214.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D654 /* 178.249.214.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB2F9D658 /* 178.249.214.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E583 /* 180.149.229.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E584 /* 180.149.229.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E588 /* 180.149.229.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E58A /* 180.149.229.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E592 /* 180.149.229.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E594 /* 180.149.229.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB495E596 /* 180.149.229.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB93386C3 /* 185.51.134.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB93386C4 /* 185.51.134.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB93386C8 /* 185.51.134.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB93386CA /* 185.51.134.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB94C0B12 /* 185.76.11.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB94C0B14 /* 185.76.11.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB94C0B17 /* 185.76.11.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB94C0B18 /* 185.76.11.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB94C0B1A /* 185.76.11.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CD3 /* 185.90.60.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CD4 /* 185.90.60.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CD8 /* 185.90.60.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CDC /* 185.90.60.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CDE /* 185.90.60.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CE2 /* 185.90.60.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CE4 /* 185.90.60.228/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95A3CE6 /* 185.90.60.230/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95D03C6 /* 185.93.3.198/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB95D03C8 /* 185.93.3.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C6F /* 185.107.44.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C70 /* 185.107.44.112/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C72 /* 185.107.44.114/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C90 /* 185.107.44.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C93 /* 185.107.44.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C95 /* 185.107.44.149/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2C96 /* 185.107.44.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CA4 /* 185.107.44.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CCA /* 185.107.44.202/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CCC /* 185.107.44.204/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CD0 /* 185.107.44.208/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CD2 /* 185.107.44.210/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96B2CDA /* 185.107.44.218/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96F6D02 /* 185.111.109.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96F6D04 /* 185.111.109.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96F6D08 /* 185.111.109.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96F6D10 /* 185.111.109.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB96F6D18 /* 185.111.109.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99842A8 /* 185.152.66.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99842AC /* 185.152.66.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99C2E22 /* 185.156.46.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99C2E24 /* 185.156.46.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99C2E28 /* 185.156.46.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99C2E2C /* 185.156.46.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C03 /* 185.159.156.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C04 /* 185.159.156.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C08 /* 185.159.156.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C0A /* 185.159.156.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C11 /* 185.159.156.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C12 /* 185.159.156.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C14 /* 185.159.156.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9C5A /* 185.159.156.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D08 /* 185.159.157.8/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D0E /* 185.159.157.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D10 /* 185.159.157.16/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D12 /* 185.159.157.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D15 /* 185.159.157.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D16 /* 185.159.157.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D19 /* 185.159.157.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D1A /* 185.159.157.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D1C /* 185.159.157.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D1E /* 185.159.157.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D21 /* 185.159.157.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D24 /* 185.159.157.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D26 /* 185.159.157.38/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D28 /* 185.159.157.40/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D2A /* 185.159.157.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D2C /* 185.159.157.44/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D30 /* 185.159.157.48/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D34 /* 185.159.157.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D48 /* 185.159.157.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D4C /* 185.159.157.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D4E /* 185.159.157.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D56 /* 185.159.157.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D86 /* 185.159.157.134/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D88 /* 185.159.157.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9D8C /* 185.159.157.140/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9DB0 /* 185.159.157.176/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E32 /* 185.159.158.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E39 /* 185.159.158.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E3A /* 185.159.158.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E3C /* 185.159.158.60/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E40 /* 185.159.158.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E42 /* 185.159.158.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E64 /* 185.159.158.100/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E6B /* 185.159.158.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E6C /* 185.159.158.108/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E70 /* 185.159.158.112/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9E74 /* 185.159.158.116/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB99F9EC1 /* 185.159.158.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9A210B9 /* 185.162.16.185/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9A210BA /* 185.162.16.186/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9A210BC /* 185.162.16.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9A210BE /* 185.162.16.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B564B3 /* 185.181.100.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B564B4 /* 185.181.100.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B564B8 /* 185.181.100.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B564BC /* 185.181.100.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B564BE /* 185.181.100.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B98693 /* 185.185.134.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B98694 /* 185.185.134.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9B98696 /* 185.185.134.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4552 /* 185.220.69.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4554 /* 185.220.69.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4556 /* 185.220.69.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC455A /* 185.220.69.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC455C /* 185.220.69.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC455E /* 185.220.69.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4592 /* 185.220.69.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4594 /* 185.220.69.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC4596 /* 185.220.69.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC459A /* 185.220.69.154/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC459C /* 185.220.69.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC459E /* 185.220.69.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45A2 /* 185.220.69.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45A4 /* 185.220.69.164/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45A6 /* 185.220.69.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45AA /* 185.220.69.170/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45AC /* 185.220.69.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45AE /* 185.220.69.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45B2 /* 185.220.69.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45B4 /* 185.220.69.180/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45B6 /* 185.220.69.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45BA /* 185.220.69.186/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45BC /* 185.220.69.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9DC45BE /* 185.220.69.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E51975 /* 185.229.25.117/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E51976 /* 185.229.25.118/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E51978 /* 185.229.25.120/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D03 /* 185.230.125.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D04 /* 185.230.125.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D08 /* 185.230.125.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D10 /* 185.230.125.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D18 /* 185.230.125.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D1C /* 185.230.125.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D1E /* 185.230.125.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D23 /* 185.230.125.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D24 /* 185.230.125.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D28 /* 185.230.125.40/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D30 /* 185.230.125.48/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D38 /* 185.230.125.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D3C /* 185.230.125.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67D3E /* 185.230.125.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67E93 /* 185.230.126.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67E94 /* 185.230.126.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67E96 /* 185.230.126.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67EC2 /* 185.230.126.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9E67EC4 /* 185.230.126.196/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D70A /* 185.244.215.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D70C /* 185.244.215.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D70E /* 185.244.215.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D782 /* 185.244.215.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D784 /* 185.244.215.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F4D786 /* 185.244.215.134/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55462 /* 185.245.84.98/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55464 /* 185.245.84.100/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55466 /* 185.245.84.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F5546A /* 185.245.84.106/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F5546C /* 185.245.84.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F5546E /* 185.245.84.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55583 /* 185.245.85.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55584 /* 185.245.85.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55588 /* 185.245.85.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55590 /* 185.245.85.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F55598 /* 185.245.85.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F5559C /* 185.245.85.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D349 /* 185.246.211.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D34A /* 185.246.211.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D34C /* 185.246.211.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D34E /* 185.246.211.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D350 /* 185.246.211.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D357 /* 185.246.211.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D358 /* 185.246.211.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D3C2 /* 185.246.211.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D3C4 /* 185.246.211.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D3C8 /* 185.246.211.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9F6D3CC /* 185.246.211.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6232 /* 185.253.98.50/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6234 /* 185.253.98.52/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6236 /* 185.253.98.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD623A /* 185.253.98.58/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD623C /* 185.253.98.60/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD623E /* 185.253.98.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD624A /* 185.253.98.74/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD624C /* 185.253.98.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD624E /* 185.253.98.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6252 /* 185.253.98.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6254 /* 185.253.98.84/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD6256 /* 185.253.98.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD625A /* 185.253.98.90/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD625C /* 185.253.98.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xB9FD625E /* 185.253.98.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD66AB3 /* 188.214.106.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD66AB4 /* 188.214.106.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD66AB8 /* 188.214.106.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD66ABC /* 188.214.106.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD66ABE /* 188.214.106.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67A53 /* 188.214.122.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67A54 /* 188.214.122.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67A58 /* 188.214.122.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67A5C /* 188.214.122.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67A5E /* 188.214.122.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67DA3 /* 188.214.125.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67DA4 /* 188.214.125.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67DA8 /* 188.214.125.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67DAC /* 188.214.125.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD67DAE /* 188.214.125.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD698E3 /* 188.214.152.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD698E4 /* 188.214.152.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD698E8 /* 188.214.152.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD698EC /* 188.214.152.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD698EE /* 188.214.152.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD69E22 /* 188.214.158.34/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD69E24 /* 188.214.158.36/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD69E28 /* 188.214.158.40/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD69E2C /* 188.214.158.44/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD7EB53 /* 188.215.235.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD7EB54 /* 188.215.235.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD7EB58 /* 188.215.235.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD7EB5C /* 188.215.235.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCD7EB5E /* 188.215.235.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCF1B1E3 /* 188.241.177.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCF1B1E4 /* 188.241.177.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCF1B1E8 /* 188.241.177.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCF1B1EC /* 188.241.177.236/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBCF1B1EE /* 188.241.177.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02839D /* 190.2.131.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02839E /* 190.2.131.158/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0283A0 /* 190.2.131.160/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0283A7 /* 190.2.131.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0283AF /* 190.2.131.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02847D /* 190.2.132.125/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02847E /* 190.2.132.126/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE028480 /* 190.2.132.128/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE028486 /* 190.2.132.134/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE028488 /* 190.2.132.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02848C /* 190.2.132.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE028494 /* 190.2.132.148/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02849B /* 190.2.132.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE02849D /* 190.2.132.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292C6 /* 190.2.146.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292D6 /* 190.2.146.214/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292E2 /* 190.2.146.226/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292E4 /* 190.2.146.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292E6 /* 190.2.146.230/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xBE0292E8 /* 190.2.146.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092401 /* 193.9.36.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092402 /* 193.9.36.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092404 /* 193.9.36.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092408 /* 193.9.36.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092410 /* 193.9.36.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092418 /* 193.9.36.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092501 /* 193.9.37.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092502 /* 193.9.37.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092504 /* 193.9.37.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092508 /* 193.9.37.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092510 /* 193.9.37.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092518 /* 193.9.37.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092601 /* 193.9.38.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092602 /* 193.9.38.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092604 /* 193.9.38.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092608 /* 193.9.38.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092610 /* 193.9.38.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092618 /* 193.9.38.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092701 /* 193.9.39.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092702 /* 193.9.39.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092704 /* 193.9.39.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092708 /* 193.9.39.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092710 /* 193.9.39.16/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1092718 /* 193.9.39.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6A13 /* 193.29.106.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6A14 /* 193.29.106.20/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6A18 /* 193.29.106.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6A1C /* 193.29.106.28/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6A1E /* 193.29.106.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6B63 /* 193.29.107.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6B64 /* 193.29.107.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6B68 /* 193.29.107.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6B6C /* 193.29.107.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6B6E /* 193.29.107.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BA3 /* 193.29.107.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BA4 /* 193.29.107.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BA8 /* 193.29.107.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BAC /* 193.29.107.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BAE /* 193.29.107.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BF3 /* 193.29.107.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BF4 /* 193.29.107.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BF8 /* 193.29.107.248/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC11D6BFA /* 193.29.107.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FE43 /* 193.37.254.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FE44 /* 193.37.254.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FE48 /* 193.37.254.72/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FE4C /* 193.37.254.76/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FE4E /* 193.37.254.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FEB3 /* 193.37.254.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FEB4 /* 193.37.254.180/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FEB8 /* 193.37.254.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FEBC /* 193.37.254.188/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC125FEBE /* 193.37.254.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1941253 /* 193.148.18.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1941254 /* 193.148.18.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC1941258 /* 193.148.18.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC194125A /* 193.148.18.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2228438 /* 194.34.132.56/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E82 /* 194.36.110.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E84 /* 194.36.110.132/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E86 /* 194.36.110.134/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E8A /* 194.36.110.138/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E8C /* 194.36.110.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E8E /* 194.36.110.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E92 /* 194.36.110.146/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E94 /* 194.36.110.148/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC2246E96 /* 194.36.110.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27288D2 /* 194.114.136.210/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27288D4 /* 194.114.136.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27288D8 /* 194.114.136.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27288DC /* 194.114.136.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27288DE /* 194.114.136.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27EB109 /* 194.126.177.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27EB110 /* 194.126.177.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27EB120 /* 194.126.177.32/27 */, 27, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27EB140 /* 194.126.177.64/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC27EB1A0 /* 194.126.177.160/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC35096E3 /* 195.80.150.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC35096E4 /* 195.80.150.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC35096E8 /* 195.80.150.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC35096EA /* 195.80.150.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC39EF8E3 /* 195.158.248.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC39EF8E4 /* 195.158.248.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC39EF8E8 /* 195.158.248.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC39EF8EA /* 195.158.248.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC3B5A7C2 /* 195.181.167.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC3B5A7C4 /* 195.181.167.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC3B5A7C8 /* 195.181.167.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4C51C83 /* 196.197.28.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4C51C84 /* 196.197.28.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4C51C88 /* 196.197.28.136/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4C51C8C /* 196.197.28.140/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4C51C8E /* 196.197.28.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F03673 /* 196.240.54.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F03674 /* 196.240.54.116/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F03678 /* 196.240.54.120/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F0367A /* 196.240.54.122/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F4C0E2 /* 196.244.192.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F4C0E4 /* 196.244.192.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F4C0E8 /* 196.244.192.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F597D3 /* 196.245.151.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F597D4 /* 196.245.151.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F597D8 /* 196.245.151.216/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xC4F597DA /* 196.245.151.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD41E3C01 /* 212.30.60.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD41E3C02 /* 212.30.60.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD41E3C04 /* 212.30.60.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD41E3C08 /* 212.30.60.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68C2 /* 212.92.104.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68C4 /* 212.92.104.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68C8 /* 212.92.104.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68D2 /* 212.92.104.210/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68D4 /* 212.92.104.212/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68D8 /* 212.92.104.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68E2 /* 212.92.104.226/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68E4 /* 212.92.104.228/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68E8 /* 212.92.104.232/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68F2 /* 212.92.104.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68F4 /* 212.92.104.244/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD45C68F8 /* 212.92.104.248/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD4662CA2 /* 212.102.44.162/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD4662CA4 /* 212.102.44.164/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD4662CA7 /* 212.102.44.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD4662CA8 /* 212.102.44.168/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD4662CAA /* 212.102.44.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AC163 /* 217.138.193.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AC164 /* 217.138.193.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AC168 /* 217.138.193.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AC16A /* 217.138.193.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD863 /* 217.138.216.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD864 /* 217.138.216.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD868 /* 217.138.216.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD870 /* 217.138.216.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD878 /* 217.138.216.120/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD87C /* 217.138.216.124/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD87E /* 217.138.216.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD883 /* 217.138.216.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD884 /* 217.138.216.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD888 /* 217.138.216.136/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD890 /* 217.138.216.144/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD898 /* 217.138.216.152/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD89C /* 217.138.216.156/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD89E /* 217.138.216.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD8A3 /* 217.138.216.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD8A4 /* 217.138.216.164/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD8A8 /* 217.138.216.168/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD8AC /* 217.138.216.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD98AD8AE /* 217.138.216.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CA9 /* 217.148.140.169/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CAA /* 217.148.140.170/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CAC /* 217.148.140.172/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CAE /* 217.148.140.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CD9 /* 217.148.140.217/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CDA /* 217.148.140.218/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CDC /* 217.148.140.220/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, - { 0xD9948CDE /* 217.148.140.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, - /* End */ - { 0x0, 0, 0 } -}; - -static ndpi_network6 ndpi_anonymous_subscriber_protonvpn_protocol_list_6[] = { - /* End */ - { NULL, 0, 0 } -}; diff --git a/src/lib/inc_generated/ndpi_surfshark_match.c.inc b/src/lib/inc_generated/ndpi_surfshark_match.c.inc index 30b008bef..06ff91b83 100644 --- a/src/lib/inc_generated/ndpi_surfshark_match.c.inc +++ b/src/lib/inc_generated/ndpi_surfshark_match.c.inc @@ -22,16 +22,16 @@ static ndpi_network ndpi_protocol_surfshark_protocol_list[] = { { 0x0238BD6A /* 2.56.189.106/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x058509CB /* 5.133.9.203/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x05FDCDB3 /* 5.253.205.179/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x05FDCDBB /* 5.253.205.187/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x0238BDBA /* 2.56.189.186/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x05BB34CB /* 5.187.52.203/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x171B6D23 /* 23.27.109.35/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x171B6D35 /* 23.27.109.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x171B6D25 /* 23.27.109.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x171B6E23 /* 23.27.110.35/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x171B6E25 /* 23.27.110.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x171B6E33 /* 23.27.110.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x171BB70F /* 23.27.183.15/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x171BB716 /* 23.27.183.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x171BB711 /* 23.27.183.17/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x171BB71B /* 23.27.183.27/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CB4C /* 37.19.203.76/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2513CB4E /* 37.19.203.78/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CDA2 /* 37.19.205.162/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CDA4 /* 37.19.205.164/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CDA7 /* 37.19.205.167/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, @@ -41,305 +41,304 @@ static ndpi_network ndpi_protocol_surfshark_protocol_list[] = { { 0x2513CDB6 /* 37.19.205.182/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CDB8 /* 37.19.205.184/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2513CDBB /* 37.19.205.187/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2513D36D /* 37.19.211.109/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2513DD4C /* 37.19.221.76/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x251C9CE3 /* 37.28.156.227/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578C1E5 /* 37.120.193.229/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578CF5B /* 37.120.207.91/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578CFAB /* 37.120.207.171/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578D993 /* 37.120.217.147/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578EB13 /* 37.120.235.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2578EB1D /* 37.120.235.29/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2BE1BD6C /* 43.225.189.108/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D2B13D3 /* 45.43.19.211/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2513D32C /* 37.19.211.44/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2513D377 /* 37.19.211.119/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x251C9CED /* 37.28.156.237/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2578CD7D /* 37.120.205.125/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2578CF5D /* 37.120.207.93/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2578CF93 /* 37.120.207.147/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2BE1BD64 /* 43.225.189.100/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D2B131C /* 45.43.19.28/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D373C9F /* 45.55.60.159/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D56D303 /* 45.86.211.3/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D56D338 /* 45.86.211.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D56D319 /* 45.86.211.25/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D56D33A /* 45.86.211.58/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D57D4B3 /* 45.87.212.179/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D57D4B5 /* 45.87.212.181/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D57D4B7 /* 45.87.212.183/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D5FF227 /* 45.95.242.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D5FF22E /* 45.95.242.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D864F83 /* 45.134.79.131/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D864FA8 /* 45.134.79.168/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D86D421 /* 45.134.212.33/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D86D4E2 /* 45.134.212.226/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D5FF229 /* 45.95.242.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D864F8F /* 45.134.79.143/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D864F97 /* 45.134.79.151/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D86D4F6 /* 45.134.212.246/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D889B32 /* 45.136.155.50/31 */, 31, NDPI_PROTOCOL_SURFSHARK }, { 0x2D8BFC04 /* 45.139.252.4/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D8BFC10 /* 45.139.252.16/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D8BFC16 /* 45.139.252.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D8BFD02 /* 45.139.253.2/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D8BFD04 /* 45.139.253.4/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D950312 /* 45.149.3.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D8BFD14 /* 45.139.253.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D90E356 /* 45.144.227.86/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D90E358 /* 45.144.227.88/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D950314 /* 45.149.3.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2D960502 /* 45.150.5.2/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D950324 /* 45.149.3.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2D960504 /* 45.150.5.4/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x2DCB153D /* 45.203.21.61/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x2D960512 /* 45.150.5.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2DF84CD5 /* 45.248.76.213/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x2E65BD0E /* 46.101.189.14/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59022 /* 62.197.144.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59034 /* 62.197.144.52/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59112 /* 62.197.145.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59044 /* 62.197.144.68/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59054 /* 62.197.144.84/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59124 /* 62.197.145.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59216 /* 62.197.146.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59218 /* 62.197.146.24/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59132 /* 62.197.145.50/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59211 /* 62.197.146.17/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59213 /* 62.197.146.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59333 /* 62.197.147.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59335 /* 62.197.147.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59345 /* 62.197.147.69/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59435 /* 62.197.148.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59443 /* 62.197.148.67/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59445 /* 62.197.148.69/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59573 /* 62.197.149.115/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC5957F /* 62.197.149.127/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59569 /* 62.197.149.105/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC5957A /* 62.197.149.122/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59633 /* 62.197.150.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59643 /* 62.197.150.67/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59722 /* 62.197.151.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59724 /* 62.197.151.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59853 /* 62.197.152.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59865 /* 62.197.152.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59635 /* 62.197.150.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59712 /* 62.197.151.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59714 /* 62.197.151.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59885 /* 62.197.152.133/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59927 /* 62.197.153.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC5992E /* 62.197.153.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59929 /* 62.197.153.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59A13 /* 62.197.154.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59A1B /* 62.197.154.27/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59B2C /* 62.197.155.44/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59B2E /* 62.197.155.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59A22 /* 62.197.154.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59B27 /* 62.197.155.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59B29 /* 62.197.155.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59C12 /* 62.197.156.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59C14 /* 62.197.156.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59D29 /* 62.197.157.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59D2C /* 62.197.157.44/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59D2E /* 62.197.157.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59E27 /* 62.197.158.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59E29 /* 62.197.158.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59E2C /* 62.197.158.44/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59E2E /* 62.197.158.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x3EC59F12 /* 62.197.159.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x3EC59F14 /* 62.197.159.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x3EC59F24 /* 62.197.159.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x42EBA8C3 /* 66.235.168.195/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x42EBA8D1 /* 66.235.168.209/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x4A50B64A /* 74.80.182.74/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x4A50B64F /* 74.80.182.79/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x4F6E3515 /* 79.110.53.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x42EBA8CE /* 66.235.168.206/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x4A50B654 /* 74.80.182.84/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x4A50B65C /* 74.80.182.92/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x4F6E363B /* 79.110.54.59/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x4F6E3663 /* 79.110.54.99/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x4F7F9527 /* 79.127.149.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x4F7F9531 /* 79.127.149.49/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x4F7F9533 /* 79.127.149.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x50F61FCF /* 80.246.31.207/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5113D055 /* 81.19.208.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x50F61F5A /* 80.246.31.90/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x50F61F68 /* 80.246.31.104/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5113D133 /* 81.19.209.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5266127D /* 82.102.18.125/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x53617013 /* 83.97.112.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x53617018 /* 83.97.112.24/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x53617016 /* 83.97.112.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x53617322 /* 83.97.115.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x53617324 /* 83.97.115.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5411236C /* 84.17.35.108/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x54112955 /* 84.17.41.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x541135A8 /* 84.17.53.168/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x54113EA3 /* 84.17.62.163/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x55CC466F /* 85.204.70.111/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x57F98544 /* 87.249.133.68/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x57F98BB7 /* 87.249.139.183/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x57F98BB9 /* 87.249.139.185/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x592108C5 /* 89.33.8.197/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59244C7B /* 89.36.76.123/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59752953 /* 89.117.41.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59752975 /* 89.117.41.117/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5411236F /* 84.17.35.111/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x54113AC3 /* 84.17.58.195/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x55CC7C5D /* 85.204.124.93/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x57F98513 /* 87.249.133.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x57F98518 /* 87.249.133.24/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x59255F35 /* 89.37.95.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x59255FC8 /* 89.37.95.200/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5926E3BB /* 89.38.227.187/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x592EDFB9 /* 89.46.223.185/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x59752933 /* 89.117.41.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x59BBA102 /* 89.187.161.2/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x59BBA104 /* 89.187.161.4/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59BBA3CA /* 89.187.163.202/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59BBA827 /* 89.187.168.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x59BBBB4E /* 89.187.187.78/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5BEF82CA /* 91.239.130.202/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7853 /* 92.62.120.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7873 /* 92.62.120.115/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7965 /* 92.62.121.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7995 /* 92.62.121.149/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7855 /* 92.62.120.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7865 /* 92.62.120.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7935 /* 92.62.121.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7955 /* 92.62.121.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7A12 /* 92.62.122.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5C3E7A22 /* 92.62.122.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7A24 /* 92.62.122.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7B53 /* 92.62.123.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C3E7B65 /* 92.62.123.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5C771028 /* 92.119.16.40/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7B55 /* 92.62.123.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5C3E7B63 /* 92.62.123.99/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5C77B113 /* 92.119.177.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5C77B115 /* 92.119.177.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5C77B117 /* 92.119.177.23/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D76296E /* 93.118.41.110/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D762970 /* 93.118.41.112/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D98D2AB /* 93.152.210.171/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D98D2B7 /* 93.152.210.183/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D98D43D /* 93.152.212.61/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5D98DCAC /* 93.152.220.172/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5DB9A209 /* 93.185.162.9/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5DB9A211 /* 93.185.162.17/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5E9A7C55 /* 94.154.124.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98D2C4 /* 93.152.210.196/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98D2D5 /* 93.152.210.213/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98D43B /* 93.152.212.59/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98D440 /* 93.152.212.64/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98DCE5 /* 93.152.220.229/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5D98DCF5 /* 93.152.220.245/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5DB9A215 /* 93.185.162.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5DB9A219 /* 93.185.162.25/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5E9A7C53 /* 94.154.124.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5E9A7C65 /* 94.154.124.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x5FADDF6C /* 95.173.223.108/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5FADDF6E /* 95.173.223.110/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x5FADDF71 /* 95.173.223.113/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x676DF45C /* 103.109.244.92/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67962549 /* 103.150.37.73/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67962551 /* 103.150.37.81/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67B0981B /* 103.176.152.27/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67B09827 /* 103.176.152.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67C05083 /* 103.192.80.131/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67C05095 /* 103.192.80.149/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67C0CD32 /* 103.192.205.50/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x5FAE40ED /* 95.174.64.237/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x676DF45E /* 103.109.244.94/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67B09822 /* 103.176.152.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67B09831 /* 103.176.152.49/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67C05085 /* 103.192.80.133/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67C0508B /* 103.192.80.139/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67C0CD38 /* 103.192.205.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x67C0CD3A /* 103.192.205.58/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x67D614BB /* 103.214.20.187/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67D614BD /* 103.214.20.189/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x67D62C2A /* 103.214.44.42/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x71CBDD16 /* 113.203.221.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67D614C3 /* 103.214.20.195/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67D62C22 /* 103.214.44.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x67DB156A /* 103.219.21.106/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x71CBDD13 /* 113.203.221.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x71CBDD18 /* 113.203.221.24/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x76630218 /* 118.99.2.24/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x76630222 /* 118.99.2.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x7C968B25 /* 124.150.139.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x7C968B2B /* 124.150.139.43/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x7C968B23 /* 124.150.139.35/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x7C968B3B /* 124.150.139.59/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x82C3D1C3 /* 130.195.209.195/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x82C3DAD3 /* 130.195.218.211/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC5971A /* 138.197.151.26/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC70284 /* 138.199.2.132/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC7108E /* 138.199.16.142/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC713CE /* 138.199.19.206/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8AC70287 /* 138.199.2.135/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8AC7108C /* 138.199.16.140/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC71699 /* 138.199.22.153/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC71DD2 /* 138.199.29.210/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC72A8D /* 138.199.42.141/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC72AA8 /* 138.199.42.168/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC73933 /* 138.199.57.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8AC728B1 /* 138.199.40.177/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8AC72AB2 /* 138.199.42.178/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8AC72AB8 /* 138.199.42.184/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73A21 /* 138.199.58.33/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8AC73A25 /* 138.199.58.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CAA /* 138.199.60.170/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CAC /* 138.199.60.172/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CAF /* 138.199.60.175/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CB1 /* 138.199.60.177/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CB4 /* 138.199.60.180/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x8AC73CB6 /* 138.199.60.182/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8FF42E6C /* 143.244.46.108/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x8FF42E73 /* 143.244.46.115/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9030270D /* 144.48.39.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9030276D /* 144.48.39.109/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924615AD /* 146.70.21.173/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x92462A8B /* 146.70.42.139/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924635D3 /* 146.70.53.211/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x92465C2B /* 146.70.92.43/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924666B3 /* 146.70.102.179/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924666C3 /* 146.70.102.195/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924667ED /* 146.70.103.237/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x92466F65 /* 146.70.111.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246709D /* 146.70.112.157/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x924670AD /* 146.70.112.173/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246720B /* 146.70.114.11/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246720D /* 146.70.114.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246781D /* 146.70.120.29/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x92467823 /* 146.70.120.35/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246AF43 /* 146.70.175.67/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246B63B /* 146.70.182.59/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246B65B /* 146.70.182.91/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246B7C5 /* 146.70.183.197/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246C2DB /* 146.70.194.219/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9246DA2D /* 146.70.218.45/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8FF42E71 /* 143.244.46.113/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x8FF42EE9 /* 143.244.46.233/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9030277B /* 144.48.39.123/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x90302783 /* 144.48.39.131/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x91DF0807 /* 145.223.8.7/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246247B /* 146.70.36.123/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x92462AB3 /* 146.70.42.179/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x924637DD /* 146.70.55.221/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x924637F3 /* 146.70.55.243/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x92465655 /* 146.70.86.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x92465C0D /* 146.70.92.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x92466635 /* 146.70.102.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x924666CD /* 146.70.102.205/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x92466F5B /* 146.70.111.91/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246708D /* 146.70.112.141/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246780D /* 146.70.120.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x924682AD /* 146.70.130.173/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246A0F5 /* 146.70.160.245/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246A1F3 /* 146.70.161.243/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246A3D5 /* 146.70.163.213/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9246C2FD /* 146.70.194.253/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95165187 /* 149.22.81.135/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9522F24A /* 149.34.242.74/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x9522F623 /* 149.34.246.35/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9522FA38 /* 149.34.250.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x952832C2 /* 149.40.50.194/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9558144D /* 149.88.20.77/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x952832CE /* 149.40.50.206/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95283502 /* 149.40.53.2/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95283811 /* 149.40.56.17/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95283813 /* 149.40.56.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x95581613 /* 149.88.22.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x95581615 /* 149.88.22.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586509 /* 149.88.101.9/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586822 /* 149.88.104.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x95586824 /* 149.88.104.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x95586829 /* 149.88.104.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x95586A89 /* 149.88.106.137/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x95586F87 /* 149.88.111.135/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x95586FD1 /* 149.88.111.209/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9566E367 /* 149.102.227.103/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9566F664 /* 149.102.246.100/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9566F667 /* 149.102.246.103/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586A87 /* 149.88.106.135/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586AAC /* 149.88.106.172/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586F4C /* 149.88.111.76/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x95586FD3 /* 149.88.111.211/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9566E369 /* 149.102.227.105/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9566E36E /* 149.102.227.110/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9566F662 /* 149.102.246.98/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9566F66F /* 149.102.246.111/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x9566F785 /* 149.102.247.133/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x9566F789 /* 149.102.247.137/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9A10A94D /* 154.16.169.77/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9A2F1E62 /* 154.47.30.98/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9566FE12 /* 149.102.254.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9A10A94F /* 154.16.169.79/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9A2F1767 /* 154.47.23.103/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9A2F1776 /* 154.47.23.118/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9A2F1E6C /* 154.47.30.108/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0x9A2F1E6E /* 154.47.30.110/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9C92363A /* 156.146.54.58/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9C9236C9 /* 156.146.54.201/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0x9F943A07 /* 159.148.58.7/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9C922D73 /* 156.146.45.115/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9C922DC6 /* 156.146.45.198/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9C92364A /* 156.146.54.74/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9C9236C4 /* 156.146.54.196/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0x9C923E2E /* 156.146.62.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xA5E83519 /* 165.232.53.25/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xA996C53A /* 169.150.197.58/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xA996CBEF /* 169.150.203.239/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xA996D1D6 /* 169.150.209.214/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xA996E38E /* 169.150.227.142/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xA996E389 /* 169.150.227.137/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xA996E393 /* 169.150.227.147/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xAC5D94AB /* 172.93.148.171/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xAC5D94AD /* 172.93.148.173/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xAC5D9943 /* 172.93.153.67/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB0E3F028 /* 176.227.240.40/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB0E3F048 /* 176.227.240.72/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB0E3F012 /* 176.227.240.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB0E3F03C /* 176.227.240.60/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB0E3F134 /* 176.227.241.52/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB0E3F144 /* 176.227.241.68/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB2EE0A82 /* 178.238.10.130/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB495E4A5 /* 180.149.228.165/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB495E70D /* 180.149.231.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB0E3F142 /* 176.227.241.66/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB2EE0A42 /* 178.238.10.66/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB2EFA337 /* 178.239.163.55/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB495E72B /* 180.149.231.43/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB495E7A3 /* 180.149.231.163/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB92C4CBA /* 185.44.76.186/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB92C4CBC /* 185.44.76.188/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB94C0927 /* 185.76.9.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB94C08D2 /* 185.76.8.210/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB94C08D4 /* 185.76.8.212/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB94C0939 /* 185.76.9.57/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB95CD248 /* 185.92.210.72/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB95CD287 /* 185.92.210.135/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB96C6925 /* 185.108.105.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB96C694D /* 185.108.105.77/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB968BBFD /* 185.104.187.253/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB96C6949 /* 185.108.105.73/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB96C696F /* 185.108.105.111/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB9861650 /* 185.134.22.80/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB986165C /* 185.134.22.92/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB98D7738 /* 185.141.119.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB98D7776 /* 185.141.119.118/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9999795 /* 185.153.151.149/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB99997B5 /* 185.153.151.181/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB99C2E69 /* 185.156.46.105/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9A6548B /* 185.166.84.139/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9AE9F75 /* 185.174.159.117/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9AE9F79 /* 185.174.159.121/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9B40E93 /* 185.180.14.147/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9B40E95 /* 185.180.14.149/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB98D773A /* 185.141.119.58/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB98D7766 /* 185.141.119.102/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB999978D /* 185.153.151.141/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9A65489 /* 185.166.84.137/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9AE9F71 /* 185.174.159.113/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9AE9FC2 /* 185.174.159.194/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB9BC3D32 /* 185.188.61.50/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9BC3D36 /* 185.188.61.54/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9C19DBC /* 185.193.157.188/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9C4000D /* 185.196.0.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9BC3D38 /* 185.188.61.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9C40012 /* 185.196.0.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB9C40017 /* 185.196.0.23/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9F48B53 /* 185.244.139.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9EE1C15 /* 185.238.28.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9F20645 /* 185.242.6.69/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9F2067B /* 185.242.6.123/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xB9F48B63 /* 185.244.139.99/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xB9FD6175 /* 185.253.97.117/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xBC5F3635 /* 188.95.54.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9F48B65 /* 185.244.139.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9FD6155 /* 185.253.97.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xB9FD616B /* 185.253.97.107/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xBC5F377D /* 188.95.55.125/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xBCA62B75 /* 188.166.43.117/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xBCF0396B /* 188.240.57.107/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xBCF03975 /* 188.240.57.117/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC09EEFC7 /* 192.158.239.199/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC113CC4A /* 193.19.204.74/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC113CC52 /* 193.19.204.82/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC113CF5C /* 193.19.207.92/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC113CF60 /* 193.19.207.96/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC1387112 /* 193.56.113.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC1387135 /* 193.56.113.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xBCF03969 /* 188.240.57.105/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xBCF0397D /* 188.240.57.125/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xBCF17878 /* 188.241.120.120/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xBF6065A7 /* 191.96.101.167/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC09EEFC4 /* 192.158.239.196/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC113CC46 /* 193.19.204.70/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC113CC58 /* 193.19.204.88/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC113CF54 /* 193.19.207.84/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC113CF58 /* 193.19.207.88/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC138710D /* 193.56.113.13/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC138712E /* 193.56.113.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC1941233 /* 193.148.18.51/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC1941235 /* 193.148.18.53/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC1E43884 /* 193.228.56.132/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC1B0565B /* 193.176.86.91/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC1E43886 /* 193.228.56.134/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC1E43889 /* 193.228.56.137/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC21A8312 /* 194.26.131.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC21A8314 /* 194.26.131.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2212D4A /* 194.33.45.74/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2A9A811 /* 194.169.168.17/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC2A9A813 /* 194.169.168.19/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2A9A922 /* 194.169.169.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC2A9A816 /* 194.169.168.22/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC2A9A914 /* 194.169.169.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC2A9A924 /* 194.169.169.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2A9AA27 /* 194.169.170.39/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2A9AA29 /* 194.169.170.41/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC2A9AB22 /* 194.169.171.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC2A9AA2C /* 194.169.170.44/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC2A9AA2E /* 194.169.170.46/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC2A9AB12 /* 194.169.171.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC2A9AB24 /* 194.169.171.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC39EF915 /* 195.158.249.21/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC39EF91D /* 195.158.249.29/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC3B5AEE2 /* 195.181.174.226/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xC3B5AEE4 /* 195.181.174.228/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC42C7655 /* 196.44.118.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC42C7665 /* 196.44.118.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xC6256F0C /* 198.37.111.12/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC42C7683 /* 196.44.118.131/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xC42C7685 /* 196.44.118.133/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xCEBD5EE5 /* 206.189.94.229/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xCEBD775C /* 206.189.119.92/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4662847 /* 212.102.40.71/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4662C47 /* 212.102.44.71/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4662C67 /* 212.102.44.103/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4662E43 /* 212.102.46.67/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4663008 /* 212.102.48.8/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4772022 /* 212.119.32.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD4772024 /* 212.119.32.36/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4662C53 /* 212.102.44.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4662C71 /* 212.102.44.113/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4662E38 /* 212.102.46.56/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4663D88 /* 212.102.61.136/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4772012 /* 212.119.32.18/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD4772014 /* 212.119.32.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD4772114 /* 212.119.33.20/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD4772122 /* 212.119.33.34/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD8F61F61 /* 216.246.31.97/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD8F61F64 /* 216.246.31.100/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD8F61F55 /* 216.246.31.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD909F455 /* 217.9.244.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD909F463 /* 217.9.244.99/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD909F465 /* 217.9.244.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD909F555 /* 217.9.245.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD909F563 /* 217.9.245.99/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD909F565 /* 217.9.245.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD909F725 /* 217.9.247.37/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD909F7B5 /* 217.9.247.181/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD909F7D5 /* 217.9.247.213/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD909F7EA /* 217.9.247.234/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD909FA53 /* 217.9.250.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD909FA55 /* 217.9.250.85/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD909FA65 /* 217.9.250.101/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, - { 0xD98AC4CD /* 217.138.196.205/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, + { 0xD98AD8D5 /* 217.138.216.213/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD9925253 /* 217.146.82.83/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, { 0xD9948FC5 /* 217.148.143.197/32 */, 32, NDPI_PROTOCOL_SURFSHARK }, /* End */ diff --git a/src/lib/inc_generated/ndpi_tor_exit_nodes_match.c.inc b/src/lib/inc_generated/ndpi_tor_exit_nodes_match.c.inc new file mode 100644 index 000000000..37a760ad7 --- /dev/null +++ b/src/lib/inc_generated/ndpi_tor_exit_nodes_match.c.inc @@ -0,0 +1,1433 @@ +/* + * + * This file is generated automatically and part of nDPI + * + * 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/>. + * + */ + +/* ****************************************************** */ + + +static ndpi_network ndpi_anonymous_subscriber_tor_exit_nodes_protocol_list[] = { + { 0x66827109 /* 102.130.113.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x668275A7 /* 102.130.117.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x66827F75 /* 102.130.127.117/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x66D33866 /* 102.211.56.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x66D33869 /* 102.211.56.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x66D3380C /* 102.211.56.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x66D338FA /* 102.211.56.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x676D6569 /* 103.109.101.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x677EA136 /* 103.126.161.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6792CB0B /* 103.146.203.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67A436C7 /* 103.164.54.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67C1B3E9 /* 103.193.179.233/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67C4256F /* 103.196.37.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67D05605 /* 103.208.86.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67FBA70A /* 103.251.167.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x67FBA714 /* 103.251.167.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x671C345D /* 103.28.52.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68A7F274 /* 104.167.242.116/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68A7F276 /* 104.167.242.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68C0034A /* 104.192.3.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68DBEC64 /* 104.219.236.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44873 /* 104.244.72.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44884 /* 104.244.72.132/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44988 /* 104.244.73.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F449BE /* 104.244.73.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F449C1 /* 104.244.73.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F4492B /* 104.244.73.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44AE5 /* 104.244.74.229/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44A17 /* 104.244.74.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44A61 /* 104.244.74.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44B8C /* 104.244.75.140/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44B4A /* 104.244.75.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44CED /* 104.244.76.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44DD0 /* 104.244.77.208/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44EA2 /* 104.244.78.162/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44EE8 /* 104.244.78.232/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44F2C /* 104.244.79.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44F32 /* 104.244.79.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x68F44F3D /* 104.244.79.61/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAC4B99 /* 107.172.75.153/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAC4C8D /* 107.172.76.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAD8F20 /* 107.173.143.32/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAE9219 /* 107.174.146.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAED41A /* 107.174.212.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAEE7C4 /* 107.174.231.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAEE7CD /* 107.174.231.205/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAE2D35 /* 107.174.45.53/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BAE2D37 /* 107.174.45.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0AAF /* 107.189.10.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0B6F /* 107.189.11.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD016F /* 107.189.1.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0B71 /* 107.189.11.113/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD01A0 /* 107.189.1.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD01AF /* 107.189.1.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD01E4 /* 107.189.1.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0C03 /* 107.189.12.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0C07 /* 107.189.12.7/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0C58 /* 107.189.12.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0DB4 /* 107.189.13.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0DFB /* 107.189.13.251/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0DFD /* 107.189.13.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0DFE /* 107.189.13.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0D5B /* 107.189.13.91/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0E6A /* 107.189.14.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0E04 /* 107.189.14.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0E2B /* 107.189.14.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0109 /* 107.189.1.9/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD026C /* 107.189.2.108/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1D67 /* 107.189.29.103/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1DB8 /* 107.189.29.184/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1EEC /* 107.189.30.236/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1E31 /* 107.189.30.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1E45 /* 107.189.30.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1E56 /* 107.189.30.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD030B /* 107.189.3.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD1F21 /* 107.189.31.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD040C /* 107.189.4.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD04D1 /* 107.189.4.209/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0579 /* 107.189.5.121/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD05BC /* 107.189.5.188/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD05F9 /* 107.189.5.249/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0507 /* 107.189.5.7/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD067C /* 107.189.6.124/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD078D /* 107.189.7.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0790 /* 107.189.7.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD07A8 /* 107.189.7.168/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0885 /* 107.189.8.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0888 /* 107.189.8.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD08B5 /* 107.189.8.181/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD08E2 /* 107.189.8.226/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0805 /* 107.189.8.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0838 /* 107.189.8.56/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0841 /* 107.189.8.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6BBD0846 /* 107.189.8.70/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6CB57882 /* 108.181.120.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6C3B0C03 /* 108.59.12.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6C3DBD88 /* 108.61.189.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D689916 /* 109.104.153.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6DA921A3 /* 109.169.33.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6DE4A0BE /* 109.228.160.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D454311 /* 109.69.67.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466401 /* 109.70.100.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466402 /* 109.70.100.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466404 /* 109.70.100.4/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466406 /* 109.70.100.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466441 /* 109.70.100.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466442 /* 109.70.100.66/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6D466444 /* 109.70.100.68/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x71141F26 /* 113.20.31.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x7223F596 /* 114.35.245.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x76A34AA0 /* 118.163.74.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x76C1408B /* 118.193.64.139/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x76C2E732 /* 118.194.231.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x794E1CA6 /* 121.78.28.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x7BFD2320 /* 123.253.35.32/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x7B3AC877 /* 123.58.200.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x7DD4F183 /* 125.212.241.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x7DFD3877 /* 125.253.56.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x807FB49C /* 128.127.180.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x801F000D /* 128.31.0.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x82C10A15 /* 130.193.10.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x82C10FBA /* 130.193.15.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x82C10F4F /* 130.193.15.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x0D7E1DB5 /* 13.126.29.181/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x88AF082D /* 136.175.8.45/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x88F46FA3 /* 136.244.111.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8A3B126E /* 138.59.18.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8B63AC0B /* 139.99.172.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8B630839 /* 139.99.8.57/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8DA42643 /* 141.164.38.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8D620B3E /* 141.98.11.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8EAB0C58 /* 142.171.12.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8ECAF048 /* 142.202.240.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8E2C8551 /* 142.44.133.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x8E2CEA45 /* 142.44.234.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x90AC7629 /* 144.172.118.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x90AC7604 /* 144.172.118.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x90AC7637 /* 144.172.118.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x90AC7649 /* 144.172.118.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x923B7EE8 /* 146.59.126.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x923BE704 /* 146.59.231.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x932D7491 /* 147.45.116.145/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x935D4837 /* 147.93.72.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x95CA4F65 /* 149.202.79.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x95CA4F81 /* 149.202.79.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x95381685 /* 149.56.22.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x95382C2F /* 149.56.44.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x982099BB /* 152.32.153.187/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9820B535 /* 152.32.181.53/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9820C74F /* 152.32.199.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9820CE7F /* 152.32.206.127/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9820DA22 /* 152.32.218.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9835850E /* 152.53.133.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x983535F3 /* 152.53.53.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9A10743D /* 154.16.116.61/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9A1A9F9D /* 154.26.159.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9A295F01 /* 154.41.95.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9CE5E206 /* 156.229.226.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9EDC7BDB /* 158.220.123.219/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x9E45FC74 /* 158.69.252.116/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA077F9F0 /* 160.119.249.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA18144A2 /* 161.129.68.162/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2D2AD11 /* 162.210.173.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2D8123E /* 162.216.18.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F748C0 /* 162.247.72.192/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F748C7 /* 162.247.72.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74AC8 /* 162.247.74.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74ACA /* 162.247.74.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74ACC /* 162.247.74.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74ACE /* 162.247.74.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74AD5 /* 162.247.74.213/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74AD8 /* 162.247.74.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74A1B /* 162.247.74.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2F74A07 /* 162.247.74.7/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA2FB0598 /* 162.251.5.152/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA3AC2D66 /* 163.172.45.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA484ACD1 /* 164.132.172.209/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA59A64CC /* 165.154.100.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA549F2A3 /* 165.73.242.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xA646CF02 /* 166.70.207.2/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C114 /* 171.25.193.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C1EA /* 171.25.193.234/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C119 /* 171.25.193.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C14D /* 171.25.193.77/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C14E /* 171.25.193.78/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAB19C150 /* 171.25.193.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC68B654 /* 172.104.182.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC68BA49 /* 172.104.186.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC68F39B /* 172.104.243.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC69AEC3 /* 172.105.174.195/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC69140C /* 172.105.20.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE8D1FE /* 172.232.209.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACE95229 /* 172.233.82.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACEAE4AE /* 172.234.228.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACF5FBE8 /* 172.245.251.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xACF5219F /* 172.245.33.159/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC51836E /* 172.81.131.110/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC51838B /* 172.81.131.139/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC51839C /* 172.81.131.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC51845E /* 172.81.132.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAC51879D /* 172.81.135.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAD00036F /* 173.0.3.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xADEDCE44 /* 173.237.206.68/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xADFFC6F3 /* 173.255.198.243/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xAD2C8D22 /* 173.44.141.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB076C121 /* 176.118.193.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0795133 /* 176.121.81.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB03A6462 /* 176.58.100.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB03A79B1 /* 176.58.121.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419403 /* 176.65.148.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419564 /* 176.65.149.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419554 /* 176.65.149.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419557 /* 176.65.149.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419558 /* 176.65.149.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB0419560 /* 176.65.149.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB06172CA /* 176.97.114.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2A2AF05 /* 178.162.175.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB211AA90 /* 178.17.170.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB211AA17 /* 178.17.170.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB211AB66 /* 178.17.171.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB211AE0E /* 178.17.174.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB211AEA4 /* 178.17.174.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2AF94D1 /* 178.175.148.209/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2AF94F6 /* 178.175.148.246/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2143710 /* 178.20.55.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB21437B6 /* 178.20.55.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2DA9012 /* 178.218.144.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2DA9033 /* 178.218.144.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2DA9040 /* 178.218.144.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2DA9060 /* 178.218.144.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB2DA9063 /* 178.218.144.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB323020A /* 179.35.2.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32B8010 /* 179.43.128.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32B9FC2 /* 179.43.159.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32B9FC4 /* 179.43.159.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32B9FC8 /* 179.43.159.200/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32B9F4E /* 179.43.159.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32BB6E8 /* 179.43.182.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB32BB63A /* 179.43.182.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB496E263 /* 180.150.226.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9645584 /* 185.100.85.132/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9645516 /* 185.100.85.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9645518 /* 185.100.85.24/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9645788 /* 185.100.87.136/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB964578B /* 185.100.87.139/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96457A6 /* 185.100.87.166/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96457AE /* 185.100.87.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96457C0 /* 185.100.87.192/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96457FA /* 185.100.87.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96457FD /* 185.100.87.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9645729 /* 185.100.87.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB90A1029 /* 185.10.16.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96A6666 /* 185.106.102.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96B3940 /* 185.107.57.64/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB96B3942 /* 185.107.57.66/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB970900B /* 185.112.144.11/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97092A7 /* 185.112.146.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97092A8 /* 185.112.146.168/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB971801E /* 185.113.128.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97108BA /* 185.113.8.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97810AB /* 185.120.16.171/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97810B0 /* 185.120.16.176/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB97E7392 /* 185.126.115.146/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D0A /* 185.129.61.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D81 /* 185.129.61.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D01 /* 185.129.61.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D02 /* 185.129.61.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D04 /* 185.129.61.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813D08 /* 185.129.61.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9813E3E /* 185.129.62.62/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9822C2B /* 185.130.44.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9822F3A /* 185.130.47.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB90E1F71 /* 185.14.31.113/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB992E8EA /* 185.146.232.234/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9961C0D /* 185.150.28.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB999C5E3 /* 185.153.197.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB999C668 /* 185.153.198.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB99A6E8E /* 185.154.110.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB99A6E11 /* 185.154.110.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB99EF99B /* 185.158.249.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9A5A9EF /* 185.165.169.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9A5AB54 /* 185.165.171.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9AA7219 /* 185.170.114.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9B19722 /* 185.177.151.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9B79DD6 /* 185.183.157.214/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9B79F28 /* 185.183.159.40/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9BFCCFE /* 185.191.204.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9C134B4 /* 185.193.52.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9C3EC37 /* 185.195.236.55/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9C347F4 /* 185.195.71.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9CF6B82 /* 185.207.107.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9CF6BD8 /* 185.207.107.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC64F0 /* 185.220.100.240/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6500 /* 185.220.101.0/26 */, 26, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6568 /* 185.220.101.104/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC656C /* 185.220.101.108/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC656E /* 185.220.101.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6581 /* 185.220.101.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6582 /* 185.220.101.130/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6584 /* 185.220.101.132/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6588 /* 185.220.101.136/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC658A /* 185.220.101.138/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC658C /* 185.220.101.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6590 /* 185.220.101.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65A0 /* 185.220.101.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65B1 /* 185.220.101.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65B2 /* 185.220.101.178/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65B6 /* 185.220.101.182/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65B8 /* 185.220.101.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65BC /* 185.220.101.188/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC65BE /* 185.220.101.190/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6540 /* 185.220.101.64/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6550 /* 185.220.101.80/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6558 /* 185.220.101.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC655A /* 185.220.101.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6560 /* 185.220.101.96/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6704 /* 185.220.103.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9DC6708 /* 185.220.103.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E145CB /* 185.225.69.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E145E8 /* 185.225.69.232/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E1470E /* 185.225.71.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E3866A /* 185.227.134.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E76633 /* 185.231.102.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9E96417 /* 185.233.100.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9EB921D /* 185.235.146.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D073 /* 185.241.208.115/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D0CA /* 185.241.208.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D0CC /* 185.241.208.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D0CE /* 185.241.208.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D036 /* 185.241.208.54/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D047 /* 185.241.208.71/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D051 /* 185.241.208.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F1D05C /* 185.241.208.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F4C0AF /* 185.244.192.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F4C0B8 /* 185.244.192.184/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F680A1 /* 185.246.128.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F6BC95 /* 185.246.188.149/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F6BC49 /* 185.246.188.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F6BC4A /* 185.246.188.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F6BD8C /* 185.246.189.140/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F6BD63 /* 185.246.189.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F654B3 /* 185.246.84.179/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F7B869 /* 185.247.184.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F7B821 /* 185.247.184.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9F7E2AF /* 185.247.226.175/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9FCE8DA /* 185.252.232.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9FEC48D /* 185.254.196.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9222102 /* 185.34.33.2/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB923CADE /* 185.35.202.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB926AF85 /* 185.38.175.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB927CF53 /* 185.39.207.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280464 /* 185.40.4.100/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280479 /* 185.40.4.121/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB928047F /* 185.40.4.127/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280484 /* 185.40.4.132/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280495 /* 185.40.4.149/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280496 /* 185.40.4.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280414 /* 185.40.4.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280416 /* 185.40.4.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB928041D /* 185.40.4.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280426 /* 185.40.4.38/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB928042C /* 185.40.4.44/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9280440 /* 185.40.4.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB928045C /* 185.40.4.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB92AAACB /* 185.42.170.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB938AB5E /* 185.56.171.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9385353 /* 185.56.83.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB9435272 /* 185.67.82.114/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xB952DB6D /* 185.82.219.109/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBCA5C861 /* 188.165.200.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBCD66815 /* 188.214.104.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBCEFBF19 /* 188.239.191.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBC44241C /* 188.68.36.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBC4429BF /* 188.68.41.191/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBC4431EB /* 188.68.49.235/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBC4434E7 /* 188.68.52.231/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBE67B362 /* 190.103.179.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBE78E562 /* 190.120.229.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xBED3FE61 /* 190.211.254.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC06C3096 /* 192.108.48.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC07CB49A /* 192.124.180.154/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC0D2A01F /* 192.210.160.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC0D2A023 /* 192.210.160.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC0D2D60A /* 192.210.214.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC0D2FF2F /* 192.210.255.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC0038D9D /* 192.3.141.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC003AD4F /* 192.3.173.79/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC003E4E5 /* 192.3.228.229/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC003F197 /* 192.3.241.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A740D /* 192.42.116.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A740E /* 192.42.116.14/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A7411 /* 192.42.116.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74AD /* 192.42.116.173/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74AE /* 192.42.116.174/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74B0 /* 192.42.116.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A7412 /* 192.42.116.18/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74B8 /* 192.42.116.184/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74BA /* 192.42.116.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74BF /* 192.42.116.191/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74C0 /* 192.42.116.192/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74C8 /* 192.42.116.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A7414 /* 192.42.116.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74D0 /* 192.42.116.208/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A74D8 /* 192.42.116.216/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A7416 /* 192.42.116.22/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A7418 /* 192.42.116.24/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC02A741C /* 192.42.116.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC063956F /* 192.99.149.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1698696 /* 193.105.134.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC169869B /* 193.105.134.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1BD64C2 /* 193.189.100.194/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1BD64C4 /* 193.189.100.196/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1BD64C8 /* 193.189.100.200/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1BD64CC /* 193.189.100.204/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1BD64CE /* 193.189.100.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA7685 /* 193.218.118.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA7699 /* 193.218.118.153/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA769D /* 193.218.118.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA76A0 /* 193.218.118.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA76AD /* 193.218.118.173/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA76B2 /* 193.218.118.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA76B6 /* 193.218.118.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA76BC /* 193.218.118.188/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA7638 /* 193.218.118.56/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA7648 /* 193.218.118.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1DA7659 /* 193.218.118.89/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1EDDDE4 /* 193.237.221.228/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1EFE866 /* 193.239.232.102/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC11A73A1 /* 193.26.115.161/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC11A73D4 /* 193.26.115.212/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC11A732B /* 193.26.115.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC11A733D /* 193.26.115.61/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC120A260 /* 193.32.162.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC1248415 /* 193.36.132.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC20F7085 /* 194.15.112.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC20F7176 /* 194.15.113.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC20F73D4 /* 194.15.115.212/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC2A38263 /* 194.163.130.99/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC2A39D31 /* 194.163.157.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC2E9AE38 /* 194.233.174.56/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC21AC04D /* 194.26.192.77/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC235899C /* 194.53.137.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC2573762 /* 194.87.55.98/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC3A0DC68 /* 195.160.220.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC3B00317 /* 195.176.3.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC3B00318 /* 195.176.3.24/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEEB0 /* 195.47.238.176/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEEB2 /* 195.47.238.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEE52 /* 195.47.238.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEE54 /* 195.47.238.84/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEE56 /* 195.47.238.86/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEE58 /* 195.47.238.88/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC32FEE5C /* 195.47.238.92/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC35097F2 /* 195.80.151.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC3584ACE /* 195.88.74.206/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC690B2B9 /* 198.144.178.185/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC690B2BB /* 198.144.178.187/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6FB54A3 /* 198.251.84.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6FB54ED /* 198.251.84.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6FB5812 /* 198.251.88.18/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6FB5960 /* 198.251.89.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC62E81AA /* 198.46.129.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC62EA69D /* 198.46.166.157/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC63A6B35 /* 198.58.107.53/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6609B03 /* 198.96.155.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6623021 /* 198.98.48.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6623023 /* 198.98.48.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC66232C7 /* 198.98.50.199/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC66233BD /* 198.98.51.189/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC66233F9 /* 198.98.51.249/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6623997 /* 198.98.57.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC662394A /* 198.98.57.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC6623E9E /* 198.98.62.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7BD1B7B /* 199.189.27.123/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3F9D6 /* 199.195.249.214/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3FB77 /* 199.195.251.119/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3FBCA /* 199.195.251.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3FD7C /* 199.195.253.124/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3FD9C /* 199.195.253.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC7C3FDB4 /* 199.195.253.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xC87AB502 /* 200.122.181.2/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCAB66381 /* 202.182.99.129/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC890E68 /* 204.137.14.104/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC890E6A /* 204.137.14.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC890E5C /* 204.137.14.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCCC21D04 /* 204.194.29.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC089C8E /* 204.8.156.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC55BF07 /* 204.85.191.7/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC55BF08 /* 204.85.191.8/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086064 /* 204.8.96.100/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086068 /* 204.8.96.104/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086070 /* 204.8.96.112/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086078 /* 204.8.96.120/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC08607A /* 204.8.96.122/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC08608C /* 204.8.96.140/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086090 /* 204.8.96.144/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC0860A0 /* 204.8.96.160/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC0860B0 /* 204.8.96.176/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC0860B8 /* 204.8.96.184/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC0860BD /* 204.8.96.189/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086040 /* 204.8.96.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086043 /* 204.8.96.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086044 /* 204.8.96.68/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086046 /* 204.8.96.70/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086048 /* 204.8.96.72/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086050 /* 204.8.96.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086052 /* 204.8.96.82/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086054 /* 204.8.96.84/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCC086058 /* 204.8.96.88/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB971B4 /* 205.185.113.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97108 /* 205.185.113.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB974D7 /* 205.185.116.215/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97422 /* 205.185.116.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97595 /* 205.185.117.149/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB9761F /* 205.185.118.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97723 /* 205.185.119.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB979AA /* 205.185.121.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB979B1 /* 205.185.121.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97B5D /* 205.185.123.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97CB0 /* 205.185.124.176/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCDB97FE7 /* 205.185.127.231/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xCF20DA29 /* 207.32.218.41/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D20B5 /* 209.141.32.181/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D20C6 /* 209.141.32.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D220F /* 209.141.34.15/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D255E /* 209.141.37.94/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D2844 /* 209.141.40.68/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D2D8D /* 209.141.45.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D2D51 /* 209.141.45.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D2ECB /* 209.141.46.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D33B4 /* 209.141.51.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D36CB /* 209.141.54.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D36DA /* 209.141.54.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D371A /* 209.141.55.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D3AFE /* 209.141.58.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD18D3D34 /* 209.141.61.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD4154206 /* 212.21.66.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD426BDBA /* 212.38.189.186/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD445A750 /* 212.69.167.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD44986CC /* 212.73.134.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD45F324D /* 212.95.50.77/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD45F364E /* 212.95.54.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD8EF5A13 /* 216.239.90.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD8499F65 /* 216.73.159.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD8499F4B /* 216.73.159.75/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD90CDD83 /* 217.12.221.131/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0xD9C7C7FA /* 217.199.199.250/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789F864 /* 23.137.248.100/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789F8C0 /* 23.137.248.192/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789FA53 /* 23.137.250.83/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789FDFE /* 23.137.253.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789FD1B /* 23.137.253.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1789FE89 /* 23.137.254.137/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17970808 /* 23.151.8.8/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1799F821 /* 23.153.248.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1799F822 /* 23.153.248.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x179B0868 /* 23.155.8.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17B8300D /* 23.184.48.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17B8304E /* 23.184.48.78/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17BFC810 /* 23.191.200.16/28 */, 28, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17BFC802 /* 23.191.200.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17BFC804 /* 23.191.200.4/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17BFC808 /* 23.191.200.8/29 */, 29, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x17EC7AC1 /* 23.236.122.193/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x175ED319 /* 23.94.211.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x175E24A7 /* 23.94.36.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x175E50E5 /* 23.94.80.229/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x18F048AA /* 24.240.72.170/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x02380A24 /* 2.56.10.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x023A38DC /* 2.58.56.220/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x023A3823 /* 2.58.56.35/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x023A382B /* 2.58.56.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1BFF4BC6 /* 27.255.75.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1F811641 /* 31.129.22.65/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1F8500D2 /* 31.133.0.210/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1FB8EC68 /* 31.184.236.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1FDC4BED /* 31.220.75.237/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x1F2CEE19 /* 31.44.238.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x23007F34 /* 35.0.127.52/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2578EF3B /* 37.120.239.59/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x25BB05C0 /* 37.187.5.192/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x25DDD047 /* 37.221.208.71/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x25E481BD /* 37.228.129.189/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x25E48105 /* 37.228.129.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x253078C4 /* 37.48.120.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2530469C /* 37.48.70.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x254D38EE /* 37.77.56.238/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x266174F2 /* 38.97.116.242/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x266174F4 /* 38.97.116.244/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x28A00301 /* 40.160.3.1/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D0BB757 /* 45.11.183.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D0B3B1C /* 45.11.59.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D0C0350 /* 45.12.3.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8085F2 /* 45.128.133.242/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D84F6F5 /* 45.132.246.245/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D86E124 /* 45.134.225.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D89630A /* 45.137.99.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8963D8 /* 45.137.99.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A106B /* 45.138.16.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A1071 /* 45.138.16.113/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A1098 /* 45.138.16.152/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10B2 /* 45.138.16.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10DE /* 45.138.16.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10E6 /* 45.138.16.230/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10EF /* 45.138.16.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10F0 /* 45.138.16.240/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A10F8 /* 45.138.16.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A102A /* 45.138.16.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A1045 /* 45.138.16.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A104C /* 45.138.16.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8A578E /* 45.138.87.142/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8B32CA /* 45.139.50.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8B32CC /* 45.139.50.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD76E /* 45.141.215.110/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD772 /* 45.141.215.114/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD785 /* 45.141.215.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD7A7 /* 45.141.215.167/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD7A9 /* 45.141.215.169/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD711 /* 45.141.215.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD713 /* 45.141.215.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD715 /* 45.141.215.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD71C /* 45.141.215.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD728 /* 45.141.215.40/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD738 /* 45.141.215.56/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD73D /* 45.141.215.61/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD73E /* 45.141.215.62/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD750 /* 45.141.215.80/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD758 /* 45.141.215.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD75A /* 45.141.215.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD75F /* 45.141.215.95/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D8DD761 /* 45.141.215.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D940A6F /* 45.148.10.111/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D940AA9 /* 45.148.10.169/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D980A16 /* 45.152.10.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D9D0B06 /* 45.157.11.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D9FFA90 /* 45.159.250.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D3DB9AC /* 45.61.185.172/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D3DBACB /* 45.61.186.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D3DBBC8 /* 45.61.187.200/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D3DBC0F /* 45.61.188.15/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D42230A /* 45.66.35.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D422314 /* 45.66.35.20/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D422316 /* 45.66.35.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D42231F /* 45.66.35.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D422320 /* 45.66.35.32/30 */, 30, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D432252 /* 45.67.34.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D4C59FE /* 45.76.89.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D4E2CD7 /* 45.78.44.215/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D4F90DE /* 45.79.144.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D509ECD /* 45.80.158.205/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D509E17 /* 45.80.158.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D509E1B /* 45.80.158.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D509E45 /* 45.80.158.69/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D0816CF /* 45.8.22.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D536889 /* 45.83.104.137/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B65 /* 45.84.107.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B80 /* 45.84.107.128/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546BAC /* 45.84.107.172/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B11 /* 45.84.107.17/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546BB6 /* 45.84.107.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546BC6 /* 45.84.107.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546BDE /* 45.84.107.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B21 /* 45.84.107.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B2F /* 45.84.107.47/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B36 /* 45.84.107.54/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B4A /* 45.84.107.74/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B4C /* 45.84.107.76/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D546B61 /* 45.84.107.97/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D58BA56 /* 45.88.186.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D099432 /* 45.9.148.50/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D099C64 /* 45.9.156.100/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D09A86C /* 45.9.168.108/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D09A816 /* 45.9.168.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5E1F44 /* 45.94.31.68/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA968 /* 45.95.169.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA96D /* 45.95.169.109/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA982 /* 45.95.169.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA90E /* 45.95.169.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA9E6 /* 45.95.169.230/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2D5FA9FF /* 45.95.169.255/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2EA5F324 /* 46.165.243.36/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2EB615F8 /* 46.182.21.248/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2E176D19 /* 46.23.109.25/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2EE8FBBF /* 46.232.251.191/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2EEA2F69 /* 46.234.47.105/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2E1EBCDA /* 46.30.188.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2E26F3D2 /* 46.38.243.210/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2FFE8EB4 /* 47.254.142.180/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x2F59C1E6 /* 47.89.193.230/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05685606 /* 5.104.86.6/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x330F3B0F /* 51.15.59.15/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x33C36BDC /* 51.195.107.220/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x33C3A6AE /* 51.195.166.174/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x33DE8E43 /* 51.222.142.67/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3326E12E /* 51.38.225.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3351DE3E /* 51.81.222.62/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05B5506B /* 5.181.80.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x335B1297 /* 51.91.18.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05C45F22 /* 5.196.95.34/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF64E3 /* 5.255.100.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF641A /* 5.255.100.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF650A /* 5.255.101.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF67EB /* 5.255.103.235/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF68CA /* 5.255.104.202/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6E1D /* 5.255.110.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6F40 /* 5.255.111.64/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF72AB /* 5.255.114.171/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF733A /* 5.255.115.58/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7538 /* 5.255.117.56/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF76DA /* 5.255.118.218/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7947 /* 5.255.121.71/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7B9E /* 5.255.123.158/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7BA4 /* 5.255.123.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7DC4 /* 5.255.125.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF7FDE /* 5.255.127.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF61C4 /* 5.255.97.196/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF61DD /* 5.255.97.221/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6297 /* 5.255.98.151/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF62C6 /* 5.255.98.198/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6217 /* 5.255.98.23/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6393 /* 5.255.99.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05FF6305 /* 5.255.99.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x050243E2 /* 5.2.67.226/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x0502486E /* 5.2.72.110/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x05024FBE /* 5.2.79.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x0522B6CB /* 5.34.182.203/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x36246515 /* 54.36.101.21/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x36246CA2 /* 54.36.108.162/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3624D1FD /* 54.36.209.253/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3624D1FE /* 54.36.209.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x052D665D /* 5.45.102.93/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x052D68B0 /* 5.45.104.176/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x052D62A2 /* 5.45.98.162/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3980DC6B /* 57.128.220.107/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3E852D02 /* 62.133.45.2/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3E853F92 /* 62.133.63.146/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3EAB89A9 /* 62.171.137.169/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3EB65492 /* 62.182.84.146/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x3E482CA0 /* 62.72.44.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x40BE4C0A /* 64.190.76.10/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x40BE4C0C /* 64.190.76.12/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x40BE4C02 /* 64.190.76.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x40BE4C04 /* 64.190.76.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x41570716 /* 65.87.7.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4292C121 /* 66.146.193.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x42DCF2DE /* 66.220.242.222/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x424E28B6 /* 66.78.40.182/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x424E2849 /* 66.78.40.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x43DB6D8D /* 67.219.109.141/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4713906A /* 71.19.144.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x480EB30A /* 72.14.179.10/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4812D752 /* 72.18.215.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x48D331EB /* 72.211.49.235/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x48EB8174 /* 72.235.129.116/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4A522FC2 /* 74.82.47.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4DF6629F /* 77.246.98.159/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4D301CEF /* 77.48.28.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4D51F748 /* 77.81.247.72/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4E8E12DB /* 78.142.18.219/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4E9F8360 /* 78.159.131.96/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4F64EB1D /* 79.100.235.29/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x4F7F81A0 /* 79.127.129.160/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x50F13CCF /* 80.241.60.207/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5043A751 /* 80.67.167.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5043ACA2 /* 80.67.172.162/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x50524E0E /* 80.82.78.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x505E5C6A /* 80.94.92.106/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x505E5C5C /* 80.94.92.92/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5110212A /* 81.16.33.42/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x51111C5F /* 81.17.28.95/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x51B56816 /* 81.181.104.22/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x08D01AB1 /* 8.208.26.177/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x08D16A13 /* 8.209.106.19/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x52DD80BF /* 82.221.128.191/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x52DD8305 /* 82.221.131.5/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x52DD8356 /* 82.221.131.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x52DD8BBE /* 82.221.139.190/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x524431E3 /* 82.68.49.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x53D90949 /* 83.217.9.73/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5360D53F /* 83.96.213.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5361144D /* 83.97.20.77/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5410E0E3 /* 84.16.224.227/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5413B614 /* 84.19.182.20/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x54D3E20D /* 84.211.226.13/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x54EF2E90 /* 84.239.46.144/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x55EF2982 /* 85.239.41.130/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x555AC42E /* 85.90.196.46/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x555DDACC /* 85.93.218.204/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x56361C31 /* 86.54.28.49/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x57766E1B /* 87.118.110.27/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x57767467 /* 87.118.116.103/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5776740C /* 87.118.116.12/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5776745A /* 87.118.116.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x57767A1E /* 87.118.122.30/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x57767A33 /* 87.118.122.51/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5778FE84 /* 87.120.254.132/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x58501456 /* 88.80.20.86/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x58501A02 /* 88.80.26.2/31 */, 31, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x58501A04 /* 88.80.26.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59936C5A /* 89.147.108.90/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59936E76 /* 89.147.110.118/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59936E9A /* 89.147.110.154/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59936E52 /* 89.147.110.82/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59936F57 /* 89.147.111.87/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59BB8F1F /* 89.187.143.31/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59EA9DFE /* 89.234.157.254/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x59202996 /* 89.32.41.150/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5924E780 /* 89.36.231.128/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x593A1AD8 /* 89.58.26.216/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x593A299C /* 89.58.41.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5B84903B /* 91.132.144.59/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BCA0568 /* 91.202.5.104/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BCA059B /* 91.202.5.155/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BCB90C2 /* 91.203.144.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BCB9174 /* 91.203.145.116/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BCE1A1A /* 91.206.26.26/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04B99 /* 91.208.75.153/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04B9C /* 91.208.75.156/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04BB2 /* 91.208.75.178/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04BEF /* 91.208.75.239/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04B03 /* 91.208.75.3/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BD04B04 /* 91.208.75.4/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BDBEC65 /* 91.219.236.101/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BDBEC5B /* 91.219.236.91/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5BDBED27 /* 91.219.237.39/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5B5C6D7E /* 91.92.109.126/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5B5C6D2B /* 91.92.109.43/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5CF318A3 /* 92.243.24.163/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5CF68A91 /* 92.246.138.145/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5CF65485 /* 92.246.84.133/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D7B6D74 /* 93.123.109.116/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D7B0C70 /* 93.123.12.112/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5DB9A5D3 /* 93.185.165.211/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D5FE325 /* 93.95.227.37/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D5FE47D /* 93.95.228.125/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D5FE4CD /* 93.95.228.205/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D5FE70E /* 93.95.231.14/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D5FE758 /* 93.95.231.88/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D6368C2 /* 93.99.104.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5D636828 /* 93.99.104.40/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E66330F /* 94.102.51.15/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E8EF1C2 /* 94.142.241.194/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E8EF410 /* 94.142.244.16/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E107379 /* 94.16.115.121/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E107451 /* 94.16.116.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E10795B /* 94.16.121.91/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5EE6D093 /* 94.230.208.147/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5EE6D094 /* 94.230.208.148/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E486721 /* 94.72.103.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5E4BE151 /* 94.75.225.81/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5F802BA4 /* 95.128.43.164/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5F8EA13F /* 95.142.161.63/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5F8FC17D /* 95.143.193.125/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5FA8AD8F /* 95.168.173.143/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5FD3AE89 /* 95.211.174.137/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5FD3F41C /* 95.211.244.28/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x5FD86B94 /* 95.216.107.148/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x60420F98 /* 96.66.15.152/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + { 0x6280AD21 /* 98.128.173.33/32 */, 32, NDPI_ANONYMOUS_SUBSCRIBER }, + /* End */ + { 0x0, 0, 0 } +}; + +static ndpi_network6 ndpi_anonymous_subscriber_tor_exit_nodes_protocol_list_6[] = { + { "2001:1af8:4700:a114:6::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:2:1:3935:104:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:3:221:3132:102:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:3:221:4134:101:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:3:221:701:102:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:3:239:1003:103:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:1b60:3:239:1003:106:0:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:1008:20d1::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:2:9161::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:304:200::3348", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:304:200::3ea4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:304:200::9dce", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:601:1100::6524", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:601:1100::71bb", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:700:10a2::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:701:1100::912e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:a:5c0::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:41d0:a:fe22::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:470:1:908::9001", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:4b20:12:f001::105", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:4b98:dc0:47:216:3eff:fe3d:888c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:620:20d0::23", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:620:20d0::24", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:638:301:f732::150", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:2044:1905::26", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:2608::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c::20", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c:2::234", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c::25", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c:4::77", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c:4::78", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:289c:4::80", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:173", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:174", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:178", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:180", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:184", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:186", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:191", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:192", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:194", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:198", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:200", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:208", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:210", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:192:42:116:218", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5513", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5514", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5517", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5518", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5520", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5522", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5524", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:6ec:203:218:33ff:fe44:5528", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:666::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:702:1ce:1ce:babe:10", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:702:1ce:1ce:babe:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:702:1ce:1ce:babe:2", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:702:1ce:1ce:babe:4", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:89c:702:1ce:1ce:babe:8", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:e28:1::100", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:e28:1::2", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:67c:e28:1::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:910:1400:107::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:9b0:25b:f700::913", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:ac8:22:43::20e5:a7d7", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:b011:4006:d5b3::b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:b030:2422::7234", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:bc8:1640:317d:dc00:ff:fe39:7bb3", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:bf0:666::666", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:df7:7400:c10d:216:3eff:fecd:511a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2001:df7:7e80:100:9f2b:1d15:c713:52ad", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2400:8901::f03c:94ff:fe7f:59f6", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2400:8901::f03c:95ff:fe89:4a88", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2400:8905::f03c:95ff:fe67:ec03", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2400:8907::f03c:95ff:fe79:8c79", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2400:d320:2202:5765::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2401:c080:1c02:2d4::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2401:c080:2000:111f:5400:4ff:fea3:9c02", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2402:1f00:8000:239::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2402:1f00:8100:400::9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2407:3640:2207:8882::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2407:3640:2255:3978::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c00::f03c:91ff:fe73:f9ba", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c00::f03c:91ff:fe96:1cd9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c00::f03c:95ff:fe5d:8f00", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c03::f03c:91ff:fe24:47be", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c03::f03c:95ff:fe5d:562", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c04::f03c:95ff:fe41:d42c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c0a::f03c:95ff:fe5d:a877", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2600:3c0b::f03c:95ff:fefa:bdff", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:2da:0:33:5054:ff:fe6c:39dc", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:2da:0:34:5054:ff:fe7e:7c21", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:2e5::104", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fa8a:3:a::a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:10:61b::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:12:81a6::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:12:9fef::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:12:a679::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:18:a378::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:18:f38f::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:19:524::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fc24:19:eb06::dead", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fccf:310:1::c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2602:fef9:100:1100::199", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2604:2dc0:101:200::53c8", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2604:2dc0:202:300::ed3", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2604:4300:a:224:216:3cff:fe31:d55f", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2604:b480:3:6::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:2700:0:2:a800:ff:fe39:574", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:1008:1111:1111:1111:1111", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:1362::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:1ab:2605:6400:10:1ab", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:44f::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:58f:8768:8283:1a62:bdc6", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:75:1585:9b71:1c16:b1a1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:10:984:41e7:4ad6:a11e:cdcc", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:1a8:f5f2:4a28:b5ed:931d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:3ea:c2a3:1162:7224:e5df", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:482:3920:1829:1839:1293", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:769:e559:5c8f:a3e9:aed1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:be7::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:c26:5163:253e:1ef6:d887", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:c26:5163:253e:1ef6:d896", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:20:ff9::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:e948:4cee:191b:1e55:25b3", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:ea52:4246:fb82:f36c:8ede", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:ea86:59b6:d4c6:5192:1a19", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:eb71:51b7:4869:7579:3aa1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:ebb6:532:acc:65:31", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:ed0c:b477:4972:756a:2f42", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:edc3::34", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:ef7a:391a:8c71:a2f1:9506", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:efba:dead::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f04d:2605:6400:30:30", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f05d:c272:5525:72b1:e64c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f060:be62:b857:b818:9144", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f08c:45b7:4a99:a154:694e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f0ed:9151:66ed:6366:5c74", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:1:1:1:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:1111:2222:3333:4444", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:1:2:3:4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174::42", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:42:42::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:42:42:42:0", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:42:42:42:42", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:4:3:2:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f174:cafe::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f1fa:f57f:d285:3ed9:ee27", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f38b:28b3:cd24:51f3:e412", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f414:42ce:c612:dab8:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f440:757e:adf1:55f7:5a31", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f49b:e2ee:34f8:c854:6f63", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f4ae:8f7b:cc6e:d1d7:b978", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f503::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f51a:f826:ecfc:47b6:92a9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f534:ae1d:c3d9:9941:d85e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f57d:916e:73f8:d5e7:675b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f5a3:5bb1:af4e:c969:c73e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f5db:25a1:b884:ef2d:8818", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f623:5a78:29a6:8492:27b0", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f671:3fc7:4bb4:ca18:86fa", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f753:891d:ee77:e97c:741a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f77f:f41c:2bce:7d61:210b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f77f:f41c:2bce:7d61:2e06", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f78b::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f7c0:8511:b113:ca11:9baa", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f7ca::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f7fa:c230:6fe8:a09a:5836", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f805:1e96:b223:fbe5:cfac", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f82f:7de1:3de3:8947:bc6a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f858:2704:73e1:7085:12ef", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f8b5:620c:dc25:c624:aafd", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f8d5::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f8da:2b2:a293:30ad:506d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f91b:8124:6a51:9ea2:5d13", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:30:f920:f523:28ef:3617:8b86", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:40:fde8:11c7:119b:aaf9:2722", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:40:fe09::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:d814:1b8::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:6400:d814:1d1::100", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2605:aa80:0:9::3", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:120:c74::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:201:3100::35c5", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:205:200::4894", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:60:566f::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:61:785:1:2:3:4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:5300:61:785::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:f130:0:ed:216:3cff:febd:3b42", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:f530:8002::19", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2607:fa18:3:beef:f001:c0de:feed:ba5e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::101", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::102", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::104", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::108", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::110", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::118", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::120", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::122", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::140", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::148", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::150", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::158", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::160", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::168", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::170", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::178", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::180", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::189", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::e664", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e640", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e643", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e644", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e646", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e648", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e650", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e652", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e654", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:7:6001::ffff:c759:e658", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2620:95:4007::111", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2800:ba0:6:c1::4858", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:16b0:1:243::7012:3117", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:16b0:1:243::7012:a500", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:16b0:1:243::7012:e817", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1728:f:f:f:f:c03c:9898", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1b88:4::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1b88:4::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:12c::4d3a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:138::94d2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:15::45dc", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:44::326d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:73::a568", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:1dc0:caff:8b::24bd", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:4d80::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:74a0:e000:1003::114", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:99a0:0:1000::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a00:c70:1:185:246:84:179:1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:270:9847::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:4262:1ab:ffff::133", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:4f9:2b:75d::124:148", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:5e0:36:c311::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:6340:2:501::10", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:6340:2:501::20", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:7e00::f03c:91ff:fe56:2656", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a01:7e00::f03c:91ff:fe78:b382", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:16d0:0:5::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:2970:1001::4b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:418:6017::147", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:418:6017::148", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:4780:c:b915::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:8010:677e:f9d0:215:5dff:fe01:210c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:898:218::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:898:218::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:c204:2195:2012::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:c206:2240:8448::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:c206:2241:2588::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:ec0:209:10::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a02:ed06::222", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:13:7c3:dead:beef:ca1f:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:15:928:dead:beef:ca1f:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:17:a15:d4db:fbff:fef4:8b7b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:1d:3d:1827:b1ff:feec:f6b0", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:1d:b7a:782f:17ff:fef0:a708", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:1e:7d4:84fb:5fff:fef3:9d56", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:1e:81:c835:7dff:fe90:3ed5", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:21:8a8:dead:beef:ca1f:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:27:36:c813:6dff:fe0e:b93e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:27:6f8:e466:27ff:fe82:1b2a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:28:1e8::69", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:29:8a9:887f:9eff:feed:9e9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:2b:66e:dead:beef:ca1f:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:37:3:e842:2ff:feb9:c49c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:46:197:b434:d3ff:fe68:d9e1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:48:4d:88c8:8eff:fee8:9d1a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:5:65b:388a:15ff:fedc:30d6", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:6:102b:c457:f3ff:feb0:a6d0", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:62:8:c855:23ff:fef6:50ee", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:6:614:d803:40ff:fec3:832a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:66:15:18a0:6bff:fe90:3147", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:6:d042:5440:88ff:fedd:4ae5", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:6:e047:6494:62ff:fe3f:85b8", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:4000:7:dcc:14ac:f2ff:fea9:e4c7", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::2", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::4", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::6", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::65", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::66", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::68", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a03:e600:100::70", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:101:46a::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:102:46e0::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:103:412::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:103:5acd::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:104:4735::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:104:ad97::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:105:98a3::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:105:d7eb::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:106:394::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:108:a34f::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:116:e0e3::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:119:3f0b::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:123:c6c3::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:126:3ab8::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:128:c6e7:50ef:cafe:babe:1337", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:52c0:130:896e::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a04:9dc0:31::c0cc:4d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:541:110:20::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:541:110:3e::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:541:112:31::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:6388::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:655b::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:67c6::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:6949::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:6bd4::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a05:b0c7:6cc4::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1280:bee1:2::ee12:230", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:12::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:12::2", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:12::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:15::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:15::2", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:15::4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:16::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:3c::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:47::166", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:0:50::11", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:3:19::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:3:34::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:1700:4:14::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:d380:0:103::62", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a06:e80:3000:1:bad:babe:ca11:911", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a07:6d80:1e01:3a13::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a07:e03:2a::bcde", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a07:e042:1:181::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a07:e042:1:182::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a09:61c0::20", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a09:61c0::22", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a09:61c0::beef", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a09:b280:fe01:61::a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0a:4cc0:c0:130c:14c3:a0ff:fe24:7692", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:64c0:f802:1::a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:64c0:f802:4c::a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:7140:1:1:5054:ff:fe12:2305", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:7140:6:1:5054:ff:fed8:5956", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:7140:8:1:5054:ff:fe43:9f9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:10::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:11::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:1::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:12::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:13::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:14::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:15::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:16::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:2::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:3::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:4::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:5::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:6::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:7::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:8::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c0:16c:9::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::10", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::129", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::130", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::132", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::134", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::137", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::138", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::140", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::148", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::150", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::158", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::160", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::168", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::170", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::174", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::177", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::178", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::182", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::184", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::188", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:1::190", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::18", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::20", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::32", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::34", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::38", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::40", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::48", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::50", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::58", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:2::60", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::28", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::30", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::64", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::68", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::70", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::78", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::80", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::88", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:3::90", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:4::100", 125, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:4::108", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:4::110", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:4::96", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2:4::98", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0b:f4c2::8", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fe0f:9e53", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fe37:3cb", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fe4e:df9e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fe58:9714", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fe87:1bec", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fead:5be0", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:feb6:9942", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fed0:6ed4", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fed1:b9d9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fee1:73d9", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:1705:be24:11ff:fef5:7c39", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:4000:be24:11ff:fe07:68d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:4000:be24:11ff:fe3c:6727", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:4000:be24:11ff:fe51:a829", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5700:3133:650:b0ea:eeff:fedb:1f7b", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:5cc0:1:1::293c:1518", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0c:e300::23", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:8140:1fff:22d0::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:8140:1fff:395e::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::10a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::1df", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::254", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::2ef", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::320", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::328", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::36c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::38c", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::394", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::3bd", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::3cc", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::3d5", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::50", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:bbc7:0:1::7f", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0d:c2c0:1:4::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:1d80:13:51e8::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:1d80:17:6f8d::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:100", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:127", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:132", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:149", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:20", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:22", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:29", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:38", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:44", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:64", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:4005:1002:ffff:185:40:4:92", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:b107:dd0::3:fa35:9316", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:11::796d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:13::67bc", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:14::24a8", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:5::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:8::a84e", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc0:0:d::d927", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc7:0:3::2d83", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:bfc7:0:4::6e7a", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:e701:1198::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0e:fa00:0:30::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:85c1:356:3238::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:85c1:356:424c::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:85c1:356:5bdd::beef", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:cdc6:500:11e3::2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:df00:0:255::194", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:df00:0:255::198", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:df00:0:255::200", 126, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:df00:0:255::204", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:df00:0:255::206", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f::182", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f::188", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:8605:d341:b954:fc51", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:9405:a52b:796f:aff2", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:9dd4:5bf6:2230:ae55", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:a052:2166:bef9:a432", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:a060:ebda:49aa:b011", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:b1ac:d060:1ef8:40de", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:baa4:d491:90be:dca5", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:c94a:de42:aac1:9045", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a0f:e586:f:f:e356:1bda:fc05:6784", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a10:8a40:f313::29", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a10:c800:1:9cc6::1", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a10:c800:1:f7f8:0:1ce:1ce:babe", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a11:6100:0:1467::", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a11:6100:0:22:a236:9fff:fe9e:36ea", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:6fc2:8000::639", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:1:1:194:26:192:77", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:1:1:2:58:56:220", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:1:1:2:58:56:35", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:1:1:2:58:56:43", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:115", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:202", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:204", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:206", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:71", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:81", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:185:241:208:92", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:107", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:113", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:178", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:222", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:230", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:239", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:240", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:248", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:42", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:69", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:138:16:76", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:110", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:114", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:133", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:167", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:169", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:17", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:19", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:21", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:28", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:40", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:56", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:61", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:62", 127, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:80", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:88", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:90", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:95", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:141:215:97", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:80:158:205", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:80:158:23", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:80:158:27", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:2:1:45:80:158:69", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:9:1:193:26:115:161", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2a12:a800:9:1:193:26:115:212", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2c0f:6c0:0:2::6983", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2c0f:6c0:0:3::479d", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + { "2c0f:6c0:0:4::95ea", 128, NDPI_ANONYMOUS_SUBSCRIBER }, + /* End */ + { NULL, 0, 0 } +}; diff --git a/src/lib/inc_generated/ndpi_tor_match.c.inc b/src/lib/inc_generated/ndpi_tor_match.c.inc index ade6b517a..dcc086f19 100644 --- a/src/lib/inc_generated/ndpi_tor_match.c.inc +++ b/src/lib/inc_generated/ndpi_tor_match.c.inc @@ -21,798 +21,5359 @@ static ndpi_network ndpi_protocol_tor_protocol_list[] = { - { 0x02380A24 /* 2.56.10.36/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x023A3823 /* 2.58.56.35/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x023A382B /* 2.58.56.43/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x023A38DC /* 2.58.56.220/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x050243E2 /* 5.2.67.226/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x0502486E /* 5.2.72.110/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05024FBE /* 5.2.79.190/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x0522B6CB /* 5.34.182.203/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x052D62A2 /* 5.45.98.162/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x052D665D /* 5.45.102.93/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x052D68B0 /* 5.45.104.176/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x053D338F /* 5.61.51.143/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x054F4213 /* 5.79.66.19/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05685606 /* 5.104.86.6/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05B5506B /* 5.181.80.107/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05B59C2C /* 5.181.156.44/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05C45F22 /* 5.196.95.34/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF61DD /* 5.255.97.221/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF6217 /* 5.255.98.23/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF6297 /* 5.255.98.151/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF62C6 /* 5.255.98.198/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF6305 /* 5.255.99.5/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF636C /* 5.255.99.108/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF637C /* 5.255.99.124/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF6393 /* 5.255.99.147/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF641A /* 5.255.100.26/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF64DB /* 5.255.100.219/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF64E3 /* 5.255.100.227/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF650A /* 5.255.101.10/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF67EB /* 5.255.103.235/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF68CA /* 5.255.104.202/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF6F40 /* 5.255.111.64/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF72AB /* 5.255.114.171/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF733A /* 5.255.115.58/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7538 /* 5.255.117.56/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF76B7 /* 5.255.118.183/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF76DA /* 5.255.118.218/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF76F4 /* 5.255.118.244/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF78CD /* 5.255.120.205/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7947 /* 5.255.121.71/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7B9E /* 5.255.123.158/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7BA4 /* 5.255.123.164/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7C86 /* 5.255.124.134/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7D29 /* 5.255.125.41/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7DC4 /* 5.255.125.196/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x05FF7FDE /* 5.255.127.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x08DA0929 /* 8.218.9.41/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x0FCCEE94 /* 15.204.238.148/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x175ED319 /* 23.94.211.25/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x17814083 /* 23.129.64.131/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x17814084 /* 23.129.64.132/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x17814088 /* 23.129.64.136/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0x17814090 /* 23.129.64.144/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x17814094 /* 23.129.64.148/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x17814096 /* 23.129.64.150/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x178140AB /* 23.129.64.171/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x178140AC /* 23.129.64.172/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x178140D3 /* 23.129.64.211/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x178140D4 /* 23.129.64.212/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x178140D8 /* 23.129.64.216/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0x178140E0 /* 23.129.64.224/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x178140E4 /* 23.129.64.228/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x178140E6 /* 23.129.64.230/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1789F864 /* 23.137.248.100/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1789FA53 /* 23.137.250.83/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1789FD1B /* 23.137.253.27/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1789FD6C /* 23.137.253.108/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x1789FD6E /* 23.137.253.110/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1799F821 /* 23.153.248.33/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1799F822 /* 23.153.248.34/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x179AB102 /* 23.154.177.2/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x179AB104 /* 23.154.177.4/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x179AB108 /* 23.154.177.8/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0x179AB110 /* 23.154.177.16/28 */, 28, NDPI_PROTOCOL_TOR }, - { 0x179B0868 /* 23.155.8.104/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x179B1804 /* 23.155.24.4/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x17B8304E /* 23.184.48.78/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x18F048AA /* 24.240.72.170/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1BFF4BC6 /* 27.255.75.198/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1F811641 /* 31.129.22.65/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1F8500D2 /* 31.133.0.210/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x1FDC4BED /* 31.220.75.237/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x23007F34 /* 35.0.127.52/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2530469C /* 37.48.70.156/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25722977 /* 37.114.41.119/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2578EF3B /* 37.120.239.59/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25BB05C0 /* 37.187.5.192/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25BB4A61 /* 37.187.74.97/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25E48105 /* 37.228.129.5/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25E4813F /* 37.228.129.63/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x25E48180 /* 37.228.129.128/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x266174F4 /* 38.97.116.244/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D0816CF /* 45.8.22.207/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D0B3B1C /* 45.11.59.28/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D0BE584 /* 45.11.229.132/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D0C0350 /* 45.12.3.80/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D0EA576 /* 45.14.165.118/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D3DB9AC /* 45.61.185.172/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D3DBACB /* 45.61.186.203/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D3DBBC8 /* 45.61.187.200/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D42230A /* 45.66.35.10/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D422314 /* 45.66.35.20/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x2D422316 /* 45.66.35.22/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D422323 /* 45.66.35.35/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D4E2CD7 /* 45.78.44.215/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D4F90DE /* 45.79.144.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D509E17 /* 45.80.158.23/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D509E1B /* 45.80.158.27/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D509E45 /* 45.80.158.69/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D509ECD /* 45.80.158.205/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D5315C1 /* 45.83.21.193/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D536889 /* 45.83.104.137/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D546B4C /* 45.84.107.76/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D546BB6 /* 45.84.107.182/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D546BC6 /* 45.84.107.198/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D5E1F44 /* 45.94.31.68/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D5FA982 /* 45.95.169.130/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D5FA9DF /* 45.95.169.223/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D5FA9E0 /* 45.95.169.224/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0x2D5FA9E4 /* 45.95.169.228/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x2D76852C /* 45.118.133.44/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8085F2 /* 45.128.133.242/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D84F6F5 /* 45.132.246.245/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D86E124 /* 45.134.225.36/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A102A /* 45.138.16.42/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A104C /* 45.138.16.76/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A106B /* 45.138.16.107/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A1071 /* 45.138.16.113/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A10B2 /* 45.138.16.178/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A10DE /* 45.138.16.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A10E6 /* 45.138.16.230/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8A10F0 /* 45.138.16.240/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD711 /* 45.141.215.17/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD713 /* 45.141.215.19/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD715 /* 45.141.215.21/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD71C /* 45.141.215.28/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD728 /* 45.141.215.40/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD738 /* 45.141.215.56/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD73D /* 45.141.215.61/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD73E /* 45.141.215.62/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x2D8DD750 /* 45.141.215.80/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x2D8DD758 /* 45.141.215.88/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD75A /* 45.141.215.90/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD75F /* 45.141.215.95/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD761 /* 45.141.215.97/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD76E /* 45.141.215.110/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x2D8DD772 /* 45.141.215.114/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD774 /* 45.141.215.116/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD785 /* 45.141.215.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD7A7 /* 45.141.215.167/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D8DD7A9 /* 45.141.215.169/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D940A6F /* 45.148.10.111/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D940AA9 /* 45.148.10.169/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D95CC4E /* 45.149.204.78/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2D9A621A /* 45.154.98.26/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2EA5F324 /* 46.165.243.36/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2EB615F8 /* 46.182.21.248/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2EDAA55E /* 46.218.165.94/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2EE8FBBF /* 46.232.251.191/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2EEA2F69 /* 46.234.47.105/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2F4CBB56 /* 47.76.187.86/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x2FF363A1 /* 47.243.99.161/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x330F3B0F /* 51.15.59.15/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3326E12E /* 51.38.225.46/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x335121BC /* 51.81.33.188/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3351DE3E /* 51.81.222.62/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3351FE0E /* 51.81.254.14/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x33599970 /* 51.89.153.112/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x335B1297 /* 51.91.18.151/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x33C3A6AE /* 51.195.166.174/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x33DE88DA /* 51.222.136.218/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x33DE8E43 /* 51.222.142.67/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x36246515 /* 54.36.101.21/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x36246CA2 /* 54.36.108.162/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3624D1FD /* 54.36.209.253/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3624D1FE /* 54.36.209.254/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3EAB89A9 /* 62.171.137.169/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x3EB65492 /* 62.182.84.146/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x40BE4C02 /* 64.190.76.2/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4157072A /* 65.87.7.42/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x424E28B6 /* 66.78.40.182/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4292C121 /* 66.146.193.33/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x42DCF2DE /* 66.220.242.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x43DB6D8D /* 67.219.109.141/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4713906A /* 71.19.144.106/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x471390DE /* 71.19.144.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x480EB30A /* 72.14.179.10/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x48D331EB /* 72.211.49.235/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x48EB8174 /* 72.235.129.116/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4A522FC2 /* 74.82.47.194/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4D250307 /* 77.37.3.7/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4D301CEC /* 77.48.28.236/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x4D301CEF /* 77.48.28.239/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4D51F748 /* 77.81.247.72/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4DDCC4FD /* 77.220.196.253/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x4E8E12DB /* 78.142.18.219/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5043A751 /* 80.67.167.81/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5043ACA2 /* 80.67.172.162/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x504E16DA /* 80.78.22.218/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x50524E0E /* 80.82.78.14/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x505E5C5C /* 80.94.92.92/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x505E5C6A /* 80.94.92.106/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x50D24EFC /* 80.210.78.252/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x50F13CCF /* 80.241.60.207/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5110212A /* 81.16.33.42/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x51111C5F /* 81.17.28.95/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x52998A77 /* 82.153.138.119/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x52D017C0 /* 82.208.23.192/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x52DD80BF /* 82.221.128.191/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x52DD8305 /* 82.221.131.5/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x52DD8BBE /* 82.221.139.190/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5360D53F /* 83.96.213.63/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5361144D /* 83.97.20.77/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x53D90949 /* 83.217.9.73/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5410E0E3 /* 84.16.224.227/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x54EF2E90 /* 84.239.46.144/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x54F7A533 /* 84.247.165.51/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x55110953 /* 85.17.9.83/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x555DDACC /* 85.93.218.204/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x55EF2982 /* 85.239.41.130/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x576A4E71 /* 87.106.78.113/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x57766E1B /* 87.118.110.27/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5776740C /* 87.118.116.12/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5776745A /* 87.118.116.90/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x57767467 /* 87.118.116.103/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x57767A1E /* 87.118.122.30/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x57767A33 /* 87.118.122.51/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5778FE84 /* 87.120.254.132/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x58501456 /* 88.80.20.86/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x58501A02 /* 88.80.26.2/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x58501A04 /* 88.80.26.4/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59255F22 /* 89.37.95.34/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x593A1AD8 /* 89.58.26.216/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x593A299C /* 89.58.41.156/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59936C5A /* 89.147.108.90/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59936E52 /* 89.147.110.82/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59936E76 /* 89.147.110.118/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59936E9A /* 89.147.110.154/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59936F57 /* 89.147.111.87/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59BB8F1F /* 89.187.143.31/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59DDD78B /* 89.221.215.139/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59DDD9CE /* 89.221.217.206/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59EA9DFE /* 89.234.157.254/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x59EC7064 /* 89.236.112.100/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5B5C6D2B /* 91.92.109.43/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5B5C6D7E /* 91.92.109.126/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5B84903B /* 91.132.144.59/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5B8BA096 /* 91.139.160.150/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BCA0568 /* 91.202.5.104/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BCB90C2 /* 91.203.144.194/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BCB9174 /* 91.203.145.116/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BCE1A1A /* 91.206.26.26/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04B03 /* 91.208.75.3/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04B04 /* 91.208.75.4/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04B99 /* 91.208.75.153/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04B9C /* 91.208.75.156/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04BB2 /* 91.208.75.178/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BD04BEF /* 91.208.75.239/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5BDBEC65 /* 91.219.236.101/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5CDF028C /* 92.223.2.140/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5CF318A3 /* 92.243.24.163/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5CF65485 /* 92.246.84.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5CF68A91 /* 92.246.138.145/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D5FE47D /* 93.95.228.125/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D5FE4CD /* 93.95.228.205/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D5FE6A5 /* 93.95.230.165/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D5FE70E /* 93.95.231.14/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D5FE758 /* 93.95.231.88/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D636812 /* 93.99.104.18/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D636828 /* 93.99.104.40/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D636880 /* 93.99.104.128/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D6368C2 /* 93.99.104.194/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D7119BD /* 93.113.25.189/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5D7B0C70 /* 93.123.12.112/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E107379 /* 94.16.115.121/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E107451 /* 94.16.116.81/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E107456 /* 94.16.116.86/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E10795B /* 94.16.121.91/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E486208 /* 94.72.98.8/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E486721 /* 94.72.103.33/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E4BE151 /* 94.75.225.81/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E66330F /* 94.102.51.15/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E8EF1C2 /* 94.142.241.194/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5E8EF410 /* 94.142.244.16/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5EB16A36 /* 94.177.106.54/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5EE4A319 /* 94.228.163.25/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5EE6D093 /* 94.230.208.147/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5EE6D094 /* 94.230.208.148/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5EE82BDD /* 94.232.43.221/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5F802BA4 /* 95.128.43.164/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5F8EA13F /* 95.142.161.63/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5F8FC17D /* 95.143.193.125/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x5FD3F41C /* 95.211.244.28/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x60420F98 /* 96.66.15.152/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x607E6292 /* 96.126.98.146/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6280AD21 /* 98.128.173.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6421736C /* 100.33.115.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x64086C12 /* 100.8.108.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x65635D70 /* 101.99.93.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x65635EB9 /* 101.99.94.185/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x66827109 /* 102.130.113.9/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x668275A7 /* 102.130.117.167/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x671C345D /* 103.28.52.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66827F75 /* 102.130.127.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66D33869 /* 102.211.56.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x66D7E456 /* 102.215.228.86/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x676D6569 /* 103.109.101.105/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x677EA136 /* 103.126.161.54/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x67A3DA0B /* 103.163.218.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6798B22A /* 103.152.178.42/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x67A436C7 /* 103.164.54.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67C1B3E9 /* 103.193.179.233/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x67C4256F /* 103.196.37.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67C8D242 /* 103.200.210.66/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x67D05605 /* 103.208.86.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67D60560 /* 103.214.5.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA4D1 /* 103.251.164.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA57D /* 103.251.165.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA60A /* 103.251.166.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x67FBA6E3 /* 103.251.166.227/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x67FBA70A /* 103.251.167.10/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x67FBA714 /* 103.251.167.20/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68A7F274 /* 104.167.242.116/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x68A7F276 /* 104.167.242.118/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68C0018A /* 104.192.1.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6753568E /* 103.83.86.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68986F01 /* 104.152.111.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6898D1D9 /* 104.152.209.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6898D2E5 /* 104.152.210.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68A713B9 /* 104.167.19.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68A81C9F /* 104.168.28.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68A823C7 /* 104.168.35.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68B8FFF6 /* 104.184.255.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68015BCE /* 104.1.91.206/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68C0034A /* 104.192.3.74/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68DBE87E /* 104.219.232.126/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68DBEC64 /* 104.219.236.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68DBFA98 /* 104.219.250.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68EA7CDA /* 104.234.124.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68EEA76F /* 104.238.167.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68EEDC74 /* 104.238.220.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68EEDD5D /* 104.238.221.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F3216E /* 104.243.33.110/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44873 /* 104.244.72.115/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44884 /* 104.244.72.132/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68F4492B /* 104.244.73.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F448BC /* 104.244.72.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44964 /* 104.244.73.100/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44988 /* 104.244.73.136/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F449BE /* 104.244.73.190/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F449C1 /* 104.244.73.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F4492B /* 104.244.73.43/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44A17 /* 104.244.74.23/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44A61 /* 104.244.74.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44B8C /* 104.244.75.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44BA8 /* 104.244.75.168/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44B4A /* 104.244.75.74/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x68F44DC0 /* 104.244.77.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44CED /* 104.244.76.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44C18 /* 104.244.76.24/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44DD0 /* 104.244.77.208/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44EA2 /* 104.244.78.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44ED2 /* 104.244.78.210/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44EE8 /* 104.244.78.232/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x68F44F7A /* 104.244.79.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44F19 /* 104.244.79.25/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44F2C /* 104.244.79.44/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44F32 /* 104.244.79.50/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x68F44F3D /* 104.244.79.61/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BAC1FDA /* 107.172.31.218/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BAE8AAC /* 107.174.138.172/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BAE9219 /* 107.174.146.25/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0109 /* 107.189.1.9/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD01A0 /* 107.189.1.160/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD01A7 /* 107.189.1.167/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD01AF /* 107.189.1.175/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD026C /* 107.189.2.108/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD030B /* 107.189.3.11/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD035E /* 107.189.3.94/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0394 /* 107.189.3.148/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD040C /* 107.189.4.12/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD04D1 /* 107.189.4.209/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0507 /* 107.189.5.7/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0579 /* 107.189.5.121/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0624 /* 107.189.6.36/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD067C /* 107.189.6.124/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD078D /* 107.189.7.141/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0790 /* 107.189.7.144/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD07A8 /* 107.189.7.168/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0805 /* 107.189.8.5/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0810 /* 107.189.8.16/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0838 /* 107.189.8.56/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0841 /* 107.189.8.65/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0846 /* 107.189.8.70/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0885 /* 107.189.8.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0888 /* 107.189.8.136/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD08B5 /* 107.189.8.181/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD08E2 /* 107.189.8.226/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD08EE /* 107.189.8.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F44F4B /* 104.244.79.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F80F10 /* 104.248.15.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68F83C4C /* 104.248.60.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68FE80CA /* 104.254.128.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x68FE82BA /* 104.254.130.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6803A5F8 /* 104.3.165.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6806E259 /* 104.6.226.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B852127 /* 107.133.33.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B8CDE6B /* 107.140.222.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B98238E /* 107.152.35.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B9829CB /* 107.152.41.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B9B7F02 /* 107.155.127.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6B9B51B2 /* 107.155.81.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAC5186 /* 107.172.81.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAE2D35 /* 107.174.45.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAE2D37 /* 107.174.45.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAE40CE /* 107.174.64.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAFF5B6 /* 107.175.245.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAF52BD /* 107.175.82.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BAF524A /* 107.175.82.74/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0AAF /* 107.189.10.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0AE5 /* 107.189.10.229/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0B6F /* 107.189.11.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD016F /* 107.189.1.111/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0B71 /* 107.189.11.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD01A0 /* 107.189.1.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD01AF /* 107.189.1.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C65 /* 107.189.12.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C88 /* 107.189.12.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD01E4 /* 107.189.1.228/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0C03 /* 107.189.12.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C34 /* 107.189.12.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0C07 /* 107.189.12.7/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0C58 /* 107.189.12.88/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0D5B /* 107.189.13.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0D97 /* 107.189.13.151/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0DB4 /* 107.189.13.180/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0DFB /* 107.189.13.251/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0DFD /* 107.189.13.253/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0DFE /* 107.189.13.254/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0E04 /* 107.189.14.4/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD0E2B /* 107.189.14.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0D5B /* 107.189.13.91/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD0E6A /* 107.189.14.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0E04 /* 107.189.14.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0109 /* 107.189.1.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD026C /* 107.189.2.108/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1D67 /* 107.189.29.103/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1DB8 /* 107.189.29.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD1EEC /* 107.189.30.236/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1E31 /* 107.189.30.49/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1E45 /* 107.189.30.69/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1E56 /* 107.189.30.86/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD1EEC /* 107.189.30.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD030B /* 107.189.3.11/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6BBD1F21 /* 107.189.31.33/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD1FBB /* 107.189.31.187/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6BBD1FE8 /* 107.189.31.232/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6C3DBD88 /* 108.61.189.136/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6CB510FB /* 108.181.16.251/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6CB51BCD /* 108.181.27.205/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6CB545F3 /* 108.181.69.243/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6CB57C8F /* 108.181.124.143/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D454311 /* 109.69.67.17/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D466401 /* 109.70.100.1/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D466402 /* 109.70.100.2/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x6D466404 /* 109.70.100.4/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x6D466406 /* 109.70.100.6/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D466441 /* 109.70.100.65/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D466442 /* 109.70.100.66/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0x6D466444 /* 109.70.100.68/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x6BBD040C /* 107.189.4.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD04D1 /* 107.189.4.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0570 /* 107.189.5.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0579 /* 107.189.5.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD05BC /* 107.189.5.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD05F9 /* 107.189.5.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0507 /* 107.189.5.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD067C /* 107.189.6.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD078D /* 107.189.7.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0790 /* 107.189.7.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD07A8 /* 107.189.7.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD080C /* 107.189.8.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0885 /* 107.189.8.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0888 /* 107.189.8.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD08B5 /* 107.189.8.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD08E2 /* 107.189.8.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0805 /* 107.189.8.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0838 /* 107.189.8.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0841 /* 107.189.8.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBD0846 /* 107.189.8.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BBF289C /* 107.191.40.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6BD09F3A /* 107.208.159.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C0E74E3 /* 108.14.116.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB57882 /* 108.181.120.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB584F5 /* 108.181.132.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB58545 /* 108.181.133.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB516C9 /* 108.181.22.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB521B9 /* 108.181.33.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB537AD /* 108.181.55.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB539FB /* 108.181.57.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CB539FD /* 108.181.57.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CCBAB3D /* 108.203.171.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CD320C9 /* 108.211.32.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6CF42F29 /* 108.244.47.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C1C9FFA /* 108.28.159.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3B0C03 /* 108.59.12.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3B09C6 /* 108.59.9.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3E67C1 /* 108.62.103.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3E774D /* 108.62.119.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3E8425 /* 108.62.132.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3E8426 /* 108.62.132.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3ED3C8 /* 108.62.211.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3ED3CD /* 108.62.211.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6C3E054F /* 108.62.5.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D689886 /* 109.104.152.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D689897 /* 109.104.152.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D6898A7 /* 109.104.152.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D689849 /* 109.104.152.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D6899BB /* 109.104.153.187/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x6D689916 /* 109.104.153.22/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6D789D89 /* 109.120.157.137/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x6DA921A3 /* 109.169.33.163/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x7223F596 /* 114.35.245.150/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x76A34AA0 /* 118.163.74.160/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x797F2597 /* 121.127.37.151/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x7BFD2320 /* 123.253.35.32/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x7DD4F183 /* 125.212.241.131/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x801F000D /* 128.31.0.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D696DA2 /* 109.105.109.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D6B9FBB /* 109.107.159.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D6B239A /* 109.107.35.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D78877B /* 109.120.135.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D789D79 /* 109.120.157.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DADA16F /* 109.173.161.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DC76764 /* 109.199.103.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DCDC3E1 /* 109.205.195.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DCDC3E2 /* 109.205.195.226/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x6DE6ECC2 /* 109.230.236.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DEE0B06 /* 109.238.11.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DF89389 /* 109.248.147.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6DFB3713 /* 109.251.55.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D45DAB0 /* 109.69.218.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D45DA33 /* 109.69.218.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D454311 /* 109.69.67.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D494125 /* 109.73.65.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D571994 /* 109.87.25.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6D5BD509 /* 109.91.213.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CA961B /* 116.202.150.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CAEDD4 /* 116.202.237.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CA3764 /* 116.202.55.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CB87C3 /* 116.203.135.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CB32B6 /* 116.203.50.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x74CB40D4 /* 116.203.64.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x79322B87 /* 121.50.43.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x80004094 /* 128.0.64.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x806EDAF6 /* 128.110.218.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x807F955B /* 128.127.149.91/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x807FB49C /* 128.127.180.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8087A428 /* 128.135.164.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x80E8123A /* 128.232.18.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x80EE3E25 /* 128.238.62.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x801F000D /* 128.31.0.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x801F003D /* 128.31.0.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x803484BD /* 128.52.132.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x810D838C /* 129.13.131.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x81922B48 /* 129.146.43.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8197FEF5 /* 129.151.254.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x81980809 /* 129.152.8.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8199B011 /* 129.153.176.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8199355E /* 129.153.53.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82A23725 /* 130.162.55.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82B43F96 /* 130.180.63.150/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x82C10A15 /* 130.193.10.21/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x82C10F4F /* 130.193.15.79/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x82C10FBA /* 130.193.15.186/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x88F46FA3 /* 136.244.111.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10FBF /* 130.193.15.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10F31 /* 130.193.15.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82C10F4F /* 130.193.15.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82E1F45A /* 130.225.244.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82331516 /* 130.51.21.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82331668 /* 130.51.22.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82331FCA /* 130.51.31.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x823DAD74 /* 130.61.173.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x823D2094 /* 130.61.32.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x82599539 /* 130.89.149.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8259A172 /* 130.89.161.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8399987A /* 131.153.152.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x83999892 /* 131.153.152.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x83AE17E4 /* 131.174.23.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x83BC28BC /* 131.188.40.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0D7E1DB5 /* 13.126.29.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8491F506 /* 132.145.245.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8491FFC0 /* 132.145.255.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8582627C /* 133.130.98.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x85A727B8 /* 133.167.39.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x85F2CCAF /* 133.242.204.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8666C865 /* 134.102.200.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8682ACE5 /* 134.130.172.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x86C3C641 /* 134.195.198.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8616B3A1 /* 134.22.179.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x86FFDAC3 /* 134.255.218.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x86038139 /* 134.3.129.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x877D93A5 /* 135.125.147.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x877DCAFC /* 135.125.202.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x877D5919 /* 135.125.89.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x879464E9 /* 135.148.100.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87946454 /* 135.148.100.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87946459 /* 135.148.100.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8794645A /* 135.148.100.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8794645C /* 135.148.100.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8794670F /* 135.148.103.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87948B29 /* 135.148.139.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87949517 /* 135.148.149.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87949664 /* 135.148.150.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87949663 /* 135.148.150.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8794AB9E /* 135.148.171.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87941B13 /* 135.148.27.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x879432FD /* 135.148.50.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87943458 /* 135.148.52.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87943667 /* 135.148.54.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8794366A /* 135.148.54.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87943662 /* 135.148.54.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87B51E13 /* 135.181.30.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87B52926 /* 135.181.41.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87B53F76 /* 135.181.63.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87B543D2 /* 135.181.67.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x87B5633B /* 135.181.99.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0D3BAFC1 /* 13.59.175.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88AF082D /* 136.175.8.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F39359 /* 136.243.147.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3935B /* 136.243.147.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F399A9 /* 136.243.153.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F39A4A /* 136.243.154.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3AE9F /* 136.243.174.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3B094 /* 136.243.176.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3B0B3 /* 136.243.176.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F303C2 /* 136.243.3.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3070B /* 136.243.7.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F3597C /* 136.243.89.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88F35CC2 /* 136.243.92.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88208325 /* 136.32.131.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8825C7FC /* 136.37.199.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x882F82D5 /* 136.47.130.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x88384259 /* 136.56.66.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x883DF21D /* 136.61.242.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x89DC78A8 /* 137.220.120.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x89DC7F8B /* 137.220.127.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x89E2222D /* 137.226.34.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x894A776D /* 137.74.119.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x894AA4D5 /* 137.74.164.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x894A0587 /* 137.74.5.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A7CB479 /* 138.124.180.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC57014 /* 138.197.112.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC55C9F /* 138.197.92.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC7AB8F /* 138.199.171.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC7AE51 /* 138.199.174.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC97967 /* 138.201.121.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC91319 /* 138.201.19.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC9C4FC /* 138.201.196.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC9E1B1 /* 138.201.225.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC933B5 /* 138.201.51.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC9363B /* 138.201.54.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC939EA /* 138.201.57.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC93A15 /* 138.201.58.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8AC94E3D /* 138.201.78.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A03F3A5 /* 138.3.243.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A03F3F4 /* 138.3.243.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A3021A2 /* 138.48.33.162/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x8A3B126E /* 138.59.18.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A442F7C /* 138.68.47.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8A442FBE /* 138.68.47.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B90CF7A /* 139.144.207.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B90DC70 /* 139.144.220.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B3C5F47 /* 139.60.95.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8B6367B4 /* 139.99.103.180/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x8B630839 /* 139.99.8.57/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x8B63AC0B /* 139.99.172.11/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x8D620B3E /* 141.98.11.62/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x8E2C8551 /* 142.44.133.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8CEBED0D /* 140.235.237.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8CEE917F /* 140.238.145.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8CEED7E9 /* 140.238.215.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D698277 /* 141.105.130.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D698280 /* 141.105.130.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D6982BC /* 141.105.130.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D6982C1 /* 141.105.130.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D69824E /* 141.105.130.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D698253 /* 141.105.130.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D880003 /* 141.136.0.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D91C97E /* 141.145.201.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D94EDD4 /* 141.148.237.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D942AA4 /* 141.148.42.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8DFFA1A7 /* 141.255.161.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D033F1A /* 141.3.63.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D4F0A10 /* 141.79.10.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D5EC723 /* 141.94.199.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D5F34CE /* 141.95.52.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D62884F /* 141.98.136.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D6299CD /* 141.98.153.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8D62E992 /* 141.98.233.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E7EDD66 /* 142.126.221.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E849D23 /* 142.132.157.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E84CC70 /* 142.132.204.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E84CCA5 /* 142.132.204.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E84CD2B /* 142.132.205.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8ECA3066 /* 142.202.48.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8ECA3344 /* 142.202.51.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2C8115 /* 142.44.129.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2CBBDF /* 142.44.187.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2CE318 /* 142.44.227.24/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x8E2CEA45 /* 142.44.234.69/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x8EAB0C58 /* 142.171.12.88/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x90AC7604 /* 144.172.118.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2CF385 /* 142.44.243.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E2CF766 /* 142.44.247.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E5DA9C5 /* 142.93.169.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8E5DE43B /* 142.93.228.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8F83DA5D /* 143.131.218.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8FC68574 /* 143.198.133.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8FC694CE /* 143.198.148.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8FF4AC25 /* 143.244.172.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x8F2FB30C /* 143.47.179.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90A82C12 /* 144.168.44.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90A82C1A /* 144.168.44.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC7629 /* 144.172.118.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC7604 /* 144.172.118.4/31 */, 31, NDPI_PROTOCOL_TOR }, { 0x90AC7637 /* 144.172.118.55/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x90AC7649 /* 144.172.118.73/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x92138F2F /* 146.19.143.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90AC7648 /* 144.172.118.72/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x90AC7661 /* 144.172.118.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90CA1A6A /* 144.202.26.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90CA626A /* 144.202.98.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90026551 /* 144.2.101.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D9B33C /* 144.217.179.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D92096 /* 144.217.32.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D9209E /* 144.217.32.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D94AE5 /* 144.217.74.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D95187 /* 144.217.81.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x90D95ABB /* 144.217.90.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9018A368 /* 144.24.163.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9018112C /* 144.24.17.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9018E802 /* 144.24.232.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C8C6E /* 144.76.140.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C9A0D /* 144.76.154.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C9FDA /* 144.76.159.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CA2CA /* 144.76.162.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CA68D /* 144.76.166.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CA6C7 /* 144.76.166.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CA824 /* 144.76.168.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CAFCD /* 144.76.175.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CC850 /* 144.76.200.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CC9FD /* 144.76.201.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904CDFAE /* 144.76.223.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C1A3A /* 144.76.26.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C03AE /* 144.76.3.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C03B6 /* 144.76.3.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C382B /* 144.76.56.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C51C6 /* 144.76.81.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x904C5605 /* 144.76.86.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x905B7DEF /* 144.91.125.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF0A99 /* 145.239.10.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF8881 /* 145.239.136.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF0109 /* 145.239.1.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EFCE1F /* 145.239.206.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF2966 /* 145.239.41.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF4C5F /* 145.239.76.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91EF513A /* 145.239.81.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x91F96D26 /* 145.249.109.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9128C2AC /* 145.40.194.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92002457 /* 146.0.36.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x920028C1 /* 146.0.40.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92B9FD35 /* 146.185.253.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92BE72AD /* 146.190.114.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92BEE060 /* 146.190.224.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x92BE2F9D /* 146.190.47.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9213A8DF /* 146.19.168.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9213ADB5 /* 146.19.173.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9213ADD7 /* 146.19.173.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9213D578 /* 146.19.213.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9213D586 /* 146.19.213.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B0CBC /* 146.59.12.188/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x923B7EE8 /* 146.59.126.232/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x932D4E22 /* 147.45.78.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B0FBA /* 146.59.15.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923BC572 /* 146.59.197.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923BE704 /* 146.59.231.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923BEBC3 /* 146.59.235.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B2C84 /* 146.59.44.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B2DA7 /* 146.59.45.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x923B5C85 /* 146.59.92.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246783A /* 146.70.120.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x924681E6 /* 146.70.129.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE92 /* 146.70.222.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE96 /* 146.70.222.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DEA6 /* 146.70.222.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DEB2 /* 146.70.222.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DEB6 /* 146.70.222.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DEBA /* 146.70.222.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DEBE /* 146.70.222.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE22 /* 146.70.222.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE26 /* 146.70.222.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE2A /* 146.70.222.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9246DE2E /* 146.70.222.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9381C5A6 /* 147.129.197.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93876E6D /* 147.135.110.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938770CA /* 147.135.112.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938772F5 /* 147.135.114.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93877262 /* 147.135.114.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9387818A /* 147.135.129.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938710B9 /* 147.135.16.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938704D6 /* 147.135.4.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93870444 /* 147.135.4.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938736B2 /* 147.135.54.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93874186 /* 147.135.65.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9387411A /* 147.135.65.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93874157 /* 147.135.65.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93870645 /* 147.135.6.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x938746A8 /* 147.135.70.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93B6F7AD /* 147.182.247.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x93E5B1A6 /* 147.229.177.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x931C5738 /* 147.28.87.56/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x932D7491 /* 147.45.116.145/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9471985B /* 148.113.152.91/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x95381685 /* 149.56.22.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x95382C2F /* 149.56.44.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x932DB348 /* 147.45.179.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x935D4837 /* 147.93.72.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9471A287 /* 148.113.162.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9471B700 /* 148.113.183.0/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9471C3EF /* 148.113.195.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9471C42F /* 148.113.196.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB0AED /* 148.251.10.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB8810 /* 148.251.136.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB977D /* 148.251.151.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FBB7CD /* 148.251.183.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FBECD1 /* 148.251.236.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB29EB /* 148.251.41.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB2E73 /* 148.251.46.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB3322 /* 148.251.51.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB5335 /* 148.251.83.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB55C3 /* 148.251.85.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB5A73 /* 148.251.90.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x94FB5B57 /* 148.251.91.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x958F658F /* 149.143.101.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x959A180D /* 149.154.24.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95CA45AE /* 149.202.69.174/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x95CA4F65 /* 149.202.79.101/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x95CA4F81 /* 149.202.79.129/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9835850E /* 152.53.133.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95320DDD /* 149.50.13.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9505BE3C /* 149.5.190.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95387E8E /* 149.56.126.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9538B9FF /* 149.56.185.255/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95381685 /* 149.56.22.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95382C2F /* 149.56.44.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95382DC8 /* 149.56.45.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x95382FF5 /* 149.56.47.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x96E6141C /* 150.230.20.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x96E62F49 /* 150.230.47.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x96F15B80 /* 150.241.91.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x96F15CC9 /* 150.241.92.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x96F15FC5 /* 150.241.95.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x976A704B /* 151.106.112.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x97734937 /* 151.115.73.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x97B1FBA8 /* 151.177.251.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x97C42DD4 /* 151.196.45.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x97C813F9 /* 151.200.19.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x971E3681 /* 151.30.54.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9738F2DF /* 151.56.242.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x975020AC /* 151.80.32.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x975FAC45 /* 151.95.172.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8C09 /* 15.204.140.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC0E66 /* 15.204.14.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8D0A /* 15.204.141.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8D0E /* 15.204.141.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8D5F /* 15.204.141.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8E25 /* 15.204.142.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC8FC0 /* 15.204.143.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCCB79C /* 15.204.183.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCCC707 /* 15.204.199.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCCDC6D /* 15.204.220.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCCDF80 /* 15.204.223.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCCF8C8 /* 15.204.248.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC39F8 /* 15.204.57.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC3B44 /* 15.204.59.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FCC41B8 /* 15.204.65.184/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x0FCC5718 /* 15.204.87.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FEBA2BC /* 15.235.162.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0FEB1DEC /* 15.235.29.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9835665F /* 152.53.102.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9835688F /* 152.53.104.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98356FAE /* 152.53.111.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983501D8 /* 152.53.1.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98357BAE /* 152.53.123.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98357C56 /* 152.53.124.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98357E6C /* 152.53.126.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98358302 /* 152.53.131.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98350F90 /* 152.53.15.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983511AF /* 152.53.17.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98351153 /* 152.53.17.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98351279 /* 152.53.18.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983512C9 /* 152.53.18.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9835125E /* 152.53.18.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98351303 /* 152.53.19.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9835E28B /* 152.53.226.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98351F10 /* 152.53.31.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98352091 /* 152.53.32.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98352263 /* 152.53.34.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98353150 /* 152.53.49.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983535F3 /* 152.53.53.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983535FA /* 152.53.53.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983541A9 /* 152.53.65.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9835431F /* 152.53.67.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x983556A5 /* 152.53.86.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98355FBE /* 152.53.95.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9843E687 /* 152.67.230.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x984349EA /* 152.67.73.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98468C54 /* 152.70.140.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9846AF0D /* 152.70.175.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x985606E8 /* 152.86.6.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9859FE2E /* 152.89.254.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x98594C9E /* 152.89.76.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A10743D /* 154.16.116.61/32 */, 32, NDPI_PROTOCOL_TOR }, { 0x9A1A9F9D /* 154.26.159.157/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B985 /* 154.213.185.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B9A5 /* 154.213.185.165/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B9B7 /* 154.213.185.183/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B9B9 /* 154.213.185.185/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B9E6 /* 154.213.185.230/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5B9FE /* 154.213.185.254/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5BB42 /* 154.213.187.66/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0x9AD5BB62 /* 154.213.187.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A295F01 /* 154.41.95.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A35A4D8 /* 154.53.164.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A3531F8 /* 154.53.49.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A3EE21C /* 154.62.226.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A3EE21E /* 154.62.226.30/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x9A3EE220 /* 154.62.226.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9A3EE222 /* 154.62.226.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9BF8E3D2 /* 155.248.227.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9B044A75 /* 155.4.74.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9CE5A4E1 /* 156.229.164.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9CFDE380 /* 156.253.227.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D8F7705 /* 157.143.119.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9DAD7134 /* 157.173.113.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9DB4087C /* 157.180.8.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9DF5F346 /* 157.245.243.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9DF5544E /* 157.245.84.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A7091 /* 157.90.112.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A83C9 /* 157.90.131.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A83E0 /* 157.90.131.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5AB767 /* 157.90.183.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5AD435 /* 157.90.212.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5AFD3C /* 157.90.253.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A4DA6 /* 157.90.77.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A5C73 /* 157.90.92.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9D5A5F2C /* 157.90.95.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E65CB26 /* 158.101.203.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E65CC75 /* 158.101.204.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9EAED3B2 /* 158.174.211.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9EB3CFE5 /* 158.179.207.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9EDC649E /* 158.220.100.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9EDC7BDB /* 158.220.123.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9EDC594B /* 158.220.89.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E3379A4 /* 158.51.121.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E337D62 /* 158.51.125.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E45CC24 /* 158.69.204.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E45CDF7 /* 158.69.205.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E45CFD8 /* 158.69.207.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E45E29F /* 158.69.226.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E45FC74 /* 158.69.252.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9E453013 /* 158.69.48.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F458A1F /* 159.69.138.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F4592C2 /* 159.69.146.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F459C83 /* 159.69.156.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F45CAF6 /* 159.69.202.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F4515C4 /* 159.69.21.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F45DC1B /* 159.69.220.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F452403 /* 159.69.36.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F4547E4 /* 159.69.71.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F598F2F /* 159.89.143.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x9F5929B1 /* 159.89.41.177/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA077F9F0 /* 160.119.249.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA0103927 /* 160.16.57.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA0FB2EEF /* 160.251.46.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA16184FE /* 161.97.132.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA1618E0F /* 161.97.142.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA161A863 /* 161.97.168.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA161B858 /* 161.97.184.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA29CD55C /* 162.156.213.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA213ABB4 /* 162.19.171.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA213CCA3 /* 162.19.204.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA213F4EA /* 162.19.244.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA213FC89 /* 162.19.252.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA213FCAF /* 162.19.252.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2134FF7 /* 162.19.79.247/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2D2AD11 /* 162.210.173.17/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2D8123E /* 162.216.18.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2D8E727 /* 162.216.231.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2E073CC /* 162.224.115.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2E13C8B /* 162.225.60.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F79983 /* 162.247.153.131/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2F748C0 /* 162.247.72.192/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xA2F748C7 /* 162.247.72.199/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xA2F74A07 /* 162.247.74.7/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xA2F74A1B /* 162.247.74.27/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xA2F74A4A /* 162.247.74.74/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2F74AC8 /* 162.247.74.200/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xA2F74ACA /* 162.247.74.202/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2F74ACC /* 162.247.74.204/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2F74ACE /* 162.247.74.206/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2F74AD5 /* 162.247.74.213/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xA2F74AD8 /* 162.247.74.216/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xA2F74AD8 /* 162.247.74.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74A1B /* 162.247.74.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2F74A07 /* 162.247.74.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FABDCC /* 162.250.189.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FABD21 /* 162.250.189.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FABF0F /* 162.250.191.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB740A /* 162.251.116.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB746A /* 162.251.116.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB741A /* 162.251.116.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB7422 /* 162.251.116.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB7432 /* 162.251.116.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB7452 /* 162.251.116.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB750A /* 162.251.117.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB770A /* 162.251.119.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FB7702 /* 162.251.119.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FBA6D2 /* 162.251.166.210/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA2FB0598 /* 162.251.5.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FF542F /* 162.255.84.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2FF5652 /* 162.255.86.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA22B11C6 /* 162.43.17.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA2378343 /* 162.55.131.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA23786F0 /* 162.55.134.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA23730F3 /* 162.55.48.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA251B83E /* 162.81.184.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC0B58 /* 163.172.11.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC0DED /* 163.172.13.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3ACFB06 /* 163.172.251.6/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA3AC2D66 /* 163.172.45.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC35C9 /* 163.172.53.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC46AF /* 163.172.70.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC4C38 /* 163.172.76.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3AC5D06 /* 163.172.93.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA32C7FAB /* 163.44.127.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA30579D4 /* 163.5.121.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA3059FE6 /* 163.5.159.230/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA484ACD1 /* 164.132.172.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA484C8DA /* 164.132.200.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA484E21E /* 164.132.226.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA48417B8 /* 164.132.23.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA4844BF8 /* 164.132.75.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA4D7677E /* 164.215.103.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA4446A5E /* 164.68.106.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA4447195 /* 164.68.113.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA4447928 /* 164.68.121.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA45C48EA /* 164.92.72.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA5E38104 /* 165.227.129.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA5E31113 /* 165.227.17.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA5E322F0 /* 165.227.34.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA5E32366 /* 165.227.35.102/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA549F2A3 /* 165.73.242.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA601AD31 /* 166.1.173.49/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xA646CF02 /* 166.70.207.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7726785 /* 167.114.103.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7AC6DB5 /* 167.172.109.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7ACC808 /* 167.172.200.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7B3471B /* 167.179.71.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7B3634D /* 167.179.99.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7EB7086 /* 167.235.112.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7EB0FDD /* 167.235.15.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7EBB1B6 /* 167.235.177.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7477829 /* 167.71.120.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7475655 /* 167.71.86.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA7567A09 /* 167.86.122.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA8640A29 /* 168.100.10.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA8675712 /* 168.103.87.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA877D161 /* 168.119.209.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xA8770237 /* 168.119.2.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAA75C596 /* 170.117.197.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAA850251 /* 170.133.2.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAAFD3D3E /* 170.253.61.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB16ADDD /* 171.22.173.221/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAB19C114 /* 171.25.193.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB19C1EA /* 171.25.193.234/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xAB19C119 /* 171.25.193.25/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAB19C14D /* 171.25.193.77/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAB19C14E /* 171.25.193.78/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xAB19C150 /* 171.25.193.80/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAB19C1EA /* 171.25.193.234/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xAC51836E /* 172.81.131.110/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xAC51838B /* 172.81.131.139/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAC51839C /* 172.81.131.156/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAC51845E /* 172.81.132.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAB420357 /* 171.66.3.87/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAC68B654 /* 172.104.182.84/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAC68BA49 /* 172.104.186.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC68D0BE /* 172.104.208.190/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xAC68F39B /* 172.104.243.155/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAC69A1A2 /* 172.105.161.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC69140C /* 172.105.20.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC690622 /* 172.105.6.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC7F5CEF /* 172.127.92.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACDB5C4E /* 172.219.92.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE8A2B0 /* 172.232.162.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE8AE83 /* 172.232.174.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE8B822 /* 172.232.184.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE8B969 /* 172.232.185.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE8D1FE /* 172.232.209.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE818A6 /* 172.232.24.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE81AC8 /* 172.232.26.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE981B0 /* 172.233.129.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE998F2 /* 172.233.152.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9A085 /* 172.233.160.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9A487 /* 172.233.164.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9A4C7 /* 172.233.164.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9AFDB /* 172.233.175.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9B0AF /* 172.233.176.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9B63C /* 172.233.182.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9BBF1 /* 172.233.187.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE9CA31 /* 172.233.202.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACE95229 /* 172.233.82.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA8F7B /* 172.234.143.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA140A /* 172.234.20.10/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xACEAE4AE /* 172.234.228.174/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAD2C8D22 /* 173.44.141.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEAE69A /* 172.234.230.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEAE6C9 /* 172.234.230.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEAFA60 /* 172.234.250.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA1E62 /* 172.234.30.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA2592 /* 172.234.37.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA25E9 /* 172.234.37.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEA4285 /* 172.234.66.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEC64B2 /* 172.236.100.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEC664F /* 172.236.102.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEC7468 /* 172.236.116.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACEC7444 /* 172.236.116.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACED85E1 /* 172.237.133.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF18CF7 /* 172.241.140.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF18CF9 /* 172.241.140.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF1A658 /* 172.241.166.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF1E091 /* 172.241.224.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF1E4B1 /* 172.241.228.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF1E50D /* 172.241.229.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF11772 /* 172.241.23.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF1FB84 /* 172.241.251.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF56AB3 /* 172.245.106.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E88A /* 172.245.232.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E80E /* 172.245.232.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E8CC /* 172.245.232.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E8EF /* 172.245.232.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E8F1 /* 172.245.232.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E818 /* 172.245.232.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E96E /* 172.245.233.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E91F /* 172.245.233.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5E904 /* 172.245.233.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5EA66 /* 172.245.234.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xACF5EA76 /* 172.245.234.118/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xACF5EA86 /* 172.245.234.134/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xACF5EAA2 /* 172.245.234.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC4FAAF0 /* 172.79.170.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51838B /* 172.81.131.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51839C /* 172.81.131.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC518357 /* 172.81.131.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC51845E /* 172.81.132.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC5D65B5 /* 172.93.101.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC5D668B /* 172.93.102.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC60AC9D /* 172.96.172.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAC618270 /* 172.97.130.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAD00036F /* 173.0.3.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADB45D7B /* 173.180.93.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADD0B6EA /* 173.208.182.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADD4C8F1 /* 173.212.200.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADD4ECA9 /* 173.212.236.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADE7C8B3 /* 173.231.200.179/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xADEDCE44 /* 173.237.206.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADF9C37A /* 173.249.195.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADF937E6 /* 173.249.55.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xADF90871 /* 173.249.8.113/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xADFFC6F3 /* 173.255.198.243/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xAEACCBA7 /* 174.172.203.167/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB03A6462 /* 176.58.100.98/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB03A79B1 /* 176.58.121.177/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB0617135 /* 176.97.113.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAD4B2C60 /* 173.75.44.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAD58B623 /* 173.88.182.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAEA2B509 /* 174.162.181.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAE228448 /* 174.34.132.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAE5B7BE8 /* 174.91.123.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAE5DAD42 /* 174.93.173.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xAF762D45 /* 175.118.45.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0642558 /* 176.100.37.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB00A6BB4 /* 176.10.107.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB06680CD /* 176.102.128.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB067DDD3 /* 176.103.221.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB06BB01F /* 176.107.176.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB076C139 /* 176.118.193.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0784BBB /* 176.120.75.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07B0190 /* 176.123.1.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07B0219 /* 176.123.2.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07B0263 /* 176.123.2.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07B07AC /* 176.123.7.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07B0805 /* 176.123.8.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07CCA6E /* 176.124.202.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB07E5419 /* 176.126.84.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB096CCB3 /* 176.150.204.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0DF8D6A /* 176.223.141.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB01F2395 /* 176.31.35.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0419403 /* 176.65.148.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB04195CF /* 176.65.149.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB04195D1 /* 176.65.149.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0419539 /* 176.65.149.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0419541 /* 176.65.149.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0419560 /* 176.65.149.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0097B7A /* 176.9.123.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB009A116 /* 176.9.161.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0092679 /* 176.9.38.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB00927C4 /* 176.9.39.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB009328C /* 176.9.50.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB009399D /* 176.9.57.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB06089B8 /* 176.96.137.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0617291 /* 176.97.114.145/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB06172CA /* 176.97.114.202/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB076C121 /* 176.118.193.33/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB0795133 /* 176.121.81.51/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB211AA17 /* 178.17.170.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0614F8A /* 176.97.79.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB0095529 /* 176.9.85.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2840006 /* 178.132.0.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2A2C9AE /* 178.162.201.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2A2DD6F /* 178.162.221.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AA0D2B /* 178.170.13.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2AA0E0A /* 178.170.14.10/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB211AA90 /* 178.17.170.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AAA8 /* 178.17.170.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AAAC /* 178.17.170.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AA17 /* 178.17.170.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB211AAFE /* 178.17.170.254/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB211AB66 /* 178.17.171.102/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB211AE0E /* 178.17.174.14/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB211AEA4 /* 178.17.174.164/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB2143710 /* 178.20.55.16/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB21437B6 /* 178.20.55.182/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2AF94D1 /* 178.175.148.209/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2AF94F6 /* 178.175.148.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB212F6DF /* 178.18.246.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2C27EAE /* 178.194.126.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2C88CF2 /* 178.200.140.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2D7E419 /* 178.215.228.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2D7E44E /* 178.215.228.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2DA9071 /* 178.218.144.113/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2DA9012 /* 178.218.144.18/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2DA9033 /* 178.218.144.51/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB2DA9040 /* 178.218.144.64/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2DA9060 /* 178.218.144.96/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB2DA9063 /* 178.218.144.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2161161 /* 178.22.17.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2161F38 /* 178.22.31.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2F8F9AC /* 178.248.249.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FABA2C /* 178.250.186.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FABA2F /* 178.250.186.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FB9046 /* 178.251.144.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE01AC /* 178.254.1.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE14EB /* 178.254.20.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE1426 /* 178.254.20.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE1568 /* 178.254.21.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2021 /* 178.254.32.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2137 /* 178.254.33.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE24B6 /* 178.254.36.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2502 /* 178.254.37.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE296F /* 178.254.41.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2CA3 /* 178.254.44.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2C36 /* 178.254.44.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2DEB /* 178.254.45.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FE2D40 /* 178.254.45.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2FFDC18 /* 178.255.220.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB21A6978 /* 178.26.105.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB22088DD /* 178.32.136.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2208B76 /* 178.32.139.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2208FA7 /* 178.32.143.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2202921 /* 178.32.41.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2202ADB /* 178.32.42.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2203CA1 /* 178.32.60.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2212440 /* 178.33.36.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2212D9F /* 178.33.45.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB2215483 /* 178.33.84.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23EDEC7 /* 178.62.222.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F137E /* 178.63.19.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23FD5F2 /* 178.63.213.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23FD5F4 /* 178.63.213.244/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB23FD5F6 /* 178.63.213.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23FDB24 /* 178.63.219.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23FDB26 /* 178.63.219.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23FF0BA /* 178.63.240.186/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB23FF0BC /* 178.63.240.188/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB23FF0BE /* 178.63.240.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F1893 /* 178.63.24.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F03BE /* 178.63.3.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F2863 /* 178.63.40.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F29B7 /* 178.63.41.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F2B99 /* 178.63.43.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB23F4EB3 /* 178.63.78.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB249DB08 /* 178.73.219.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB24FA1B1 /* 178.79.161.177/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB32B8010 /* 179.43.128.16/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB32B9F4E /* 179.43.159.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B86BC /* 179.43.134.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B86F2 /* 179.43.134.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B8DC3 /* 179.43.141.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9EB0 /* 179.43.158.176/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB32B9FC2 /* 179.43.159.194/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB32B9FC4 /* 179.43.159.196/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xB32B9FC8 /* 179.43.159.200/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB32BB63A /* 179.43.182.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32B9F4E /* 179.43.159.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32BA0A4 /* 179.43.160.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32BB610 /* 179.43.182.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB32BB6D9 /* 179.43.182.217/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB32BB6E8 /* 179.43.182.232/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB33758C7 /* 179.55.88.199/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB496E263 /* 180.150.226.99/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9072192 /* 185.7.33.146/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9222102 /* 185.34.33.2/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB923CADE /* 185.35.202.222/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB926AF85 /* 185.38.175.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB927CF53 /* 185.39.207.83/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280414 /* 185.40.4.20/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280416 /* 185.40.4.22/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB928041D /* 185.40.4.29/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280426 /* 185.40.4.38/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB928042C /* 185.40.4.44/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280440 /* 185.40.4.64/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB928045C /* 185.40.4.92/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB928045E /* 185.40.4.94/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9280464 /* 185.40.4.100/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB928047F /* 185.40.4.127/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280484 /* 185.40.4.132/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280495 /* 185.40.4.149/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9280496 /* 185.40.4.150/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB92AAACB /* 185.42.170.203/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9385353 /* 185.56.83.83/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB938AB5E /* 185.56.171.94/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9435272 /* 185.67.82.114/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB952DB6D /* 185.82.219.109/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB95B7E5A /* 185.91.126.90/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9645516 /* 185.100.85.22/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9645518 /* 185.100.85.24/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB32BB63A /* 179.43.182.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB33D8A8F /* 179.61.138.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB33DFB20 /* 179.61.251.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB33DFB56 /* 179.61.251.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB4952C9C /* 180.149.44.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D6E72B /* 181.214.231.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D63A0C /* 181.214.58.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D63ACD /* 181.214.58.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D63AD4 /* 181.214.58.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D663D4 /* 181.214.99.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB5D7E241 /* 181.215.226.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x12125211 /* 18.18.82.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x12125212 /* 18.18.82.18/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x12E36FA7 /* 18.227.111.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB8AE2635 /* 184.174.38.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB839F1C1 /* 184.57.241.193/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9645584 /* 185.100.85.132/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9645729 /* 185.100.87.41/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9645788 /* 185.100.87.136/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB964578B /* 185.100.87.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645550 /* 185.100.85.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645646 /* 185.100.86.70/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB96457A6 /* 185.100.87.166/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96457AE /* 185.100.87.174/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96457B7 /* 185.100.87.183/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96457C0 /* 185.100.87.192/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96457FA /* 185.100.87.250/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96457FD /* 185.100.87.253/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB96A6666 /* 185.106.102.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9645729 /* 185.100.87.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9676E15 /* 185.103.110.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9676E56 /* 185.103.110.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96883DC /* 185.104.131.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB968C281 /* 185.104.194.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96A5EC3 /* 185.106.94.195/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB96B3940 /* 185.107.57.64/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB96B3942 /* 185.107.57.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96B5301 /* 185.107.83.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96D5B7E /* 185.109.91.126/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB970900B /* 185.112.144.11/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB97092A7 /* 185.112.146.167/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB971801E /* 185.113.128.30/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB975D709 /* 185.117.215.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97092A8 /* 185.112.146.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97092CD /* 185.112.146.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9709360 /* 185.112.147.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB970F99C /* 185.112.249.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB975768E /* 185.117.118.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9755244 /* 185.117.82.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9755247 /* 185.117.82.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9777594 /* 185.119.117.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97775E5 /* 185.119.117.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9789153 /* 185.120.145.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97810AB /* 185.120.16.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97810B0 /* 185.120.16.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97CF06D /* 185.124.240.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97CF062 /* 185.124.240.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97DA919 /* 185.125.169.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB97EEFBB /* 185.126.239.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90C5F96 /* 185.12.95.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9813D0A /* 185.129.61.10/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9813D01 /* 185.129.61.1/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9813D02 /* 185.129.61.2/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB9813D04 /* 185.129.61.4/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xB9813D08 /* 185.129.61.8/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9813D0A /* 185.129.61.10/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9813D81 /* 185.129.61.129/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9813E3E /* 185.129.62.62/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9822C3B /* 185.130.44.59/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9822C6C /* 185.130.44.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822C2B /* 185.130.44.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822DCF /* 185.130.45.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822E74 /* 185.130.46.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9822E7C /* 185.130.46.124/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9822F3A /* 185.130.47.58/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB984350C /* 185.132.53.12/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB984352F /* 185.132.53.47/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB98EEF31 /* 185.142.239.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB98789D3 /* 185.135.137.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB98CD19E /* 185.140.209.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB98DD828 /* 185.141.216.40/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB90E1E39 /* 185.14.30.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB98F6652 /* 185.143.102.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90E1F71 /* 185.14.31.113/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB992E8EA /* 185.146.232.234/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB999C5E3 /* 185.153.197.227/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB99A6E11 /* 185.154.110.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB993234A /* 185.147.35.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99401D3 /* 185.148.1.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9940345 /* 185.148.3.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB90E6160 /* 185.14.97.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9961C0D /* 185.150.28.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB999B60B /* 185.153.182.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB999C668 /* 185.153.198.104/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB99A6E8E /* 185.154.110.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99D7864 /* 185.157.120.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB99D7834 /* 185.157.120.52/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB99D7836 /* 185.157.120.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99D783A /* 185.157.120.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99D783D /* 185.157.120.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB99D7862 /* 185.157.120.98/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB9A2F97E /* 185.162.249.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A2F92B /* 185.162.249.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A2FAAD /* 185.162.250.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A2FB7A /* 185.162.251.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A2FB5E /* 185.162.251.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A3CC2B /* 185.163.204.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A32DD4 /* 185.163.45.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A32DF7 /* 185.163.45.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A32DFD /* 185.163.45.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A32E53 /* 185.163.46.83/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9A5A9EF /* 185.165.169.239/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9A5AB0E /* 185.165.171.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9A5AB49 /* 185.165.171.73/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9A5AB54 /* 185.165.171.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9103DB2 /* 185.16.61.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AA70B6 /* 185.170.112.182/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9AA7219 /* 185.170.114.25/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9B19722 /* 185.177.151.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AD5D2F /* 185.173.93.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AE870B /* 185.174.135.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AF9EC6 /* 185.175.158.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AF3878 /* 185.175.56.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9AF3BDA /* 185.175.59.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B17E76 /* 185.177.126.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B17F22 /* 185.177.127.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B1E5E4 /* 185.177.229.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B2C371 /* 185.178.195.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B5E54D /* 185.181.229.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B53CB5 /* 185.181.60.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B6C110 /* 185.182.193.16/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9B79DD6 /* 185.183.157.214/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9B79F28 /* 185.183.159.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B7C25A /* 185.183.194.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B846F5 /* 185.184.70.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B84756 /* 185.184.71.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9B8475E /* 185.184.71.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9BBAAC4 /* 185.187.170.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9BD7D16 /* 185.189.125.22/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9BFCCFE /* 185.191.204.254/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9C134B4 /* 185.193.52.180/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9C19E86 /* 185.193.158.134/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9C3470C /* 185.195.71.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C28E49 /* 185.194.142.73/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9C347F4 /* 185.195.71.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C4DCCC /* 185.196.220.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C4DC52 /* 185.196.220.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9C638C3 /* 185.198.56.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CC0153 /* 185.204.1.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CC0154 /* 185.204.1.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CD7E13 /* 185.205.126.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CE944E /* 185.206.148.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9CF6AF1 /* 185.207.106.241/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9CF6B82 /* 185.207.107.130/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9CF6BD8 /* 185.207.107.216/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DB52B0 /* 185.219.82.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB915D8C5 /* 185.21.216.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D5AFEC /* 185.213.175.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D8B3AF /* 185.216.179.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D8B3CE /* 185.216.179.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D8D667 /* 185.216.214.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D81930 /* 185.216.25.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D823DE /* 185.216.35.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9D84458 /* 185.216.68.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DA89A3 /* 185.218.137.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DAC32F /* 185.218.195.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DA5842 /* 185.218.88.66/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9DC64F0 /* 185.220.100.240/28 */, 28, NDPI_PROTOCOL_TOR }, - { 0xB9DC6500 /* 185.220.101.0/26 */, 26, NDPI_PROTOCOL_TOR }, - { 0xB9DC6540 /* 185.220.101.64/28 */, 28, NDPI_PROTOCOL_TOR }, - { 0xB9DC6550 /* 185.220.101.80/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xB9DC6558 /* 185.220.101.88/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC655A /* 185.220.101.90/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6560 /* 185.220.101.96/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xB9DC6568 /* 185.220.101.104/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xB9DC656C /* 185.220.101.108/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC656E /* 185.220.101.110/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6581 /* 185.220.101.129/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6582 /* 185.220.101.130/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC6586 /* 185.220.101.134/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC6588 /* 185.220.101.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6580 /* 185.220.101.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6584 /* 185.220.101.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6587 /* 185.220.101.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658A /* 185.220.101.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC658C /* 185.220.101.140/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB9DC658E /* 185.220.101.142/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6591 /* 185.220.101.145/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6593 /* 185.220.101.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC6590 /* 185.220.101.144/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xB9DC6595 /* 185.220.101.149/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC6597 /* 185.220.101.151/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC659A /* 185.220.101.154/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC659C /* 185.220.101.156/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC659E /* 185.220.101.158/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC65A1 /* 185.220.101.161/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC65A2 /* 185.220.101.162/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB9DC6596 /* 185.220.101.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659A /* 185.220.101.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659D /* 185.220.101.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC659F /* 185.220.101.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A0 /* 185.220.101.160/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xB9DC65A4 /* 185.220.101.164/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC65A8 /* 185.220.101.168/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC65AA /* 185.220.101.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A6 /* 185.220.101.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65A8 /* 185.220.101.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DC65AA /* 185.220.101.170/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB9DC65AC /* 185.220.101.172/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xB9DC65B0 /* 185.220.101.176/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC65B3 /* 185.220.101.179/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC65B6 /* 185.220.101.182/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9DC65BB /* 185.220.101.187/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9DC65BC /* 185.220.101.188/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xB9DC65B0 /* 185.220.101.176/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xB9DC65C0 /* 185.220.101.192/28 */, 28, NDPI_PROTOCOL_TOR }, + { 0xB9DC65D0 /* 185.220.101.208/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xB9DC6520 /* 185.220.101.32/27 */, 27, NDPI_PROTOCOL_TOR }, + { 0xB9DC6540 /* 185.220.101.64/28 */, 28, NDPI_PROTOCOL_TOR }, + { 0xB9DC6550 /* 185.220.101.80/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0xB9DC6558 /* 185.220.101.88/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB9DC655A /* 185.220.101.90/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9DC6704 /* 185.220.103.4/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xB9DC6708 /* 185.220.103.8/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xB9E145CB /* 185.225.69.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9DD982A /* 185.221.152.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E17055 /* 185.225.112.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E17216 /* 185.225.114.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E17235 /* 185.225.114.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E11169 /* 185.225.17.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E1139F /* 185.225.19.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E1D222 /* 185.225.210.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E14462 /* 185.225.68.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E1458C /* 185.225.69.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E145CD /* 185.225.69.205/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9E145E8 /* 185.225.69.232/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9E1470E /* 185.225.71.14/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9E3444E /* 185.227.68.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E24058 /* 185.226.64.88/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9E3866A /* 185.227.134.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E34693 /* 185.227.70.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E34699 /* 185.227.70.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E346B1 /* 185.227.70.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E346B2 /* 185.227.70.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E3463C /* 185.227.70.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48AFC /* 185.228.138.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48A56 /* 185.228.138.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E48B60 /* 185.228.139.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E55A51 /* 185.229.90.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E6A2D9 /* 185.230.162.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E6A378 /* 185.230.163.120/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9E76633 /* 185.231.102.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E844F7 /* 185.232.68.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E84420 /* 185.232.68.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E8450A /* 185.232.69.10/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9E96417 /* 185.233.100.23/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F1D036 /* 185.241.208.54/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F1D047 /* 185.241.208.71/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F1D051 /* 185.241.208.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9E968AC /* 185.233.104.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9EB921D /* 185.235.146.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D065 /* 185.241.208.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D069 /* 185.241.208.105/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F1D073 /* 185.241.208.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0A3 /* 185.241.208.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0A4 /* 185.241.208.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0AC /* 185.241.208.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0AF /* 185.241.208.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0B2 /* 185.241.208.178/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xB9F1D0CA /* 185.241.208.202/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F1D0CC /* 185.241.208.204/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F1D0CE /* 185.241.208.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0D6 /* 185.241.208.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0DA /* 185.241.208.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0EF /* 185.241.208.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0F0 /* 185.241.208.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0F2 /* 185.241.208.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0F5 /* 185.241.208.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D0FD /* 185.241.208.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D036 /* 185.241.208.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D047 /* 185.241.208.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D051 /* 185.241.208.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D053 /* 185.241.208.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D058 /* 185.241.208.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1D05C /* 185.241.208.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F1DC53 /* 185.241.220.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F105E5 /* 185.241.5.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F26BE0 /* 185.242.107.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F25760 /* 185.242.87.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F31446 /* 185.243.20.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F481A3 /* 185.244.129.163/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F4C0AF /* 185.244.192.175/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F4C0B8 /* 185.244.192.184/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F654B3 /* 185.246.84.179/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F680A1 /* 185.246.128.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C29C /* 185.244.194.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C2A1 /* 185.244.194.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F4C328 /* 185.244.195.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F41828 /* 185.244.24.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F6BC72 /* 185.246.188.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F6BC95 /* 185.246.188.149/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F6BC49 /* 185.246.188.73/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F6BC4A /* 185.246.188.74/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F6BC95 /* 185.246.188.149/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F6BD63 /* 185.246.189.99/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xB9F7B821 /* 185.247.184.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F656AF /* 185.246.86.175/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9F7B869 /* 185.247.184.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7B821 /* 185.247.184.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7E0E2 /* 185.247.224.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9F7E2AF /* 185.247.226.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9FA94BE /* 185.250.148.190/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9FCE8DA /* 185.252.232.218/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xB9FEC48D /* 185.254.196.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9FF7A27 /* 185.255.122.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9FF7A46 /* 185.255.122.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB920B7CE /* 185.32.183.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB920DEED /* 185.32.222.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9222102 /* 185.34.33.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB923CADE /* 185.35.202.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB926AF85 /* 185.38.175.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB927CF53 /* 185.39.207.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280464 /* 185.40.4.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xB9280479 /* 185.40.4.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB928047F /* 185.40.4.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280484 /* 185.40.4.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280495 /* 185.40.4.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280496 /* 185.40.4.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280414 /* 185.40.4.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280416 /* 185.40.4.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB928041D /* 185.40.4.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280426 /* 185.40.4.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB928042C /* 185.40.4.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9280440 /* 185.40.4.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB928045C /* 185.40.4.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9048668 /* 185.4.134.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB92AAACB /* 185.42.170.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB92FFF3A /* 185.47.255.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB930FA70 /* 185.48.250.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9317B6B /* 185.49.123.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9386B19 /* 185.56.107.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB93896F4 /* 185.56.150.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB938AB5E /* 185.56.171.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9385353 /* 185.56.83.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB93B642B /* 185.59.100.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9426DF9 /* 185.66.109.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9425B12 /* 185.66.91.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9435272 /* 185.67.82.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB949D309 /* 185.73.211.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB949DC08 /* 185.73.220.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB950DEA4 /* 185.80.222.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9501E66 /* 185.80.30.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB908A5F8 /* 185.8.165.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9527E0D /* 185.82.126.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9527EE6 /* 185.82.126.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9527FD5 /* 185.82.127.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB952D8D3 /* 185.82.216.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB952D931 /* 185.82.217.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB952DB6D /* 185.82.219.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB952DB55 /* 185.82.219.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB95451F0 /* 185.84.81.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB955F177 /* 185.85.241.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB9630275 /* 185.99.2.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB963028F /* 185.99.2.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xB96302A0 /* 185.99.2.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBAE9B93B /* 186.233.185.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBAE9B93D /* 186.233.185.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC7BD48F /* 188.123.212.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC7E5326 /* 188.126.83.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC8870AB /* 188.136.112.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC95AE2B /* 188.149.174.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC9A0690 /* 188.154.6.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA5002B /* 188.165.0.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA583CE /* 188.165.131.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA588CD /* 188.165.136.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA588D3 /* 188.165.136.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA589F7 /* 188.165.137.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA5C861 /* 188.165.200.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA5DE49 /* 188.165.222.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA5E30A /* 188.165.227.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA51854 /* 188.165.24.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA51A0D /* 188.165.26.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA51A4C /* 188.165.26.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCA50492 /* 188.165.4.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCACE468 /* 188.172.228.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCACE414 /* 188.172.228.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCC0BF19 /* 188.192.191.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCC0CBEA /* 188.192.203.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCC23D5B /* 188.194.61.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD58176 /* 188.213.129.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD51F7D /* 188.213.31.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD55C58 /* 188.213.92.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD55F92 /* 188.213.95.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD68412 /* 188.214.132.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD68431 /* 188.214.132.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD6581F /* 188.214.88.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCD65820 /* 188.214.88.32/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xBCEFBF19 /* 188.239.191.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCF57C47 /* 188.245.124.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCF5CBEA /* 188.245.203.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBCF53A29 /* 188.245.58.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC1BF989 /* 188.27.249.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC2880F6 /* 188.40.128.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC288E12 /* 188.40.142.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC28CF7C /* 188.40.207.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44ECDC /* 188.68.236.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4420AE /* 188.68.32.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442015 /* 188.68.32.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4421C8 /* 188.68.33.200/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBC44241C /* 188.68.36.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4428B4 /* 188.68.40.180/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBC4429BF /* 188.68.41.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442BC0 /* 188.68.43.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442EA4 /* 188.68.46.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC442EF5 /* 188.68.46.245/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBC4431EB /* 188.68.49.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC4432AE /* 188.68.50.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44324C /* 188.68.50.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC44333F /* 188.68.51.63/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBC4434E7 /* 188.68.52.231/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xBCA5C861 /* 188.165.200.97/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xBCD66815 /* 188.214.104.21/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xBCEFBF19 /* 188.239.191.25/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xBE67B362 /* 190.103.179.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC443A69 /* 188.68.58.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBC5AA5D1 /* 188.90.165.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE67B36D /* 190.103.179.109/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBE78E562 /* 190.120.229.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE78E70D /* 190.120.231.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FE65 /* 190.211.254.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FEB6 /* 190.211.254.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FEC0 /* 190.211.254.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FED2 /* 190.211.254.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBED3FE4C /* 190.211.254.76/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xBED3FE61 /* 190.211.254.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBE0285E3 /* 190.2.133.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xBF60EB51 /* 191.96.235.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0776C72 /* 192.119.108.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0796C78 /* 192.121.108.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0796C81 /* 192.121.108.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0796CEC /* 192.121.108.236/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC0792C1A /* 192.121.44.26/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC07CB49A /* 192.124.180.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC07CD877 /* 192.124.216.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0810A12 /* 192.129.10.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0129013 /* 192.18.144.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0129A2D /* 192.18.154.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0D2D60A /* 192.210.214.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0D330E2 /* 192.211.48.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0E3D5F6 /* 192.227.213.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0EAC4A9 /* 192.234.196.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC018CFC8 /* 192.24.207.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC003A1E3 /* 192.3.161.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC003B31D /* 192.3.179.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC003E4E5 /* 192.3.228.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC003FC0F /* 192.3.252.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0225756 /* 192.34.87.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0242621 /* 192.36.38.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7165 /* 192.42.113.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7166 /* 192.42.113.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7365 /* 192.42.115.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A7366 /* 192.42.115.102/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC02A740D /* 192.42.116.13/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC02A740E /* 192.42.116.14/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC02A7411 /* 192.42.116.17/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC02A7412 /* 192.42.116.18/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC02A74BA /* 192.42.116.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74BC /* 192.42.116.188/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC02A74C8 /* 192.42.116.200/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xC02A7414 /* 192.42.116.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC02A74D0 /* 192.42.116.208/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0xC02A74D8 /* 192.42.116.216/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xC02A7416 /* 192.42.116.22/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC02A7418 /* 192.42.116.24/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xC02A741C /* 192.42.116.28/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC02A74AD /* 192.42.116.173/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC02A74AE /* 192.42.116.174/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xC02A74B0 /* 192.42.116.176/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xC02A74B8 /* 192.42.116.184/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xC02A74BF /* 192.42.116.191/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC02A74C0 /* 192.42.116.192/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xC02A74C8 /* 192.42.116.200/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xC02A74D0 /* 192.42.116.208/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xC02A74D8 /* 192.42.116.216/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xC02A846A /* 192.42.132.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0440BCB /* 192.68.11.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0571C1C /* 192.87.28.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0571C52 /* 192.87.28.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC00981EB /* 192.9.129.235/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC063956F /* 192.99.149.111/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC06C3096 /* 192.108.48.150/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC11A732B /* 193.26.115.43/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC11A733D /* 193.26.115.61/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC120A260 /* 193.32.162.96/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1248415 /* 193.36.132.21/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC129E275 /* 193.41.226.117/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC14650D5 /* 193.70.80.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC063E472 /* 192.99.228.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC06306DF /* 192.99.6.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC0634511 /* 192.99.69.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC168DC23 /* 193.104.220.35/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1698696 /* 193.105.134.150/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC169869B /* 193.105.134.155/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1BD64C2 /* 193.189.100.194/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xC1BD64C4 /* 193.189.100.196/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xC1BD64C8 /* 193.189.100.200/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xC1698610 /* 193.105.134.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1698612 /* 193.105.134.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16986BA /* 193.105.134.186/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC16C7567 /* 193.108.117.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16C3457 /* 193.108.52.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16C3458 /* 193.108.52.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16C3579 /* 193.108.53.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16D7803 /* 193.109.120.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC16D4536 /* 193.109.69.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC10B722B /* 193.11.114.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC10B722D /* 193.11.114.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC10B722E /* 193.11.114.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC10BA4F3 /* 193.11.164.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC10BA6C4 /* 193.11.166.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1010CA7 /* 193.1.12.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC17A8E1C /* 193.122.142.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC17C21F2 /* 193.124.33.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC18E92EF /* 193.142.146.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC18E922B /* 193.142.146.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC18E93CC /* 193.142.147.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC18E3BB5 /* 193.142.59.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1976C01 /* 193.151.108.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1976CD3 /* 193.151.108.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1A8F23E /* 193.168.242.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1B66F83 /* 193.182.111.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1B66F84 /* 193.182.111.132/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC1B66FB6 /* 193.182.111.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1B66F29 /* 193.182.111.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1B66F2A /* 193.182.111.42/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC1BB5B4F /* 193.187.91.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64C9 /* 193.189.100.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BD64CA /* 193.189.100.202/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC1BD64CC /* 193.189.100.204/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC1BD64CE /* 193.189.100.206/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1DA7659 /* 193.218.118.89/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1DA765B /* 193.218.118.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1BEA835 /* 193.190.168.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1CBCD13 /* 193.203.205.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1CBCD14 /* 193.203.205.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7670 /* 193.218.118.112/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1DA7685 /* 193.218.118.133/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1DA7689 /* 193.218.118.137/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1DA76A0 /* 193.218.118.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7699 /* 193.218.118.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA769D /* 193.218.118.157/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1DA76AD /* 193.218.118.173/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1DA76B2 /* 193.218.118.178/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1DA76B6 /* 193.218.118.182/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC1DA76BC /* 193.218.118.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7638 /* 193.218.118.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7648 /* 193.218.118.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7655 /* 193.218.118.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA7659 /* 193.218.118.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DA765E /* 193.218.118.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1DB6119 /* 193.219.97.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1E20D50 /* 193.226.13.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1E9CA83 /* 193.233.202.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1E9CA47 /* 193.233.202.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1EFCD5A /* 193.239.205.90/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC1EFE866 /* 193.239.232.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11A732B /* 193.26.115.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11A733D /* 193.26.115.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11A9C75 /* 193.26.156.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11DBB17 /* 193.29.187.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11E788B /* 193.30.120.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11E7ADE /* 193.30.122.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11E7AE8 /* 193.30.122.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11E7B71 /* 193.30.123.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11E7B84 /* 193.30.123.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11F198D /* 193.31.25.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11F1B7F /* 193.31.27.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC11F1F59 /* 193.31.31.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC120A260 /* 193.32.162.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC1248415 /* 193.36.132.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC126220D /* 193.38.34.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC12A2452 /* 193.42.36.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC13F3A4C /* 193.63.58.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC145760F /* 193.69.118.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC14670A5 /* 193.70.112.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC15447DF /* 193.84.71.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC200FC22 /* 194.0.252.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2679D28 /* 194.103.157.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC27EAD9E /* 194.126.173.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC27EAEBE /* 194.126.174.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC20D511A /* 194.13.81.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC20D5383 /* 194.13.83.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC20E00F2 /* 194.14.0.242/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC20E00F5 /* 194.14.0.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC20E00F6 /* 194.14.0.246/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC20F7085 /* 194.15.112.133/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC20F7176 /* 194.15.113.118/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC20F73D4 /* 194.15.115.212/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC21AC048 /* 194.26.192.72/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC21AC04D /* 194.26.192.77/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC21AC061 /* 194.26.192.97/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC21AC0A1 /* 194.26.192.161/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC25773BB /* 194.87.115.187/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC29323C7 /* 194.147.35.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC20F735C /* 194.15.115.92/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC20F735E /* 194.15.115.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A38263 /* 194.163.130.99/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC2A39D31 /* 194.163.157.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A3B63F /* 194.163.182.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A47DD5 /* 194.164.125.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A47F22 /* 194.164.127.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4A37E /* 194.164.163.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4105F /* 194.164.16.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4A955 /* 194.164.169.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4AD98 /* 194.164.173.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4C52D /* 194.164.197.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A41691 /* 194.164.22.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A4F5CD /* 194.164.245.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A43504 /* 194.164.53.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A43C71 /* 194.164.60.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2A459CB /* 194.164.89.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2B4BFB3 /* 194.180.191.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2B4BF5D /* 194.180.191.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2B6B322 /* 194.182.179.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC21AC0BA /* 194.26.192.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC21AC04D /* 194.26.192.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC22284A9 /* 194.34.132.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2228433 /* 194.34.132.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC222860D /* 194.34.134.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC230F88E /* 194.48.248.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC230F863 /* 194.48.248.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23147FC /* 194.49.71.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC205FAFA /* 194.5.250.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2370C94 /* 194.55.12.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2370DCF /* 194.55.13.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2370D31 /* 194.55.13.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2370D32 /* 194.55.13.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2370E72 /* 194.55.14.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23A426F /* 194.58.66.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23B9E5C /* 194.59.158.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23BCF77 /* 194.59.207.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23EBB64 /* 194.62.187.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC23E60A1 /* 194.62.96.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC243C413 /* 194.67.196.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC257FC64 /* 194.87.252.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC257FCD6 /* 194.87.252.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2571F68 /* 194.87.31.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC2573762 /* 194.87.55.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC258691E /* 194.88.105.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC209ACAC /* 194.9.172.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC209ACEE /* 194.9.172.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC209AC20 /* 194.9.172.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37AB7AA /* 195.122.183.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37AB702 /* 195.122.183.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37BD471 /* 195.123.212.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37BE481 /* 195.123.228.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC37BF7D1 /* 195.123.247.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC38066E3 /* 195.128.102.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3806638 /* 195.128.102.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC38514C3 /* 195.133.20.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC30FF271 /* 195.15.242.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC30FF21D /* 195.15.242.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC30FF263 /* 195.15.242.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC39A68AE /* 195.154.104.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC39AA8D1 /* 195.154.168.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3A0DD69 /* 195.160.221.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3A0DF2E /* 195.160.223.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3A0DF30 /* 195.160.223.48/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC3A0DF32 /* 195.160.223.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00317 /* 195.176.3.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3B00318 /* 195.176.3.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C9673B /* 195.201.103.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C9AE6C /* 195.201.174.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C9F157 /* 195.201.241.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C93B15 /* 195.201.59.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC31413AB /* 195.20.19.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC31413B7 /* 195.20.19.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C90925 /* 195.201.9.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3C95E71 /* 195.201.94.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3CD1EFA /* 195.205.30.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3D36325 /* 195.211.99.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3E6A853 /* 195.230.168.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3E617B9 /* 195.230.23.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3E617F8 /* 195.230.23.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC31A56F0 /* 195.26.86.240/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC31A56F2 /* 195.26.86.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC31A574E /* 195.26.87.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC32FEEB0 /* 195.47.238.176/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xC32FEEB2 /* 195.47.238.178/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC32FEE52 /* 195.47.238.82/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC32FEE54 /* 195.47.238.84/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC32FEE56 /* 195.47.238.86/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xC32FEE58 /* 195.47.238.88/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xC32FEE5C /* 195.47.238.92/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xC342D552 /* 195.66.213.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC332D40F /* 195.50.212.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC33A3A48 /* 195.58.58.72/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC35097F2 /* 195.80.151.242/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC3584ACE /* 195.88.74.206/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC3A0DC68 /* 195.160.220.104/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC3B00317 /* 195.176.3.23/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC3B00318 /* 195.176.3.24/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC63A6B35 /* 198.58.107.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC3584B12 /* 195.88.75.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC35AD0B6 /* 195.90.208.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC35AD2FE /* 195.90.210.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC35AD7DA /* 195.90.215.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC35AD966 /* 195.90.217.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6649912 /* 198.100.153.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC60C7C47 /* 198.12.124.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC68C8D33 /* 198.140.141.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC68C8D34 /* 198.140.141.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6B49609 /* 198.180.150.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC614A1D6 /* 198.20.161.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC614A152 /* 198.20.161.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC614B1CA /* 198.20.177.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6D369EC /* 198.211.105.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6178592 /* 198.23.133.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC61788CE /* 198.23.136.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC617D3AB /* 198.23.211.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC617F688 /* 198.23.246.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC618A462 /* 198.24.164.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC618A8E2 /* 198.24.168.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6F4BCA9 /* 198.244.188.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6F4D439 /* 198.244.212.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6F4E937 /* 198.244.233.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6F53584 /* 198.245.53.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6F537DC /* 198.245.55.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB43B8 /* 198.251.67.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB4CEF /* 198.251.76.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB54A3 /* 198.251.84.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB54ED /* 198.251.84.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB5812 /* 198.251.88.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FB5960 /* 198.251.89.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6FF1502 /* 198.255.21.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC61B50BC /* 198.27.80.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62EBD90 /* 198.46.189.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62EEAAB /* 198.46.234.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62E543D /* 198.46.84.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62E5456 /* 198.46.84.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC62E5D81 /* 198.46.93.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC632BF5F /* 198.50.191.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC632DF10 /* 198.50.223.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6473589 /* 198.71.53.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6487FDE /* 198.72.127.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC659BC1D /* 198.89.188.29/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC6609B03 /* 198.96.155.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66230C0 /* 198.98.48.192/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC6623021 /* 198.98.48.33/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC6623023 /* 198.98.48.35/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC66232C7 /* 198.98.50.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC66231C8 /* 198.98.49.200/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC66233BD /* 198.98.51.189/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC66233F9 /* 198.98.51.249/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC6623588 /* 198.98.53.136/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC6623631 /* 198.98.54.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623453 /* 198.98.52.83/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC6623997 /* 198.98.57.151/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC6623C5A /* 198.98.60.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623919 /* 198.98.57.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623937 /* 198.98.57.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC662394A /* 198.98.57.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623B66 /* 198.98.59.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623E9E /* 198.98.62.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC6623E38 /* 198.98.62.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7737241 /* 199.115.114.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC77F3EFA /* 199.127.62.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7AA8450 /* 199.170.132.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7B8D70B /* 199.184.215.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7B8F6FA /* 199.184.246.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C17302 /* 199.193.115.2/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC7C3F9D6 /* 199.195.249.214/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC7C3FAA5 /* 199.195.250.165/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC7C3FB4E /* 199.195.251.78/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC7C3FB77 /* 199.195.251.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7C3FBCA /* 199.195.251.202/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC7C3FD7C /* 199.195.253.124/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC7C3FD9C /* 199.195.253.156/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC7C3FDB4 /* 199.195.253.180/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xC7C3FDF7 /* 199.195.253.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7E9D90D /* 199.233.217.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F1893C /* 199.241.137.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7F71F01 /* 199.247.31.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xC7FACCCE /* 199.250.204.206/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xC87AB502 /* 200.122.181.2/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCA3DE262 /* 202.61.226.98/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCAB66381 /* 202.182.99.129/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCC086040 /* 204.8.96.64/28 */, 28, NDPI_PROTOCOL_TOR }, - { 0xCC086050 /* 204.8.96.80/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xCC086058 /* 204.8.96.88/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x14C75BA7 /* 20.199.91.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DC0D7 /* 202.61.192.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DC557 /* 202.61.197.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DCCC6 /* 202.61.204.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DCC35 /* 202.61.204.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DCD21 /* 202.61.205.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DE0AA /* 202.61.224.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DE0B3 /* 202.61.224.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA3DFDF3 /* 202.61.253.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCA4EA081 /* 202.78.160.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCB994097 /* 203.153.64.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC890E68 /* 204.137.14.104/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xCC890E6A /* 204.137.14.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC890E45 /* 204.137.14.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC890E5C /* 204.137.14.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCCC21D04 /* 204.194.29.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC4CCB17 /* 204.76.203.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC4CCB2B /* 204.76.203.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC4CCB33 /* 204.76.203.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC4CCB5A /* 204.76.203.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC4CCB5D /* 204.76.203.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC089C8E /* 204.8.156.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC55BF07 /* 204.85.191.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC55BF08 /* 204.85.191.8/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xCC086064 /* 204.8.96.100/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xCC086068 /* 204.8.96.104/29 */, 29, NDPI_PROTOCOL_TOR }, { 0xCC086070 /* 204.8.96.112/29 */, 29, NDPI_PROTOCOL_TOR }, - { 0xCC086078 /* 204.8.96.120/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xCC086078 /* 204.8.96.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC08607A /* 204.8.96.122/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xCC08608C /* 204.8.96.140/30 */, 30, NDPI_PROTOCOL_TOR }, { 0xCC086090 /* 204.8.96.144/28 */, 28, NDPI_PROTOCOL_TOR }, { 0xCC0860A0 /* 204.8.96.160/28 */, 28, NDPI_PROTOCOL_TOR }, { 0xCC0860B0 /* 204.8.96.176/29 */, 29, NDPI_PROTOCOL_TOR }, { 0xCC0860B8 /* 204.8.96.184/30 */, 30, NDPI_PROTOCOL_TOR }, - { 0xCC0860BC /* 204.8.96.188/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xCC089C8E /* 204.8.156.142/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCC55BF07 /* 204.85.191.7/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCC55BF08 /* 204.85.191.8/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xCC890E5C /* 204.137.14.92/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCC890E68 /* 204.137.14.104/31 */, 31, NDPI_PROTOCOL_TOR }, - { 0xCC890E6A /* 204.137.14.106/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCCC21D04 /* 204.194.29.4/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCDB97108 /* 205.185.113.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC0860BD /* 204.8.96.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC086040 /* 204.8.96.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC086043 /* 204.8.96.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC086044 /* 204.8.96.68/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xCC086046 /* 204.8.96.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC086048 /* 204.8.96.72/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0xCC086050 /* 204.8.96.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCC086052 /* 204.8.96.82/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xCC086054 /* 204.8.96.84/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xCC086058 /* 204.8.96.88/31 */, 31, NDPI_PROTOCOL_TOR }, { 0xCDB971B4 /* 205.185.113.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97142 /* 205.185.113.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97108 /* 205.185.113.8/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xCDB97422 /* 205.185.116.34/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xCDB97595 /* 205.185.117.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB9761F /* 205.185.118.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB977DE /* 205.185.119.222/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xCDB97723 /* 205.185.119.35/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xCDB979AA /* 205.185.121.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB979B1 /* 205.185.121.177/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xCDB97B5D /* 205.185.123.93/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCDB97CB0 /* 205.185.124.176/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCDB97CC1 /* 205.185.124.193/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xCDB97FE7 /* 205.185.127.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCDB97CA4 /* 205.185.124.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCE743439 /* 206.116.52.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCEBD6E00 /* 206.189.110.0/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCEC6D2D2 /* 206.198.210.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCEF89213 /* 206.248.146.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCF66988C /* 207.102.152.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCF9906B9 /* 207.153.6.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCFB4E66D /* 207.180.230.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCFF44EE6 /* 207.244.78.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCF20DA29 /* 207.32.218.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xCF5AC202 /* 207.90.194.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD07180D2 /* 208.113.128.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD07180FE /* 208.113.128.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD0718544 /* 208.113.133.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD071C821 /* 208.113.200.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD071C825 /* 208.113.200.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073D62A /* 208.115.214.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073D836 /* 208.115.216.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073DA86 /* 208.115.218.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073E66C /* 208.115.230.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073E67B /* 208.115.230.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073E613 /* 208.115.230.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073E6E7 /* 208.115.230.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD073E64F /* 208.115.230.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD026E468 /* 208.38.228.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD026F371 /* 208.38.243.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD0469445 /* 208.70.148.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17E678C /* 209.126.103.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17F74A2 /* 209.127.116.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17F77A2 /* 209.127.119.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FBA02 /* 209.127.186.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FCA6A /* 209.127.202.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FCA91 /* 209.127.202.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FCA9B /* 209.127.202.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FCAA6 /* 209.127.202.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17FCAB5 /* 209.127.202.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD17F24B2 /* 209.127.36.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD185C106 /* 209.133.193.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD185C412 /* 209.133.196.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD185C416 /* 209.133.196.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD185CE26 /* 209.133.206.38/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D20B5 /* 209.141.32.181/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D20C6 /* 209.141.32.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2298 /* 209.141.34.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D220F /* 209.141.34.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2407 /* 209.141.36.7/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D255E /* 209.141.37.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2844 /* 209.141.40.68/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D2D8D /* 209.141.45.141/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD18D2ECB /* 209.141.46.203/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD18D331E /* 209.141.51.30/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD18D33B4 /* 209.141.51.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D2D51 /* 209.141.45.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D325E /* 209.141.50.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D36A8 /* 209.141.54.168/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D36CB /* 209.141.54.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D36DA /* 209.141.54.218/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD18D371A /* 209.141.55.26/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD18D3CDB /* 209.141.60.219/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD18D3E47 /* 209.141.62.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3AFE /* 209.141.58.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3C0D /* 209.141.60.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD18D3D34 /* 209.141.61.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1942E2D /* 209.148.46.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1B6C812 /* 209.182.200.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1B6C809 /* 209.182.200.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1D10ACF /* 209.209.10.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1D10AD0 /* 209.209.10.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1DE61B3 /* 209.222.97.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1DE61F8 /* 209.222.97.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD12C72B2 /* 209.44.114.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13A8955 /* 209.58.137.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13A91D2 /* 209.58.145.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13A9122 /* 209.58.145.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13A914B /* 209.58.145.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13AB4EC /* 209.58.180.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD13BA8D8 /* 209.59.168.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x14629959 /* 20.98.153.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD1619D53 /* 209.97.157.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD481208E /* 212.129.32.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4846566 /* 212.132.101.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4846C0D /* 212.132.108.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4844E41 /* 212.132.78.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4845996 /* 212.132.89.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD48461BE /* 212.132.97.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD49F459B /* 212.159.69.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4A2099E /* 212.162.9.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4154219 /* 212.21.66.25/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD4154206 /* 212.21.66.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E37D5C /* 212.227.125.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E37F69 /* 212.227.127.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E38770 /* 212.227.135.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3A5FB /* 212.227.165.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3AB6B /* 212.227.171.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3E0D9 /* 212.227.224.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3E0F5 /* 212.227.224.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3E4F5 /* 212.227.228.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3F273 /* 212.227.242.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3FAB9 /* 212.227.250.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E31C27 /* 212.227.28.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E331A9 /* 212.227.49.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E340D0 /* 212.227.64.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E341EC /* 212.227.65.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E3412A /* 212.227.65.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E34AB0 /* 212.227.74.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E353A8 /* 212.227.83.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E35567 /* 212.227.85.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E35AE4 /* 212.227.90.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4E55408 /* 212.229.84.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4EDD96C /* 212.237.217.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD418648A /* 212.24.100.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD41CB865 /* 212.28.184.101/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD426BDBA /* 212.38.189.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD42FE502 /* 212.47.229.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD42FE956 /* 212.47.233.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4339543 /* 212.51.149.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD43397FE /* 212.51.151.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD433990C /* 212.51.153.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4339BFE /* 212.51.155.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD4058FA5 /* 212.5.143.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD43C7E94 /* 212.60.126.148/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD445A750 /* 212.69.167.80/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD44986CC /* 212.73.134.204/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD45F324D /* 212.95.50.77/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD55F9516 /* 213.95.149.22/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD5FC8C76 /* 213.252.140.118/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD8499F4B /* 216.73.159.75/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD8499F65 /* 216.73.159.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD44986F2 /* 212.73.134.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD44F7D14 /* 212.79.125.20/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD44F7D17 /* 212.79.125.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD44F7D18 /* 212.79.125.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD453AB59 /* 212.83.171.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD459E1F2 /* 212.89.225.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD56C6C55 /* 213.108.108.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5808DC3 /* 213.128.141.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD587F4F2 /* 213.135.244.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD58BF316 /* 213.139.243.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5908715 /* 213.144.135.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5908716 /* 213.144.135.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD598A2B5 /* 213.152.162.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD59F4C21 /* 213.159.76.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A346EA /* 213.163.70.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A4C1F5 /* 213.164.193.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A55161 /* 213.165.81.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A5530E /* 213.165.83.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A55463 /* 213.165.84.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A55AA9 /* 213.165.90.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A55DA5 /* 213.165.93.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A55EA2 /* 213.165.94.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A6B871 /* 213.166.184.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A8BE45 /* 213.168.190.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5A99497 /* 213.169.148.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5B730A5 /* 213.183.48.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5B73054 /* 213.183.48.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5B735F9 /* 213.183.53.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5B73F24 /* 213.183.63.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5CADF4B /* 213.202.223.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5CEB84B /* 213.206.184.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5EFD5BE /* 213.239.213.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5EFD5DC /* 213.239.213.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5EFD7DD /* 213.239.215.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5F56F59 /* 213.245.111.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5FCF599 /* 213.252.245.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5FCF5CA /* 213.252.245.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD52068D5 /* 213.32.104.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD52F9A95 /* 213.47.154.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD5406DA9 /* 213.64.109.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD54012A5 /* 213.64.18.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51464 /* 216.181.20.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B5146E /* 216.181.20.110/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51478 /* 216.181.20.120/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B5140C /* 216.181.20.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51482 /* 216.181.20.130/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51401 /* 216.181.20.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5148C /* 216.181.20.140/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51497 /* 216.181.20.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5140F /* 216.181.20.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5149B /* 216.181.20.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514A0 /* 216.181.20.160/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B514A6 /* 216.181.20.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514AB /* 216.181.20.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514B1 /* 216.181.20.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514B4 /* 216.181.20.180/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B514BC /* 216.181.20.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514BE /* 216.181.20.190/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B514C8 /* 216.181.20.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514CA /* 216.181.20.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51414 /* 216.181.20.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514D2 /* 216.181.20.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514D4 /* 216.181.20.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514D8 /* 216.181.20.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514DC /* 216.181.20.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514DE /* 216.181.20.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51416 /* 216.181.20.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514E6 /* 216.181.20.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51402 /* 216.181.20.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B514E8 /* 216.181.20.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514F0 /* 216.181.20.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514F2 /* 216.181.20.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514FA /* 216.181.20.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B514FC /* 216.181.20.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51419 /* 216.181.20.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5141E /* 216.181.20.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51421 /* 216.181.20.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51422 /* 216.181.20.34/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51428 /* 216.181.20.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51404 /* 216.181.20.4/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xD8B5142C /* 216.181.20.44/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51432 /* 216.181.20.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51437 /* 216.181.20.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51438 /* 216.181.20.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5143C /* 216.181.20.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51441 /* 216.181.20.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51442 /* 216.181.20.66/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD8B51446 /* 216.181.20.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5144D /* 216.181.20.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5144E /* 216.181.20.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51450 /* 216.181.20.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51408 /* 216.181.20.8/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0xD8B51458 /* 216.181.20.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B5145A /* 216.181.20.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8B51463 /* 216.181.20.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8C5CF30 /* 216.197.207.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8CDA1AB /* 216.205.161.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8DA7B86 /* 216.218.123.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8DADB29 /* 216.218.219.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8EE5786 /* 216.238.87.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD8EF5A13 /* 216.239.90.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD81A610F /* 216.26.97.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD809E19C /* 216.9.225.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD964BD1C /* 217.100.189.28/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0xD9745F1A /* 217.116.95.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CCA55 /* 217.12.202.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CCBC4 /* 217.12.203.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CCBF2 /* 217.12.203.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CCE80 /* 217.12.206.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CDD6E /* 217.12.221.110/32 */, 32, NDPI_PROTOCOL_TOR }, { 0xD90CDD83 /* 217.12.221.131/32 */, 32, NDPI_PROTOCOL_TOR }, - { 0xD94FBDEF /* 217.79.189.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD90CDD4B /* 217.12.221.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD996EA4B /* 217.150.234.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99A4AE3 /* 217.154.74.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99A4D9A /* 217.154.77.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99A4F47 /* 217.154.79.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99A55D3 /* 217.154.85.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99C16CD /* 217.156.22.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99C16D1 /* 217.156.22.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99C16EB /* 217.156.22.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99C4104 /* 217.156.65.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD99C4341 /* 217.156.67.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A07266 /* 217.160.114.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A072D1 /* 217.160.114.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0725E /* 217.160.114.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A07E9B /* 217.160.126.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A01186 /* 217.160.17.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0C0E8 /* 217.160.192.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0D29F /* 217.160.210.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0E20C /* 217.160.226.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0182F /* 217.160.24.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0F722 /* 217.160.247.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0F932 /* 217.160.249.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0FB3F /* 217.160.251.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A0317E /* 217.160.49.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A04FE0 /* 217.160.79.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A062EF /* 217.160.98.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9A3812A /* 217.163.129.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9B6C71B /* 217.182.199.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9B6499D /* 217.182.73.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9B64B00 /* 217.182.75.0/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9B64FE1 /* 217.182.79.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9C56B8A /* 217.197.107.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9C5A213 /* 217.197.162.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9C68C8C /* 217.198.140.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9C7C7FA /* 217.199.199.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9170802 /* 217.23.8.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD91C8260 /* 217.28.130.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD946BDDE /* 217.70.189.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94C8B31 /* 217.76.139.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94C9FD8 /* 217.76.159.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94D0377 /* 217.77.3.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94FB3B1 /* 217.79.179.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94FB54C /* 217.79.181.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94FB55A /* 217.79.181.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD94FFCCA /* 217.79.252.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD951504C /* 217.81.80.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD9527E3D /* 217.82.126.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD953A59A /* 217.83.165.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0xD95F4A56 /* 217.95.74.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x02CA0DA4 /* 2.202.13.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1769A375 /* 23.105.163.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1769AC01 /* 23.105.172.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1769AEF3 /* 23.105.174.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176C3747 /* 23.108.55.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176F8FCA /* 23.111.143.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176F9052 /* 23.111.144.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176FB322 /* 23.111.179.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176FB362 /* 23.111.179.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x176FBDCA /* 23.111.189.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x177E09D9 /* 23.126.9.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1785A8BA /* 23.133.168.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17868805 /* 23.134.136.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F8C0 /* 23.137.248.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789F845 /* 23.137.248.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789FDFE /* 23.137.253.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789FD1B /* 23.137.253.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1789FE89 /* 23.137.254.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178D2807 /* 23.141.40.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x178EF83F /* 23.142.248.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1797E81B /* 23.151.232.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17970881 /* 23.151.8.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17970883 /* 23.151.8.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17970885 /* 23.151.8.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179708A0 /* 23.151.8.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179708A8 /* 23.151.8.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1799F821 /* 23.153.248.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1799F822 /* 23.153.248.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179D88FB /* 23.157.136.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x179D88FC /* 23.157.136.252/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x17A0C0F0 /* 23.160.192.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1710B545 /* 23.16.181.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17A3D887 /* 23.163.216.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17A6288F /* 23.166.40.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17B83030 /* 23.184.48.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17B83045 /* 23.184.48.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17BC388C /* 23.188.56.140/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x17BC3890 /* 23.188.56.144/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0x17BC3898 /* 23.188.56.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17BEA8F3 /* 23.190.168.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17BFC810 /* 23.191.200.16/28 */, 28, NDPI_PROTOCOL_TOR }, + { 0x17BFC802 /* 23.191.200.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x17BFC804 /* 23.191.200.4/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x17BFC808 /* 23.191.200.8/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0x1713E145 /* 23.19.225.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1713FFA1 /* 23.19.255.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17134154 /* 23.19.65.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17134A47 /* 23.19.74.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17E3A86A /* 23.227.168.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17E3BABA /* 23.227.186.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17E3BAC2 /* 23.227.186.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17EC8F9A /* 23.236.143.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17EC8F16 /* 23.236.143.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17EC8F22 /* 23.236.143.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17EC8F52 /* 23.236.143.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x171D777A /* 23.29.119.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x171D7C22 /* 23.29.124.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1751D1B7 /* 23.81.209.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17512C71 /* 23.81.44.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1752880E /* 23.82.136.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175288E8 /* 23.82.136.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17528916 /* 23.82.137.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1752891C /* 23.82.137.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17528955 /* 23.82.137.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17528963 /* 23.82.137.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1753845F /* 23.83.132.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175387CB /* 23.83.135.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175387E1 /* 23.83.135.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17532592 /* 23.83.37.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175325AB /* 23.83.37.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17535B9B /* 23.83.91.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17589A45 /* 23.88.154.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x17582C1A /* 23.88.44.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C226A /* 23.92.34.106/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x175C226C /* 23.92.34.108/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x175C2270 /* 23.92.34.112/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x175C2273 /* 23.92.34.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C2274 /* 23.92.34.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C2276 /* 23.92.34.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C2278 /* 23.92.34.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C227A /* 23.92.34.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C2229 /* 23.92.34.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C222B /* 23.92.34.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175C2483 /* 23.92.36.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175ED319 /* 23.94.211.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175E02B1 /* 23.94.2.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175E5338 /* 23.94.83.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175E5306 /* 23.94.83.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175E535B /* 23.94.83.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175FF03D /* 23.95.240.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F2FB9 /* 23.95.47.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F48F0 /* 23.95.72.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4852 /* 23.95.72.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F49FA /* 23.95.73.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F492E /* 23.95.73.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4950 /* 23.95.73.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4FD1 /* 23.95.79.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4FDD /* 23.95.79.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4FDF /* 23.95.79.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4F1D /* 23.95.79.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x175F4F2F /* 23.95.79.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1880519C /* 24.128.81.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x18861E41 /* 24.134.30.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x18970133 /* 24.151.1.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1898B9E2 /* 24.152.185.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x18F048AA /* 24.240.72.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x183EF42D /* 24.62.244.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x02380A1D /* 2.56.10.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x02380A24 /* 2.56.10.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0238A49D /* 2.56.164.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0238A44B /* 2.56.164.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0238B059 /* 2.56.176.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x02386279 /* 2.56.98.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x02386286 /* 2.56.98.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0238631A /* 2.56.99.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A1569 /* 2.58.21.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A34A3 /* 2.58.52.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A38DC /* 2.58.56.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A3823 /* 2.58.56.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023A382B /* 2.58.56.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x023BFEC6 /* 2.59.254.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F6F624F /* 31.111.98.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F0BC868 /* 31.11.200.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F811641 /* 31.129.22.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F8500D2 /* 31.133.0.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F85016C /* 31.133.1.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F0EFC62 /* 31.14.252.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FA46EB0 /* 31.164.110.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FAA16C7 /* 31.170.22.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FAB9AA5 /* 31.171.154.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FAB9AAD /* 31.171.154.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FB8EC68 /* 31.184.236.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F14F162 /* 31.20.241.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1FCF594C /* 31.207.89.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F15DB5C /* 31.21.219.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F166956 /* 31.22.105.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F2ABAA5 /* 31.42.186.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F2CEE19 /* 31.44.238.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F34ADAA /* 31.52.173.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F3B815C /* 31.59.129.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x1F060117 /* 31.6.1.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x20DAE123 /* 32.218.225.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x23007F34 /* 35.0.127.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25722AEF /* 37.114.42.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25722EAA /* 37.114.46.170/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x25723AB7 /* 37.114.58.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578A2DE /* 37.120.162.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578A5AF /* 37.120.165.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578ABBC /* 37.120.171.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578ABD0 /* 37.120.171.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578ABE6 /* 37.120.171.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578AB40 /* 37.120.171.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578AEF9 /* 37.120.174.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B1B1 /* 37.120.177.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B36A /* 37.120.179.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B72F /* 37.120.183.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578B824 /* 37.120.184.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BA7A /* 37.120.186.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BAE5 /* 37.120.186.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BB68 /* 37.120.187.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2578BE06 /* 37.120.190.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2501CCF3 /* 37.1.204.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x258F3D84 /* 37.143.61.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25B3BE22 /* 37.179.190.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25BB6736 /* 37.187.103.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25BB7A08 /* 37.187.122.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25BB957D /* 37.187.149.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25BB05C0 /* 37.187.5.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25CD08BF /* 37.205.8.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DAF54F /* 37.218.245.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DC5651 /* 37.220.86.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC079 /* 37.221.192.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC12C /* 37.221.193.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC367 /* 37.221.195.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC317 /* 37.221.195.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC4C5 /* 37.221.196.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC447 /* 37.221.196.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDC550 /* 37.221.197.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDD085 /* 37.221.208.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDD047 /* 37.221.208.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDD493 /* 37.221.212.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDD496 /* 37.221.212.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25DDD742 /* 37.221.215.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E481BA /* 37.228.129.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E481BD /* 37.228.129.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E481C1 /* 37.228.129.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E48135 /* 37.228.129.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E68001 /* 37.230.128.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25E6802F /* 37.230.128.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25FCBA0D /* 37.252.186.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25FCBB0E /* 37.252.187.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25FCBEB0 /* 37.252.190.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25FCBF29 /* 37.252.191.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251A4D3A /* 37.26.77.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B6A19 /* 37.27.106.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B7A78 /* 37.27.122.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B7A7C /* 37.27.122.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B86B4 /* 37.27.134.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B8E79 /* 37.27.142.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251BBBB0 /* 37.27.187.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B028D /* 37.27.2.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B1985 /* 37.27.25.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B2A70 /* 37.27.42.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B2F62 /* 37.27.47.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B3ACE /* 37.27.58.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B47A8 /* 37.27.71.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B08DF /* 37.27.8.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x251B5370 /* 37.27.83.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED19B /* 37.46.209.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED2E6 /* 37.46.210.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED366 /* 37.46.211.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED30F /* 37.46.211.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED310 /* 37.46.211.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED313 /* 37.46.211.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED316 /* 37.46.211.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED31E /* 37.46.211.30/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x252ED320 /* 37.46.211.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x252ED306 /* 37.46.211.6/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x252ED309 /* 37.46.211.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x25305A54 /* 37.48.90.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x253B1D4D /* 37.59.29.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x253F65A5 /* 37.63.101.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x253F5217 /* 37.63.82.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x254BA67E /* 37.75.166.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x254D38EE /* 37.77.56.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x254D38F6 /* 37.77.56.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26667FFC /* 38.102.127.252/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x266654CC /* 38.102.84.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26665418 /* 38.102.84.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x260F84A2 /* 38.15.132.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x260F84A4 /* 38.15.132.164/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x26AC670F /* 38.172.103.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26B40E71 /* 38.180.14.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26B40E73 /* 38.180.14.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26B4EB9E /* 38.180.235.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26B4EBBB /* 38.180.235.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26B4301F /* 38.180.48.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A794 /* 38.244.167.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7A0 /* 38.244.167.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7A6 /* 38.244.167.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7B3 /* 38.244.167.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7BA /* 38.244.167.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7C9 /* 38.244.167.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7CE /* 38.244.167.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7D7 /* 38.244.167.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7E0 /* 38.244.167.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26F4A7E4 /* 38.244.167.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x263AB38A /* 38.58.179.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26448705 /* 38.68.135.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2654D89E /* 38.84.216.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x26594622 /* 38.89.70.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x266174F2 /* 38.97.116.242/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x266174F4 /* 38.97.116.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x28A00301 /* 40.160.3.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x28A007DE /* 40.160.7.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0B3B1C /* 45.11.59.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0C8AC7 /* 45.12.138.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0CC8D0 /* 45.12.200.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0C0350 /* 45.12.3.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D7DA63A /* 45.125.166.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D7D4170 /* 45.125.65.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D7D412D /* 45.125.65.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8085CE /* 45.128.133.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8085F2 /* 45.128.133.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D81B6E1 /* 45.129.182.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0D68B9 /* 45.13.104.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D838AE3 /* 45.131.138.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D86E124 /* 45.134.225.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D86E29D /* 45.134.226.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D86271B /* 45.134.39.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D865BDB /* 45.134.91.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D865B33 /* 45.134.91.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D87A328 /* 45.135.163.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D881C18 /* 45.136.28.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D881D8A /* 45.136.29.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D881DDD /* 45.136.29.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A106B /* 45.138.16.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A1071 /* 45.138.16.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A10B2 /* 45.138.16.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A10DE /* 45.138.16.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A10E6 /* 45.138.16.230/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D8A10EF /* 45.138.16.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A10F0 /* 45.138.16.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A10F8 /* 45.138.16.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A1027 /* 45.138.16.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A102A /* 45.138.16.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A102C /* 45.138.16.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A1045 /* 45.138.16.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A104C /* 45.138.16.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8A578E /* 45.138.87.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8BA33F /* 45.139.163.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8CA456 /* 45.140.164.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8CBC69 /* 45.140.188.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8CBC37 /* 45.140.188.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D99D6 /* 45.141.153.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D9D32 /* 45.141.157.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD70A /* 45.141.215.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD76E /* 45.141.215.110/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D8DD772 /* 45.141.215.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD7A7 /* 45.141.215.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD7A9 /* 45.141.215.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD711 /* 45.141.215.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD713 /* 45.141.215.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD715 /* 45.141.215.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD71B /* 45.141.215.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD71C /* 45.141.215.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD724 /* 45.141.215.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD728 /* 45.141.215.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD704 /* 45.141.215.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD738 /* 45.141.215.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD73D /* 45.141.215.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD73E /* 45.141.215.62/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D8DD706 /* 45.141.215.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD74A /* 45.141.215.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD750 /* 45.141.215.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD758 /* 45.141.215.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD75A /* 45.141.215.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD75F /* 45.141.215.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8DD761 /* 45.141.215.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D0331 /* 45.141.3.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D0337 /* 45.141.3.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D0339 /* 45.141.3.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D033A /* 45.141.3.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D0343 /* 45.141.3.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8D3945 /* 45.141.57.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8E641E /* 45.142.100.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8E6811 /* 45.142.104.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8EB159 /* 45.142.177.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8EE8CB /* 45.142.232.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE997 /* 45.14.233.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9BE /* 45.14.233.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9C1 /* 45.14.233.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9CC /* 45.14.233.204/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9D1 /* 45.14.233.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9D2 /* 45.14.233.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0EE9D5 /* 45.14.233.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8FC7C7 /* 45.143.199.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8FC7D9 /* 45.143.199.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8FC8F0 /* 45.143.200.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D8FC836 /* 45.143.200.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D90D10F /* 45.144.209.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D91A456 /* 45.145.164.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D91A6AF /* 45.145.166.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D91A6FA /* 45.145.166.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9128B5 /* 45.145.40.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D940A6F /* 45.148.10.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D940AA9 /* 45.148.10.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D947970 /* 45.148.121.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D95BA85 /* 45.149.186.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D980A16 /* 45.152.10.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A1C46 /* 45.154.28.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9A620E /* 45.154.98.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9B8E15 /* 45.155.142.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D9D22B3 /* 45.157.34.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D157490 /* 45.21.116.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D200442 /* 45.32.4.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D205108 /* 45.32.81.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D29CCCB /* 45.41.204.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DB9AC /* 45.61.185.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DB9C2 /* 45.61.185.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBACB /* 45.61.186.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D3DBBC8 /* 45.61.187.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D42F860 /* 45.66.248.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D42230A /* 45.66.35.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D422314 /* 45.66.35.20/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D422316 /* 45.66.35.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D42231F /* 45.66.35.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D422320 /* 45.66.35.32/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x2D422B03 /* 45.66.43.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D4C0291 /* 45.76.2.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D4D706B /* 45.77.112.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D509ECD /* 45.80.158.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D509E17 /* 45.80.158.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D509E1B /* 45.80.158.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D509E45 /* 45.80.158.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D50A816 /* 45.80.168.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D50ABD3 /* 45.80.171.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D50D214 /* 45.80.210.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D527AFE /* 45.82.122.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D0816CF /* 45.8.22.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D536889 /* 45.83.104.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5369DF /* 45.83.105.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D536A13 /* 45.83.106.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5314C8 /* 45.83.20.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D546B54 /* 45.84.107.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D547A82 /* 45.84.122.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D547AEA /* 45.84.122.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D547A5A /* 45.84.122.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D567D66 /* 45.86.125.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D565696 /* 45.86.86.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D56569E /* 45.86.86.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5656A5 /* 45.86.86.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5656E7 /* 45.86.86.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D58684A /* 45.88.104.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D58BA53 /* 45.88.186.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D597FDD /* 45.89.127.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D59360B /* 45.89.54.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5A0DF7 /* 45.90.13.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5A878D /* 45.90.135.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5AD9D4 /* 45.90.217.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5A04EB /* 45.90.4.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5B65E3 /* 45.91.101.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D099432 /* 45.9.148.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D099C64 /* 45.9.156.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2D09A86C /* 45.9.168.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D09A8BF /* 45.9.168.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D09A816 /* 45.9.168.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5C0B88 /* 45.92.11.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5C213E /* 45.92.33.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5C214A /* 45.92.33.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5C467E /* 45.92.70.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5E1F16 /* 45.94.31.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5E1F44 /* 45.94.31.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA968 /* 45.95.169.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA96D /* 45.95.169.109/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA99A /* 45.95.169.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA9AB /* 45.95.169.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA9E6 /* 45.95.169.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA9FF /* 45.95.169.255/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA929 /* 45.95.169.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FA92B /* 45.95.169.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5FE935 /* 45.95.233.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D5F50D5 /* 45.95.80.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D093C8C /* 45.9.60.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2D093FDE /* 45.9.63.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E69FDF1 /* 46.105.253.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E69FDF2 /* 46.105.253.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E69FDF9 /* 46.105.253.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E69FDFB /* 46.105.253.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E69FDFD /* 46.105.253.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E691CFD /* 46.105.28.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E691C06 /* 46.105.28.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E695B4E /* 46.105.91.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E801B05 /* 46.128.27.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E8B6ACD /* 46.139.106.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E957D09 /* 46.149.125.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA5DCE5 /* 46.165.220.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA5DDCF /* 46.165.221.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA5F256 /* 46.165.242.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA6BB4D /* 46.166.187.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EA7F4EE /* 46.167.244.238/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x2E1128F9 /* 46.17.40.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E112A3C /* 46.17.42.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E112C13 /* 46.17.44.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E116065 /* 46.17.96.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E116067 /* 46.17.96.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E116078 /* 46.17.96.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E116082 /* 46.17.96.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E142370 /* 46.20.35.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E16A56F /* 46.22.165.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EDF2C55 /* 46.223.44.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE26AB6 /* 46.226.106.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE26F41 /* 46.226.111.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE4C780 /* 46.228.199.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE53776 /* 46.229.55.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE50857 /* 46.229.8.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E176CA6 /* 46.23.108.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E176D19 /* 46.23.109.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE75DD8 /* 46.231.93.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE8FAA3 /* 46.232.250.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE8FA33 /* 46.232.250.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE8FBB7 /* 46.232.251.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EE8FBBF /* 46.232.251.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EEA2F69 /* 46.234.47.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E174851 /* 46.23.72.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EEFDE86 /* 46.239.222.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EF62C35 /* 46.246.44.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2EFD0427 /* 46.253.4.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1C6DE7 /* 46.28.109.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1C6DE9 /* 46.28.109.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1DA63B /* 46.29.166.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1DEB6A /* 46.29.235.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1DEB47 /* 46.29.235.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E1DEB4F /* 46.29.235.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26ECFA /* 46.38.236.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26EDDD /* 46.38.237.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26ED31 /* 46.38.237.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26F3D2 /* 46.38.243.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26F33E /* 46.38.243.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26FDA1 /* 46.38.253.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E26FEA8 /* 46.38.254.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E04671D /* 46.4.103.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E0420B8 /* 46.4.32.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E04394B /* 46.4.57.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E0442B2 /* 46.4.66.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E0442BC /* 46.4.66.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E044AED /* 46.4.74.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E044E03 /* 46.4.78.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2E046018 /* 46.4.96.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2F9EF0B2 /* 47.158.240.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2FC3E05E /* 47.195.224.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2FC5A5F2 /* 47.197.165.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2FFE8EB4 /* 47.254.142.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2F36237E /* 47.54.35.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x2F59C1E6 /* 47.89.193.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310CE0CB /* 49.12.224.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310CE6EA /* 49.12.230.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310CE7E6 /* 49.12.231.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310C3985 /* 49.12.57.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310DD140 /* 49.13.209.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x310D047B /* 49.13.4.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x32742885 /* 50.116.40.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3276E1A0 /* 50.118.225.160/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x3276E1B7 /* 50.118.225.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3276E1E3 /* 50.118.225.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3276E1E5 /* 50.118.225.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x32333DA0 /* 50.51.61.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x32077343 /* 50.7.115.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05685606 /* 5.104.86.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F74A8 /* 51.15.116.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FB9C9 /* 51.15.185.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FF2F4 /* 51.15.242.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FF316 /* 51.15.243.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330FF6AA /* 51.15.246.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F24B7 /* 51.15.36.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F2564 /* 51.15.37.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F2826 /* 51.15.40.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F318F /* 51.15.49.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F3224 /* 51.15.50.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F3675 /* 51.15.54.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F3B0F /* 51.15.59.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F4C38 /* 51.15.76.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339E9298 /* 51.158.146.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339E9A70 /* 51.158.154.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339EC9EB /* 51.158.201.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339ECC72 /* 51.158.204.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339ECC9C /* 51.158.204.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F59C8 /* 51.15.89.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339FB592 /* 51.159.181.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339FBA55 /* 51.159.186.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339FC329 /* 51.159.195.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339FD339 /* 51.159.211.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339F2283 /* 51.159.34.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F5FE7 /* 51.15.95.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x339F3BBB /* 51.159.59.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x330F6002 /* 51.15.96.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33B283C8 /* 51.178.131.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33B2883A /* 51.178.136.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C36BDC /* 51.195.107.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C3779F /* 51.195.119.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C37966 /* 51.195.121.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C39427 /* 51.195.148.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C398F1 /* 51.195.152.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C3A6AE /* 51.195.166.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C3A6B3 /* 51.195.166.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C329E6 /* 51.195.41.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33C32B3A /* 51.195.43.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33D294A6 /* 51.210.148.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33D2B390 /* 51.210.179.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33D2B5FC /* 51.210.181.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE0DDF /* 51.222.13.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE8C3A /* 51.222.140.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE8E43 /* 51.222.142.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE0FC8 /* 51.222.15.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DECF3D /* 51.222.207.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33DE183E /* 51.222.24.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33FE60D0 /* 51.254.96.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33FFAAC3 /* 51.255.170.195/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05849FEE /* 5.132.159.238/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05879C0C /* 5.135.156.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0587C70B /* 5.135.199.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05875304 /* 5.135.83.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33266EEA /* 51.38.110.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3326700F /* 51.38.112.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3326E12E /* 51.38.225.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x332641A0 /* 51.38.65.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05013834 /* 5.1.56.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3344882C /* 51.68.136.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33449859 /* 51.68.152.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33449BC9 /* 51.68.155.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3344B536 /* 51.68.181.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3344B952 /* 51.68.185.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3344C5DC /* 51.68.197.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33442C18 /* 51.68.44.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B7CA2 /* 51.75.124.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B81CC /* 51.75.129.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B8DB9 /* 51.75.141.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B9916 /* 51.75.153.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334BAB88 /* 51.75.171.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334BAB4E /* 51.75.171.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B11EC /* 51.75.17.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334BCE0C /* 51.75.206.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B1AB8 /* 51.75.26.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B1E2B /* 51.75.30.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334B46F6 /* 51.75.70.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334D8452 /* 51.77.132.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334DD218 /* 51.77.210.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334D43E8 /* 51.77.67.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334D47F7 /* 51.77.71.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334D5AF6 /* 51.77.90.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334FF83C /* 51.79.248.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x334F41F4 /* 51.79.65.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B4FDA9 /* 5.180.253.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B58663 /* 5.181.134.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33519BE4 /* 51.81.155.228/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x05B59CAD /* 5.181.156.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B59EE8 /* 5.181.158.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B59E31 /* 5.181.158.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B59F1E /* 5.181.159.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351C9CF /* 51.81.201.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351D0D9 /* 51.81.208.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351D165 /* 51.81.209.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351DE3E /* 51.81.222.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B5021C /* 5.181.2.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351F595 /* 51.81.245.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B53333 /* 5.181.51.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B53334 /* 5.181.51.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33513888 /* 51.81.56.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x335138E4 /* 51.81.56.228/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x3351384A /* 51.81.56.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3351385B /* 51.81.56.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33513907 /* 51.81.57.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B54D08 /* 5.181.77.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B55065 /* 5.181.80.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B5506B /* 5.181.80.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B55083 /* 5.181.80.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B550A9 /* 5.181.80.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B550B5 /* 5.181.80.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B5503F /* 5.181.80.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33515D6C /* 51.81.93.108/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x33515D25 /* 51.81.93.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33515D27 /* 51.81.93.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B656D4 /* 5.182.86.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33538467 /* 51.83.132.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05B7B3F8 /* 5.183.179.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3353BA55 /* 51.83.186.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3353ED3B /* 51.83.237.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33596A1D /* 51.89.106.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BD8663 /* 5.189.134.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3359118F /* 51.89.17.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BDB078 /* 5.189.176.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BDB53D /* 5.189.181.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3359F21D /* 51.89.242.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3359F21F /* 51.89.242.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05BDFD9F /* 5.189.253.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3359023F /* 51.89.2.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33592833 /* 51.89.40.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x335951F7 /* 51.89.81.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x33595F17 /* 51.89.95.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x335B1297 /* 51.91.18.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3309AF0B /* 51.9.175.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C44063 /* 5.196.64.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C44718 /* 5.196.71.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C45F22 /* 5.196.95.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C7A272 /* 5.199.162.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C7A29B /* 5.199.162.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05C7A249 /* 5.199.162.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05169F87 /* 5.22.159.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0516DEA8 /* 5.22.222.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05E6266C /* 5.230.38.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05E626EB /* 5.230.38.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FABAA0 /* 5.250.186.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FABAA9 /* 5.250.186.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCB013 /* 5.252.176.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCB2E0 /* 5.252.178.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCB225 /* 5.252.178.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCE073 /* 5.252.224.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCE2C9 /* 5.252.226.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FCE34C /* 5.252.227.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FDB063 /* 5.253.176.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FD5489 /* 5.253.84.137/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FE76BD /* 5.254.118.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FE76BF /* 5.254.118.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FE76C0 /* 5.254.118.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6518 /* 5.255.101.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF662B /* 5.255.102.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6799 /* 5.255.103.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6DD6 /* 5.255.109.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6E59 /* 5.255.110.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6F68 /* 5.255.111.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6F97 /* 5.255.111.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6F40 /* 5.255.111.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF70D0 /* 5.255.112.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF74DB /* 5.255.116.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF7538 /* 5.255.117.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF76DA /* 5.255.118.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF7B9E /* 5.255.123.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF7BA4 /* 5.255.123.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF7DC4 /* 5.255.125.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF7FDE /* 5.255.127.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF60DA /* 5.255.96.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF61C4 /* 5.255.97.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF61DD /* 5.255.97.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF62BA /* 5.255.98.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05FF6305 /* 5.255.99.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050243E2 /* 5.2.67.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0502486E /* 5.2.72.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05024E7E /* 5.2.78.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05024FBE /* 5.2.79.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0522B6CB /* 5.34.182.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0522D251 /* 5.34.210.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x0527CAAE /* 5.39.202.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36246515 /* 54.36.101.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3624CD26 /* 54.36.205.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3624D1FD /* 54.36.209.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3624D1FE /* 54.36.209.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36246345 /* 54.36.99.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36258B76 /* 54.37.139.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36276BB9 /* 54.39.107.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3627EA5B /* 54.39.234.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36273412 /* 54.39.52.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x36274409 /* 54.39.68.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052C6BA8 /* 5.44.107.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D665D /* 5.45.102.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D68B0 /* 5.45.104.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6859 /* 5.45.104.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D6F95 /* 5.45.111.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D62A2 /* 5.45.98.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x052D62BC /* 5.45.98.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x053BF89E /* 5.59.248.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980659B /* 57.128.101.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x39809FAA /* 57.128.159.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980A9A4 /* 57.128.169.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980B44A /* 57.128.180.74/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x3980BEC7 /* 57.128.190.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980C2A9 /* 57.128.194.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980D579 /* 57.128.213.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980D876 /* 57.128.216.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980DB6C /* 57.128.219.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980DB24 /* 57.128.219.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980DB63 /* 57.128.219.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980DCB9 /* 57.128.220.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980DCE5 /* 57.128.220.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3980E4B0 /* 57.128.228.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x39818638 /* 57.129.134.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x39818B40 /* 57.129.139.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x39812C26 /* 57.129.44.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x398105A2 /* 57.129.5.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x054BD50B /* 5.75.213.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x054BF9A0 /* 5.75.249.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050979CF /* 5.9.121.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05097ACE /* 5.9.122.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05090E19 /* 5.9.14.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05090E1E /* 5.9.14.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x05099C11 /* 5.9.156.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050918A9 /* 5.9.24.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050938F9 /* 5.9.56.249/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x050956EC /* 5.9.86.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E700A9A /* 62.112.10.154/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E70095C /* 62.112.9.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E71C851 /* 62.113.200.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E71D64A /* 62.113.214.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E852D02 /* 62.133.45.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E853E9E /* 62.133.62.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E8D23D4 /* 62.141.35.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E8D2496 /* 62.141.36.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E8D25DA /* 62.141.37.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E97B4FB /* 62.151.180.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EA91336 /* 62.169.19.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EAB89A9 /* 62.171.137.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EAB8E03 /* 62.171.142.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EB65492 /* 62.182.84.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EB654F1 /* 62.182.84.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED2692E /* 62.210.105.46/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED27B18 /* 62.210.123.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED27D82 /* 62.210.125.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED28377 /* 62.210.131.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED2CDE4 /* 62.210.205.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED2D1D0 /* 62.210.209.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED2E773 /* 62.210.231.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3ED26115 /* 62.210.97.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3EEEEDF2 /* 62.238.237.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E3FCB9D /* 62.63.203.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E431C6E /* 62.67.28.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E431C02 /* 62.67.28.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E431C32 /* 62.67.28.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3E482D33 /* 62.72.45.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3F8DEA26 /* 63.141.234.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3FE374A2 /* 63.227.116.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x3FFA3FAD /* 63.250.63.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x407813A1 /* 64.120.19.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40BE4C02 /* 64.190.76.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40BE4C04 /* 64.190.76.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40E12E10 /* 64.225.46.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40E37782 /* 64.227.119.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40FAC814 /* 64.250.200.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40FBFF09 /* 64.251.255.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x401F0A06 /* 64.31.10.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x401F04A6 /* 64.31.4.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x401F04F4 /* 64.31.4.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x401F04FC /* 64.31.4.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40269E41 /* 64.38.158.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x402AB032 /* 64.42.176.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40346C45 /* 64.52.108.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x403E94CC /* 64.62.148.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x403EE9CE /* 64.62.233.206/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x403EE9D1 /* 64.62.233.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F64 /* 64.65.63.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413F6E /* 64.65.63.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F70 /* 64.65.63.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F0C /* 64.65.63.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F7B /* 64.65.63.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F86 /* 64.65.63.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F8D /* 64.65.63.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F90 /* 64.65.63.144/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413F96 /* 64.65.63.150/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413F9B /* 64.65.63.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F9C /* 64.65.63.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FA0 /* 64.65.63.160/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413FA6 /* 64.65.63.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FB1 /* 64.65.63.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FBC /* 64.65.63.188/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413FC7 /* 64.65.63.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FC9 /* 64.65.63.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F14 /* 64.65.63.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FD3 /* 64.65.63.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FD4 /* 64.65.63.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FDE /* 64.65.63.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F16 /* 64.65.63.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F02 /* 64.65.63.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413FE9 /* 64.65.63.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413FF4 /* 64.65.63.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F1E /* 64.65.63.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F21 /* 64.65.63.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F22 /* 64.65.63.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F28 /* 64.65.63.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F04 /* 64.65.63.4/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x40413F2C /* 64.65.63.44/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413F32 /* 64.65.63.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F37 /* 64.65.63.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F38 /* 64.65.63.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F3C /* 64.65.63.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F3F /* 64.65.63.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F40 /* 64.65.63.64/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x40413F46 /* 64.65.63.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F4D /* 64.65.63.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F4E /* 64.65.63.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F50 /* 64.65.63.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F08 /* 64.65.63.8/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x40413F58 /* 64.65.63.88/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x40413F5A /* 64.65.63.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x40413F63 /* 64.65.63.99/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x404AA0E8 /* 64.74.160.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x405F0AA9 /* 64.95.10.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416C81DA /* 65.108.129.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416C8F98 /* 65.108.143.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416CC19C /* 65.108.193.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416CC12A /* 65.108.193.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416CCC61 /* 65.108.204.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416CDE2A /* 65.108.222.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416CE9A6 /* 65.108.233.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416C0372 /* 65.108.3.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416C4D13 /* 65.108.77.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416C6361 /* 65.108.99.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D00D2 /* 65.109.0.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D6EEB /* 65.109.110.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416DC576 /* 65.109.197.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416DD449 /* 65.109.212.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416DD912 /* 65.109.217.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416DDA76 /* 65.109.218.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416DE935 /* 65.109.233.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D1EFD /* 65.109.30.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D438C /* 65.109.67.140/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D43A0 /* 65.109.67.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D43B6 /* 65.109.67.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D4758 /* 65.109.71.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D566E /* 65.109.86.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x416D629C /* 65.109.98.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x411500D9 /* 65.21.0.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x41156E26 /* 65.21.110.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115775A /* 65.21.119.90/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x4115775E /* 65.21.119.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x411501E1 /* 65.21.1.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115B497 /* 65.21.180.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115B520 /* 65.21.181.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115C357 /* 65.21.195.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115D69C /* 65.21.214.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115D69E /* 65.21.214.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115DB73 /* 65.21.219.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115DB74 /* 65.21.219.116/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x4115DB82 /* 65.21.219.130/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x4115DB84 /* 65.21.219.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115DB86 /* 65.21.219.134/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115E377 /* 65.21.227.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4115F684 /* 65.21.246.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x41153109 /* 65.21.49.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x41153613 /* 65.21.54.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x41155E0D /* 65.21.94.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4126783F /* 65.38.120.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4131140A /* 65.49.20.10/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x4131140C /* 65.49.20.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x41570716 /* 65.87.7.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x426F0210 /* 66.111.2.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x426F0214 /* 66.111.2.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4292C121 /* 66.146.193.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42A5E38A /* 66.165.227.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42A5F1E4 /* 66.165.241.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42A5F1E6 /* 66.165.241.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42B3F832 /* 66.179.248.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42B7AD1D /* 66.183.173.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42BB0484 /* 66.187.4.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42CE008A /* 66.206.0.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42CE0052 /* 66.206.0.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42CE01CA /* 66.206.1.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42CE041A /* 66.206.4.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x422109EC /* 66.33.9.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4246BFD2 /* 66.70.191.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4246D314 /* 66.70.211.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4246E32C /* 66.70.227.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x424E28B6 /* 66.78.40.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x424E2849 /* 66.78.40.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x425580DA /* 66.85.128.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x42559D6A /* 66.85.157.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x43CD8BAF /* 67.205.139.175/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x43CDA543 /* 67.205.165.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x43CDB457 /* 67.205.180.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x43D9F275 /* 67.217.242.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44ABB37C /* 68.171.179.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44BADD0F /* 68.186.221.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44C4767F /* 68.196.118.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44EA49A4 /* 68.234.73.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44FDFD42 /* 68.253.253.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4443201F /* 68.67.32.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44432020 /* 68.67.32.32/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x44432022 /* 68.67.32.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x44480AEF /* 68.72.10.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4578C4A4 /* 69.120.196.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x450C536A /* 69.12.83.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x450C535C /* 69.12.83.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x45A6B69D /* 69.166.182.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x45AE6205 /* 69.174.98.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x45AE623B /* 69.174.98.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x45D164B7 /* 69.209.100.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x451EEF7E /* 69.30.239.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x450450E6 /* 69.4.80.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4530BA57 /* 69.48.186.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4530CDC6 /* 69.48.205.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x46736A4A /* 70.115.106.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4686EE54 /* 70.134.238.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4686F847 /* 70.134.248.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4713906A /* 71.19.144.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4713920F /* 71.19.146.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x47139471 /* 71.19.148.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x47F4AA1F /* 71.244.170.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x473AF36F /* 71.58.243.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4812D752 /* 72.18.215.82/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x48EB8174 /* 72.235.129.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x48FFBC41 /* 72.255.188.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4853FACF /* 72.83.250.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4854720B /* 72.84.114.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4975848A /* 73.117.132.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A764D22 /* 74.118.77.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A7B610A /* 74.123.97.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A7B611A /* 74.123.97.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A7B620A /* 74.123.98.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A7B6212 /* 74.123.98.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD06864 /* 74.208.104.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0B2A6 /* 74.208.178.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0B64E /* 74.208.182.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0BD7C /* 74.208.189.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0C299 /* 74.208.194.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0C36C /* 74.208.195.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0C3D0 /* 74.208.195.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0C9A3 /* 74.208.201.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD0D11D /* 74.208.209.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD01B5A /* 74.208.27.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD02DD8 /* 74.208.45.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD03CFD /* 74.208.60.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD03C32 /* 74.208.60.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD058B8 /* 74.208.88.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4AD79A05 /* 74.215.154.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A522FC2 /* 74.82.47.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A5B1AAA /* 74.91.26.170/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4A60627B /* 74.96.98.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4B779785 /* 75.119.151.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4CEBCF1C /* 76.235.207.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4C46353D /* 76.70.53.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4C47A35D /* 76.71.163.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D69922A /* 77.105.146.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D6D9894 /* 77.109.152.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D6D9857 /* 77.109.152.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DA03561 /* 77.160.53.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DA2E549 /* 77.162.229.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DA2F97A /* 77.162.249.122/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DA9419C /* 77.169.65.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DAC4697 /* 77.172.70.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DAEA425 /* 77.174.164.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DAEBC97 /* 77.174.188.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD8EE4 /* 77.221.142.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD8FB2 /* 77.221.143.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD9869 /* 77.221.152.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD9DED /* 77.221.157.237/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD9FB8 /* 77.221.159.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD9FBD /* 77.221.159.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DDD9FC0 /* 77.221.159.192/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x4DDD9F4B /* 77.221.159.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DEF710F /* 77.239.113.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4DEF7625 /* 77.239.118.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CDB /* 77.48.28.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CDC /* 77.48.28.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CEF /* 77.48.28.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D301CF0 /* 77.48.28.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D387826 /* 77.56.120.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D446431 /* 77.68.100.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D446F78 /* 77.68.111.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D441456 /* 77.68.20.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4432D5 /* 77.68.50.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4443C1 /* 77.68.67.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D444A79 /* 77.68.74.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D49437D /* 77.73.67.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D494315 /* 77.73.67.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D494327 /* 77.73.67.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D494464 /* 77.73.68.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D494449 /* 77.73.68.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D494580 /* 77.73.69.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4945B5 /* 77.73.69.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4946A7 /* 77.73.70.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4946B0 /* 77.73.70.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D4947F1 /* 77.73.71.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D53C695 /* 77.83.198.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D53C6D5 /* 77.83.198.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5A13A5 /* 77.90.19.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5A296A /* 77.90.41.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5A2957 /* 77.90.41.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5A3491 /* 77.90.52.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5B5593 /* 77.91.85.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5B565F /* 77.91.86.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4D5B574F /* 77.91.87.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E81F05E /* 78.129.240.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E8A622A /* 78.138.98.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E8E12DB /* 78.142.18.219/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E8E1261 /* 78.142.18.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E9B174D /* 78.155.23.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E9F830C /* 78.159.131.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4EC29E1E /* 78.194.158.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E1F40C4 /* 78.31.64.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E1F437F /* 78.31.67.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2C73FE /* 78.44.115.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2E6AA3 /* 78.46.106.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2E7B1A /* 78.46.123.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2EC1D7 /* 78.46.193.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2E5CAC /* 78.46.92.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2FA1B2 /* 78.47.161.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E2FA9BD /* 78.47.169.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E438143 /* 78.67.129.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E502470 /* 78.80.36.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E52478D /* 78.82.71.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4E5AEAE1 /* 78.90.234.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F64EB1D /* 79.100.235.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F753E4B /* 79.117.62.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F772E8B /* 79.119.46.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F7C070B /* 79.124.7.11/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F881DA0 /* 79.136.29.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F89C6D5 /* 79.137.198.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F89CA5C /* 79.137.202.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F8DA5AC /* 79.141.165.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F8DAE7C /* 79.141.174.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F8DAFE5 /* 79.141.175.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F8FB1C0 /* 79.143.177.192/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4FA1F4D6 /* 79.161.244.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4FC5EBAD /* 79.197.235.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4FCF9CFA /* 79.207.156.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4FE32ED9 /* 79.227.46.217/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4FFA4362 /* 79.250.67.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F3937A1 /* 79.57.55.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F3937A2 /* 79.57.55.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F3937A5 /* 79.57.55.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F3937A6 /* 79.57.55.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x4F632911 /* 79.99.41.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x506D0F3D /* 80.109.15.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5098C994 /* 80.152.201.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50C80464 /* 80.200.4.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50EFBD4C /* 80.239.189.76/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x50EFBD54 /* 80.239.189.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50F1DC39 /* 80.241.220.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5040B598 /* 80.64.181.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5042877B /* 80.66.135.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043A751 /* 80.67.167.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043A756 /* 80.67.167.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043ACA2 /* 80.67.172.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5043B0E0 /* 80.67.176.224/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x504F752A /* 80.79.117.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50524C37 /* 80.82.76.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50524E0E /* 80.82.78.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x50558DBA /* 80.85.141.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x505CCCFB /* 80.92.204.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x505E5C6A /* 80.94.92.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x505E5C5C /* 80.94.92.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5189B344 /* 81.137.179.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x519B3BBA /* 81.155.59.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5110212A /* 81.16.33.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51A98617 /* 81.169.134.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51A99F1C /* 81.169.159.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51A9A651 /* 81.169.166.81/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51A9BA10 /* 81.169.186.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51A9C803 /* 81.169.200.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51AB0659 /* 81.171.6.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5111126C /* 81.17.18.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51111C75 /* 81.17.28.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51111C5F /* 81.17.28.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51B56816 /* 81.181.104.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51B5F525 /* 81.181.245.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51BFAF3B /* 81.191.175.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51C9CA65 /* 81.201.202.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5102BF22 /* 81.2.191.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51E6C754 /* 81.230.199.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x512C771A /* 81.44.119.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51384781 /* 81.56.71.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5139798F /* 81.57.121.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51071207 /* 81.7.18.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5107136E /* 81.7.19.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x514FFBF8 /* 81.79.251.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x51624055 /* 81.98.64.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52004FE6 /* 82.0.79.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x08D01AB1 /* 8.208.26.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x08D16A13 /* 8.209.106.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5276F267 /* 82.118.242.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52821865 /* 82.130.24.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x528BFC12 /* 82.139.252.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x528D7A9C /* 82.141.122.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5295E37D /* 82.149.227.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5295E37E /* 82.149.227.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5295E3EC /* 82.149.227.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52998A39 /* 82.153.138.57/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52994DAD /* 82.153.77.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A574AD /* 82.165.116.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A5B170 /* 82.165.177.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A5C9B9 /* 82.165.201.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A514A1 /* 82.165.20.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A5E6BF /* 82.165.230.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52A560AC /* 82.165.96.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52ACB601 /* 82.172.182.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DC2696 /* 82.220.38.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD80BF /* 82.221.128.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DD8305 /* 82.221.131.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DF6768 /* 82.223.103.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DF274F /* 82.223.39.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52DF4672 /* 82.223.70.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5206D7BF /* 82.6.215.191/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5240878A /* 82.64.135.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x524088F0 /* 82.64.136.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x524014AB /* 82.64.20.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5240EE54 /* 82.64.238.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52402E8F /* 82.64.46.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52418A2F /* 82.65.138.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5241A5CA /* 82.65.165.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52420A11 /* 82.66.10.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52426D66 /* 82.66.109.102/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5242C5D3 /* 82.66.197.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5242F9F6 /* 82.66.249.246/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52421A29 /* 82.66.26.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x52423D13 /* 82.66.61.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5243675C /* 82.67.103.92/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53003CE5 /* 83.0.60.229/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537226EB /* 83.114.38.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E2864 /* 83.126.40.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E2877 /* 83.126.40.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E281E /* 83.126.40.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E2832 /* 83.126.40.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E2846 /* 83.126.40.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x537E285A /* 83.126.40.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53886B72 /* 83.136.107.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53886B26 /* 83.136.107.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53931D40 /* 83.147.29.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x539FF2EC /* 83.159.242.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53A84554 /* 83.168.69.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D46464 /* 83.212.100.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D47525 /* 83.212.117.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D448BD /* 83.212.72.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D44B76 /* 83.212.75.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D45120 /* 83.212.81.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D46061 /* 83.212.96.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53D90949 /* 83.217.9.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53DBA2E4 /* 83.219.162.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5316042D /* 83.22.4.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x53201397 /* 83.32.19.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x549DCE90 /* 84.157.206.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5410E0E3 /* 84.16.224.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5410EA96 /* 84.16.234.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54A51C14 /* 84.165.28.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5413B0A1 /* 84.19.176.161/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5413B614 /* 84.19.182.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54C67644 /* 84.198.118.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EA1012 /* 84.234.16.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EA134C /* 84.234.19.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EE0A8E /* 84.238.10.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EE57D6 /* 84.238.87.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54EF2E90 /* 84.239.46.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54F7B4F8 /* 84.247.180.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54FC7883 /* 84.252.120.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54FC783F /* 84.252.120.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54FC7A53 /* 84.252.122.83/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x54FC7B70 /* 84.252.123.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x541F3B2F /* 84.31.59.47/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5420F8E3 /* 84.32.248.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5426822D /* 84.38.130.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x542E47FC /* 84.46.71.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x542E5382 /* 84.46.83.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55000D9C /* 85.0.13.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x550AF0FA /* 85.10.240.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x557A7F5A /* 85.122.127.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55829D98 /* 85.130.157.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x558345EF /* 85.131.69.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55A74D27 /* 85.167.77.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55117F81 /* 85.17.127.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55BBB8F4 /* 85.187.184.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3CBD2 /* 85.195.203.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3DDBB /* 85.195.221.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3E6F8 /* 85.195.230.248/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3F142 /* 85.195.241.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3F4FB /* 85.195.244.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55C3FD8E /* 85.195.253.142/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D090A4 /* 85.208.144.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D12EEC /* 85.209.46.236/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D1336B /* 85.209.51.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D13325 /* 85.209.51.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D66F85 /* 85.214.111.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D60CDE /* 85.214.12.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D69597 /* 85.214.149.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D6C8B8 /* 85.214.200.184/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D6CA9E /* 85.214.202.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D77201 /* 85.215.114.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D78104 /* 85.215.129.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D78840 /* 85.215.136.64/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D79144 /* 85.215.145.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7947F /* 85.215.148.127/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7986A /* 85.215.152.106/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D799CA /* 85.215.153.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7A06F /* 85.215.160.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7A080 /* 85.215.160.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7C8C8 /* 85.215.200.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D7DE97 /* 85.215.222.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D72AE1 /* 85.215.42.225/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D72E8D /* 85.215.46.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D735E3 /* 85.215.53.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D73FA3 /* 85.215.63.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55D743E6 /* 85.215.67.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x551768DE /* 85.23.104.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EB4097 /* 85.235.64.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EB42E3 /* 85.235.66.227/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EF22EF /* 85.239.34.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EF2218 /* 85.239.34.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EF2206 /* 85.239.34.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55EF2982 /* 85.239.41.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55F14A43 /* 85.241.74.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5518ED49 /* 85.24.237.73/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5518ED4A /* 85.24.237.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55025229 /* 85.2.82.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x551E833C /* 85.30.131.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x55310B84 /* 85.49.11.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x555ACF43 /* 85.90.207.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5509DC2A /* 85.9.220.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x555DDACC /* 85.93.218.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x566BA833 /* 86.107.168.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x567C1CDC /* 86.124.28.220/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x567D4503 /* 86.125.69.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x560DBE6B /* 86.13.190.107/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5611581D /* 86.17.88.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x560312FB /* 86.3.18.251/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5621359D /* 86.33.53.157/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x56361C31 /* 86.54.28.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5650E1CB /* 86.80.225.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x56567E71 /* 86.86.126.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5656AD3E /* 86.86.173.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5764E170 /* 87.100.225.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5764E658 /* 87.100.230.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57682584 /* 87.104.37.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A6B59 /* 87.106.107.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A6C76 /* 87.106.108.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A81F2 /* 87.106.129.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A862A /* 87.106.134.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A8794 /* 87.106.135.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AA8AC /* 87.106.168.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AB0DE /* 87.106.176.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AC704 /* 87.106.199.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AD8A8 /* 87.106.216.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AD8E6 /* 87.106.216.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576ADA3A /* 87.106.218.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AE581 /* 87.106.229.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AE536 /* 87.106.229.54/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576AEB4B /* 87.106.235.75/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A3461 /* 87.106.52.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A38F5 /* 87.106.56.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A39D7 /* 87.106.57.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A45AB /* 87.106.69.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A4D2D /* 87.106.77.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x576A50A6 /* 87.106.80.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57766E1B /* 87.118.110.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767467 /* 87.118.116.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5776740C /* 87.118.116.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5776745A /* 87.118.116.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767A1E /* 87.118.122.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767A33 /* 87.118.122.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57767EDE /* 87.118.126.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5778ED82 /* 87.120.237.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x577808B0 /* 87.120.8.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5778085B /* 87.120.8.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x577934B6 /* 87.121.52.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x570E0194 /* 87.14.1.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5793BB0D /* 87.147.187.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x579666BC /* 87.150.102.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5799CAE9 /* 87.153.202.233/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57B2531C /* 87.178.83.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E3D341 /* 87.227.211.65/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E57317 /* 87.229.115.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E5254D /* 87.229.37.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E5254E /* 87.229.37.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E555A4 /* 87.229.85.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57E555C5 /* 87.229.85.197/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC217 /* 87.236.194.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC3C6 /* 87.236.195.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC3CB /* 87.236.195.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC3D8 /* 87.236.195.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC57B /* 87.236.197.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57ECC7EF /* 87.236.199.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57365F11 /* 87.54.95.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x573D647D /* 87.61.100.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x574FED1A /* 87.79.237.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x57599CB2 /* 87.89.156.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5762ED98 /* 87.98.237.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5762F2EF /* 87.98.242.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5762F3CC /* 87.98.243.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58721842 /* 88.114.24.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5897C276 /* 88.151.194.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5897C20C /* 88.151.194.12/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58993DB7 /* 88.153.61.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58B1D194 /* 88.177.209.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58C6CF30 /* 88.198.207.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58C6D15F /* 88.198.209.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58C62331 /* 88.198.35.49/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58C65725 /* 88.198.87.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58D0C4C7 /* 88.208.196.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58181F91 /* 88.24.31.145/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58501A02 /* 88.80.26.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x58501A04 /* 88.80.26.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58595DAD /* 88.89.93.173/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x585AFEDA /* 88.90.254.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x586366D5 /* 88.99.102.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58638EB1 /* 88.99.142.177/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x586390EB /* 88.99.144.235/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58639119 /* 88.99.145.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5863C16C /* 88.99.193.108/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5863026F /* 88.99.2.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5863F89E /* 88.99.248.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58631FBA /* 88.99.31.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5863424F /* 88.99.66.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58630757 /* 88.99.7.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x58635EE7 /* 88.99.94.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x596A47C2 /* 89.106.71.194/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x596A47C4 /* 89.106.71.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5975017B /* 89.117.1.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x598EC2F0 /* 89.142.194.240/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936C5A /* 89.147.108.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936D0D /* 89.147.109.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936D5B /* 89.147.109.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59936E76 /* 89.147.110.118/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59968CA4 /* 89.150.140.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59A11A4E /* 89.161.26.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59A38708 /* 89.163.135.8/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59A3968F /* 89.163.150.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59A81145 /* 89.168.17.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59B61393 /* 89.182.19.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59BE0609 /* 89.190.6.9/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59BFD901 /* 89.191.217.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59CBF9E2 /* 89.203.249.226/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59D93D48 /* 89.217.61.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59DDD717 /* 89.221.215.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5916ED9F /* 89.22.237.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59EA9DFE /* 89.234.157.254/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59F8A528 /* 89.248.165.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59202996 /* 89.32.41.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5921F7D4 /* 89.33.247.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5923832C /* 89.35.131.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5924E7CC /* 89.36.231.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x59276937 /* 89.39.105.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x592CC6C4 /* 89.44.198.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x592DB877 /* 89.45.184.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x592E6447 /* 89.46.100.71/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x592F32DF /* 89.47.50.223/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A0022 /* 89.58.0.34/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A0164 /* 89.58.1.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A0CD2 /* 89.58.12.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A11C6 /* 89.58.17.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A11D4 /* 89.58.17.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A11E4 /* 89.58.17.228/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A0279 /* 89.58.2.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A1AD8 /* 89.58.26.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A1B55 /* 89.58.27.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A1EA5 /* 89.58.30.165/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2043 /* 89.58.32.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2184 /* 89.58.33.132/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A21D6 /* 89.58.33.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2235 /* 89.58.34.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A24AE /* 89.58.36.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A299C /* 89.58.41.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2BCF /* 89.58.43.207/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2D2D /* 89.58.45.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A2FBC /* 89.58.47.188/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A314D /* 89.58.49.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3156 /* 89.58.49.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A0500 /* 89.58.5.0/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A35D5 /* 89.58.53.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3681 /* 89.58.54.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3870 /* 89.58.56.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3AD1 /* 89.58.58.209/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3CD0 /* 89.58.60.208/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x593A3D28 /* 89.58.61.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5950D485 /* 89.80.212.133/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5A6B3A03 /* 90.107.58.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5A78F0F5 /* 90.120.240.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5A8F85CA /* 90.143.133.202/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5ABB7195 /* 90.187.113.149/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5ABEADC4 /* 90.190.173.196/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5AF8F0BA /* 90.248.240.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B67FD8D /* 91.103.253.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B6BF180 /* 91.107.241.128/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B6BF93E /* 91.107.249.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B6CF146 /* 91.108.241.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B79DB0E /* 91.121.219.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B7ED999 /* 91.126.217.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B84903B /* 91.132.144.59/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8491F5 /* 91.132.145.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8492BE /* 91.132.146.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B865A15 /* 91.134.90.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8707D6 /* 91.135.7.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8F511B /* 91.143.81.27/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8F5733 /* 91.143.87.51/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B8F583E /* 91.143.88.62/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B97FAE6 /* 91.151.250.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BB8A4FF /* 91.184.164.255/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BBADA69 /* 91.186.218.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BBADAAC /* 91.186.218.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BBADAB5 /* 91.186.218.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BBADAF5 /* 91.186.218.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC1128F /* 91.193.18.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E17 /* 91.194.110.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E21 /* 91.194.110.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E2D /* 91.194.110.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E30 /* 91.194.110.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E35 /* 91.194.110.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E3D /* 91.194.110.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E42 /* 91.194.110.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC26E46 /* 91.194.110.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BC7E364 /* 91.199.227.100/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCA0568 /* 91.202.5.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCA059B /* 91.202.5.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB90C2 /* 91.203.144.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB9172 /* 91.203.145.114/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB9174 /* 91.203.145.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCB058D /* 91.203.5.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCC0688 /* 91.204.6.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCDE671 /* 91.205.230.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCE8E13 /* 91.206.142.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BCE1A1A /* 91.206.26.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD0B87B /* 91.208.184.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD0CE30 /* 91.208.206.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD0CE38 /* 91.208.206.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B99 /* 91.208.75.153/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B9C /* 91.208.75.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04BB2 /* 91.208.75.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04BEF /* 91.208.75.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B19 /* 91.208.75.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B03 /* 91.208.75.3/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD04B04 /* 91.208.75.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD146C8 /* 91.209.70.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD5E98A /* 91.213.233.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BD977B3 /* 91.217.119.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBEC65 /* 91.219.236.101/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBEC4D /* 91.219.236.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBEDA0 /* 91.219.237.160/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBED13 /* 91.219.237.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBEDD8 /* 91.219.237.216/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDBEE78 /* 91.219.238.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BDB3C43 /* 91.219.60.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BE05A23 /* 91.224.90.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BE7B688 /* 91.231.182.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BE7B6C9 /* 91.231.182.201/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5BFA5134 /* 91.250.81.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B03C25D /* 91.3.194.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B2741F5 /* 91.39.65.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B367704 /* 91.54.119.4/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B3AB061 /* 91.58.176.97/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B4163C8 /* 91.65.99.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B59DAB2 /* 91.89.218.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B592B12 /* 91.89.43.18/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5C6D7E /* 91.92.109.126/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5C6D17 /* 91.92.109.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5B5C6D2B /* 91.92.109.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C8D7D30 /* 92.141.125.48/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCC28F1 /* 92.204.40.241/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCC29EA /* 92.204.41.234/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCD6C9E /* 92.205.108.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCD8177 /* 92.205.129.119/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCD8107 /* 92.205.129.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCDA1A4 /* 92.205.161.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CCD115D /* 92.205.17.93/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CD88CA8 /* 92.216.140.168/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CDE4FBA /* 92.222.79.186/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CDF6975 /* 92.223.105.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CDF69AE /* 92.223.105.174/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CF300B3 /* 92.243.0.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CF3003F /* 92.243.0.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5CF318A3 /* 92.243.24.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C229654 /* 92.34.150.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C231A1D /* 92.35.26.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C26A258 /* 92.38.162.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C24DE /* 92.60.36.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C2569 /* 92.60.37.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C258F /* 92.60.37.143/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C25F7 /* 92.60.37.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C26A6 /* 92.60.38.166/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5C3C265E /* 92.60.38.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D7119B9 /* 93.113.25.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D73F037 /* 93.115.240.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D73600F /* 93.115.96.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D7361F2 /* 93.115.97.242/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D7B6D74 /* 93.123.109.116/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D7B0C70 /* 93.123.12.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D9ED50F /* 93.158.213.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB141B6 /* 93.177.65.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB14962 /* 93.177.73.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A58A /* 93.185.165.138/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A5C7 /* 93.185.165.199/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A5D3 /* 93.185.165.211/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A54C /* 93.185.165.76/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A550 /* 93.185.165.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB9A7F7 /* 93.185.167.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DB961CB /* 93.185.97.203/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DBAC8A9 /* 93.186.200.169/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DBE8F29 /* 93.190.143.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DC80CA4 /* 93.200.12.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DC99E1D /* 93.201.158.29/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DDA029E /* 93.218.2.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5DE7A182 /* 93.231.161.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D37EBE8 /* 93.55.235.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5ACB2A /* 93.90.203.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5A4A1E /* 93.90.74.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5D7190 /* 93.93.113.144/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5D7657 /* 93.93.118.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE325 /* 93.95.227.37/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE47D /* 93.95.228.125/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE483 /* 93.95.228.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE4CD /* 93.95.228.205/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE44A /* 93.95.228.74/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE76E /* 93.95.231.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE773 /* 93.95.231.115/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE70E /* 93.95.231.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5FE758 /* 93.95.231.88/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D5F580D /* 93.95.88.13/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D6368C2 /* 93.99.104.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D6368D6 /* 93.99.104.214/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D636828 /* 93.99.104.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5D636805 /* 93.99.104.5/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E64061E /* 94.100.6.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E66330F /* 94.102.51.15/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E67BC50 /* 94.103.188.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E696BE8 /* 94.105.107.232/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E820AB3 /* 94.130.10.179/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E828EB6 /* 94.130.142.182/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E82B944 /* 94.130.185.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E82C968 /* 94.130.201.104/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E822415 /* 94.130.36.21/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8233D4 /* 94.130.51.212/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8234BE /* 94.130.52.190/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8245DA /* 94.130.69.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8246B9 /* 94.130.70.185/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8259B0 /* 94.130.89.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E830E1F /* 94.131.14.31/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E83AB69 /* 94.131.171.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E83080A /* 94.131.8.10/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8C709E /* 94.140.112.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8C7882 /* 94.140.120.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8D7B42 /* 94.141.123.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8E8C9E /* 94.142.140.158/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF1C2 /* 94.142.241.194/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF129 /* 94.142.241.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF12B /* 94.142.241.43/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8EF410 /* 94.142.244.16/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E8F89D5 /* 94.143.137.213/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9A9F60 /* 94.154.159.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9EF535 /* 94.158.245.53/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9EF675 /* 94.158.246.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9F6EBB /* 94.159.110.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9F6EC6 /* 94.159.110.198/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E9F621C /* 94.159.98.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E10689F /* 94.16.104.159/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1069CE /* 94.16.105.206/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E106BB2 /* 94.16.107.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E106DB4 /* 94.16.109.180/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107187 /* 94.16.113.135/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107123 /* 94.16.113.35/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107159 /* 94.16.113.89/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1072E7 /* 94.16.114.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107379 /* 94.16.115.121/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E10749C /* 94.16.116.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107456 /* 94.16.116.86/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107617 /* 94.16.118.23/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1076FA /* 94.16.118.250/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1078CC /* 94.16.120.204/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E10795B /* 94.16.121.91/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107A98 /* 94.16.122.152/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107A3D /* 94.16.122.61/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107BAB /* 94.16.123.171/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E107B43 /* 94.16.123.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E101F83 /* 94.16.31.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EB108C8 /* 94.177.8.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EE4A946 /* 94.228.169.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EE6D093 /* 94.230.208.147/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EE6D094 /* 94.230.208.148/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E177996 /* 94.23.121.150/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E179442 /* 94.23.148.66/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E179588 /* 94.23.149.136/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1796D2 /* 94.23.150.210/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E179860 /* 94.23.152.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E17A84F /* 94.23.168.79/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E17AA3F /* 94.23.170.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E17AC20 /* 94.23.172.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E17D814 /* 94.23.216.20/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E17F72A /* 94.23.247.42/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E172D67 /* 94.23.45.103/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1744BB /* 94.23.68.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E174543 /* 94.23.69.67/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E174620 /* 94.23.70.32/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E174CF4 /* 94.23.76.244/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E174C34 /* 94.23.76.52/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EED0813 /* 94.237.8.19/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E175875 /* 94.23.88.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EF7D9E6 /* 94.247.217.230/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EFC0DBD /* 94.252.13.189/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5EFE6824 /* 94.254.104.36/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E1A49A2 /* 94.26.73.162/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E2EAB97 /* 94.46.171.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E2EABDD /* 94.46.171.221/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E2EABF5 /* 94.46.171.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E05C511 /* 94.5.197.17/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5E486721 /* 94.72.103.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F6EFEE7 /* 95.110.254.231/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F6FCFA7 /* 95.111.207.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F6FE6B2 /* 95.111.230.178/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F6FF1A7 /* 95.111.241.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F6FF3D7 /* 95.111.243.215/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F802BA4 /* 95.128.43.164/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8D207C /* 95.141.32.124/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8D20C8 /* 95.141.32.200/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8D5392 /* 95.141.83.146/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8D539B /* 95.141.83.155/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F8EA13F /* 95.142.161.63/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F991F1A /* 95.153.31.26/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F991F26 /* 95.153.31.38/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F992016 /* 95.153.32.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FA9BF06 /* 95.169.191.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FB0A4FD /* 95.176.164.253/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD38A07 /* 95.211.138.7/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD3C20E /* 95.211.194.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD3D08D /* 95.211.208.141/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD3D248 /* 95.211.210.72/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD634BB /* 95.214.52.187/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD63560 /* 95.214.53.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD865F7 /* 95.216.101.247/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD87355 /* 95.216.115.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD80C1E /* 95.216.12.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD80D78 /* 95.216.13.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD80D37 /* 95.216.13.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD810A7 /* 95.216.16.167/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81329 /* 95.216.19.41/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8C6FC /* 95.216.198.252/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8CAB5 /* 95.216.202.181/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81450 /* 95.216.20.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8D181 /* 95.216.209.129/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8D4DE /* 95.216.212.222/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD802AC /* 95.216.2.172/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81616 /* 95.216.22.22/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81618 /* 95.216.22.24/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81657 /* 95.216.22.87/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81778 /* 95.216.23.120/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8F662 /* 95.216.246.98/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD81B69 /* 95.216.27.105/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8200E /* 95.216.32.14/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8211E /* 95.216.33.30/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8213A /* 95.216.33.58/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8239C /* 95.216.35.156/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD823B0 /* 95.216.35.176/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD82354 /* 95.216.35.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD8602C /* 95.216.96.44/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD970DA /* 95.217.112.218/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD970F3 /* 95.217.112.243/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD970F5 /* 95.217.112.245/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD98C02 /* 95.217.140.2/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD98C04 /* 95.217.140.4/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x5FD98C06 /* 95.217.140.6/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD9A244 /* 95.217.162.68/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD9CA71 /* 95.217.202.113/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD9E76F /* 95.217.231.111/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD92428 /* 95.217.36.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD92775 /* 95.217.39.117/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD9065E /* 95.217.6.94/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5FD94897 /* 95.217.72.151/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F555A82 /* 95.85.90.130/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x5F62E95F /* 95.98.233.95/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60E8B555 /* 96.232.181.85/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60F42683 /* 96.244.38.131/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60F55327 /* 96.245.83.39/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60FF5E46 /* 96.255.94.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6036C0B7 /* 96.54.192.183/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x604144C1 /* 96.65.68.193/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096264 /* 96.9.98.100/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x6009626E /* 96.9.98.110/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x60096270 /* 96.9.98.112/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096278 /* 96.9.98.120/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x6009627B /* 96.9.98.123/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096210 /* 96.9.98.16/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0x60096202 /* 96.9.98.2/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x60096218 /* 96.9.98.24/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x6009621C /* 96.9.98.28/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6009621E /* 96.9.98.30/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x60096220 /* 96.9.98.32/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0x60096228 /* 96.9.98.40/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096204 /* 96.9.98.4/30 */, 30, NDPI_PROTOCOL_TOR }, + { 0x6009622C /* 96.9.98.44/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x60096232 /* 96.9.98.50/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096237 /* 96.9.98.55/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096238 /* 96.9.98.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6009623C /* 96.9.98.60/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096242 /* 96.9.98.66/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x60096246 /* 96.9.98.70/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6009624D /* 96.9.98.77/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6009624E /* 96.9.98.78/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096250 /* 96.9.98.80/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096208 /* 96.9.98.8/29 */, 29, NDPI_PROTOCOL_TOR }, + { 0x60096258 /* 96.9.98.88/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x6009625A /* 96.9.98.90/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096260 /* 96.9.98.96/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x60096262 /* 96.9.98.98/31 */, 31, NDPI_PROTOCOL_TOR }, + { 0x61740154 /* 97.116.1.84/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x62723E6E /* 98.114.62.110/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x627357A3 /* 98.115.87.163/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6280AD01 /* 98.128.173.1/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6280AD21 /* 98.128.173.33/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x6280AF2D /* 98.128.175.45/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x62D5BB8B /* 98.213.187.139/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x630ADD38 /* 99.10.221.56/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x636A8FEF /* 99.106.143.239/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x63B7C745 /* 99.183.199.69/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x631B6019 /* 99.27.96.25/32 */, 32, NDPI_PROTOCOL_TOR }, + { 0x632F1D42 /* 99.47.29.66/32 */, 32, NDPI_PROTOCOL_TOR }, /* End */ { 0x0, 0, 0 } }; static ndpi_network6 ndpi_protocol_tor_protocol_list_6[] = { + { "2001:14ba:78fb:a900:692:26ff:fe5a:4256", 128, NDPI_PROTOCOL_TOR }, + { "2001:14ba:ab01:215a::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:14ba:ab01:92e::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:10:100::201", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:10:100::226", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:10:100::3ab", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:10:100::836", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:13:101::1096", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:13:101::1239", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:13:101::13ef", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:13:101::150d", 128, NDPI_PROTOCOL_TOR }, + { "2001:1600:13:101::184f", 128, NDPI_PROTOCOL_TOR }, + { "2001:1620:425a:6fde::10", 128, NDPI_PROTOCOL_TOR }, + { "2001:1680:101:43f::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1680:101:682::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1900:5:2:2::583a", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:0:4aba:3eec:efff:feb9:89dc", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:1000:1808:5400:5ff:fe23:9a12", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:5401:75:ae1f:6bff:fef5:9358", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:6001:3ea3:ec4:7aff:fe8f:691b", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:9003:9c8:ec4:7aff:fe8f:69aa", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:ac00:345a:ec4:7aff:fe8f:6599", 128, NDPI_PROTOCOL_TOR }, + { "2001:19f0:b400:2588:5400:4ff:feff:1b83", 128, NDPI_PROTOCOL_TOR }, + { "2001:1a48:1112:6:122:0:1d:0", 128, NDPI_PROTOCOL_TOR }, + { "2001:1af8:4700:a0ad:5::108", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:2:1:3935:104:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:2:23:1013:201::", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:221:3132:102:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:221:4134:101:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:221:701:102:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:239:1003:103:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:239:1003:106:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1b60:3:267:704:101:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:1ba8:201:20::1:8455", 128, NDPI_PROTOCOL_TOR }, + { "2001:2030:0:93::d", 128, NDPI_PROTOCOL_TOR }, + { "2001:418:8006::9", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:1004:14da::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:1008:20d1::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:203:1499::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:203:bb6c::6:6", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:2:2e67::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:24e:fe00::32", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:2:5b14::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:2:9161::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:2:ae0a::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:302:2200::220b", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:302:2200::390e", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:303:8f52::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::3348", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::3ea4", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::6211", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::632f", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::6e59", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::7f16", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::9dce", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::a061", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::c969", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::d48f", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:304:200::f26", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:305:2100::4430", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:305:2100::7cb4", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:401:3100::30dc", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:401:3100::7fda", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:401:3200::3852", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:401:3200::3e74", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::1b8", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::352e", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::3e84", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::3ee8", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::3fd", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::41f0", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::4c5f", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::5784", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::5914", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::5a7f", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::609d", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:601:1100::6524", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:602:2093:fd1a::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:602:2093:fd1a::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:602:2093:fd1a::a", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:608:7600::", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:700:1b::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:700:482a:2cfc:bdc:9917:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:700:70e:8fc3:beff:fe0b:7e7b", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::1840", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::1e29", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::475", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::6e02", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::8bb2", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::912e", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::927b", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:701:1100::cb3", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:800:2e90:13df:5ba7:c7a6:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:800:b1f::", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::127c", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::1607", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::2247", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::251", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::3218", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::436b", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::4eb4", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::5e1f", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::678", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:801:2000::f6e", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:8:522c:24d9:6a97:78db:2bcb", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:1c2c::123:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:557d::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:5c0::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:6063::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:f308::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:a:fe22::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:e:418::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41d0:e:6ac::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:41f0:89ef:17::10", 127, NDPI_PROTOCOL_TOR }, + { "2001:470:164:2::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1:908::9001", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f07:8b9::f7ae", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f09:3d0::4fc0", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f0a:716::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f13:ab7::21", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f14:220::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f1b:1f4:250:56ff:fe00:17", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f1b:a2::77f0", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:1f1c:2ea::64ec", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:27:652::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:5429::b3", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:6e:3ce::77ba", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:6e:f0::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:a085:2:529a:4cff:fe73:a039", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:b01c::251", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:b01c::252", 127, NDPI_PROTOCOL_TOR }, + { "2001:470:dd60:666::113", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:dd6d::21", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:deb8:a1::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:470:e01f:700::20", 128, NDPI_PROTOCOL_TOR }, + { "2001:4b20:12:f001::105", 128, NDPI_PROTOCOL_TOR }, + { "2001:4b98:dc0:41:216:3eff:fe45:aebb", 128, NDPI_PROTOCOL_TOR }, + { "2001:4b98:dc0:41:216:3eff:fecc:52c3", 128, NDPI_PROTOCOL_TOR }, + { "2001:4b98:dc0:43:f816:3eff:fe49:506d", 128, NDPI_PROTOCOL_TOR }, + { "2001:4b98:dc0:47:216:3eff:fe3d:888c", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:cafe:1267::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:cafe:24f::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:cafe:2e0::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:cafe:31c::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:cafe:f55:dead:beef:dead:beef", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:ffa4:2cf::74e7:9001", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:ffa4:2cf::f7ee:9201", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:ffa4:413:200::208", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:fff9:131:6c4f::90d3", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:ffff:4a::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:4ba0:ffff:58::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:569:5327:1201:6e4b:90ff:fe57:79a1", 128, NDPI_PROTOCOL_TOR }, + { "2001:610:510:113:192:42:113:101", 128, NDPI_PROTOCOL_TOR }, + { "2001:610:510:113:192:42:113:102", 128, NDPI_PROTOCOL_TOR }, + { "2001:610:510:115:192:42:115:101", 128, NDPI_PROTOCOL_TOR }, + { "2001:610:510:115:192:42:115:102", 127, NDPI_PROTOCOL_TOR }, + { "2001:620:20d0::23", 128, NDPI_PROTOCOL_TOR }, + { "2001:620:20d0::24", 128, NDPI_PROTOCOL_TOR }, + { "2001:630:212:2a8:a6bf:1ff:fe25:b961", 128, NDPI_PROTOCOL_TOR }, + { "2001:638:708:30c8::65", 128, NDPI_PROTOCOL_TOR }, + { "2001:638:a000:4140::ffff:188", 128, NDPI_PROTOCOL_TOR }, + { "2001:638:a004:4111:192:129:10:18", 128, NDPI_PROTOCOL_TOR }, + { "2001:648:2ffe:501:cc00:10ff:fe8f:490", 128, NDPI_PROTOCOL_TOR }, + { "2001:648:2ffe:501:cc00:13ff:fe62:ebdd", 128, NDPI_PROTOCOL_TOR }, + { "2001:648:2ffe:501:cc00:13ff:fee1:b2df", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:230:2132:192:42:132:106", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:230:3028:192:87:28:28", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:230:3028:192:87:28:82", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:4010::1de", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:4020::3b7", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:4020::469", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:5050::2abe:100", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:5130::aaaa:1d6", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:5130::aaaa:2d9", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:5160::3f7", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:5170::1db", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:7410::316", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:9114::149", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:6d4:9202::101", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:848:240::240", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:a40:7001:2::4711", 128, NDPI_PROTOCOL_TOR }, + { "2001:678:d64:564d::70f", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:1220:8b0::93e5:b1b4", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:13c::35", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:15e0:3::fce:ad76", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:2044:1905::26", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:21bc:1e::1:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:21bc:1e::f00f", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:2564:a120::57", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:2608::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c::20", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c:2::234", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c::25", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c:4::77", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c:4::78", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:289c:4::80", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:2a0:202::246", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:2db8:305::193", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:186", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:188", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:200", 126, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:208", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:210", 125, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:192:42:116:218", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5513", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5514", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5517", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5518", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5520", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5522", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5524", 126, NDPI_PROTOCOL_TOR }, + { "2001:67c:6ec:203:218:33ff:fe44:5528", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:89c:702:1ce:1ce:babe:10", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:89c:702:1ce:1ce:babe:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:89c:702:1ce:1ce:babe:2", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:89c:702:1ce:1ce:babe:4", 126, NDPI_PROTOCOL_TOR }, + { "2001:67c:89c:702:1ce:1ce:babe:8", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:b58:200::341:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:c14:864::74", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:e28:1::2", 127, NDPI_PROTOCOL_TOR }, + { "2001:67c:e28:1::4", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:ecc:50::20", 128, NDPI_PROTOCOL_TOR }, + { "2001:67c:f54:3000::220", 128, NDPI_PROTOCOL_TOR }, + { "2001:6b0:30:1000::100", 127, NDPI_PROTOCOL_TOR }, + { "2001:6b0:30:1000::99", 128, NDPI_PROTOCOL_TOR }, + { "2001:6b0:7:125::243", 128, NDPI_PROTOCOL_TOR }, + { "2001:788:f31:c155::107", 128, NDPI_PROTOCOL_TOR }, + { "2001:7d0:4dc0:7511:a0de:bdff:fe03:1ac1", 128, NDPI_PROTOCOL_TOR }, + { "2001:878:346:1cf9:446a:c4eb:4548:7061", 128, NDPI_PROTOCOL_TOR }, + { "2001:878:346:1cf9:446a:c4eb:4548:7062", 128, NDPI_PROTOCOL_TOR }, + { "2001:8a0:7ec0:9203::3", 128, NDPI_PROTOCOL_TOR }, + { "2001:8d8:1801:8156::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:8e0:39e5:1601:6208:862b:67a8:a1e4", 128, NDPI_PROTOCOL_TOR }, + { "2001:910:1400:107::2", 128, NDPI_PROTOCOL_TOR }, + { "2001:948:7:2::163", 128, NDPI_PROTOCOL_TOR }, + { "2001:9b0:217:2b00:dca8:cff:fe8e:89c3", 128, NDPI_PROTOCOL_TOR }, + { "2001:9b1:9bd0::73", 128, NDPI_PROTOCOL_TOR }, + { "2001:9b1:9bd0::74", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:200:7a00:0:d26c:bdd4:6841", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:202:d200::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:210:c500::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:214:a800::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:233:4e00::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:234:8400::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:234:a600::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:234:a800::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:23f:b500::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:246:9f00::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:246:a100::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:246:a200::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:246:a400::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:255:500::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:266:7e00::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:269:3e00::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:ba0:269:5d00::1", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1201:512:da5e:d3ff:fe6c:8241", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1201:608:46a8:42ff:fe3d:2743", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1210:e4a:dc00:ff:fe30:edd3", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1210:efe:dc00:ff:fe31:df1f", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:16d5:dc00:ff:fe22:2981", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:1a5:dc00:ff:fe10:365f", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:1ad:dc00:ff:fe10:3587", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:1e30:dc00:ff:fe2a:2549", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:262f:dc00:ff:fe32:862d", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:317d:dc00:ff:fe39:7bb3", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:3ac:dc00:ff:fe16:f9b9", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:4ae:dc00:ff:fe11:278f", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1640:777:dc00:ff:fe12:d075", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:17c0:411:8634:97ff:fe11:7a70", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:17c0:502:9eb6:54ff:febb:5034", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:17c0:504:9eb6:54ff:febb:54e4", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:1d90:9f7:dc00:ff:fe20:7b75", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:208a::", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:2ecd:caed:746f:7200:746f:7200", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:30c6:100::dead", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:14e::6759:9001", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:14e::6ecd:9301", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:14e::f1fa:9201", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:185::1:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:185::2:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:185::3:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:32d7:185::4:1", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:3680:bb01::10", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:6010:213:208:a2ff:fe0c:8128", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:710:51f:dc00:ff:fe27:c7db", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:710:5bcb:dc00:ff:fe5e:e8b5", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:710:6036:dc00:ff:fe63:7b6d", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:710:ec2:dc00:ff:fe29:f71f", 128, NDPI_PROTOCOL_TOR }, + { "2001:bc8:710:f5c:dc00:ff:fe2a:6d75", 128, NDPI_PROTOCOL_TOR }, + { "2001:bf0:666:0:1c0c:49cb:1d9a:a032", 128, NDPI_PROTOCOL_TOR }, + { "2001:bf0:666::666", 128, NDPI_PROTOCOL_TOR }, + { "2001:df4:1780:d000::2222", 128, NDPI_PROTOCOL_TOR }, + { "2001:e42:102:1504:160:16:57:39", 128, NDPI_PROTOCOL_TOR }, + { "2003:ed:673b:5500:7cd5:1bb1:ea23:2d16", 128, NDPI_PROTOCOL_TOR }, + { "2400:8500:1301:736:133:130:98:124", 128, NDPI_PROTOCOL_TOR }, + { "2400:8500:1801:478:160:251:46:239", 128, NDPI_PROTOCOL_TOR }, + { "2400:8500:2002:3324:163:44:127:171", 128, NDPI_PROTOCOL_TOR }, + { "2400:8901::f03c:94ff:fe7f:59f6", 128, NDPI_PROTOCOL_TOR }, + { "2400:8901::f03c:95ff:fe89:4a88", 128, NDPI_PROTOCOL_TOR }, + { "2400:8905::f03c:95ff:fe67:ec03", 128, NDPI_PROTOCOL_TOR }, + { "2400:d320:2202:5765::1", 128, NDPI_PROTOCOL_TOR }, + { "2401:2500:102:1212:133:242:204:175", 128, NDPI_PROTOCOL_TOR }, + { "2401:b60:5:8625:96c5:2d48:a93e:17d4", 128, NDPI_PROTOCOL_TOR }, + { "2402:1f00:8000:239::", 128, NDPI_PROTOCOL_TOR }, + { "2402:1f00:8000:800::13ea", 128, NDPI_PROTOCOL_TOR }, + { "2402:1f00:8000:800::289b", 128, NDPI_PROTOCOL_TOR }, + { "2402:1f00:8000:800::e11", 128, NDPI_PROTOCOL_TOR }, + { "2402:d0c0:21::2df5:510a", 128, NDPI_PROTOCOL_TOR }, + { "2403:3a00:202:1904:133:167:39:184", 128, NDPI_PROTOCOL_TOR }, + { "2406:17c0:0:2::3897:e4c7", 128, NDPI_PROTOCOL_TOR }, + { "2406:17c0:0:2::7ab8:d3ab", 128, NDPI_PROTOCOL_TOR }, + { "2406:17c0:0:2::8f52:2324", 128, NDPI_PROTOCOL_TOR }, + { "2406:17c0:0:2::a23f:10c", 128, NDPI_PROTOCOL_TOR }, + { "2406:17c0:0:2::ec61:b3a8", 128, NDPI_PROTOCOL_TOR }, + { "2407:3640:2207:8882::1", 128, NDPI_PROTOCOL_TOR }, + { "2407:3640:3015:7494::1", 128, NDPI_PROTOCOL_TOR }, + { "2600:1700:38d4:10d0:ecfb:a2ff:fe14:5e2", 128, NDPI_PROTOCOL_TOR }, + { "2600:1700:e412:823:4027:c183:e6f9:b5ae", 128, NDPI_PROTOCOL_TOR }, + { "2600:1700:e412:823:5530:7ec9:d236:b9f5", 128, NDPI_PROTOCOL_TOR }, + { "2600:1702:5410:d260:be24:11ff:fecb:19ae", 128, NDPI_PROTOCOL_TOR }, + { "2600:1702:6aa3:b210::2", 128, NDPI_PROTOCOL_TOR }, + { "2600:2b00:9358:2004:aab8:e0ff:fe00:87f3", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c00::f03c:95ff:fe5d:8f00", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c02::f03c:91ff:feae:280a", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c03:e000:19f:0:11:11:11", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c03::f03c:95ff:fe5d:562", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c04::f03c:93ff:fece:e1d1", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c04::f03c:95ff:fe41:d42c", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:93ff:fe6e:ec97", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:93ff:fe6e:ff2", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:94ff:fef2:dd38", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:95ff:fe6c:79de", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:95ff:fe6c:8338", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c05::f03c:95ff:fee8:748f", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:93ff:fe6e:ecf2", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:93ff:fe6e:ff6", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:94ff:fef2:a157", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:94ff:fef2:ddbc", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:95ff:fe1f:a6a5", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:95ff:fe6c:7900", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c06::f03c:95ff:fee8:748d", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:93ff:fe6e:eccf", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:93ff:fe6e:f32", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:94ff:fef2:a193", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:94ff:fef2:dd79", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:95ff:fe5d:a877", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:95ff:fe6c:7984", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:95ff:fe6c:83d1", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0a::f03c:95ff:fee8:74d1", 128, NDPI_PROTOCOL_TOR }, + { "2600:3c0b::f03c:95ff:fefa:bdff", 128, NDPI_PROTOCOL_TOR }, + { "2600:4040:2078:4f02:21b:21ff:fe36:fd2f", 128, NDPI_PROTOCOL_TOR }, + { "2600:4040:a645:4600::3001", 128, NDPI_PROTOCOL_TOR }, + { "2600:4040:b0db:c300:7285:c2ff:fed3:c3c", 128, NDPI_PROTOCOL_TOR }, + { "2602:291:69::63", 128, NDPI_PROTOCOL_TOR }, + { "2602:2a8:13::4279", 128, NDPI_PROTOCOL_TOR }, + { "2602:2c8:0:2c3f::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:2da:0:33:5054:ff:fe6c:39dc", 128, NDPI_PROTOCOL_TOR }, + { "2602:2da:0:34:5054:ff:fe7e:7c21", 128, NDPI_PROTOCOL_TOR }, + { "2602:f81c:9:0:23:188:56:140", 125, NDPI_PROTOCOL_TOR }, + { "2602:f81c:9:0:23:188:56:148", 127, NDPI_PROTOCOL_TOR }, + { "2602:f81c:9:0:23:188:56:150", 127, NDPI_PROTOCOL_TOR }, + { "2602:f81c:9:0:23:188:56:152", 128, NDPI_PROTOCOL_TOR }, + { "2602:f953:6:5c::a", 128, NDPI_PROTOCOL_TOR }, + { "2602:fa4f:900:ac7e:1012:c753:3a91:1a91", 128, NDPI_PROTOCOL_TOR }, + { "2602:fb9f::dead:beef:cafe", 128, NDPI_PROTOCOL_TOR }, + { "2602:fbc7:2::49", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:10:61b::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:11:16f9::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:12:9fef::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:18:30d2::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:18:633d::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:19:524::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc24:19:eb06::dead", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc2f:100:da00::a", 128, NDPI_PROTOCOL_TOR }, + { "2602:fc81:1:1::9:a600", 128, NDPI_PROTOCOL_TOR }, + { "2602:fea7:10:0:8000::b8", 128, NDPI_PROTOCOL_TOR }, + { "2602:fea7:e0c:13::7", 128, NDPI_PROTOCOL_TOR }, + { "2602:ff16:6:0:1:297:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd1:7:6b::a", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd5:1:174:3123:9092:3f1a:19c2", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd5:1:28c::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd5:1:29a::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd5:1:29b::1", 128, NDPI_PROTOCOL_TOR }, + { "2602:ffd5:1:29c::1", 128, NDPI_PROTOCOL_TOR }, + { "2603:400a:0:9:f816:3eff:fe73:f862", 128, NDPI_PROTOCOL_TOR }, + { "2603:c020:4010:3301:57f6:7f0f:82bb:c569", 128, NDPI_PROTOCOL_TOR }, + { "2603:c020:800d:8bff:6613:6cb5:af30:8bd5", 128, NDPI_PROTOCOL_TOR }, + { "2603:c022:2:97ff:ea23:6cb6:a969:ff7f", 128, NDPI_PROTOCOL_TOR }, + { "2603:c022:c001:6eff:4be1:c987:15c:da63", 128, NDPI_PROTOCOL_TOR }, + { "2603:c022:c002:b0e:df68:94b3:52b1:5f2c", 128, NDPI_PROTOCOL_TOR }, + { "2603:c022:c002:b0e:f620:461d:1cc1:fa75", 128, NDPI_PROTOCOL_TOR }, + { "2603:c022:c004:c4ff:a1dc:af91:6b4f:994b", 128, NDPI_PROTOCOL_TOR }, + { "2603:c023:4003:7f43:6162:6161:6c54:6f72", 128, NDPI_PROTOCOL_TOR }, + { "2603:c024:c001:207e:878b:2a1b:d247:f367", 128, NDPI_PROTOCOL_TOR }, + { "2603:c024:c006:c969:f379:75d:4532:3b82", 128, NDPI_PROTOCOL_TOR }, + { "2603:c026:300:a97e:c3bb:9228:afd9:e243", 128, NDPI_PROTOCOL_TOR }, + { "2603:c026:c102:5ff:ae28:156d:4c5:518e", 128, NDPI_PROTOCOL_TOR }, + { "2603:c027:0:caff:8058:d9b8:1072:cc10", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:100:1286::1", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:100:38e9::1", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:100:4d6::", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:100::4d9", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::1c4", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::1f45", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::28cd", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::2d6", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::53c8", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::6c", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:101:200::b63", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:200:23b8::1", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:200:23b9::1", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:202:300::581", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:202:300::995", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:202:300::cd0", 128, NDPI_PROTOCOL_TOR }, + { "2604:2dc0:202:300::ed3", 128, NDPI_PROTOCOL_TOR }, + { "2604:4300:a:224:216:3cff:fe31:d55f", 128, NDPI_PROTOCOL_TOR }, + { "2604:4300:a:3bc:224:1dff:fe70:b203", 128, NDPI_PROTOCOL_TOR }, + { "2604:4300:a:3e9::170", 128, NDPI_PROTOCOL_TOR }, + { "2604:4500:2:12::2", 128, NDPI_PROTOCOL_TOR }, + { "2604:4500:8:14::4", 128, NDPI_PROTOCOL_TOR }, + { "2604:4500:8:14::8", 128, NDPI_PROTOCOL_TOR }, + { "2604:5040:11:128:f0c1:922b:4103:d4c6", 128, NDPI_PROTOCOL_TOR }, + { "2604:86c0:f001:d::3", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:2:d0::134f:c001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:2:d0::14bc:7001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:2:d0::14cd:f001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:2:d0::1ea7:4001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:2:d0::45:e001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::12bc:9001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::1300:4001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::1c7d:4001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::237f:f001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::26:a001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:400:d0::26a:b001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:4:1d0::141:e000", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:4:1d0::1fb:5000", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:4:1d0::760:6000", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:4:1d0::8a:0", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:4:1d0::a3:5000", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::5c5:3001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::69d:d001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::70b:8001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::730:b001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::ab2:1", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:800:10::be1:9001", 128, NDPI_PROTOCOL_TOR }, + { "2604:a880:cad:d0::6805:f001", 128, NDPI_PROTOCOL_TOR }, + { "2604:b480:3:6::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:2700:0:2:a800:ff:fe03:2bd5", 128, NDPI_PROTOCOL_TOR }, + { "2605:2700:0:2:a800:ff:fe39:574", 128, NDPI_PROTOCOL_TOR }, + { "2605:2700:0:3:a800:ff:fe10:f0d3", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:1362::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:44f::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:4b0::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:58f:8768:8283:1a62:bdc6", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:75:1585:9b71:1c16:b1a1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:798:40b3:e03b:8f0f:e4e2", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:10:984:41e7:4ad6:a11e:cdcc", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:254:75bc:a49b:2762:7398", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:274::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:3ea:c2a3:1162:7224:e5df", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:482:3920:1829:1839:1293", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:769:e559:5c8f:a3e9:aed1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:ae6:e6c6:d90:fee8:5ad5", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:be7::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:c26:5163:253e:1ef6:d887", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:c26:5163:253e:1ef6:d896", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:20:ff9::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:e948:4cee:191b:1e55:25b3", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:ea52:4246:fb82:f36c:8ede", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:ea86:59b6:d4c6:5192:1a19", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:eb71:51b7:4869:7579:3aa1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:ebb6:532:acc:65:31", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:ed0c:b477:4972:756a:2f42", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:edc3::34", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:ef7a:391a:8c71:a2f1:9506", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:efba:dead::", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f04d:2605:6400:30:30", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f05d:c272:5525:72b1:e64c", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f060:be62:b857:b818:9144", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f08c:45b7:4a99:a154:694e", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f0ed:9151:66ed:6366:5c74", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f158:d1d7:3c4f:4566:cb8a", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:1:1:1:1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:1111:2222:3333:4444", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:1:2:3:4", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174::", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174::42", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:42:42::", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:42:42:42:0", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:42:42:42:42", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:4:3:2:1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f174:cafe::", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f1fa:f57f:d285:3ed9:ee27", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f380:aff:ebbf:46e0:1106", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f38b:28b3:cd24:51f3:e412", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f414:42ce:c612:dab8:1337", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f440:757e:adf1:55f7:5a31", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f49b:e2ee:34f8:c854:6f63", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f4ae:8f7b:cc6e:d1d7:b978", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f503::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f51a:f826:ecfc:47b6:92a9", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f534:ae1d:c3d9:9941:d85e", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f57d:916e:73f8:d5e7:675b", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f5a3:5bb1:af4e:c969:c73e", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f5db:25a1:b884:ef2d:8818", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f623:5a78:29a6:8492:27b0", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f671:3fc7:4bb4:ca18:86fa", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f753:891d:ee77:e97c:741a", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f77f:f41c:2bce:7d61:210b", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f77f:f41c:2bce:7d61:2e06", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f789:e82c:c670:578c:b588", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f78b::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f7c0:8511:b113:ca11:9baa", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f7ca::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f7fa:c230:6fe8:a09a:5836", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f805:1e96:b223:fbe5:cfac", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f82f:7de1:3de3:8947:bc6a", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f858:2704:73e1:7085:12ef", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f8b5:620c:dc25:c624:aafd", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f8d5::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f920:f523:28ef:3617:8b86", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f986:f96a:3b4d:e117:2050", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:f9d0:8d45:cd51:c1aa:271f", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:fb10:d07b:edfd:2c84:bb4a", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:30:fb5a::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:40:fde8:11c7:119b:aaf9:2722", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:40:fe09::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:cb6c:f30a:83bb:927a:95f2:24d", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:d814:1b8::4", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:d814:1d1::100", 128, NDPI_PROTOCOL_TOR }, + { "2605:6400:d814:34f4::5", 128, NDPI_PROTOCOL_TOR }, + { "2605:9f80:2000:83::2", 128, NDPI_PROTOCOL_TOR }, + { "2605:a140:2227:611::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:a140:2230:8699::1", 128, NDPI_PROTOCOL_TOR }, + { "2605:aa80:0:9::3", 128, NDPI_PROTOCOL_TOR }, + { "2605:aa80:c007:1736::", 128, NDPI_PROTOCOL_TOR }, + { "2605:e440:36::11", 128, NDPI_PROTOCOL_TOR }, + { "2606:65c0:20:17:d747:b17f:e95c:6374", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:120:c74::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3000::17d3", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3000::da8", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3000::dfc", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::10a6", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::1f05", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::35c5", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::3e59", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::5b0d", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::63d", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::740a", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::b92", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:201:3100::dad", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:203:3012:7634:0:5439:5218", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:203:3ab9::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:203:6e5::46", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:203:7ac5:198:50:223:16", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::105c", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::1d62", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::4894", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::5066", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::55fb", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:205:200::938", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:60:566f::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:60:708d:cd09:2eff:fed4:145b", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:60:979f:7634:0:9e45:e29f", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:61:785:1:2:3:4", 128, NDPI_PROTOCOL_TOR }, + { "2607:5300:61:785::", 128, NDPI_PROTOCOL_TOR }, + { "2607:9000:0:19::c4b:a312", 128, NDPI_PROTOCOL_TOR }, + { "2607:9000:0:28::2610:75dc", 128, NDPI_PROTOCOL_TOR }, + { "2607:9000:9000:106f::a", 128, NDPI_PROTOCOL_TOR }, + { "2607:b500:402:8b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:b500:404:4a00::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:b500:425:9100::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:b500:425:c000:0:d9f:fd98:556d", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f004:1000::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f00b:ca00::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f00f:d300::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f04e:fd00::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f065:3d00::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f1c0:f06f:b300::1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f298:5:101d:f816:3eff:fe56:6ffa", 128, NDPI_PROTOCOL_TOR }, + { "2607:f298:5:101d:f816:3eff:fe9b:c835", 128, NDPI_PROTOCOL_TOR }, + { "2607:f298:5:101d:f816:3eff:fe9f:47b1", 128, NDPI_PROTOCOL_TOR }, + { "2607:f298:5:101d:f816:3eff:fea3:b8", 128, NDPI_PROTOCOL_TOR }, + { "2607:f298:5:101d:f816:3eff:fefd:ad20", 128, NDPI_PROTOCOL_TOR }, + { "2607:f530:8002::19", 128, NDPI_PROTOCOL_TOR }, + { "2607:fa18:3:beef:f001:c0de:feed:ba5e", 128, NDPI_PROTOCOL_TOR }, + { "2610:1c0:0:5::16", 128, NDPI_PROTOCOL_TOR }, + { "2610:1c0:0:5::20", 128, NDPI_PROTOCOL_TOR }, + { "2620:124:1009:1::171", 128, NDPI_PROTOCOL_TOR }, + { "2620:6:2000:104::a", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::101", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::102", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::104", 126, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::108", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::110", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::118", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::120", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::122", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::140", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::148", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::150", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::158", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::160", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::168", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::170", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::178", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::180", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::189", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::e664", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e640", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e643", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e644", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e646", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e648", 125, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e650", 128, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e652", 127, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e654", 126, NDPI_PROTOCOL_TOR }, + { "2620:7:6001::ffff:c759:e658", 127, NDPI_PROTOCOL_TOR }, + { "2620:95:4007::111", 128, NDPI_PROTOCOL_TOR }, + { "2620:b0:2000:102::7", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1169:112:5df0::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1169:118:77a0::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1169:119:b120::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1169:11c:3e00::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1169:11f:d680::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:11c0:60:2cf:d8b5:30ff:fe27:f208", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1398:5:f604:cafe:cafe:cafe:9001", 128, NDPI_PROTOCOL_TOR }, + { "2a00:16b0:1:243::7012:3117", 128, NDPI_PROTOCOL_TOR }, + { "2a00:16b0:1:243::7012:a500", 128, NDPI_PROTOCOL_TOR }, + { "2a00:16b0:1:243::7012:e817", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1728:f:a030::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:3a9::5c7d", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:3f8::687e:9201", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:3f8::7081:9001", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:468::98b4", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:52::da4e", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1838:37:ac::e27d", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1908:ffff:fffe:4c60:4fff:fef5:5cec", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d1:0:252e:d19b:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d2:0:252e:d2e6:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d306:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d307:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d309:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d30f:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d310:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d313:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d316:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d31e:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d31f:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d320:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:19a0:3:d3:0:252e:d366:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1ca8:2a:33::2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:118::a2d7", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:12c::4d3a", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:138::94d2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:15::45dc", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:172::635a", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:20::eda9", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:44::326d", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:73::a568", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1dc0:caff:8b::24bd", 128, NDPI_PROTOCOL_TOR }, + { "2a00:1ed0:153::203", 128, NDPI_PROTOCOL_TOR }, + { "2a00:4d80::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6020:b2c5:d81e:bbbb:bad4:5326:3d78", 128, NDPI_PROTOCOL_TOR }, + { "2a00:63c1:10:41::2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:63c1:13:148::2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:63c1:13:229:fa53:5051:8c88:ff1e", 128, NDPI_PROTOCOL_TOR }, + { "2a00:63c1:c:14::2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6800:3:23b:7777:7777:7777:7777", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6800:3:b3b::1111", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6800:3:d90::", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6800:3:dae::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6800:3:eeb::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6d41:200:2::e7", 128, NDPI_PROTOCOL_TOR }, + { "2a00:6d43:807:7113::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:74a0:e000:1003::114", 128, NDPI_PROTOCOL_TOR }, + { "2a00:7fc0:8001:2::7", 128, NDPI_PROTOCOL_TOR }, + { "2a00:8620:201:50e::2a35", 128, NDPI_PROTOCOL_TOR }, + { "2a00:8620:201:511::5e4c", 128, NDPI_PROTOCOL_TOR }, + { "2a00:8620:201:517::38e5", 128, NDPI_PROTOCOL_TOR }, + { "2a00:8a60:e012:a00::9001", 128, NDPI_PROTOCOL_TOR }, + { "2a00:8dc0:aa00::19", 128, NDPI_PROTOCOL_TOR }, + { "2a00:99a0:0:1000::2", 128, NDPI_PROTOCOL_TOR }, + { "2a00:bd80:12::f", 128, NDPI_PROTOCOL_TOR }, + { "2a00:c020:40fe:1f13::6969", 128, NDPI_PROTOCOL_TOR }, + { "2a00:c6c0:0:154:5::10", 128, NDPI_PROTOCOL_TOR }, + { "2a00:c70:1:178:170:13:43:1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:c70:1:178:170:8:0:14ca", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:1800:19f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:1800:257::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:1800:36d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f201:aa00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f213:6a00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f40a:ae00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f40b:2c00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f410:b400::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f411:e900:0:6058:9c83:831", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f412:c100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f424:5b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f428:6900::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:da00:f431:4900::1", 128, NDPI_PROTOCOL_TOR }, + { "2a00:e140::34", 128, NDPI_PROTOCOL_TOR }, + { "2a00:fa40:aaa:9::b9", 128, NDPI_PROTOCOL_TOR }, + { "2a01:170:118f:30::100", 128, NDPI_PROTOCOL_TOR }, + { "2a01:1b8:5:1:ffff:ffff:ffff:3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:423d:b500:d308:6847:718e:e2a6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:424c:1900:a87e:747:8f75:a70e", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:4273:fd00:e5ca:9f03:dfca:9a71", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:429c:9600:40e6:e961:9cf7:31d1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:42b4:dc00:936:8738:11c5:bbf9", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:4326:f500:5f9:1474:1f7b:814a", 128, NDPI_PROTOCOL_TOR }, + { "2a01:238:439a:1900:43d6:a3e4:9968:9811", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:211:6b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:229:d300::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:241:d100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:249:f100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:24a:7200::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:254:8c00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:26f:8b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:271:8500::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:274:8300::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:27f:4400::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:29e:cf00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2b6:b400::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2bc:e200::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2c5:7100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2ea:9a00:0:c5e0:b84c:18f9", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2ed:4600::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2f0:7300::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2f3:4a00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:2f3:9b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:303:100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:30a:1500::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:30d:3000::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:314:a500::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:319:100::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:31a:be00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:328:5800::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:33e:600::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:351:200::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:353:1400::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:356:ca00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:363:b800::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:369:e200::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:37a:3300::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:381:8e00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:387:6d00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:239:3a0:fc00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:270:9293::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:270:9847::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4262:1ab:ffff::133", 128, NDPI_PROTOCOL_TOR }, + { "2a01:440:108:11:82:149:227:125", 128, NDPI_PROTOCOL_TOR }, + { "2a01:440:108:11:82:149:227:126", 128, NDPI_PROTOCOL_TOR }, + { "2a01:488:67:1000:5bfa:5134:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4ce0:50::1431:0:2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10a:1f06::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10a:26e5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10a:292a::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10a:295e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:2952::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:2a2a::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:3357::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:3406::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:3702::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:439b::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:10b:ee8::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:120:205b::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:120:4169::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:120:716d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:121:1466::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:121:30f2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:121:30f2:abcd::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:121:30f2:abcd::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:13b:22dc::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:13b:2dab::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:1465::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:244f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:2459::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:522c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:5486::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:8229::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:140:94d6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:141:282::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:12ab::200", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:12ab::2", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:12ab::4", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:12ab::6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:14a4:beef::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:14a4:beef::4", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:14a4:beef::6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:508a:a62c:457:6b0c:a1f9", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:150:7092::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:151:2324::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:160:8410::2", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:161:353a::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:161:391:6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:161:52cb::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:162:1124::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:162:72e9:aaaa:bbbb:4242:253", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:15d8::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:160::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:1c1c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:1cd2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:238c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:2594::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:28e9::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:2a2f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:171:501::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:12e6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:1317::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:249f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:3e99::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:cad::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:172:f16::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:173:1d2e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:173:2953::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:190:62d9::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:190:7385::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:190:73a4::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:191:602a::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:192:1318::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:192:3c5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c0c:453a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c0c:6c6b::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c0c:6f8c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1b:1b03::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1b:7079:aaaa:bbbb:cccc:dddd", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1b:d25::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:2ca4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:2e49::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:425a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:67f3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:80f8::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1c:b16b::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:1c1e:68bd::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:146d::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:2211::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:32e6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:3391::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:428c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:42c6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:4423::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:200:82ca::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:201:34d0::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:201:44d3::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:201:64d7::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:201:922f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:1139::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:172::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:5368::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:6096::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:7071::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:202:7144:c49d:e29a:d44a:c6ea", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:210:400f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:210:504b::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:211:1d41::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:211:208e::", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:211:cc::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:2200:14dc:120::100", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:221:12da::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:221:1ac1:dead:beef:7005:9001", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:221:20df::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:221:3641::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:221:b52:fcfd:ff:fe00:ec09", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:231:16e0::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:231:19f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:231:1ed8:106::106", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:241:4d16::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:241:509e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:242:4d2e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:252:194b::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:252:3df0::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:252:4094::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:252:4568:9::10", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:261:2ced::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:261:5099::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:261:50da::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:261:5145::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:262:494f:1::22", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:271:5d58::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:271:60cf:99::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:a0:2276:1::20", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:a0:8070::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:a0:90b0:789d:6a4:95f3:a78c", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c012:c9bc::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c013:524e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c013:66ec::", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c013:9fa5::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c013:b570::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c0c:4811::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c0c:ad3f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c0c:b448::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c0c:cbfd::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c17:49c0::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c17:71fa::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c17:ba99::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c2c:d4e4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c2c:d75::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c2c:e8a0::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:c2c:f4b0::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f8:fff0:4f:266:37ff:fee5:cc35", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:1a:9394::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:1a:9590::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:1a:a067::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:10f0::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:134f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:14af::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:164a::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:1669::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:16a8::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:1787:0:999:0:2086", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:1b96:2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:204e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:2145::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:2145::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:2d3:1000::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:c5c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:d54::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2a:d96::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2b:151f:95:216:101:247", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2b:289d::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2b:2e4c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2b:31a0::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:2b:f53::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3051:3d19:100::116", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3051:5064:8000::2", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3051:5064:8000::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3051:5064:8000::6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3051:5440::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3070:1210::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3070:1c9d::", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3070:2c54::120", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3070:2c54::124", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3071:16a4::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3081:414c::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3100:30aa::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:3b:468e::13", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4a:1812::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4a:2e4e::2", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4a:2e4e::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4a:4555:3::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4a:48d0::11", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4b:4268::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:4b:4e97::6666", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:5a:24ec:dead::2", 127, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:5a:24ec:dead::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:5a:442b::3", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:5a:442b::4", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:5a:442b::6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:6a:1a2f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:6a:528d::a", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:6b:19a2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:6b:2ad5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:2697::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:33ef::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:516b::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:6abe::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:6ed7::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:7637::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:9b5d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:9cbb::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:9d66::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:a71::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:b8b3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:c870::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c010:ef05:7077:e1a1:8798:b644", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c011:47f7::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c011:6ac2::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c011:8cca::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c011:b2fd::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:2271::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:487a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:6094::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:6cc4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:883a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:4f9:c012:b0e6::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:5e0:36:c311::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:5e0:36:c7ec::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:5e0:36:c93f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a01:6340:2:501::10", 128, NDPI_PROTOCOL_TOR }, + { "2a01:6340:2:501::20", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e03::f03c:93ff:fe6e:ec57", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e03::f03c:93ff:fe6e:f11", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:93ff:fe6e:eca8", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:93ff:fe6e:f3a", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:94ff:fef2:a1b0", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:94ff:fef2:ddc9", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:95ff:fe6c:7912", 128, NDPI_PROTOCOL_TOR }, + { "2a01:7e04::f03c:95ff:fee8:7462", 128, NDPI_PROTOCOL_TOR }, + { "2a01:8640:a::6163:8bf8", 128, NDPI_PROTOCOL_TOR }, + { "2a01:8640:f::86f8:57d7", 128, NDPI_PROTOCOL_TOR }, + { "2a01:a500:2766::2e08:6313", 128, NDPI_PROTOCOL_TOR }, + { "2a01:a500:2766::d04:d3cc", 128, NDPI_PROTOCOL_TOR }, + { "2a01:d0:fc27:0:dea6:32ff:fe44:be84", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:19b:4ad0::a810:b196", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:281:be00:b6c4:b1e4:1c19:abfd", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:3e0:6c31::16", 127, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:5d6:6de0::c", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:5e4:1d0::acab", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:7f:ca0:36c8:d6ff:feba:3a6", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e0a:b5:7f50:84ea:b6d0:bca3:1196", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e11:1028:4080:24b2:b1c0:c3e3:d917", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e11:7007:390:be24:11ff:fe7b:1092", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e34:ec29:e1e0:baae:edff:fe7d:7bd8", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e5c0:539e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e5c0:77a9::2", 128, NDPI_PROTOCOL_TOR }, + { "2a01:e901:1:aa00::37", 128, NDPI_PROTOCOL_TOR }, + { "2a01:f500:1:46::2", 128, NDPI_PROTOCOL_TOR }, + { "2a02:1348:179:9145:24:19ff:fee6:4516", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:4800::31", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:4f3f:5:beae:c5ff:fe10:2c02", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:53a8:0:5eed:8cff:fea0:5b5c", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:6426::11", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:6a16:1130::32:101", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:6a16:1130::32:102", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:83d4:7777:44bd:c9ff:fe2e:3165", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:83d4:7777:48b6:8fff:feb0:bb1e", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:ae0d:199::1111", 128, NDPI_PROTOCOL_TOR }, + { "2a02:168:b415:0:dea6:32ff:fefa:c250", 128, NDPI_PROTOCOL_TOR }, + { "2a02:16a:da02:c1a::187", 128, NDPI_PROTOCOL_TOR }, + { "2a02:16d0:0:5::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:180:6:1::2eee", 128, NDPI_PROTOCOL_TOR }, + { "2a02:180:6:1::2fce", 127, NDPI_PROTOCOL_TOR }, + { "2a02:180:6:1::3d8", 128, NDPI_PROTOCOL_TOR }, + { "2a02:180:6:1::694", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2028:10f5:71::252", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2340:1204:a000:213a:9a04:9d56:42fb", 128, NDPI_PROTOCOL_TOR }, + { "2a02:238:f04b:4125::", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2479:12:f00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:207:eb00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:20c:6c00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:210:3200::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:214:5600::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:234:7b00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:237:d000::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:247:a700:1::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:247a:25c:9d00::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:248:2:41dc:5054:ff:fe80:10f", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2780::e01a", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27a8:0:a::100", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27a8:0:a::12b", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27aa::41", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27aa::505", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27aa::88", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27aa::ce", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27ab:0:2::22", 128, NDPI_PROTOCOL_TOR }, + { "2a02:27ac::120", 128, NDPI_PROTOCOL_TOR }, + { "2a02:29e0:1:440:108:108:108:108", 128, NDPI_PROTOCOL_TOR }, + { "2a02:29e0:2:6:1:1:7760:bbd6", 128, NDPI_PROTOCOL_TOR }, + { "2a02:29e0:2:6:1:1:b2e8:4015", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2b88:2:1::4205:1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2b88:2:1::79d2:43", 128, NDPI_PROTOCOL_TOR }, + { "2a02:2b88:2:417::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:390:9854:40:8c84:91ff:fe56:1a76", 128, NDPI_PROTOCOL_TOR }, + { "2a02:418:6017::147", 128, NDPI_PROTOCOL_TOR }, + { "2a02:418:6017::148", 128, NDPI_PROTOCOL_TOR }, + { "2a02:4780:c:b915::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:4780:e:a307::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:560:53ab:6802:4e52:62ff:fe27:91e2", 128, NDPI_PROTOCOL_TOR }, + { "2a02:578:854d:1c00:2ecf:67ff:fe2a:2347", 128, NDPI_PROTOCOL_TOR }, + { "2a02:6b60:0:3d::36", 128, NDPI_PROTOCOL_TOR }, + { "2a02:752:0:18::17c2", 128, NDPI_PROTOCOL_TOR }, + { "2a02:7b40:b0df:8d6a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:7b40:d418:648a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:8071:3e85:bc60::4a11", 128, NDPI_PROTOCOL_TOR }, + { "2a02:8108:9808:de00:7d8a:5cd2:4a0c:5fd", 128, NDPI_PROTOCOL_TOR }, + { "2a02:898:218::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:898:218::2", 128, NDPI_PROTOCOL_TOR }, + { "2a02:908:1082:4b11::eeee:5555", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a445:4f0f:0:397c:e568:dd49:ed4d", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a452:9bf7:0:e5bc:18e1:345e:6745", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a466:6b10:1:1:1:1:1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a469:a88b:1:5a9c:fcff:fe04:34c2", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a46c:5d12:1:7e10:c9ff:feb9:ebc", 128, NDPI_PROTOCOL_TOR }, + { "2a02:a46e:f838:4:265e:beff:fe51:3772", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c202:2191:7710::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c202:3014:1921::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c204:2195:2012::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c204:2230:7532::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c205:1000:6686::5", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c205:3003:5755::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2209:9698::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2214:7698::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2217:5945::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2227:7426::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2240:8448::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:2241:2588::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3006:4281::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3009:9446::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3010:8083::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3011:733::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3012:8083::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3012:989::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3013:4077::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c206:3013:5744::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:2034:5805::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:2098:7239::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3001:6426::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3003:935::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3004:1074::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3005:1808::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3005:233::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c207:3006:5899::1", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c500:2:110::8709:9001", 128, NDPI_PROTOCOL_TOR }, + { "2a02:c500:2:110::a1e9:9201", 128, NDPI_PROTOCOL_TOR }, + { "2a02:ec0:209:10::4", 128, NDPI_PROTOCOL_TOR }, + { "2a02:ed06::222", 128, NDPI_PROTOCOL_TOR }, + { "2a02:f58:4:300:216:3eff:fec2:a0f9", 128, NDPI_PROTOCOL_TOR }, + { "2a02:f58:4:300:216:3eff:fec2:a1f9", 128, NDPI_PROTOCOL_TOR }, + { "2a03:3b40:fe:1e2::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:10:16b:78e6:28ff:fea6:9f18", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:10:5a:e889:a0ff:fed2:e913", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:10:e31:7871:61ff:fe26:4017", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:13:7c3:dead:beef:ca1f:1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1:47e::443", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:15:533:3418:31ff:fe1c:a2ed", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:15:928:dead:beef:ca1f:1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:17:688:b854:7ff:fe48:bdcb", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:17:82:d4ac:5fff:fe6f:f2fe", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:17:98::cafe:6a7e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:17:a15:d4db:fbff:fef4:8b7b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1a:1f5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1a:229:5848:b3ff:fe1d:d230", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1a:5dc:242e:cbff:fe4d:cb31", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1a:5de:6489:b7ff:fe8f:8434", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1a:6f8:98f0:87ff:fe6a:29af", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1c:79d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1d:b7a:782f:17ff:fef0:a708", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1e:7be:aef4:d6c6:923c:e658", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1e:7d4:84fb:5fff:fef3:9d56", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:1e:81:c835:7dff:fe90:3ed5", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:21:3ba:840a:fff:fe2e:3fec", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:21:89c:b8d4:46ff:fe68:40db", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:21:8a8:dead:beef:ca1f:1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:22:175:a452:acff:fefc:987f", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:22:62::2", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:23:409:748d:52ff:fe41:cdcc", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:23:55:485b:4eff:fed8:bb89", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:24:b3::443", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:27:36:c813:6dff:fe0e:b93e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:27:6f8:e466:27ff:fe82:1b2a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:27:71a:1853:7aff:feaf:449b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:27:77:d827:96ff:fefb:a671", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:28:1e8::69", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:28:900:786f:7fff:fe08:8217", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:28:97e:84fa:9ff:fef2:cc0", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2a:2df:38b0:44ff:fea0:658", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2a:ab9:281c:73ff:fe04:9be3", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2a:d6:949c:84ff:fe0c:84ba", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2b:41f:0:1d:0:fe", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2b:66e:dead:beef:ca1f:1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2b:673:24da:28ff:feb5:e5c5", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2b:9:a4e0:1fff:fe06:d2f3", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2:ba4:88e9:eff:fe89:3637", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:2:e5::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:31:141::1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:31:1c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:31:2f::2430", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:31:40:c48f:36ff:fec9:eaf6", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:32:1ea:846f:81ff:fe5a:8073", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:32:211::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:1ba:44af:cbff:fe0c:e975", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:1c8::13", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:1c9:68d7:eff:fe33:3593", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:255:2895:5dff:fe24:437d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:6c:346d:daff:fef4:10de", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:33:c4c:7823:e2ff:fe4d:d4c6", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:34:1d7:e815:a2ff:fed3:2025", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:37:1fc:487b:b7ff:fe13:839b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:37:3:e842:2ff:feb9:c49c", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:37:76e:68f6:30ff:fe7c:a4", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:3e:266::26", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:3e:568:446c:e7ff:fe7d:de4f", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:3f:cc1::", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:40:27:98d9:edff:fe35:2783", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:40:4b:2811:c1ff:fe70:40cf", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:40:6a:5829:22ff:fedd:b07f", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:41:2a7::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:41:7f:6804:9fff:fed0:e2ef", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:43:216:5443:2bff:fe16:c6b5", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:43:26f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:45:16::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:46:11c:8459:ecff:fee4:9a99", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:46:197:b434:d3ff:fe68:d9e1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:46:95::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:47:631:a437:b1ff:fe5c:74a2", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:49:243:5417:b0ff:fec6:da84", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:49:6c4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4a:fb8:86c:21ff:fe56:f680", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4c:ccf::1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4e:67::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4e:c87:185:232:68:32", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4e:f3:689c:c6ff:fe24:89b4", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4f:336:1807:efff:fef4:3c1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:4f:9dd:941d:48ff:fe68:323d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:50:97::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:50:e1b:842c:42ff:fedc:e5c6", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:50:e4c::", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:51:7c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:55:53:e4ba:cfff:fef3:ac36", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5:613:9872:48ff:fede:289d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5:65b:388a:15ff:fedc:30d6", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:56:90:e4ce:e3ff:fe49:5558", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:56:c1b::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:58:115::2", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:58:7d:de1:ea7:dead:beef", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5b:126:588d:91ff:fe63:d442", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5b:563::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5b:e1::8", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5d:ecb:d4d0:5eff:fed6:b075", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5d:fab::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:5e:c47::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:60:460:3855:1eff:fe30:5412", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:102b:c457:f3ff:feb0:a6d0", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:1051::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:2388:df98:15f9:b34d:443", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:62:8:c855:23ff:fef6:50ee", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:62:ec7:d42a:41ff:feac:7169", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:3698::11e8", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:64:147:c85a:d0ff:fe3f:f837", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:64:d6f:3855:34ff:fe06:ba9", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:64:e83:c491:b8ff:feb0:f90e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:64:fe8:c853:14ff:fe86:7a3d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:537c::4", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:543b::443", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:543f:78b2:4fff:fe7b:fb6a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:614:d803:40ff:fec3:832a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:66:15:18a0:6bff:fe90:3147", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:66:d0e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:67:11a:48e6:ddff:fe82:4760", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:724c:df98:15f9:b34d:443", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:67:d1a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:8161:282b:15ff:fe1d:ea8c", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:81b3:3817:fdff:feac:72a9", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:68:6a:8435:5aff:feae:322e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:68:c65:542b:f3ff:fefc:ca96", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:69:e40::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:69:e5b:a4ec:edff:fed8:ed74", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6a:270:8ac:87ff:fe9e:7573", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6a:37::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6b:9c:7830:35ff:fe23:d89b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:d009:2844:1ff:feec:de5e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:d042:5440:88ff:fedd:4ae5", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:d0b2:2862:dcff:fe26:31fd", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:d2ab:58ac:c5ff:fed7:850", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:e047:6494:62ff:fe3f:85b8", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:6:f808:948b:b5ff:fe41:2238", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:7:473::1:2", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:7:dcc:14ac:f2ff:fea9:e4c7", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:8:3c1::9001", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:8:503:48d:bff:fe2a:1010", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:8:61b:85e:b6ff:fefa:8752", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:8:69a:74ab:8fff:fe06:a47a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:9:635:c48e:47ff:fea8:490", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:9:8ce:1867:3fff:fe86:2ac7", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:9:b1:c872:68ff:fed0:c6d5", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:a:72::1337", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:f:4c:e878:7fff:fe35:105d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:f:512:8475:54ff:fefe:912d", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:f:64f:5443:78ff:fe62:7ad8", 128, NDPI_PROTOCOL_TOR }, + { "2a03:4000:f:992:98d8:54ff:fe3d:fc2b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:6f02::93e1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:75c0:35:5488::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:75c0:36:2124::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:75c0:3c:a257::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:8600::a1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:8600::a2", 127, NDPI_PROTOCOL_TOR }, + { "2a03:8600::a4", 127, NDPI_PROTOCOL_TOR }, + { "2a03:8600::a6", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:15:86::1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:195::262", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:1b5:ffff::72:1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:32:1::89", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:395::3a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:566:1::19b", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:5f1:2903::1139", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:5f1:2903::2b1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:83:2908::7a", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:83:2908::9e", 128, NDPI_PROTOCOL_TOR }, + { "2a03:90c0:94:ffff::6a1", 128, NDPI_PROTOCOL_TOR }, + { "2a03:94e0:ffff:185:14:97:0:96", 128, NDPI_PROTOCOL_TOR }, + { "2a03:94e0:ffff:185:181:60:0:181", 128, NDPI_PROTOCOL_TOR }, + { "2a03:94e3:ffff:198:140:141:0:51", 128, NDPI_PROTOCOL_TOR }, + { "2a03:94e3:ffff:198:140:141:0:52", 128, NDPI_PROTOCOL_TOR }, + { "2a03:b0c0:2:d0::14cb:6001", 128, NDPI_PROTOCOL_TOR }, + { "2a03:b0c0:2:d0::f43:5001", 128, NDPI_PROTOCOL_TOR }, + { "2a03:b0c0:2:f0::1bc:9001", 128, NDPI_PROTOCOL_TOR }, + { "2a03:cfc0:8000:7::5fd6:3560", 127, NDPI_PROTOCOL_TOR }, + { "2a04:1741:0:12::", 128, NDPI_PROTOCOL_TOR }, + { "2a04:204:7771:3a00:83c1:769f:71c1:2abf", 128, NDPI_PROTOCOL_TOR }, + { "2a04:2180:0:1::35da:3bca", 128, NDPI_PROTOCOL_TOR }, + { "2a04:2180:0:1::e308:9180", 128, NDPI_PROTOCOL_TOR }, + { "2a04:3545:1000:720:4cfe:77ff:fe91:452d", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:101:164::99", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:101:46a::", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:102:46e0::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:103:f7cb::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:104:ad97::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:107:be74::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:115:fed3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:116:121d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:116:e0e3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:117:7157::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:123:c6c3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:128:c6e7:50ef:cafe:babe:1337", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:130:896e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:134:dcaf::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:52c0:135:334c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:6c80::8d", 128, NDPI_PROTOCOL_TOR }, + { "2a04:9dc0:0:144::10", 128, NDPI_PROTOCOL_TOR }, + { "2a04:b540:3000:1::150", 128, NDPI_PROTOCOL_TOR }, + { "2a04:c47:e00:7cdf:4b9:a0ff:fe00:2f0", 128, NDPI_PROTOCOL_TOR }, + { "2a04:e8c0:18:4a8::", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:0:2e::", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:152:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:4195:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:479b:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:646b:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:913:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:e32d:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a04:ecc0:8:a8:4567:fd2e:0:1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:541:110:20::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:541:110:3e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:541:112:31::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:541:123:10::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:541:123:f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:9403::215", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:655b::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:66a2::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:68c5::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:6acd::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:6ba1::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:b0c7:6cc4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a05:f6c7:8321::160", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1280:bee1:2::ee12:230", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:0:195::1", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:0:3c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:0:47::166", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:0:50::11", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:3:19::1", 128, NDPI_PROTOCOL_TOR }, + { "2a06:1700:3:34::1", 128, NDPI_PROTOCOL_TOR }, + { "2a06:5b83:2:4::c7f6:a7d2", 128, NDPI_PROTOCOL_TOR }, + { "2a06:5b87::b4f8:1e00", 128, NDPI_PROTOCOL_TOR }, + { "2a06:d380:0:103::62", 127, NDPI_PROTOCOL_TOR }, + { "2a06:de00:401:306::2", 128, NDPI_PROTOCOL_TOR }, + { "2a06:e80:3000:1:bad:babe:ca11:911", 128, NDPI_PROTOCOL_TOR }, + { "2a06:f900:1:100::53a", 128, NDPI_PROTOCOL_TOR }, + { "2a06:f901:1:100:300:ffff:1b1:a671", 128, NDPI_PROTOCOL_TOR }, + { "2a06:f901:8001:100:1:0:7af0:36b2", 128, NDPI_PROTOCOL_TOR }, + { "2a07:6d80:1e01:3a13::", 128, NDPI_PROTOCOL_TOR }, + { "2a07:9380:2:aaaa::98db:3bdb", 128, NDPI_PROTOCOL_TOR }, + { "2a07:abc4::1:f1d", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e01:3:35f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e01:3:3da::1", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e01:3:3e8::1", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e03:2a::bcde", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e042:1:181::1", 128, NDPI_PROTOCOL_TOR }, + { "2a07:e042:1:182::1", 128, NDPI_PROTOCOL_TOR }, + { "2a09:11c0:1200:210:ffff:ffff:8d62:884f", 128, NDPI_PROTOCOL_TOR }, + { "2a09:5e41:319:4a40::6", 128, NDPI_PROTOCOL_TOR }, + { "2a09:61c0::20", 127, NDPI_PROTOCOL_TOR }, + { "2a09:61c0::22", 128, NDPI_PROTOCOL_TOR }, + { "2a09:61c0::beef", 128, NDPI_PROTOCOL_TOR }, + { "2a09:6301:0:12c:6da4:e2a5:bfe5:8d7c", 128, NDPI_PROTOCOL_TOR }, + { "2a09:6301:0:bca:ed84:b764:d729:a9fc", 128, NDPI_PROTOCOL_TOR }, + { "2a09:8740:0:3::13:4008", 128, NDPI_PROTOCOL_TOR }, + { "2a09:be40:28fb:1337::beef", 128, NDPI_PROTOCOL_TOR }, + { "2a09:be40:28fb:1337::dead", 128, NDPI_PROTOCOL_TOR }, + { "2a09:e1c1:efc1:1337::9001", 128, NDPI_PROTOCOL_TOR }, + { "2a09:e1c1:efc2:1337::9001", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:0:11f2:44b9:e2ff:fefd:eeab", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:0:63::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:0:e35:c4dd:60ff:fe34:7d02", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:0:f0a:a45c:7aff:fe13:2781", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:100:2d1::3", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:100:91::42", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:104e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:10f9:4827:d3ff:fe72:b569", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:1129::", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:1150::", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:11c1:c80d:3dff:fe8c:eb6c", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:1237::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:1:2e8:430:d0ff:fe16:af4f", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:2000:2108:5e74:8bff:fe42:37e9", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:3:10d::42", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:80:193::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:80:1e1:f1d0:2:310:31", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:80:5d76:14f1:65ff:fe1e:2ec0", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:c0:292::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:c0:4c86:d83b:d0ff:fec8:ded8", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:4cc0:c0:5e48:9887:30ff:fef8:f4c8", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:51c0::59", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:c800:1:11::a2", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:c801:1:20::12f", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:c801:1:2::95", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:c801:1:5::192", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:c802:1::bf", 128, NDPI_PROTOCOL_TOR }, + { "2a0a:ef40:b0c:2800::9001", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:4140:63a2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:4140:e0c6::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:4140:ec4f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:4142:d97::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:4142:da2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:64c0:1::18f", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:64c0:1::1d1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:8bc0:2:232a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:cbc0:1100:1a::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:cbc0:1100:7::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:ee80:e:fefe::40", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f300:406::", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:10::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:11::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:1::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:12::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:13::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:14::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:15::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:16::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:2::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:3::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:4::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:5::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:6::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:7::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:8::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c0:16c:9::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::128", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::132", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::135", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::138", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::140", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::142", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::144", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::149", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::150", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::157", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::160", 126, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::166", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::170", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::173", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::174", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::176", 128, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:1::178", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::192", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::194", 126, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::198", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::200", 125, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::208", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2:1::210", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::32", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::34", 126, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::38", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::40", 125, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::48", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::50", 125, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::58", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:2::60", 126, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::64", 126, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::68", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::70", 125, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::78", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::80", 125, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::88", 127, NDPI_PROTOCOL_TOR }, + { "2a0b:f4c2:3::90", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:16c0:500:296:216:3cff:fe9c:6a68", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:16c0:500:296:216:3cff:fef2:c79b", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:16c0:510:dc2::4cab", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:2500:571:6bf:f10d:eb5:1b24:f5d1", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:2500:571:7ca:7683:56ca:e852:76a1", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:2500:571:f6b:5c32:be4f:2396:462f", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:2500:571:f6b:60e4:ae26:7a8:928", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:4ac1:8::27", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:4ac1:8::30", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:4ac1:8::bd", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fe0f:9e53", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fe37:3cb", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fe4e:df9e", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fe58:9714", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fe87:1bec", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fead:5be0", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:feb6:9942", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fed0:6ed4", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fed1:b9d9", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fee1:73d9", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:1705:be24:11ff:fef5:7c39", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:4000:be24:11ff:fe07:68d", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:4000:be24:11ff:fe3c:6727", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:4000:be24:11ff:fe51:a829", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5700:3133:650:b0ea:eeff:fedb:1f7b", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:5cc0:1:1::293c:1518", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:8900:2:b2f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:9a40:2805:1::198f", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:9a40:8617:d5ae::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1002::f28", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1002::f60", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1002::fa0", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1003::fe6", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1004::12b", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1004::3eb", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1005::60", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:3a1:1005::e3", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:1000::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:100::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:23::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:6e::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:96::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:b5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:bb::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:c4::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:c8::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:fd::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:6f0:ff::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:b641:ce0::d598:af6f", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:d480:c1c1:1286::315a", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:d480:c1c1:1286::5359", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:d480:c1c1:1286:ffff:ffff:ffff:ffe", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:e300::23", 128, NDPI_PROTOCOL_TOR }, + { "2a0c:fe80:2000:1337::70", 128, NDPI_PROTOCOL_TOR }, + { "2a0d:5440::25", 128, NDPI_PROTOCOL_TOR }, + { "2a0d:5940:112:a2::a", 128, NDPI_PROTOCOL_TOR }, + { "2a0d:5940:90::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0d:8140:1fff:3349::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0d:8140:1fff:4a2d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe02:1ea8", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe0c:bc08", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe2b:98ee", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe60:2797", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe7f:14f8", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe84:c546", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fe8a:a5df", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1580:1000:0:be24:11ff:fec2:ff8c", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:1d80:17:6f8d::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:3c0:23::3", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:100", 127, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:127", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:132", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:149", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:20", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:22", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:29", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:38", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:44", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:64", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:4005:1002:ffff:185:40:4:92", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:6a80:3:155::", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:6a80:3:4c6:0:ffff:5b4:fda9", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:73c2:8001:8024::40:2", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:97c0:3ea:281::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:97c0:3ea:35::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:97c0:3ea:405::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:97c0:3ea:9e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:97c0:470::30", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bf00:1030::99:9999:1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:11::796d", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:14::24a8", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:3::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:5::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:8::a84e", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc0:0:d::d927", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc7:0:3::2d83", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:bfc7:0:4::6e7a", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:dc0:3:5b35::d0d0", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:e701:1198::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:f0c1:0:2258::100", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:fa00:0:30::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0e:fd40:103:158::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5707:aaf1:217f::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5707:aaf1:31c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5707:aaf1:408::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5707:aaf1:74::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5707:aaf1:ae3::a010", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5f40:0:5::14b", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:5f40:1:355::104", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:85c1:356:3238::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:85c1:356:424c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:85c1:356:5bdd::beef", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:0:e57f::785:2099", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:1337::9969:dc10", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:1337::acea:135a", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:1337::b5a4:a762", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:1337::c43b:17bb", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca80:1337::cd4a:eb83", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ca81:b00b::bc12:d6a3", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:cdc6:500:11e3::2", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:df00:0:255::201", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:df00:0:255::202", 127, NDPI_PROTOCOL_TOR }, + { "2a0f:df00:0:255::204", 127, NDPI_PROTOCOL_TOR }, + { "2a0f:df00:0:255::206", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f::182", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:23ae:4067:bed4:a129", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:8605:d341:b954:fc51", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:8ac2:45a2:10cb:495f", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:9405:a52b:796f:aff2", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:9dd4:5bf6:2230:ae55", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:a052:2166:bef9:a432", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:a060:ebda:49aa:b011", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:b041:fda4:56e4:4950", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:baa4:d491:90be:dca5", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:c94a:de42:aac1:9045", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:e586:f:f:e356:1bda:fc05:6784", 128, NDPI_PROTOCOL_TOR }, + { "2a0f:ea81:2:1be::1", 128, NDPI_PROTOCOL_TOR }, + { "2a10:1fc0:5::c1d9:190e", 128, NDPI_PROTOCOL_TOR }, + { "2a10:3781:16ea:90:45:80:171:211", 128, NDPI_PROTOCOL_TOR }, + { "2a10:3781:29b6::3", 128, NDPI_PROTOCOL_TOR }, + { "2a10:46c0:0:2::13", 128, NDPI_PROTOCOL_TOR }, + { "2a10:8a40:f313::29", 128, NDPI_PROTOCOL_TOR }, + { "2a10:9301:100:780::105", 128, NDPI_PROTOCOL_TOR }, + { "2a10:9301:300:e40::211:121", 128, NDPI_PROTOCOL_TOR }, + { "2a10:c800:1:77d1::1", 128, NDPI_PROTOCOL_TOR }, + { "2a10:c800:1:77f8::1", 128, NDPI_PROTOCOL_TOR }, + { "2a10:c800:1:9cc6::1", 128, NDPI_PROTOCOL_TOR }, + { "2a10:fc81:abb7:42ea::1", 128, NDPI_PROTOCOL_TOR }, + { "2a11:4c05:0:1::1", 128, NDPI_PROTOCOL_TOR }, + { "2a11:6100:0:1467::", 128, NDPI_PROTOCOL_TOR }, + { "2a11:6100:0:24:ae1f:6bff:fed5:12f0", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:51:1b::5b43:19b6", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:65:1b::12d3:cdc9", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:66:1b::2ae:8378", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:66:1b::d573:6ddb", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:68:1b::5d5c:8aa4", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:69:1b::1ae1:6cc2", 128, NDPI_PROTOCOL_TOR }, + { "2a11:840:69:1b::b65e:c091", 128, NDPI_PROTOCOL_TOR }, + { "2a12:5940:13e2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a12:5940:144f::2", 128, NDPI_PROTOCOL_TOR }, + { "2a12:5940:52c2::2", 128, NDPI_PROTOCOL_TOR }, + { "2a12:5940:72ab::2", 128, NDPI_PROTOCOL_TOR }, + { "2a12:5940:f0a8::2", 128, NDPI_PROTOCOL_TOR }, + { "2a12:6fc1::681", 128, NDPI_PROTOCOL_TOR }, + { "2a12:8641:5:a::", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:1:1:194:26:192:186", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:1:1:194:26:192:77", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:1:1:2:58:56:220", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:1:1:2:58:56:35", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:1:1:2:58:56:43", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:115", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:202", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:204", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:206", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:71", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:81", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:83", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:88", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:185:241:208:92", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:107", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:113", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:178", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:222", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:230", 127, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:239", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:240", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:248", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:39", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:42", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:69", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:138:16:76", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:10", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:110", 127, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:114", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:167", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:169", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:17", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:19", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:21", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:28", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:40", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:56", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:61", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:62", 127, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:80", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:88", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:90", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:95", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:141:215:97", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:80:158:205", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:80:158:23", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:80:158:27", 128, NDPI_PROTOCOL_TOR }, + { "2a12:a800:2:1:45:80:158:69", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:3cb6::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:7a10::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:9426::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:9803::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:a9bb::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:cc38::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20b:f20c::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:bec0:20c:94bb::1", 128, NDPI_PROTOCOL_TOR }, + { "2a12:de40:25::1:4", 128, NDPI_PROTOCOL_TOR }, + { "2a12:de40:25::2:3", 128, NDPI_PROTOCOL_TOR }, + { "2a12:de40:25::3:3", 128, NDPI_PROTOCOL_TOR }, + { "2a13:29c0:973e:a479:8162:2c46:ff41:1", 128, NDPI_PROTOCOL_TOR }, + { "2a13:d207:0:40e::1", 128, NDPI_PROTOCOL_TOR }, + { "2a14:7581:9f20:66::10", 126, NDPI_PROTOCOL_TOR }, + { "2c0f:6c0:0:4::95ea", 128, NDPI_PROTOCOL_TOR }, + { "2c0f:8c0:2:100a::2", 128, NDPI_PROTOCOL_TOR }, + { "2c0f:8c0:2:100a:beef::1", 128, NDPI_PROTOCOL_TOR }, + { "2c0f:8c0:2:100a::feed:b", 128, NDPI_PROTOCOL_TOR }, /* End */ { NULL, 0, 0 } }; diff --git a/src/lib/inc_generated/ndpi_zoom_match.c.inc b/src/lib/inc_generated/ndpi_zoom_match.c.inc index 0cd53a399..1f02f9d1e 100644 --- a/src/lib/inc_generated/ndpi_zoom_match.c.inc +++ b/src/lib/inc_generated/ndpi_zoom_match.c.inc @@ -67,6 +67,7 @@ static ndpi_network ndpi_protocol_zoom_protocol_list[] = { { 0x781D9400 /* 120.29.148.0/24 */, 24, NDPI_PROTOCOL_ZOOM }, { 0x79F49200 /* 121.244.146.0/27 */, 27, NDPI_PROTOCOL_ZOOM }, { 0x86E00000 /* 134.224.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, + { 0x89428000 /* 137.66.128.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, { 0x90C30000 /* 144.195.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, { 0x937C6000 /* 147.124.96.0/19 */, 19, NDPI_PROTOCOL_ZOOM }, { 0x95890000 /* 149.137.0.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, @@ -78,6 +79,7 @@ static ndpi_network ndpi_protocol_zoom_protocol_list[] = { { 0xA2FF2400 /* 162.255.36.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, { 0xA5FE5800 /* 165.254.88.0/23 */, 23, NDPI_PROTOCOL_ZOOM }, { 0xA66C4000 /* 166.108.64.0/18 */, 18, NDPI_PROTOCOL_ZOOM }, + { 0xA88C0000 /* 168.140.0.0/17 */, 17, NDPI_PROTOCOL_ZOOM }, { 0xAA720000 /* 170.114.0.0/16 */, 16, NDPI_PROTOCOL_ZOOM }, { 0xADE75000 /* 173.231.80.0/20 */, 20, NDPI_PROTOCOL_ZOOM }, { 0xC0CC0C00 /* 192.204.12.0/22 */, 22, NDPI_PROTOCOL_ZOOM }, diff --git a/src/lib/ndpi_analyze.c b/src/lib/ndpi_analyze.c index 176f4eeef..1f72cb978 100644 --- a/src/lib/ndpi_analyze.c +++ b/src/lib/ndpi_analyze.c @@ -38,18 +38,14 @@ /* ********************************************************************************* */ void ndpi_init_data_analysis(struct ndpi_analyze_struct *ret, u_int16_t _max_series_len) { - u_int32_t len; - memset(ret, 0, sizeof(*ret)); if(_max_series_len > MAX_SERIES_LEN) _max_series_len = MAX_SERIES_LEN; ret->num_values_array_len = _max_series_len; if(ret->num_values_array_len > 0) { - len = sizeof(u_int64_t) * ret->num_values_array_len; - if((ret->values = ndpi_malloc(len)) != NULL) - memset(ret->values, 0, len); - else + if((ret->values = (u_int64_t *)ndpi_calloc(ret->num_values_array_len, + sizeof(u_int64_t))) == NULL) ret->num_values_array_len = 0; } } @@ -116,6 +112,12 @@ void ndpi_data_add_value(struct ndpi_analyze_struct *s, const u_int64_t value) { if(!s) return; + if(s->num_data_entries > 0) { + u_int64_t last = ndpi_data_last(s); + + s->jitter_total += (last > value) ? (last - value) : (value - last); + } + if(s->sum_total == 0) s->min_val = s->max_val = value; else { @@ -205,6 +207,15 @@ float ndpi_data_mean(struct ndpi_analyze_struct *s) { /* ********************************************************************************* */ +float ndpi_data_jitter(struct ndpi_analyze_struct *s) { + if(!s || s->num_data_entries < 2) + return(0); + else + return((float)s->jitter_total / (float)(s->num_data_entries - 1)); +} + +/* ********************************************************************************* */ + /* Compute the average only on the sliding window */ float ndpi_data_window_average(struct ndpi_analyze_struct *s) { if(s && s->num_values_array_len) { @@ -1356,9 +1367,16 @@ int ndpi_ses_add_value(struct ndpi_ses_struct *ses, const double _value, double if(ses->num_values == 0) *forecast = value; - else + else { +#if 1 + /* "Classic" formula */ + *forecast = (ses->params.alpha * value) + ((1 - ses->params.alpha) * ses->last_forecast); +#else + /* Alternative formula */ *forecast = (ses->params.alpha * (ses->last_value - ses->last_forecast)) + ses->last_forecast; - +#endif + } + error = value - *forecast; sq_error = error * error; ses->sum_square_error += sq_error, ses->prev_error.sum_square_error += sq_error; diff --git a/src/lib/ndpi_binary_bitmap.c b/src/lib/ndpi_binary_bitmap.c index 74041d376..f6751aa17 100644 --- a/src/lib/ndpi_binary_bitmap.c +++ b/src/lib/ndpi_binary_bitmap.c @@ -1,7 +1,7 @@ /* * ndpi_binary_bitmap.c * - * Copyright (C) 2011-23 - ntop.org and contributors + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_bitmap.c b/src/lib/ndpi_bitmap.c index 6caf174bf..78f3b83e8 100644 --- a/src/lib/ndpi_bitmap.c +++ b/src/lib/ndpi_bitmap.c @@ -1,10 +1,7 @@ /* * ndpi_bitmap.c * - * Copyright (C) 2011-24 - ntop.org and contributors - * - * This file is part of nDPI, an open source deep packet inspection - * library based on the OpenDPI and PACE technology by ipoque GmbH + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_bitmap64_fuse.c b/src/lib/ndpi_bitmap64_fuse.c index 9cf735e63..4a83e758f 100644 --- a/src/lib/ndpi_bitmap64_fuse.c +++ b/src/lib/ndpi_bitmap64_fuse.c @@ -1,7 +1,7 @@ /* * ndpi_bitmap64_fuse.c * - * Copyright (C) 2011-24 - ntop.org and contributors + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_cache.c b/src/lib/ndpi_cache.c index a85cb1623..b7d776105 100644 --- a/src/lib/ndpi_cache.c +++ b/src/lib/ndpi_cache.c @@ -1,10 +1,7 @@ /* * ndpi_main.c * - * Copyright (C) 2011-24 - 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 + * Copyright (C) 2011-25 - 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 @@ -209,6 +206,9 @@ int ndpi_get_lru_cache_stats(struct ndpi_global_context *g_ctx, case NDPI_LRUCACHE_FPC_DNS: ndpi_lru_get_stats(is_local ? ndpi_struct->fpc_dns_cache : g_ctx->fpc_dns_global_cache, stats); return 0; + case NDPI_LRUCACHE_SIGNAL: + ndpi_lru_get_stats(is_local ? ndpi_struct->signal_cache : g_ctx->signal_global_cache, stats); + return 0; default: return -1; } @@ -224,7 +224,7 @@ struct ndpi_address_cache* ndpi_init_address_cache(u_int32_t max_num_entries) { ret->num_cached_addresses = 0, ret->num_entries = 0, ret->max_num_entries = max_num_entries, - ret->num_root_nodes = ndpi_min(NDPI_NUM_DEFAULT_ROOT_NODES, max_num_entries/16); + ret->num_root_nodes = ndpi_max(1, ndpi_min(NDPI_NUM_DEFAULT_ROOT_NODES, max_num_entries/16)); ret->address_cache_root = (struct ndpi_address_cache_item**)ndpi_calloc(ret->num_root_nodes, sizeof(struct ndpi_address_cache_item*)); if(ret->address_cache_root == NULL) { @@ -246,6 +246,9 @@ static void ndpi_free_addr_item(struct ndpi_address_cache_item *addr) { void ndpi_term_address_cache(struct ndpi_address_cache *cache) { u_int i; + if(!cache) + return; + for(i=0; i<cache->num_root_nodes; i++) { struct ndpi_address_cache_item *root = cache->address_cache_root[i]; @@ -326,8 +329,10 @@ struct ndpi_address_cache_item* ndpi_address_cache_find(struct ndpi_address_cach if(memcmp(&root->addr, &ip_addr, sizeof(ndpi_ip_addr_t)) == 0) { return(root); - } else + } else { + prev = root; root = root->next; + } } return(NULL); @@ -343,6 +348,9 @@ bool ndpi_address_cache_insert(struct ndpi_address_cache *cache, struct ndpi_address_cache_item *ret; u_int32_t epoch_valid_until; + if(!hostname) + return(false); + if(epoch_now == 0) epoch_now = (u_int32_t)time(NULL); ret = ndpi_address_cache_find(cache, ip_addr, epoch_now); epoch_valid_until = epoch_now + ttl; @@ -369,13 +377,13 @@ bool ndpi_address_cache_insert(struct ndpi_address_cache *cache, ret->expire_epoch = epoch_valid_until, ret->next = cache->address_cache_root[hash_id]; - /* Create linked list */ - cache->address_cache_root[hash_id] = ret; - - if((ret->hostname = strdup(hostname)) == NULL) { + if((ret->hostname = ndpi_strdup(hostname)) == NULL) { ndpi_free(ret); return(false); } + + /* Create linked list */ + cache->address_cache_root[hash_id] = ret; } else { /* Element found: update TTL of the existing element */ ret->expire_epoch = ndpi_max(ret->expire_epoch, epoch_valid_until); @@ -413,8 +421,10 @@ bool ndpi_address_cache_dump(struct ndpi_address_cache *cache, u_char *a = (u_char*)&(root->addr); u_int j, idx; - if(epoch_now && (root->expire_epoch < epoch_now)) + if(epoch_now && (root->expire_epoch < epoch_now)) { + root = root->next; continue; /* Expired epoch */ + } for(j=0, idx=0; j<sizeof(ndpi_ip_addr_t); j++, idx += 2) snprintf(&buf[idx], sizeof(buf)-idx, "%02X", a[j]); @@ -439,7 +449,7 @@ u_int32_t ndpi_address_cache_restore(struct ndpi_address_cache *cache, char *pat if(!fd) return(false); - while(fscanf(fd, "%s\t%s\t%u\n", ip, hostname, &epoch) > 0) { + while(fscanf(fd, "%32s\t%255s\t%u\n", ip, hostname, &epoch) == 3) { if(epoch >= epoch_now) { /* Entry not yet expired */ u_int ttl = epoch-epoch_now; ndpi_ip_addr_t addr; diff --git a/src/lib/ndpi_community_id.c b/src/lib/ndpi_community_id.c index 6074599f1..ae4b585ae 100644 --- a/src/lib/ndpi_community_id.c +++ b/src/lib/ndpi_community_id.c @@ -1,10 +1,7 @@ /* * ndpi_community_id.c * - * Copyright (C) 2011-23 - ntop.org and contributors - * - * This file is part of nDPI, an open source deep packet inspection - * library based on the OpenDPI and PACE technology by ipoque GmbH + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_content_match.c.inc b/src/lib/ndpi_content_match.c.inc index f395ca9a9..a985d8067 100644 --- a/src/lib/ndpi_content_match.c.inc +++ b/src/lib/ndpi_content_match.c.inc @@ -430,7 +430,6 @@ static ndpi_protocol_match host_match[] = { "amazonaws.com", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "aws.a2z.com", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "a2z.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "amazon-adsystem.com", "Amazon", NDPI_PROTOCOL_AMAZON, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cloudfront.net", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "us-west-2.compute.amazonaws.com", "AmazonAWS", NDPI_PROTOCOL_AMAZON_AWS, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "teamviewer.com", "Teamviewer", NDPI_PROTOCOL_TEAMVIEWER, NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -455,6 +454,7 @@ static ndpi_protocol_match host_match[] = { "captive.apple.com.", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* apple.com.edgekey.net */ { "gsp1.apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "attwifi.apple.com", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "tether.edge.apple", "Apple", NDPI_PROTOCOL_APPLE, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "push.apple.com", "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "push-apple.com", "ApplePush", NDPI_PROTOCOL_APPLE_PUSH, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "icloud.com", "AppleiCloud", NDPI_PROTOCOL_APPLE_ICLOUD, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -475,15 +475,32 @@ static ndpi_protocol_match host_match[] = { "guzzoni.apple.", "AppleSiri", NDPI_PROTOCOL_APPLE_SIRI, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "wbagora.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "wbplay.com", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "xbox.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "xboxlive.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "xboxlive.com.akadns.net", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "xboxlive.com.c.footprint.net", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "xboxservices.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "xboxab.com", "Xbox", NDPI_PROTOCOL_XBOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "e13555.b.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "e1800.d.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "e1879.e7.akamaiedge.net", "Playstation", NDPI_PROTOCOL_PLAYSTATION, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "battle.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blizzard.com", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bnetaccount.akamaized.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blz-contentstack-images.akamaized.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blz-contentstack-assets.akamaized.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blzddist1-a.akamaihd.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blzprofile.akamaized.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bnetstorefront.akamaized.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bnetcmsus-a.akamaihd.net", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blizzard-api.arkoselabs.com", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "starcraft2.com", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "blzstatic.com", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "images.blz-contentstack.com", "Blizzard", NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cnn.com", "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cnn.net", "CNN", NDPI_PROTOCOL_CNN, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -528,6 +545,10 @@ static ndpi_protocol_match host_match[] = { "speedtest.", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "-speedtest.", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ooklaserver.net", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cdnst.net", "Ookla", NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "ui.com", "Ubiquity", NDPI_PROTOCOL_UBIQUITY, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ubnt.com", "Ubiquity", NDPI_PROTOCOL_UBIQUITY, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ntop.org", "ntop", NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -537,8 +558,22 @@ static ndpi_protocol_match host_match[] = { "drive-thirdparty.googleusercontent.com", "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "drive.google.com", "GoogleDrive", NDPI_PROTOCOL_GOOGLE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* used for communication between Android devices and Google's servers for various services, including app downloads and updates */ { "android.clients.google.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* main web URL for the Google Play Store */ + { "play.google.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* backend services and API calls for Google Play Services */ + { "play.googleapis.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* serving static content like images and icons */ + { "play-lh.googleusercontent.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* It handles various backend operations for apps that rely on Google Play Services */ + { "play-fe.googleusercontent.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "play-fe.googleapis.com", "PlayStore", NDPI_PROTOCOL_PLAYSTORE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* https://www.fastvue.co/sophos/blog/google-data-saver-affect-security-confidentiality-reporting/ Used by Google Chrome Lite Mode for Android @@ -627,6 +662,33 @@ static ndpi_protocol_match host_match[] = { "ns0.fdn.fr", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ns1.fdn.fr", "DoH_DoT", NDPI_PROTOCOL_DOH_DOT, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* Microsoft domains (NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_MICROSOFT_365, + NDPI_PROTOCOL_MICROSOFT_AZURE) are auto-generated! + Add here some specific extensions, exceptions, "catch-all" or "old" domains still useful/used for unit tests... + See also: https://learn.microsoft.com/en-us/windows/privacy/manage-windows-11-endpoints + */ + { "microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msocdn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "onmicrosoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "microsoftapp.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "s-microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftconnecttest.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "img-s-msn-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "img.s-msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "prod-streaming-video-msn-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "msftstatic.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "hotmail.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "azurefd.us", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.msocsp.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams.live.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "secure.skypeassets.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "teams-ring.msedge.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "bing.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + /* See https://better.fyi/trackers/ @@ -647,14 +709,14 @@ static ndpi_protocol_match host_match[] = */ /* Google Advertisements */ - { "googlesyndication.com", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "googleads.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "doubleclick.net", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "googleadservices.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "2mdn.net", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "dmtry.com", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "google-analytics.", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "adservice.google.com", "Google", NDPI_PROTOCOL_GOOGLE, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "googlesyndication.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "googleads.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "doubleclick.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "googleadservices.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "2mdn.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "dmtry.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "google-analytics.", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "adservice.google.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "gvt1.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "gvt2.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "telephony.goog", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -663,7 +725,6 @@ static ndpi_protocol_match host_match[] = { "ampproject.org", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ampproject.net", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "app-measurement.com", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pki.goog", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* Google Meet */ { "meet.google.com", "GoogleMeet", NDPI_PROTOCOL_GOOGLE_MEET, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -694,9 +755,6 @@ static ndpi_protocol_match host_match[] = { "goog", "Google", NDPI_PROTOCOL_GOOGLE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "outlook.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "hotmail.com", "Outlook", NDPI_PROTOCOL_MS_OUTLOOK, NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "last.fm", "LastFM", NDPI_PROTOCOL_LASTFM, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "netflix.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -707,19 +765,6 @@ static ndpi_protocol_match host_match[] = { "nflxso.net", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "fast.com", "NetFlix", NDPI_PROTOCOL_NETFLIX, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skype.", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skypeassets.", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skypedata.", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skypeecs-", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skypeforbusiness.", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "lync.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "e7768.b.akamaiedge.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "e4593.dspg.akamaiedge.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "e4593.g.akamaiedge.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "gateway.messenger.live.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skype-calling-missedcallsregistrar-", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.cloudapp.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "twttr.com", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "twitter.", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "twimg.com", "Twitter", NDPI_PROTOCOL_TWITTER, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN , NDPI_PROTOCOL_DEFAULT_LEVEL}, @@ -750,9 +795,9 @@ static ndpi_protocol_match host_match[] = { "yimg.com", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "yimg.jp", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "yahooapis.", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ads.yahoo.com", "Yahoo", NDPI_PROTOCOL_YAHOO, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "yads.yahoo.com", "Yahoo", NDPI_PROTOCOL_YAHOO, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "yads.yjtag.yahoo.co.jp", "Yahoo", NDPI_PROTOCOL_YAHOO, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ads.yahoo.com", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yads.yahoo.com", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "yads.yjtag.yahoo.co.jp", "Yahoo", NDPI_PROTOCOL_YAHOO, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "upload.youtube.com", "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "upload.video.google.com", "YouTubeUpload", NDPI_PROTOCOL_YOUTUBE_UPLOAD, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -831,93 +876,6 @@ static ndpi_protocol_match host_match[] = { "deezer.com", "Deezer", NDPI_PROTOCOL_DEEZER, NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* - Microsoft + Azure - https://learn.microsoft.com/en-us/windows/privacy/manage-windows-1903-endpoints - */ - { "wpc.v0cdn.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "gfx.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "aka.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "sfx.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "appcenter.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoft.us", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "dynamics.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msftncsi.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "windows.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "windows.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoft.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "s-msft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msftstatic.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msftauth.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msauth.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "nelreports.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "webtrends.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msecnd.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "bing.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "bing.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "visualstudio.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "login.live.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "statics-marketingsites-wcus-ms-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "statics-marketingsites-eus-ms-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "img-prod-cms-rt-microsoft-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "prod-streaming-video-msn-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "wus-streaming-video-rt-microsoft-com.akamaized.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onecollector.cloudapp.aria.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onecollector.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoft.akadns.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "e1723.dscd.akamaiedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsofttranslator.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "sharepointonline.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "sharepoint.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msftconnecttest.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "windowsmedia.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "windowsphone.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msa.akadns6.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "s-microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msidentity.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "wac.phicdn.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onestore.ms", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msedge.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mshome.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "s-msn.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "img-s-msn-com.", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "location.live.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "virtualearth.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "trafficmanager.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoftapp.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "testconnectivity.microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teredo.ipv6.microsoft.com", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teredo.ipv6.microsoft.com.nsatc.net", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "cortana.ai", "Microsoft", NDPI_PROTOCOL_MICROSOFT, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - - { "azure.com", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "azureedge.us", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "azurefd.", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "azure-automation.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "azureedge.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "azurewebsites.net", "Azure", NDPI_PROTOCOL_MICROSOFT_AZURE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - - { "teams.microsoft.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.microsoft.us", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.skype.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.live.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "-teams.cloudapp.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.trafficmanager.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams-msgapi.trafficmanager.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.office.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.office.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "statics.teams.cdn.live.net", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mstea.ms", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "teams.events.data.microsoft.com", "Teams", NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - - { "storage.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE,NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "skyapi.live.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "d.docs.live.net", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onedrive.live.com", "MS_OneDrive", NDPI_PROTOCOL_MS_ONE_DRIVE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "cs9.wac.phicdn.net", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "dl.delivery.mp.microsoft.com.", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "delivery.dsp.mp.microsoft.com.nsatc.net", "WindowsUpdate", NDPI_PROTOCOL_WINDOWS_UPDATE, NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -958,27 +916,6 @@ static ndpi_protocol_match host_match[] = { "app.iflixcorp.com", "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "images.iflixassets.com", "IFLIX", NDPI_PROTOCOL_IFLIX, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "crl.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "evsecure-ocsp.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "evsecure-aia.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "evsecure-crl.verisign.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "omniroot.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoftonline.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "microsoftonline.us", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "office365.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "office.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "office.net", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msocsp.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "msocdn.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "officeapps.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "outlook.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mail.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "office.live.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onenote.", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "cloud.microsoft", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "whiteboard.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "events.data.microsoft.com", "Microsoft365", NDPI_PROTOCOL_MICROSOFT_365, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "cloudflare.com", "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cdnjs.cloudflare.com", "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cf-ipfs.com", "Cloudflare", NDPI_PROTOCOL_CLOUDFLARE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1001,6 +938,7 @@ static ndpi_protocol_match host_match[] = { "github.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "github.io", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "githubusercontent.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "githubassets.com", "Github", NDPI_PROTOCOL_GITHUB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "gitlab.com", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "gitlab-static.net", "GitLab", NDPI_PROTOCOL_GITLAB, NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1070,8 +1008,11 @@ static ndpi_protocol_match host_match[] = { "huluim.com", "Hulu", NDPI_PROTOCOL_HULU, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "snapcraft.io", "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ubuntu.com", "UbuntuONE", NDPI_PROTOCOL_UBUNTUONE, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "snapcraft.io", "Canonical", NDPI_PROTOCOL_CANONICAL, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ubuntu.com", "Canonical", NDPI_PROTOCOL_CANONICAL, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "cdn.snapcraftcontent.com", "Canonical", NDPI_PROTOCOL_CANONICAL, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "launchpadcontent.net", "Canonical", NDPI_PROTOCOL_CANONICAL, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "launchpad.net", "Canonical", NDPI_PROTOCOL_CANONICAL, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "signal.org", "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "whispersystems.org", "Signal", NDPI_PROTOCOL_SIGNAL, NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1137,6 +1078,7 @@ static ndpi_protocol_match host_match[] = { "avs-alexa-17-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "avs-alexa-18-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "avs-alexa-19-na.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pitangui.amazon.com", "AmazonAlexa", NDPI_PROTOCOL_AMAZON_ALEXA, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, /* Tumblr social network service @@ -1247,6 +1189,10 @@ static ndpi_protocol_match host_match[] = { "malwarebytes.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "trendmicro.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "eset.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "eset.eu", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "eset.systems", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "eset.sk", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "esetsoftware.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "e5.sk", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "bullguard.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "paloaltonetworks.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1275,7 +1221,9 @@ static ndpi_protocol_match host_match[] = { "abuse.ch", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "dnsbl.", /* www.dnsbl.info */ "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cleanbrowsing.org", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - + { "sentinelone.net", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "sentinelone.com", "Cybersec", NDPI_PROTOCOL_CYBERSECURITY, NDPI_PROTOCOL_CATEGORY_CYBERSECURITY, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "pluralsight.com", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "pluralsight2.imgix.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "pluralsight.imgix.net", "Pluralsight", NDPI_PROTOCOL_PLURALSIGHT, NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1292,6 +1240,11 @@ static ndpi_protocol_match host_match[] = { "mi.com", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "miui.com", "Xiaomi", NDPI_PROTOCOL_XIAOMI, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mozilla.com", "Mozilla", NDPI_PROTOCOL_MOZILLA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mozilla.net", "Mozilla", NDPI_PROTOCOL_MOZILLA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mozilla.org", "Mozilla", NDPI_PROTOCOL_MOZILLA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "mozgcp.net", "Mozilla", NDPI_PROTOCOL_MOZILLA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "softether.org", "Softether", NDPI_PROTOCOL_SOFTETHER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "softether-network.net", "Softether", NDPI_PROTOCOL_SOFTETHER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1332,6 +1285,9 @@ static ndpi_protocol_match host_match[] = { "ocsp.godaddy.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ocsp.sectigo.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "ocsp.quovadisglobal.com", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.pki.goog", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp.", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "ocsp2.", "OCSP", NDPI_PROTOCOL_OCSP, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "psiphon3.net", "Psiphon", NDPI_PROTOCOL_PSIPHON, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1412,6 +1368,7 @@ static ndpi_protocol_match host_match[] = { "vkuser.net", "VK", NDPI_PROTOCOL_VK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "vkuseraudio.net", "VK", NDPI_PROTOCOL_VK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "vkuservideo.net", "VK", NDPI_PROTOCOL_VK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "vkvideo.ru", "VK", NDPI_PROTOCOL_VK, NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "yandex.", "Yandex", NDPI_PROTOCOL_YANDEX, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "yastatic.net", "Yandex", NDPI_PROTOCOL_YANDEX, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1421,12 +1378,12 @@ static ndpi_protocol_match host_match[] = { "disk.yandex.", "YandexDisk", NDPI_PROTOCOL_YANDEX_DISK, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "cloud.yandex.", "YandexCloud", NDPI_PROTOCOL_YANDEX_CLOUD, NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "metrika.yandex.", "YandexMetrika", NDPI_PROTOCOL_YANDEX_METRIKA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "direct.yandex.", "YandexDirect", NDPI_PROTOCOL_YANDEX_DIRECT, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "appmetrika.yandex.", "YandexMetrika", NDPI_PROTOCOL_YANDEX_METRIKA, NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "direct.yandex.", "YandexDirect", NDPI_PROTOCOL_YANDEX_DIRECT, NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "quasar.yandex.ru", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "scbh.yandex.net", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "report.appmetrica.yandex.net", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "uniproxy.alice.yandex.net", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "quasar.yandex.", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "scbh.yandex.", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "alice.yandex.", "YandexAlice", NDPI_PROTOCOL_YANDEX_ALICE, NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "riotgames.com", "RiotGames", NDPI_PROTOCOL_RIOTGAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, { "pvp.net", "RiotGames", NDPI_PROTOCOL_RIOTGAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, @@ -1439,6 +1396,11 @@ static ndpi_protocol_match host_match[] = { "epicgames.net", "EpicGames", NDPI_PROTOCOL_EPICGAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, { "epicgames.dev", "EpicGames", NDPI_PROTOCOL_EPICGAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "nexon.com", "Nexon", NDPI_PROTOCOL_NEXON, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "nexoncdn.co.kr", "Nexon", NDPI_PROTOCOL_NEXON, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "nxm-maplemgl-staticweb.s3.amazonaws.com", "Nexon", NDPI_PROTOCOL_NEXON, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "nexon.io", "Nexon", NDPI_PROTOCOL_NEXON, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "ea.com", "ElectronicArts", NDPI_PROTOCOL_ELECTRONICARTS, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, { "origin-a.akamaihd.net", "ElectronicArts", NDPI_PROTOCOL_ELECTRONICARTS, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, @@ -1462,198 +1424,6 @@ static ndpi_protocol_match host_match[] = { "mullvad.net", "Mullvad", NDPI_PROTOCOL_MULLVAD, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* - ADS/tracking/analytic - */ - /* Chartbeat is a technology company that provides data and analytics to global publishers */ - { "chartbeat.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "chartbeat.net", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Httppool is a global cross-channel advertising network */ - { "httpool.", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Simplifi Holdings is a company that provides online advertising services */ - { "simpli.fi", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Admixer Technologies is a company that develops and maintains products in the field of digital advertising management */ - { "admixer.", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AppDynamics by Cisco */ - { "appdynamics.", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "eum-appdynamics.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Smaato is a digital ad tech platform and ad server */ - { "smaato.net", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "smaato.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* MoPub, a Twitter company, provides monetization solutions */ - { "mopub.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AppsFlyer is a SaaS mobile marketing analytics and attribution platform */ - { "appsflyer.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "appsflyersdk.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Adjust is the mobile marketing platform for marketers around the world */ - { "adjust.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Helpshift enables brands to deliver superior digital customer service digital channels*/ - { "helpshift.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AppLovin is a mobile marketing platform */ - { "applovin.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AdRight is an innovative online advertising network */ - { "adright.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* MGID: Native Visitors Acquisition for Advertisers */ - { "mgid.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* InMobi is the world's leading mobile marketing and advertising platform provider */ - { "inmobi.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AdColony - Elevating mobile advertising */ - { "adcolony.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Supersonicads: App monetization done right */ - { "supersonicads.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Criteo is an advertising company that provides online display advertisements */ - { "criteo.net", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "criteo.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Flurry is an American mobile analytics, monetization, and advertising company */ - { "flurry.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Taboola is the world's leading discovery & native advertising platform */ - { "taboola.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Market research community, a leading global market research effort that studies and reports on Internet trends and behavior. */ - { "scorecardresearch.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Magnite Inc. (formerly Rubicon Project) is an American online advertising technology firm */ - { "rubiconproject.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Adnxs.com is run by AppNexus, a company that provides technology, data and analytics to help companies buy and sell online display advertising */ - { "adnxs.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* PubMatic, Inc. is a company that develops and implements online advertising software */ - { "pubmatic.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pubmatic.co.jp", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* “OpenX’s unified monetization platform */ - { "openx.net", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "openx.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "servedbyopenx.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* AddThis share buttons, targeting tools and content recommendations help you get more likes, shares and followers */ - { "addthis.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "addthisedge.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* NEXAGE offers a mobile advertising platform that provides private and public exchanges */ - { "nexage.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* RadiumOne (formerly GWallet) is a digital advertising company */ - { "gwallet.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Kochava is the industry leader for mobile app attribution and mobile app analytics */ - { "kochava.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Adobe analytics */ - { "assets.adobedtm.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "commerce.adobedtm.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Chartboost is a San Francisco-based mobile game in-app programmatic advertising and monetization platform */ - { "chartboost.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Vungle is an ad network */ - { "vungle.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Adkernel offers technological solutions catering to digital advertising publishers, advertisers, exchanges, and networks */ - { "adkernel.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Adform serves as a unified advertising platform that integrates various aspects of digital advertising */ - { "adform.net", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Lemma develops integrated platforms and solutions for efficient campaign management and high-performance advertising */ - { "lemmatechnologies.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Vidoomy is a company that focuses on Digital Video Advertising expertise. */ - { "vidoomy.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* StackAdapt is a self-serve programmatic advertising platform preferred by top-tier digital marketers */ - { "stackadapt.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Hotjar stands as an all-in-one platform that combines digital experience insights and behavior analytics */ - { "hotjar.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* New Relic is a company headquartered in the United States that specializes in web tracking and analytics. */ - { "newrelic.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Unruly is a London-based ad tech company that maximizes video viewership and sharing across the Open Web. */ - { "unrulymedia.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* TV Squared Inc. offers a TV attribution modeling platform, providing a cloud-based software platform for measuring, optimizing, and enhancing television advertising campaigns. */ - { "tvsquared.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Mixpanel facilitates global data analysis by offering event analytics, enabling valuable insights to be derived from data. */ - { "mixpanel.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Equativ (formerly known as Smart AdServer) is a French advertising technology company */ - { "smartadserver.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* Twitter ADS */ - { "ads-twitter.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - /* TANX (Taobao Ad Network and Exchange) is an advertising and marketing platform based in China */ - { "tanx.com", "ADS_Analytic_Track", NDPI_PROTOCOL_ADS_ANALYTICS_TRACK, CUSTOM_CATEGORY_ADVERTISEMENT, NDPI_PROTOCOL_TRACKER_ADS, NDPI_PROTOCOL_DEFAULT_LEVEL }, - - { "xvideos.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xvideos-games.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xvideoslive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pornhub.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pornhubselect.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pornhubpremium.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pornhublive.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "transpornhublive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "gaypornhublive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xnxx.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhamster.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "realsrv.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "stripchat.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "spankbang.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "chaturbate.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhamster18.desi", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "zooxhamster.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhwebsite4.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhamstercreators.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhamstershop.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "pornmate.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "thebestfetishsites.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "thepornmap.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mrstiff.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "porngeek.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mrporngeek.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "kink.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xxxi.porn", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mrpornlive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xnxx-games.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "onlyfans.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "twinrdsrv.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "livejasmin.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "livejasminacademy.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "livejasmincdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "mylivejasmin.org", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "dmm.co.jp", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youporn.", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhamsterlive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "bongacams.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "eporner.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xvideos2.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "nhentai.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ixxx.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "redtube.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "gayredtubelive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "redtubelive.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "redtubeplatinum.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "cityheaven.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "missav.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "rule34.xxx", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xnxx.tv", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "crjpgate.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "tnaflix.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xlivrdr.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "dlsite.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "hqporner.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youjizz.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "txxx.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xvideos3.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xxxnewvideos.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ok.xxx", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xnxx115.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "nutaku.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "sxyprn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "brazzersnetwork.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "superchatlive.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "theporndude.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "fapello.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "hitomi.la", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "erome.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "kiynew.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "jerkmate.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xnxx-cdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xvideos-cdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "porndudecdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xhcdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "phncdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ypncdn.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "strpst.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "trafficjunky.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "afcdn.net", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "ktkjmp.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "xxxyouporn.me", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youporngay.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "freeyoupornxnxx.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youpornshop.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youpornmate.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "youporninhd.com", "AdultContent", NDPI_PROTOCOL_ADULT_CONTENT, NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, - { "tesla.services", "TeslaServices", NDPI_PROTOCOL_TESLA_SERVICES, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, { "digitalassets.tesla.com", "TeslaServices", NDPI_PROTOCOL_TESLA_SERVICES, NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, @@ -1754,6 +1524,28 @@ static ndpi_protocol_match host_match[] = { "vivox.com", "Vivox", NDPI_PROTOCOL_VIVOX, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rutube.ru", "RUTUBE", NDPI_PROTOCOL_RUTUBE, NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* LagoFast */ + { "6fast.com", "LagoFast", NDPI_PROTOCOL_LAGOFAST, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "lagofast.com", "LagoFast", NDPI_PROTOCOL_LAGOFAST, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + /* GearUP Booster */ + { "gearupportal.com.cdn.cloudflare.net", "GearUP_Booster", NDPI_PROTOCOL_GEARUP_BOOSTER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gearupportal.com", "GearUP_Booster", NDPI_PROTOCOL_GEARUP_BOOSTER, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "rsg.sc", "RockstarGames", NDPI_PROTOCOL_ROCKSTAR_GAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "rockstargames.com", "RockstarGames", NDPI_PROTOCOL_ROCKSTAR_GAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + { "gamedownloads-rockstargames-com.akamaized.net", "RockstarGames", NDPI_PROTOCOL_ROCKSTAR_GAMES, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "kick.com", "Kick", NDPI_PROTOCOL_KICK, NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL }, + + { "ankama.com", "Dofus", NDPI_PROTOCOL_DOFUS, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "ankama-games.com", "Dofus", NDPI_PROTOCOL_DOFUS, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + { "dofus-touch.com", "Dofus", NDPI_PROTOCOL_DOFUS, NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DEFAULT_LEVEL}, + + { "secure.logmein.com", "Hamachi", NDPI_PROTOCOL_HAMACHI, NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DEFAULT_LEVEL }, + #ifdef CUSTOM_NDPI_PROTOCOLS #include "../../../nDPI-custom/custom_ndpi_content_match_host_match.c.inc" #endif @@ -1786,6 +1578,7 @@ static ndpi_tls_cert_name_match tls_certificate_match [] = { { "O=Sonos, Inc", NDPI_PROTOCOL_SONOS }, { "CN=Snapchat Inc.", NDPI_PROTOCOL_SNAPCHAT_CALL }, { "CN=NVIDIA GameStream", NDPI_PROTOCOL_GEFORCENOW }, + { "CN=*.relay.ros.rockstargames.com", NDPI_PROTOCOL_ROCKSTAR_GAMES }, { NULL, 0 } }; @@ -1829,6 +1622,221 @@ static ndpi_category_match category_match[] = { { "detectportal.firefox.com", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, { "connectivitycheck.platform.hicloud.com", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, { "nmcheck.gnome.org", NDPI_PROTOCOL_CATEGORY_CONNECTIVITY_CHECK }, - + + { "xvideos.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xvideos-games.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xvideoslive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "pornhub.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "pornhubselect.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "pornhubpremium.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "pornhublive.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "transpornhublive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "gaypornhublive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xnxx.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhamster.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "realsrv.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "stripchat.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "stripcdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "spankbang.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "chaturbate.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhamster18.desi", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "zooxhamster.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhwebsite4.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhamstercreators.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhamstershop.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "pornmate.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "thebestfetishsites.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "thepornmap.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "mrstiff.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "porngeek.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "mrporngeek.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "kink.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xxxi.porn", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "mrpornlive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xnxx-games.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "onlyfans.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "twinrdsrv.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "livejasmin.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "livejasminacademy.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "livejasmincdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "mylivejasmin.org", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "dmm.co.jp", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youporn.", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhamsterlive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "bongacams.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "eporner.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xvideos2.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "nhentai.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "ixxx.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "redtube.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "gayredtubelive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "redtubelive.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "redtubeplatinum.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "cityheaven.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "missav.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "rule34.xxx", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xnxx.tv", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "crjpgate.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "tnaflix.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xlivrdr.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "dlsite.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "hqporner.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youjizz.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "txxx.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xvideos3.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xxxnewvideos.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "ok.xxx", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xnxx115.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "nutaku.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "sxyprn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "brazzersnetwork.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "superchatlive.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "theporndude.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "fapello.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "hitomi.la", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "erome.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "kiynew.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "jerkmate.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xnxx-cdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xvideos-cdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "porndudecdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xhcdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "phncdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "ypncdn.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "strpst.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "trafficjunky.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "afcdn.net", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "ktkjmp.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "xxxyouporn.me", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youporngay.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "freeyoupornxnxx.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youpornshop.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youpornmate.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + { "youporninhd.com", NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT }, + + /* Artificial Intelligence / LLM */ + { "deepseek.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "openai.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "chatgpt.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "gemini.google.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "notebooklm.google.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "claude.ai", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "perplexity.ai", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "ollama.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + { "huggingface.com", NDPI_PROTOCOL_CATEGORY_ARTIFICIAL_INTELLIGENCE }, + + /* ADS & Tracking & Analytics */ + /* Chartbeat is a technology company that provides data and analytics to global publishers */ + { "chartbeat.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "chartbeat.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Httppool is a global cross-channel advertising network */ + { "httpool.", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Simplifi Holdings is a company that provides online advertising services */ + { "simpli.fi", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Admixer Technologies is a company that develops and maintains products in the field of digital advertising management */ + { "admixer.", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AppDynamics by Cisco */ + { "appdynamics.", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "eum-appdynamics.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Smaato is a digital ad tech platform and ad server */ + { "smaato.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "smaato.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* MoPub, a Twitter company, provides monetization solutions */ + { "mopub.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AppsFlyer is a SaaS mobile marketing analytics and attribution platform */ + { "appsflyer.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "appsflyersdk.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Adjust is the mobile marketing platform for marketers around the world */ + { "adjust.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "adjust.net.in", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "adjust.world", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Helpshift enables brands to deliver superior digital customer service digital channels*/ + { "helpshift.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AppLovin is a mobile marketing platform */ + { "applovin.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AdRight is an innovative online advertising network */ + { "adright.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* MGID: Native Visitors Acquisition for Advertisers */ + { "mgid.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* InMobi is the world's leading mobile marketing and advertising platform provider */ + { "inmobi.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AdColony - Elevating mobile advertising */ + { "adcolony.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Supersonicads: App monetization done right */ + { "supersonicads.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Criteo is an advertising company that provides online display advertisements */ + { "criteo.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "criteo.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Flurry is an American mobile analytics, monetization, and advertising company */ + { "flurry.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Taboola is the world's leading discovery & native advertising platform */ + { "taboola.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Market research community, a leading global market research effort that studies and reports on Internet trends and behavior. */ + { "scorecardresearch.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Magnite Inc. (formerly Rubicon Project) is an American online advertising technology firm */ + { "rubiconproject.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Adnxs.com is run by AppNexus, a company that provides technology, data and analytics to help companies buy and sell online display advertising */ + { "adnxs.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* PubMatic, Inc. is a company that develops and implements online advertising software */ + { "pubmatic.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "pubmatic.co.jp", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* “OpenX’s unified monetization platform */ + { "openx.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "openx.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "servedbyopenx.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* AddThis share buttons, targeting tools and content recommendations help you get more likes, shares and followers */ + { "addthis.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "addthisedge.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* NEXAGE offers a mobile advertising platform that provides private and public exchanges */ + { "nexage.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* RadiumOne (formerly GWallet) is a digital advertising company */ + { "gwallet.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Kochava is the industry leader for mobile app attribution and mobile app analytics */ + { "kochava.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Adobe analytics */ + { "assets.adobedtm.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "commerce.adobedtm.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Chartboost is a San Francisco-based mobile game in-app programmatic advertising and monetization platform */ + { "chartboost.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Vungle is an ad network */ + { "vungle.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Adkernel offers technological solutions catering to digital advertising publishers, advertisers, exchanges, and networks */ + { "adkernel.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Adform serves as a unified advertising platform that integrates various aspects of digital advertising */ + { "adform.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Lemma develops integrated platforms and solutions for efficient campaign management and high-performance advertising */ + { "lemmatechnologies.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Vidoomy is a company that focuses on Digital Video Advertising expertise. */ + { "vidoomy.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* StackAdapt is a self-serve programmatic advertising platform preferred by top-tier digital marketers */ + { "stackadapt.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Hotjar stands as an all-in-one platform that combines digital experience insights and behavior analytics */ + { "hotjar.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* New Relic is a company headquartered in the United States that specializes in web tracking and analytics. */ + { "newrelic.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Unruly is a London-based ad tech company that maximizes video viewership and sharing across the Open Web. */ + { "unrulymedia.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* TV Squared Inc. offers a TV attribution modeling platform, providing a cloud-based software platform for measuring, optimizing, and enhancing television advertising campaigns. */ + { "tvsquared.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Mixpanel facilitates global data analysis by offering event analytics, enabling valuable insights to be derived from data. */ + { "mixpanel.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Equativ (formerly known as Smart AdServer) is a French advertising technology company */ + { "smartadserver.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Twitter ADS */ + { "ads-twitter.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* TANX (Taobao Ad Network and Exchange) is an advertising and marketing platform based in China */ + { "tanx.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Optimove is a marketing and customer relationship management (CRM) platform that specializes in customer retention and marketing automation. The company acquired Kumulos in 2022. */ + { "optimove.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "optimove.net", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Moloco offers programmatic advertising solutions to help optimize the client's acquisition, retention, and monetization campaigns */ + { "adsmoloco.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "moloco.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* The Unity Ads SDK provides a comprehensive monetization framework for your game, whether you develop in Unity, Xcode, or Android Studio */ + { "unityads.unity3d.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { "iads.unity3d.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + /* Amazon Ads helps you reach customers at scale through full-funnel advertising across streaming, shopping, and everything in-between */ + { "amazon-adsystem.com", NDPI_PROTOCOL_CATEGORY_ADVERTISEMENT }, + { NULL, 0 } }; diff --git a/src/lib/ndpi_domain_classify.c b/src/lib/ndpi_domain_classify.c index c23ffed8b..5b9457006 100644 --- a/src/lib/ndpi_domain_classify.c +++ b/src/lib/ndpi_domain_classify.c @@ -1,7 +1,7 @@ /* * ndpi_domain_classify.c * - * Copyright (C) 2011-24 - ntop.org and contributors + * Copyright (C) 2011-25 - ntop.org and contributors * * 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 @@ -150,7 +150,6 @@ bool ndpi_domain_classify_hostname(struct ndpi_detection_module_struct *ndpi_mod ndpi_domain_classify *s, u_int16_t *class_id /* out */, char *hostname) { - u_int32_t len; const char *dot; char *item; @@ -159,7 +158,7 @@ bool ndpi_domain_classify_hostname(struct ndpi_detection_module_struct *ndpi_mod *class_id = 0; /* Unknown class_id */ if(!hostname || !s) return(false); - if((len = strlen(hostname)) == 0) return(false); + if(strlen(hostname) == 0) return(false); if((dot = strrchr(hostname, '.')) == NULL) return(false); if((!strcmp(dot, ".arpa")) || (!strcmp(dot, ".local"))) return(false); diff --git a/src/lib/ndpi_domains.c b/src/lib/ndpi_domains.c index 00ef8e756..459cfe3b9 100644 --- a/src/lib/ndpi_domains.c +++ b/src/lib/ndpi_domains.c @@ -1,7 +1,7 @@ /* * ndpi_domains.c * - * Copyright (C) 2011-24 - ntop.org and contributors + * Copyright (C) 2011-25 - ntop.org and contributors * * 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 @@ -38,12 +38,14 @@ int ndpi_load_domain_suffixes(struct ndpi_detection_module_struct *ndpi_str, return(-2); if(ndpi_str->public_domain_suffixes != NULL) { - /* An existing license was aleady loaded: free it and start over */ + /* An existing license was already loaded: free it and start over */ ndpi_hash_free(&ndpi_str->public_domain_suffixes); } - if(ndpi_hash_init(&ndpi_str->public_domain_suffixes) != 0) + if(ndpi_hash_init(&ndpi_str->public_domain_suffixes) != 0) { + fclose(fd); return(-3); + } while((line = fgets(buf, sizeof(buf), fd)) != NULL) { u_int offset, len; @@ -122,7 +124,7 @@ const char* ndpi_get_host_domain_suffix(struct ndpi_detection_module_struct *ndp return(hostname); } - +/* ******************************* */ /* Example @@ -132,20 +134,39 @@ const char* ndpi_get_host_domain_suffix(struct ndpi_detection_module_struct *ndp const char* ndpi_get_host_domain(struct ndpi_detection_module_struct *ndpi_str, const char *hostname) { const char *ret; - char *dot; - u_int16_t domain_id; + char *dot, *first_dc; + u_int16_t domain_id, len; - if(!ndpi_str) + if(!ndpi_str || !hostname) return NULL; if(ndpi_str->public_domain_suffixes == NULL) return(hostname); - + + len = strlen(hostname); + if(len == 0) + return(hostname); + else + len--; + + if((isdigit(hostname[len])) || (hostname[len] == ']' /* IPv6 address [...] */ )) + return(hostname); + + if((first_dc = strchr(hostname, ':')) != NULL) { + char *last_dc = strchr(hostname, ':'); + + if((last_dc != NULL) && (first_dc != last_dc)) + return(hostname); /* Numeric IPv6 address */ + } + ret = ndpi_get_host_domain_suffix(ndpi_str, hostname, &domain_id); if((ret == NULL) || (ret == hostname)) return(hostname); + if(strcmp(ret, "in-addr.arpa") == 0) + return(ret); + dot = ndpi_strrstr(hostname, ret); if(dot == NULL || dot == hostname) diff --git a/src/lib/ndpi_filter.c b/src/lib/ndpi_filter.c index 334d041b8..da0e37bb6 100644 --- a/src/lib/ndpi_filter.c +++ b/src/lib/ndpi_filter.c @@ -1,10 +1,7 @@ /* * ndpi_filter.c * - * Copyright (C) 2011-23 - ntop.org and contributors - * - * This file is part of nDPI, an open source deep packet inspection - * library based on the OpenDPI and PACE technology by ipoque GmbH + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_fingerprint.c b/src/lib/ndpi_fingerprint.c new file mode 100644 index 000000000..5880097ab --- /dev/null +++ b/src/lib/ndpi_fingerprint.c @@ -0,0 +1,159 @@ +/* + * ndpi_fingerprint.c + * + * Copyright (C) 2011-25 - ntop.org and contributors + * + * 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 <stdlib.h> +#include <errno.h> +#include <math.h> +#include <sys/types.h> + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_UNKNOWN + +#include "ndpi_config.h" +#include "ndpi_api.h" +#include "ndpi_private.h" + +#include "ndpi_os_fingerprint.c.inc" + + +/* ************************************************************** */ + +void ndpi_load_tcp_fingerprints(struct ndpi_detection_module_struct *ndpi_str) { + if(ndpi_hash_init(&ndpi_str->tcp_fingerprint_hashmap) == 0) { + u_int i; + + for(i=0; tcp_fps[i].fingerprint != NULL; i++) + ndpi_add_tcp_fingerprint(ndpi_str, (char*)tcp_fps[i].fingerprint, tcp_fps[i].os); + } +} + +/* ************************************************************** */ + +ndpi_os ndpi_get_os_from_tcp_fingerprint(struct ndpi_detection_module_struct *ndpi_str, + char *tcp_fingerprint) { + if(tcp_fingerprint && (ndpi_str->tcp_fingerprint_hashmap != NULL)) { + u_int16_t ret; + + if(ndpi_hash_find_entry(ndpi_str->tcp_fingerprint_hashmap, + tcp_fingerprint, strlen(tcp_fingerprint), &ret) == 0) + return(ret); + } + + return(ndpi_os_unknown); +} + +/* ************************************************************** */ + +/* + Add a new TCP fingerprint + + Return code: + 0 OK + -1 Duplicated fingerprint + -2 Unable to add a new entry + */ +int ndpi_add_tcp_fingerprint(struct ndpi_detection_module_struct *ndpi_str, + char *fingerprint, ndpi_os os) { + u_int len; + u_int16_t ret; + + len = strlen(fingerprint); + + if((ndpi_str->tcp_fingerprint_hashmap != NULL) + && (ndpi_hash_find_entry(ndpi_str->tcp_fingerprint_hashmap, fingerprint, len, &ret) == 0)) { + /* Duplicate fingerprint found */ + return(-1); + } else { + if(ndpi_hash_add_entry(&ndpi_str->tcp_fingerprint_hashmap, fingerprint, len, + (u_int16_t)os) == 0) { + return(0); + } else + return(-2); + } +} + +/* ******************************************************************** */ + +/* + * Format: + * + * <TCP fingerprint>,<numeric OS> + * Example: 2_64_14600_8c07a80cc645,3 + * + */ +int ndpi_load_tcp_fingerprint_file(struct ndpi_detection_module_struct *ndpi_str, const char *path) +{ + int rc; + FILE *fd; + + if(!ndpi_str || !path) + return(-1); + + fd = fopen(path, "r"); + if(fd == NULL) { + NDPI_LOG_ERR(ndpi_str, "Unable to open file %s [%s]\n", path, strerror(errno)); + return -1; + } + + rc = load_tcp_fingerprint_file_fd(ndpi_str, fd); + + fclose(fd); + + return rc; +} + +/* ******************************************************************** */ + +int load_tcp_fingerprint_file_fd(struct ndpi_detection_module_struct *ndpi_str, FILE *fd) { + char buffer[128]; + int num = 0; + + if(!ndpi_str || !fd) + return(-1); + + if(ndpi_str->tcp_fingerprint_hashmap == NULL + && ndpi_hash_init(&ndpi_str->tcp_fingerprint_hashmap) != 0) + return(-1); + + while (fgets(buffer, sizeof(buffer), fd) != NULL) { + char *fingerprint, *os, *tmp; + ndpi_os os_num; + size_t len = strlen(buffer); + + if(len <= 1 || buffer[0] == '#') + continue; + + fingerprint = strtok_r(buffer, "\t", &tmp); + if(!fingerprint) continue; + + os = strtok_r(NULL, "\t", &tmp); + if(!os) continue; else os_num = (ndpi_os)atoi(os); + + if(os_num >= ndpi_os_MAX_OS) continue; + + if(ndpi_add_tcp_fingerprint(ndpi_str, fingerprint, os_num) == 0) + num++; + } + + return num; +} + + + diff --git a/src/lib/ndpi_geoip.c b/src/lib/ndpi_geoip.c index 3b7d09d5d..dadcf7eb3 100644 --- a/src/lib/ndpi_geoip.c +++ b/src/lib/ndpi_geoip.c @@ -37,42 +37,46 @@ /* ********************************************************************************* */ int ndpi_load_geoip(struct ndpi_detection_module_struct *ndpi_str, - const char *ip_city_data, const char *ip_as_data) { + const char *ip_city_data, const char *ip_as_data) +{ #ifdef HAVE_MAXMINDDB int status; - ndpi_str->mmdb_city = (void*)ndpi_malloc(sizeof(MMDB_s)); - ndpi_str->mmdb_as = (void*)ndpi_malloc(sizeof(MMDB_s)); - - if((ndpi_str->mmdb_city == NULL) || (ndpi_str->mmdb_as == NULL)) - return(-1); - + ndpi_str->mmdb_city = (void *)ndpi_malloc(sizeof(MMDB_s)); + ndpi_str->mmdb_as = (void *)ndpi_malloc(sizeof(MMDB_s)); + + if ((ndpi_str->mmdb_city == NULL) || (ndpi_str->mmdb_as == NULL)) + return (-1); + /* Open the MMDB files */ - if((status = MMDB_open(ip_city_data, MMDB_MODE_MMAP, (MMDB_s*)ndpi_str->mmdb_city)) != MMDB_SUCCESS) - return(-1); + if ((status = MMDB_open(ip_city_data, MMDB_MODE_MMAP, (MMDB_s *)ndpi_str->mmdb_city)) != MMDB_SUCCESS) + return (-1); else ndpi_str->mmdb_city_loaded = 1; - if((status = MMDB_open(ip_as_data, MMDB_MODE_MMAP, (MMDB_s*)ndpi_str->mmdb_as)) != MMDB_SUCCESS) - return(-2); + if ((status = MMDB_open(ip_as_data, MMDB_MODE_MMAP, (MMDB_s *)ndpi_str->mmdb_as)) != MMDB_SUCCESS) + return (-2); else ndpi_str->mmdb_as_loaded = 1; - return(0); + return (0); #else (void)ndpi_str; (void)ip_city_data; (void)ip_as_data; - return(-3); + return (-3); #endif } /* ********************************************************************************* */ -void ndpi_free_geoip(struct ndpi_detection_module_struct *ndpi_str) { +void ndpi_free_geoip(struct ndpi_detection_module_struct *ndpi_str) +{ #ifdef HAVE_MAXMINDDB - if(ndpi_str->mmdb_city_loaded) MMDB_close((MMDB_s*)ndpi_str->mmdb_city); - if(ndpi_str->mmdb_as_loaded) MMDB_close((MMDB_s*)ndpi_str->mmdb_as); + if (ndpi_str->mmdb_city_loaded) + MMDB_close((MMDB_s *)ndpi_str->mmdb_city); + if (ndpi_str->mmdb_as_loaded) + MMDB_close((MMDB_s *)ndpi_str->mmdb_as); ndpi_free(ndpi_str->mmdb_city); ndpi_free(ndpi_str->mmdb_as); @@ -83,30 +87,32 @@ void ndpi_free_geoip(struct ndpi_detection_module_struct *ndpi_str) { /* ********************************************************************************* */ -int ndpi_get_geoip_asn(struct ndpi_detection_module_struct *ndpi_str, char *ip, u_int32_t *asn) { +int ndpi_get_geoip_asn(struct ndpi_detection_module_struct *ndpi_str, char *ip, u_int32_t *asn) +{ #ifdef HAVE_MAXMINDDB int gai_error, mmdb_error, status; MMDB_lookup_result_s result; MMDB_entry_data_s entry_data; - if(ndpi_str->mmdb_as_loaded) { - result = MMDB_lookup_string((MMDB_s*)ndpi_str->mmdb_as, ip, &gai_error, &mmdb_error); + if (ndpi_str->mmdb_as_loaded) + { + result = MMDB_lookup_string((MMDB_s *)ndpi_str->mmdb_as, ip, &gai_error, &mmdb_error); - if((gai_error != 0) - || (mmdb_error != MMDB_SUCCESS) - || (!result.found_entry)) + if ((gai_error != 0) || (mmdb_error != MMDB_SUCCESS) || (!result.found_entry)) *asn = 0; - else { + else + { /* Get the ASN */ - if((status = MMDB_get_value(&result.entry, &entry_data, "autonomous_system_number", NULL)) == MMDB_SUCCESS) { - if(entry_data.has_data && entry_data.type == MMDB_DATA_TYPE_UINT32) - *asn = entry_data.uint32; - else - *asn = 0; + if ((status = MMDB_get_value(&result.entry, &entry_data, "autonomous_system_number", NULL)) == MMDB_SUCCESS) + { + if (entry_data.has_data && entry_data.type == MMDB_DATA_TYPE_UINT32) + *asn = entry_data.uint32; + else + *asn = 0; } } - return(0); + return (0); } #else (void)ndpi_str; @@ -114,58 +120,185 @@ int ndpi_get_geoip_asn(struct ndpi_detection_module_struct *ndpi_str, char *ip, (void)asn; #endif - return(-2); + return (-2); +} + +int ndpi_get_geoip_aso(struct ndpi_detection_module_struct *ndpi_str, char *ip, char *aso, u_int8_t aso_len) +{ +#ifdef HAVE_MAXMINDDB + int gai_error, mmdb_error, status; + MMDB_lookup_result_s result; + MMDB_entry_data_s entry_data; + + if (ndpi_str->mmdb_as_loaded && aso_len > 0) + { + result = MMDB_lookup_string((MMDB_s *)ndpi_str->mmdb_as, ip, &gai_error, &mmdb_error); + + if ((gai_error != 0) || (mmdb_error != MMDB_SUCCESS) || (!result.found_entry)) + aso[0] = '\0'; + else + { + /* Get the ASO */ + if (aso_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "autonomous_system_organization", NULL); + if (status != MMDB_SUCCESS || !entry_data.has_data) + aso[0] = '\0'; + else + { + int str_len = ndpi_min(entry_data.data_size, aso_len); + + memcpy(aso, entry_data.utf8_string, str_len); + aso[str_len] = '\0'; + } + } + } + + return (0); + } +#else + (void)ndpi_str; + (void)ip; + (void)aso; + (void)aso_len; +#endif + + return (-2); } - + /* ********************************************************************************* */ int ndpi_get_geoip_country_continent(struct ndpi_detection_module_struct *ndpi_str, char *ip, - char *country_code, u_int8_t country_code_len, - char *continent, u_int8_t continent_len) { + char *country_code, u_int8_t country_code_len, + char *continent, u_int8_t continent_len) +{ #ifdef HAVE_MAXMINDDB int gai_error, mmdb_error; MMDB_lookup_result_s result; MMDB_entry_data_s entry_data; - - if(ndpi_str->mmdb_city_loaded) { + if (ndpi_str->mmdb_city_loaded) + { int status; - result = MMDB_lookup_string((MMDB_s*)ndpi_str->mmdb_city, ip, &gai_error, &mmdb_error); + result = MMDB_lookup_string((MMDB_s *)ndpi_str->mmdb_city, ip, &gai_error, &mmdb_error); - if((gai_error != 0) - || (mmdb_error != MMDB_SUCCESS) - || (!result.found_entry)) + if ((gai_error != 0) || (mmdb_error != MMDB_SUCCESS) || (!result.found_entry)) country_code[0] = '\0'; - else { - if(country_code_len > 0) { - status = MMDB_get_value(&result.entry, &entry_data, "country", "iso_code", NULL); - - if((status != MMDB_SUCCESS) || (!entry_data.has_data)) - country_code[0] = '\0'; - else { - int str_len = ndpi_min(entry_data.data_size, country_code_len); - - memcpy(country_code, entry_data.utf8_string, str_len); - country_code[str_len] = '\0'; - } + else + { + if (country_code_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "country", "iso_code", NULL); + + if ((status != MMDB_SUCCESS) || (!entry_data.has_data)) + country_code[0] = '\0'; + else + { + int str_len = ndpi_min(entry_data.data_size, country_code_len); + + memcpy(country_code, entry_data.utf8_string, str_len); + country_code[str_len] = '\0'; + } } - if(continent_len > 0) { - status = MMDB_get_value(&result.entry, &entry_data, "continent", "names", "en", NULL); - - if((status != MMDB_SUCCESS) || (!entry_data.has_data)) - continent[0] = '\0'; - else { - int str_len = ndpi_min(entry_data.data_size, continent_len); - - memcpy(continent, entry_data.utf8_string, str_len); - continent[str_len] = '\0'; - } + if (continent_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "continent", "names", "en", NULL); + + if ((status != MMDB_SUCCESS) || (!entry_data.has_data)) + continent[0] = '\0'; + else + { + int str_len = ndpi_min(entry_data.data_size, continent_len); + + memcpy(continent, entry_data.utf8_string, str_len); + continent[str_len] = '\0'; + } } } - return(0); + return (0); + } +#else + (void)ndpi_str; + (void)ip; + (void)country_code; + (void)country_code_len; + (void)continent; + (void)continent_len; +#endif + + return (-2); +} + +int ndpi_get_geoip_country_continent_city(struct ndpi_detection_module_struct *ndpi_str, char *ip, + char *country_code, u_int8_t country_code_len, + char *continent, u_int8_t continent_len, + char *city, u_int8_t city_len) +{ +#ifdef HAVE_MAXMINDDB + int gai_error, mmdb_error; + MMDB_lookup_result_s result; + MMDB_entry_data_s entry_data; + + if (ndpi_str->mmdb_city_loaded) + { + int status; + + result = MMDB_lookup_string((MMDB_s *)ndpi_str->mmdb_city, ip, &gai_error, &mmdb_error); + + if ((gai_error != 0) || (mmdb_error != MMDB_SUCCESS) || (!result.found_entry)) + country_code[0] = '\0'; + else + { + if (country_code_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "country", "iso_code", NULL); + + if ((status != MMDB_SUCCESS) || (!entry_data.has_data)) + country_code[0] = '\0'; + else + { + int str_len = ndpi_min(entry_data.data_size, country_code_len); + + memcpy(country_code, entry_data.utf8_string, str_len); + country_code[str_len] = '\0'; + } + } + + if (continent_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "continent", "names", "en", NULL); + + if ((status != MMDB_SUCCESS) || (!entry_data.has_data)) + continent[0] = '\0'; + else + { + int str_len = ndpi_min(entry_data.data_size, continent_len); + + memcpy(continent, entry_data.utf8_string, str_len); + continent[str_len] = '\0'; + } + } + + if (city_len > 0) + { + status = MMDB_get_value(&result.entry, &entry_data, "city", "names", "en", NULL); + + if ((status != MMDB_SUCCESS) || (!entry_data.has_data)) + city[0] = '\0'; + else + { + int len = ndpi_min(entry_data.data_size, city_len); + + memcpy(city, entry_data.utf8_string, len); + city[len] = 0; + } + } + + return (0); + } } #else (void)ndpi_str; @@ -174,7 +307,9 @@ int ndpi_get_geoip_country_continent(struct ndpi_detection_module_struct *ndpi_s (void)country_code_len; (void)continent; (void)continent_len; + (void)city; + (void)city_len; #endif - return(-2); + return (-2); } diff --git a/src/lib/ndpi_hash.c b/src/lib/ndpi_hash.c index 7302c32a2..93897a6db 100644 --- a/src/lib/ndpi_hash.c +++ b/src/lib/ndpi_hash.c @@ -1,10 +1,7 @@ /* * ndpi_bitmap.c * - * Copyright (C) 2011-23 - ntop.org and contributors - * - * This file is part of nDPI, an open source deep packet inspection - * library based on the OpenDPI and PACE technology by ipoque GmbH + * Copyright (C) 2011-25 - ntop.org and contributors * * 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/ndpi_main.c b/src/lib/ndpi_main.c index df1a62cc8..2b8619032 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -1,10 +1,7 @@ /* * ndpi_main.c * - * Copyright (C) 2011-24 - 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 + * Copyright (C) 2011-25 - 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 @@ -72,6 +69,7 @@ #include "ndpi_dga_match.c.inc" #include "inc_generated/ndpi_azure_match.c.inc" #include "inc_generated/ndpi_tor_match.c.inc" +#include "inc_generated/ndpi_tor_exit_nodes_match.c.inc" #include "inc_generated/ndpi_whatsapp_match.c.inc" #include "inc_generated/ndpi_amazon_aws_match.c.inc" #include "inc_generated/ndpi_ethereum_match.c.inc" @@ -87,8 +85,6 @@ #include "inc_generated/ndpi_google_cloud_match.c.inc" #include "inc_generated/ndpi_crawlers_match.c.inc" #include "inc_generated/ndpi_icloud_private_relay_match.c.inc" -#include "inc_generated/ndpi_protonvpn_in_match.c.inc" -#include "inc_generated/ndpi_protonvpn_out_match.c.inc" #include "inc_generated/ndpi_mullvad_match.c.inc" #include "inc_generated/ndpi_nordvpn_match.c.inc" #include "inc_generated/ndpi_surfshark_match.c.inc" @@ -102,8 +98,8 @@ #include "inc_generated/ndpi_asn_tencent.c.inc" #include "inc_generated/ndpi_asn_opendns.c.inc" #include "inc_generated/ndpi_asn_dropbox.c.inc" -#include "inc_generated/ndpi_asn_starcraft.c.inc" -#include "inc_generated/ndpi_asn_ubuntuone.c.inc" +#include "inc_generated/ndpi_asn_blizzard.c.inc" +#include "inc_generated/ndpi_asn_canonical.c.inc" #include "inc_generated/ndpi_asn_twitch.c.inc" #include "inc_generated/ndpi_asn_hotspotshield.c.inc" #include "inc_generated/ndpi_asn_github.c.inc" @@ -125,7 +121,13 @@ #include "inc_generated/ndpi_asn_epicgames.c.inc" #include "inc_generated/ndpi_asn_nvidia.c.inc" #include "inc_generated/ndpi_asn_roblox.c.inc" - +#include "inc_generated/ndpi_asn_imo.c.inc" +#include "inc_generated/ndpi_asn_badoo.c.inc" +#include "inc_generated/ndpi_domains_ms_office365_match.c.inc" +#include "inc_generated/ndpi_domains_ms_onedrive_match.c.inc" +#include "inc_generated/ndpi_domains_ms_outlook_match.c.inc" +#include "inc_generated/ndpi_domains_ms_teams_match.c.inc" +#include "inc_generated/ndpi_domains_ms_azure_match.c.inc" /* Third party libraries */ #include "third_party/include/ndpi_patricia.h" @@ -145,7 +147,6 @@ static void (*_ndpi_flow_free)(void *ptr); /* ****************************************** */ -#include "ndpi_os_fingerprint.c.inc" static ndpi_risk_info ndpi_known_risks[] = { { NDPI_NO_RISK, NDPI_RISK_LOW, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_NO_ACCOUNTABILITY }, @@ -169,14 +170,14 @@ static ndpi_risk_info ndpi_known_risks[] = { { NDPI_SSH_OBSOLETE_CLIENT_VERSION_OR_CIPHER, NDPI_RISK_HIGH, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_SSH_OBSOLETE_SERVER_VERSION_OR_CIPHER, NDPI_RISK_MEDIUM, CLIENT_LOW_RISK_PERCENTAGE, NDPI_SERVER_ACCOUNTABLE }, { NDPI_SMB_INSECURE_VERSION, NDPI_RISK_HIGH, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, - { NDPI_TLS_SUSPICIOUS_ESNI_USAGE, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, + { NDPI_FREE_21, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_UNSAFE_PROTOCOL, NDPI_RISK_LOW, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_BOTH_ACCOUNTABLE }, { NDPI_DNS_SUSPICIOUS_TRAFFIC, NDPI_RISK_MEDIUM, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_TLS_MISSING_SNI, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_HTTP_SUSPICIOUS_CONTENT, NDPI_RISK_HIGH, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_SERVER_ACCOUNTABLE }, { NDPI_RISKY_ASN, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_SERVER_ACCOUNTABLE }, { NDPI_RISKY_DOMAIN, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_SERVER_ACCOUNTABLE }, - { NDPI_MALICIOUS_FINGERPRINT, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, + { NDPI_MALICIOUS_FINGERPRINT, NDPI_RISK_HIGH, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_MALICIOUS_SHA1_CERTIFICATE, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_SERVER_ACCOUNTABLE }, { NDPI_DESKTOP_OR_FILE_SHARING_SESSION, NDPI_RISK_LOW, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_BOTH_ACCOUNTABLE }, { NDPI_TLS_UNCOMMON_ALPN, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, @@ -199,7 +200,7 @@ static ndpi_risk_info ndpi_known_risks[] = { { NDPI_PERIODIC_FLOW, NDPI_RISK_LOW, CLIENT_LOW_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_MINOR_ISSUES, NDPI_RISK_LOW, CLIENT_LOW_RISK_PERCENTAGE, NDPI_BOTH_ACCOUNTABLE }, { NDPI_TCP_ISSUES, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, - { NDPI_FULLY_ENCRYPTED, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, + { NDPI_FREE_51, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_TLS_ALPN_SNI_MISMATCH, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_MALWARE_HOST_CONTACTED, NDPI_RISK_SEVERE, CLIENT_HIGH_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, { NDPI_BINARY_DATA_TRANSFER, NDPI_RISK_MEDIUM, CLIENT_FAIR_RISK_PERCENTAGE, NDPI_CLIENT_ACCOUNTABLE }, @@ -221,21 +222,28 @@ _Static_assert(sizeof(ndpi_known_risks) / sizeof(ndpi_risk_info) == NDPI_MAX_RIS /* ****************************************** */ /* Forward */ -static int addDefaultPort(struct ndpi_detection_module_struct *ndpi_str, - ndpi_port_range *range, ndpi_proto_defaults_t *def, - u_int8_t customUserProto, default_ports_tree_node_t **root, - const char *_func, int _line); static void ndpi_reset_packet_line_info(struct ndpi_packet_struct *packet); static void ndpi_int_change_protocol(struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, u_int16_t lower_detected_protocol, ndpi_confidence_t confidence); -static int ndpi_callback_init(struct ndpi_detection_module_struct *ndpi_str); +static int dissectors_init(struct ndpi_detection_module_struct *ndpi_str); static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndpi_str, - const NDPI_PROTOCOL_BITMASK *dbm, int count_only); + int count_only); -static void set_default_config(struct ndpi_detection_module_config_struct *cfg); +static int set_default_config(struct ndpi_detection_module_config_struct *cfg, + u_int16_t max_internal_proto); + +static void internal_giveup(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow, + ndpi_protocol *ret); + +static int addDefaultPort(struct ndpi_detection_module_struct *ndpi_str, + ndpi_port_range *range, + u_int16_t proto_idx, + u_int8_t customUserProto, + default_ports_tree_node_t **root); /* ****************************************** */ @@ -270,38 +278,48 @@ u_int32_t ndpi_detection_get_sizeof_ndpi_flow_struct(void) { /* *********************************************************************************** */ -u_int32_t ndpi_detection_get_sizeof_ndpi_flow_tcp_struct(void) { - return(sizeof(struct ndpi_flow_tcp_struct)); +char *ndpi_get_proto_by_id(const struct ndpi_detection_module_struct *ndpi_str, u_int id) { + return(!ndpi_is_valid_protoId(ndpi_str, id) ? NULL : ndpi_str->proto_defaults[id].protoName); } /* *********************************************************************************** */ -u_int32_t ndpi_detection_get_sizeof_ndpi_flow_udp_struct(void) { - return(sizeof(struct ndpi_flow_udp_struct)); +static void dissector_bitmask_set(struct ndpi_dissector_bitmask *b, u_int16_t bit) +{ + b->fds[bit / 32] |= (1ul << (bit % 32)); } /* *********************************************************************************** */ -char *ndpi_get_proto_by_id(struct ndpi_detection_module_struct *ndpi_str, u_int id) { - if(!ndpi_str) - return NULL; - return((id >= ndpi_str->ndpi_num_supported_protocols) ? NULL : ndpi_str->proto_defaults[id].protoName); +static int dissector_bitmask_is_set(const struct ndpi_dissector_bitmask *b, u_int16_t bit) +{ + return b->fds[bit / 32] & (1ul << (bit % 32)); } /* *********************************************************************************** */ /* NOTE: name can be HTTP or YouTube but not TLS.YouTube */ -u_int16_t ndpi_get_proto_by_name(struct ndpi_detection_module_struct *ndpi_str, const char *name) { - u_int16_t i, num = ndpi_get_num_supported_protocols(ndpi_str); +u_int16_t ndpi_get_proto_by_name(const struct ndpi_detection_module_struct *ndpi_str, const char *name) { + u_int16_t i, num; char *p; if(!ndpi_str || !name) return(NDPI_PROTOCOL_UNKNOWN); + if (*name == '\0') + return(NDPI_PROTOCOL_UNKNOWN); + + num = ndpi_str->num_supported_protocols; + + /* Cache the lowercased first character of 'name' */ + const unsigned char fc = tolower((unsigned char)*name); + for(i = 0; i < num; i++) { p = ndpi_get_proto_by_id(ndpi_str, i); - if(p && strcasecmp(p, name) == 0) - return(i); + if (p && tolower((unsigned char)*p) == fc) { + if(strcasecmp(p + 1, name + 1) == 0) + return(i); + } } return(NDPI_PROTOCOL_UNKNOWN); @@ -341,12 +359,39 @@ ndpi_master_app_protocol ndpi_get_protocol_by_name(struct ndpi_detection_module_ static void ndpi_add_user_proto_id_mapping(struct ndpi_detection_module_struct *ndpi_str, u_int16_t ndpi_proto_id, u_int16_t user_proto_id) { - NDPI_LOG_DBG2(ndpi_str, "[DEBUG] *** %u (>= %u)-> %u\n", - ndpi_proto_id, NDPI_MAX_SUPPORTED_PROTOCOLS, - user_proto_id); + int idx; + + NDPI_LOG_DBG2(ndpi_str, "*** %u (>= %u)-> %u\n", + ndpi_proto_id, ndpi_str->num_internal_protocols, + user_proto_id); + + if(ndpi_proto_id < ndpi_str->num_internal_protocols){ + NDPI_LOG_ERR(ndpi_str, "Something is seriously wrong with new custom protocol %d/%d/%d\n", + ndpi_proto_id, user_proto_id, ndpi_str->num_internal_protocols); + return; /* We shoudn't ever be here...*/ + } - if(ndpi_proto_id >= NDPI_MAX_SUPPORTED_PROTOCOLS) - ndpi_str->ndpi_to_user_proto_id[ndpi_proto_id-NDPI_MAX_SUPPORTED_PROTOCOLS] = user_proto_id; + /* Note that this mean we need to register *all* the internal protocols before adding + *any* custom protocols... */ + idx = ndpi_proto_id - ndpi_str->num_internal_protocols; + + if(idx >= ndpi_str->ndpi_to_user_proto_id_num_allocated) { + int new_num; + u_int16_t *new_ptr; + + new_num = ndpi_max(64, ndpi_str->ndpi_to_user_proto_id_num_allocated * 2); + new_ptr = ndpi_realloc(ndpi_str->ndpi_to_user_proto_id, + ndpi_str->ndpi_to_user_proto_id_num_allocated * sizeof(u_int16_t), + new_num * sizeof(u_int16_t)); + if(!new_ptr) { + NDPI_LOG_DBG(ndpi_str, "Realloc error\n"); + return; + } + ndpi_str->ndpi_to_user_proto_id = new_ptr; + ndpi_str->ndpi_to_user_proto_id_num_allocated = new_num; + } + + ndpi_str->ndpi_to_user_proto_id[idx] = user_proto_id; } /* ************************************************************************************* */ @@ -362,17 +407,17 @@ u_int16_t ndpi_map_user_proto_id_to_ndpi_id(struct ndpi_detection_module_struct if(!ndpi_str) return(0); - if(user_proto_id < NDPI_MAX_SUPPORTED_PROTOCOLS) + if(user_proto_id < ndpi_str->num_internal_protocols) return(user_proto_id); else { - u_int idx, idx_max = ndpi_str->ndpi_num_supported_protocols - NDPI_MAX_SUPPORTED_PROTOCOLS; + u_int idx, idx_max = ndpi_str->num_supported_protocols - ndpi_str->num_internal_protocols; /* TODO: improve it and remove linear scan */ for(idx = 0; idx < idx_max; idx++) { if(ndpi_str->ndpi_to_user_proto_id[idx] == 0) break; else if(ndpi_str->ndpi_to_user_proto_id[idx] == user_proto_id) { - return(idx + NDPI_MAX_SUPPORTED_PROTOCOLS); + return(idx + ndpi_str->num_internal_protocols); } } } @@ -384,7 +429,7 @@ u_int16_t ndpi_map_user_proto_id_to_ndpi_id(struct ndpi_detection_module_struct /* Map an internal nDPI protocol id to a custom user protocol */ u_int16_t ndpi_map_ndpi_id_to_user_proto_id(struct ndpi_detection_module_struct *ndpi_str, - u_int16_t ndpi_proto_id) { + u_int16_t ndpi_proto_id) { #if 0 /* Too much verbose... */ NDPI_LOG_DBG2(ndpi_str, "[DEBUG] ***** %s(%u)\n", __FUNCTION__, ndpi_proto_id); #endif @@ -392,13 +437,13 @@ u_int16_t ndpi_map_ndpi_id_to_user_proto_id(struct ndpi_detection_module_struct if(!ndpi_str) return(0); - if(ndpi_proto_id < NDPI_MAX_SUPPORTED_PROTOCOLS) + if(!ndpi_is_custom_protocol(ndpi_str, ndpi_proto_id)) return(ndpi_proto_id); - else if(ndpi_proto_id < ndpi_str->ndpi_num_supported_protocols) { - u_int id = ndpi_proto_id - NDPI_MAX_SUPPORTED_PROTOCOLS; + else if(ndpi_proto_id < ndpi_str->num_supported_protocols) { + u_int idx = ndpi_proto_id - ndpi_str->num_internal_protocols; - if(id < ndpi_str->ndpi_num_supported_protocols) - return(ndpi_str->ndpi_to_user_proto_id[id]); + if(idx < ndpi_str->num_supported_protocols) + return(ndpi_str->ndpi_to_user_proto_id[idx]); } return(0); @@ -406,19 +451,41 @@ u_int16_t ndpi_map_ndpi_id_to_user_proto_id(struct ndpi_detection_module_struct /* ************************************************************************************* */ +static ndpi_port_range *ndpi_build_default_ports_range(ndpi_port_range *ports, u_int16_t portA_low, u_int16_t portA_high, + 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) { + int i = 0; + + ports[i].port_low = portA_low, ports[i].port_high = portA_high, ports[i].is_custom = 0; + i++; + ports[i].port_low = portB_low, ports[i].port_high = portB_high, ports[i].is_custom = 0; + i++; + ports[i].port_low = portC_low, ports[i].port_high = portC_high, ports[i].is_custom = 0; + i++; + ports[i].port_low = portD_low, ports[i].port_high = portD_high, ports[i].is_custom = 0; + i++; + ports[i].port_low = portE_low, ports[i].port_high = portE_high, ports[i].is_custom = 0; + + return(ports); +} + + +/* ************************************************************************************* */ + ndpi_port_range *ndpi_build_default_ports(ndpi_port_range *ports, u_int16_t portA, u_int16_t portB, u_int16_t portC, u_int16_t portD, u_int16_t portE) { int i = 0; - ports[i].port_low = portA, ports[i].port_high = portA; + ports[i].port_low = portA, ports[i].port_high = portA, ports[i].is_custom = 0; i++; - ports[i].port_low = portB, ports[i].port_high = portB; + ports[i].port_low = portB, ports[i].port_high = portB, ports[i].is_custom = 0; i++; - ports[i].port_low = portC, ports[i].port_high = portC; + ports[i].port_low = portC, ports[i].port_high = portC, ports[i].is_custom = 0; i++; - ports[i].port_low = portD, ports[i].port_high = portD; + ports[i].port_low = portD, ports[i].port_high = portD, ports[i].is_custom = 0; i++; - ports[i].port_low = portE, ports[i].port_high = portE; + ports[i].port_low = portE, ports[i].port_high = portE, ports[i].is_custom = 0; return(ports); } @@ -427,20 +494,18 @@ ndpi_port_range *ndpi_build_default_ports(ndpi_port_range *ports, u_int16_t port void ndpi_set_proto_breed(struct ndpi_detection_module_struct *ndpi_str, u_int16_t protoId, ndpi_protocol_breed_t breed) { - if(!ndpi_is_valid_protoId(protoId)) + if(!ndpi_is_valid_protoId(ndpi_str, protoId)) return; - else if(ndpi_str) - ndpi_str->proto_defaults[protoId].protoBreed = breed; + ndpi_str->proto_defaults[protoId].protoBreed = breed; } /* ********************************************************************************** */ void ndpi_set_proto_category(struct ndpi_detection_module_struct *ndpi_str, u_int16_t protoId, ndpi_protocol_category_t protoCategory) { - if(!ndpi_is_valid_protoId(protoId)) + if(!ndpi_is_valid_protoId(ndpi_str, protoId)) return; - else if(ndpi_str) - ndpi_str->proto_defaults[protoId].protoCategory = protoCategory; + ndpi_str->proto_defaults[protoId].protoCategory = protoCategory; } /* ********************************************************************************** */ @@ -449,13 +514,13 @@ int is_flow_addr_informative(const struct ndpi_flow_struct *flow) { /* The ideas is to tell if the address itself carries some useful information or not. Examples: - a flow to a Facebook address is quite likely related to some Facebook apps - a flow to an AWS address might be potentially anything + a flow to a Facebook address is quite likely related to some Facebook apps + a flow to an AWS address might be potentially anything */ switch(flow->guessed_protocol_id_by_ip) { case NDPI_PROTOCOL_UNKNOWN: - /* This is basically the list of cloud providers supported by nDPI */ + /* This is basically the list of cloud providers supported by nDPI */ case NDPI_PROTOCOL_TENCENT: case NDPI_PROTOCOL_EDGECAST: case NDPI_PROTOCOL_ALIBABA: @@ -467,9 +532,10 @@ int is_flow_addr_informative(const struct ndpi_flow_struct *flow) case NDPI_PROTOCOL_GOOGLE_CLOUD: case NDPI_PROTOCOL_DIGITALOCEAN: return 0; - /* This is basically the list of VPNs (with **entry** addresses) supported by nDPI */ + /* This is basically the list of VPNs (with **entry** addresses) supported by nDPI */ case NDPI_PROTOCOL_NORDVPN: - case NDPI_PROTOCOL_PROTONVPN: + case NDPI_PROTOCOL_SURFSHARK: + case NDPI_PROTOCOL_TOR: return 0; default: return 1; @@ -489,8 +555,8 @@ int is_flow_addr_informative(const struct ndpi_flow_struct *flow) - HTTP/SSL are NOT informative as SSL.Facebook (likely) means that this is SSL (HTTPS) traffic containg Facebook traffic. */ -u_int8_t ndpi_is_subprotocol_informative(u_int16_t protoId) { - if(!ndpi_is_valid_protoId(protoId)) +u_int8_t ndpi_is_subprotocol_informative(struct ndpi_detection_module_struct *ndpi_mod, u_int16_t protoId) { + if(!ndpi_is_valid_protoId(ndpi_mod, protoId)) return(0); switch(protoId) { @@ -502,36 +568,39 @@ u_int8_t ndpi_is_subprotocol_informative(u_int16_t protoId) { return(0); } } + /* ********************************************************************************** */ -void ndpi_exclude_protocol(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, - u_int16_t protocol_id, const char *_file, const char *_func, int _line) { - if(ndpi_is_valid_protoId(protocol_id)) { +void exclude_dissector(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, + u_int16_t dissector_idx, const char *_file, const char *_func, int _line) { #ifdef NDPI_ENABLE_DEBUG_MESSAGES - if(ndpi_str && ndpi_str->cfg.log_level >= NDPI_LOG_DEBUG && ndpi_str->ndpi_debug_printf != NULL) { - (*(ndpi_str->ndpi_debug_printf))(protocol_id, ndpi_str, NDPI_LOG_DEBUG, _file, _func, _line, "exclude %s\n", - ndpi_get_proto_name(ndpi_str, protocol_id)); - } + /* TODO */ + if(ndpi_str->cfg.log_level >= NDPI_LOG_DEBUG && ndpi_str->ndpi_debug_printf != NULL) { + (*(ndpi_str->ndpi_debug_printf))(ndpi_str->callback_buffer[dissector_idx].first_protocol_id, + ndpi_str, NDPI_LOG_DEBUG, _file, _func, _line, "exclude %s\n", + ndpi_str->callback_buffer[dissector_idx].name); + } #else - (void)ndpi_str; - (void)_file; - (void)_func; - (void)_line; + (void)ndpi_str; + (void)_file; + (void)_func; + (void)_line; #endif - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, protocol_id); - } + dissector_bitmask_set(&flow->excluded_dissectors_bitmask, dissector_idx); } /* ********************************************************************************** */ -static int is_proto_enabled(struct ndpi_detection_module_struct *ndpi_str, int protoId) +int is_proto_enabled(struct ndpi_detection_module_struct *ndpi_str, int protoId) { + if(protoId < 0) + return 0; /* Custom protocols are always enabled */ - if(protoId >= NDPI_MAX_SUPPORTED_PROTOCOLS) + if(ndpi_is_custom_protocol(ndpi_str, protoId)) return 1; - if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_str->detection_bitmask, protoId) == 0) - return 0; - return 1; + if(ndpi_bitmask_is_set(&ndpi_str->cfg.detection_bitmask, protoId)) + return 1; + return 0; } /* ********************************************************************************** */ @@ -542,18 +611,9 @@ void ndpi_set_proto_subprotocols(struct ndpi_detection_module_struct *ndpi_str, int current_arg = protoId; size_t i = 0; - if(!is_proto_enabled(ndpi_str, protoId)) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip subprotocols for %d (disabled)\n", protoId); - return; - } - va_start(ap, protoId); while (current_arg != NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS) { - if(!is_proto_enabled(ndpi_str, current_arg)) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip subprotocol %d (disabled)\n", protoId); - } else { - ndpi_str->proto_defaults[protoId].subprotocol_count++; - } + ndpi_str->proto_defaults[protoId].subprotocol_count++; current_arg = va_arg(ap, int); } va_end(ap); @@ -564,8 +624,8 @@ void ndpi_set_proto_subprotocols(struct ndpi_detection_module_struct *ndpi_str, ndpi_str->proto_defaults[protoId].subprotocol_count--; /* No subprotocol was set before NDPI_NO_MORE_SUBPROTOCOLS. */ if(ndpi_str->proto_defaults[protoId].subprotocol_count == 0) { - return; - } + return; + } ndpi_str->proto_defaults[protoId].subprotocols = ndpi_malloc(sizeof(protoId) * ndpi_str->proto_defaults[protoId].subprotocol_count); @@ -578,9 +638,7 @@ void ndpi_set_proto_subprotocols(struct ndpi_detection_module_struct *ndpi_str, current_arg = va_arg(ap, int); while (current_arg != NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS) { - if(is_proto_enabled(ndpi_str, current_arg)) { - ndpi_str->proto_defaults[protoId].subprotocols[i++] = current_arg; - } + ndpi_str->proto_defaults[protoId].subprotocols[i++] = current_arg; current_arg = va_arg(ap, int); } @@ -589,66 +647,107 @@ void ndpi_set_proto_subprotocols(struct ndpi_detection_module_struct *ndpi_str, /* ********************************************************************************** */ -void ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_str, - u_int8_t is_cleartext, u_int8_t is_app_protocol, - ndpi_protocol_breed_t breed, - u_int16_t protoId, char *protoName, - ndpi_protocol_category_t protoCategory, - ndpi_port_range *tcpDefPorts, - ndpi_port_range *udpDefPorts) { - char *name; +static void load_default_ports(struct ndpi_detection_module_struct *ndpi_str) +{ + unsigned int protoId; int j; - if(!ndpi_str || !protoName) - return; + for(protoId = 0; protoId < ndpi_str->num_supported_protocols; protoId++) { + if(!is_proto_enabled(ndpi_str, protoId)) { + NDPI_LOG_DBG(ndpi_str, "Skip default ports for protoId=%d: disabled\n", + ndpi_str->proto_defaults[protoId].protoName, protoId); + continue; + } - if(!ndpi_is_valid_protoId(protoId)) { - NDPI_LOG_ERR(ndpi_str, "[NDPI] %s/protoId=%d: INTERNAL ERROR\n", protoName, protoId); - return; + for(j = 0; j < MAX_DEFAULT_PORTS; j++) { + if(ndpi_str->proto_defaults[protoId].udp_default_ports[j].port_low != 0) + addDefaultPort(ndpi_str, &ndpi_str->proto_defaults[protoId].udp_default_ports[j], + protoId, ndpi_str->proto_defaults[protoId].isCustomProto, &ndpi_str->udpRoot); + + if(ndpi_str->proto_defaults[protoId].tcp_default_ports[j].port_low != 0) + addDefaultPort(ndpi_str, &ndpi_str->proto_defaults[protoId].tcp_default_ports[j], + protoId, ndpi_str->proto_defaults[protoId].isCustomProto, &ndpi_str->tcpRoot); + } } +} - if(ndpi_str->proto_defaults[protoId].protoName != NULL) { - NDPI_LOG_DBG2(ndpi_str, "[NDPI] %s/protoId=%d: already initialized. Ignoring it\n", protoName, protoId); - return; +/* ********************************************************************************** */ + +static int ndpi_set_proto_defaults(struct ndpi_detection_module_struct *ndpi_str, + u_int8_t is_cleartext, u_int8_t is_app_protocol, + ndpi_protocol_breed_t breed, + u_int16_t protoId, char *protoName, + ndpi_protocol_category_t protoCategory, + ndpi_protocol_qoe_category_t qoeCategory, + ndpi_port_range *tcpDefPorts, + ndpi_port_range *udpDefPorts, + u_int8_t is_custom_protocol) { + int j; + + + /* There is no real limit on protocols number/id; the hard limit being the u_int16_t + data typer used for the ids... + */ + + if(protoId >= ndpi_str->proto_defaults_num_allocated) { + int new_num; + ndpi_proto_defaults_t *new_ptr; + + new_num = ndpi_max(512, ndpi_nearest_power_of_two(protoId + 1)); + new_ptr = ndpi_realloc(ndpi_str->proto_defaults, + ndpi_str->proto_defaults_num_allocated * sizeof(ndpi_proto_defaults_t), + new_num * sizeof(ndpi_proto_defaults_t)); + if(!new_ptr) { + NDPI_LOG_DBG(ndpi_str, "Realloc error\n"); + return -1; + } + memset(&new_ptr[ndpi_str->proto_defaults_num_allocated], + '\0', + sizeof(ndpi_proto_defaults_t) * (new_num - ndpi_str->proto_defaults_num_allocated)); + ndpi_str->proto_defaults = new_ptr; + ndpi_str->proto_defaults_num_allocated = new_num; } - name = ndpi_strdup(protoName); - if(!name) { - NDPI_LOG_ERR(ndpi_str, "[NDPI] %s/protoId=%d: mem allocation error\n", protoName, protoId); - return; + if(ndpi_str->proto_defaults[protoId].protoName[0] != '\0') { + if(strcasecmp(ndpi_str->proto_defaults[protoId].protoName, protoName) != 0) { + NDPI_LOG_ERR(ndpi_str, "Error. Same protocol id %d with different names [%s][%s]!\n", + protoId, ndpi_str->proto_defaults[protoId].protoName, protoName); + } else { + NDPI_LOG_DBG2(ndpi_str, "[NDPI] %s/protoId=%d: already initialized. Ignoring it\n", protoName, protoId); + } + return 0; } + strncpy(ndpi_str->proto_defaults[protoId].protoName, + protoName, + sizeof(ndpi_str->proto_defaults[protoId].protoName) - 1); + ndpi_str->proto_defaults[protoId].protoName[sizeof(ndpi_str->proto_defaults[protoId].protoName) - 1] = '\0'; + ndpi_str->proto_defaults[protoId].isClearTextProto = is_cleartext; /* is_appprotocol=1 means that this is only an application protocol layered on top of a network protocol. Example WhatsApp=1, TLS=0 */ ndpi_str->proto_defaults[protoId].isAppProtocol = is_app_protocol; - ndpi_str->proto_defaults[protoId].protoName = name; + ndpi_str->proto_defaults[protoId].isCustomProto = is_custom_protocol; ndpi_str->proto_defaults[protoId].protoCategory = protoCategory; ndpi_str->proto_defaults[protoId].protoId = protoId; ndpi_str->proto_defaults[protoId].protoBreed = breed; + ndpi_str->proto_defaults[protoId].qoeCategory = qoeCategory; ndpi_str->proto_defaults[protoId].subprotocols = NULL; ndpi_str->proto_defaults[protoId].subprotocol_count = 0; - - if(!is_proto_enabled(ndpi_str, protoId)) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip default ports for %s/protoId=%d: disabled\n", protoName, protoId); - return; - } - for(j = 0; j < MAX_DEFAULT_PORTS; j++) { - if(udpDefPorts[j].port_low != 0) - addDefaultPort(ndpi_str, &udpDefPorts[j], &ndpi_str->proto_defaults[protoId], 0, &ndpi_str->udpRoot, - __FUNCTION__, __LINE__); + ndpi_str->proto_defaults[protoId].tcp_default_ports[j] = tcpDefPorts[j]; + ndpi_str->proto_defaults[protoId].udp_default_ports[j] = udpDefPorts[j]; + } - if(tcpDefPorts[j].port_low != 0) - addDefaultPort(ndpi_str, &tcpDefPorts[j], &ndpi_str->proto_defaults[protoId], 0, &ndpi_str->tcpRoot, - __FUNCTION__, __LINE__); + ndpi_str->num_supported_protocols++; + if(is_custom_protocol) + ndpi_str->num_custom_protocols++; + else + ndpi_str->num_internal_protocols++; - /* No port range, just the lower port */ - ndpi_str->proto_defaults[protoId].tcp_default_ports[j] = tcpDefPorts[j].port_low; - ndpi_str->proto_defaults[protoId].udp_default_ports[j] = udpDefPorts[j].port_low; - } + return 0; } /* ******************************************************************** */ @@ -665,15 +764,10 @@ static int default_ports_tree_node_t_cmp(const void *a, const void *b) { /* ******************************************************************** */ static int addDefaultPort(struct ndpi_detection_module_struct *ndpi_str, - ndpi_port_range *range, - ndpi_proto_defaults_t *def, + ndpi_port_range *range, + u_int16_t proto_idx, u_int8_t customUserProto, - default_ports_tree_node_t **root, - const char *_func, - int _line) { - (void)_func; - (void)_line; - + default_ports_tree_node_t **root) { u_int32_t port; for(port = range->port_low; port <= range->port_high; port++) { @@ -682,26 +776,28 @@ static int addDefaultPort(struct ndpi_detection_module_struct *ndpi_str, default_ports_tree_node_t *ret; if(!node) { - NDPI_LOG_ERR(ndpi_str, "%s:%d not enough memory\n", _func, _line); + NDPI_LOG_ERR(ndpi_str, "Not enough memory\n"); break; } - node->proto = def, node->default_port = port, node->customUserProto = customUserProto; + node->proto_idx = proto_idx, node->default_port = port, node->customUserProto = customUserProto | range->is_custom; ret = (default_ports_tree_node_t *) ndpi_tsearch(node, (void *) root, default_ports_tree_node_t_cmp); /* Add it to the tree */ if(ret == NULL) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] %s:%d error searching for port %u\n", _func, _line, port); + NDPI_LOG_ERR(ndpi_str, "Error searching for port %u\n", port); ndpi_free(node); break; } if(ret != node) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] %s:%d found duplicate for port %u: overwriting it with new value\n", - _func, _line, port); + NDPI_LOG_DBG(ndpi_str, "Found duplicate for port %u: overwriting it with new value\n", + port); + /* Overwriting -> custom rules wins over "default"/hard-coded default ports */ - ret->proto = def; + ret->customUserProto |= (customUserProto | range->is_custom); + ret->proto_idx = proto_idx; ndpi_free(node); return(-1); /* Duplicates found */ } @@ -764,21 +860,15 @@ static u_int8_t ndpi_domain_level(const char *name) { /* ****************************************************** */ -static int ndpi_string_to_automa(struct ndpi_detection_module_struct *ndpi_str, - AC_AUTOMATA_t *ac_automa, const char *value, - u_int16_t protocol_id, ndpi_protocol_category_t category, - ndpi_protocol_breed_t breed, u_int8_t level, - u_int8_t add_ends_with) { +static int string_to_automa(AC_AUTOMATA_t *ac_automa, const char *value, + u_int16_t protocol_id, ndpi_protocol_category_t category, + ndpi_protocol_breed_t breed, u_int8_t level, + u_int8_t add_ends_with) { AC_PATTERN_t ac_pattern; AC_ERROR_t rc; u_int len; char *value_dup = NULL; - if(!ndpi_is_valid_protoId(protocol_id)) { - NDPI_LOG_ERR(ndpi_str, "[NDPI] protoId=%d: INTERNAL ERROR\n", protocol_id); - return(-1); - } - if((ac_automa == NULL) || (value == NULL) || !*value) return(-2); @@ -827,99 +917,94 @@ static int ndpi_add_host_url_subprotocol(struct ndpi_detection_module_struct *nd NDPI_LOG_DBG2(ndpi_str, "[NDPI] Adding [%s][%d]\n", value, protocol_id); #endif - return ndpi_string_to_automa(ndpi_str, (AC_AUTOMATA_t *)ndpi_str->host_automa.ac_automa, - value, protocol_id, category, breed, level, 1); + return string_to_automa((AC_AUTOMATA_t *)ndpi_str->host_automa.ac_automa, + value, protocol_id, category, breed, level, 1); } /* ******************************************************************** */ -int ndpi_init_empty_app_protocol(ndpi_protocol_match const * const hostname_list, - ndpi_protocol_match * const empty_app_protocol) { - if (hostname_list[0].proto_name == NULL) - return 1; +static void init_app_protocol(struct ndpi_detection_module_struct *ndpi_str, + ndpi_protocol_match const * const match) { + ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; + ndpi_protocol_qoe_category_t qoeCategory; - memset(empty_app_protocol, 0, sizeof(*empty_app_protocol)); - empty_app_protocol->proto_name = hostname_list[0].proto_name; - empty_app_protocol->protocol_id = hostname_list[0].protocol_id; - empty_app_protocol->protocol_category = hostname_list[0].protocol_category; - empty_app_protocol->protocol_breed = hostname_list[0].protocol_breed; - empty_app_protocol->level = hostname_list[0].level; + switch(match->protocol_category) { + case NDPI_PROTOCOL_CATEGORY_WEB: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_WEB_BROWSING; + break; - return 0; -} + case NDPI_PROTOCOL_CATEGORY_GAME: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING; + break; -/* ******************************************************************** */ + case NDPI_PROTOCOL_CATEGORY_VOIP: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS; + break; -int ndpi_init_app_protocol(struct ndpi_detection_module_struct *ndpi_str, - ndpi_protocol_match const * const match) { - ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; + case NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_REMOTE_ACCESS; + break; - if(ndpi_str->proto_defaults[match->protocol_id].protoName == NULL) { - ndpi_str->proto_defaults[match->protocol_id].protoName = ndpi_strdup(match->proto_name); - if(!ndpi_str->proto_defaults[match->protocol_id].protoName) - return 1; - ndpi_str->proto_defaults[match->protocol_id].isAppProtocol = 1; - ndpi_str->proto_defaults[match->protocol_id].protoId = match->protocol_id; - ndpi_str->proto_defaults[match->protocol_id].protoCategory = match->protocol_category; - ndpi_str->proto_defaults[match->protocol_id].protoBreed = match->protocol_breed; - - ndpi_set_proto_defaults(ndpi_str, - ndpi_str->proto_defaults[match->protocol_id].isClearTextProto, - ndpi_str->proto_defaults[match->protocol_id].isAppProtocol, - ndpi_str->proto_defaults[match->protocol_id].protoBreed, - ndpi_str->proto_defaults[match->protocol_id].protoId, - ndpi_str->proto_defaults[match->protocol_id].protoName, - ndpi_str->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 */); - } + case NDPI_PROTOCOL_CATEGORY_MEDIA: + case NDPI_PROTOCOL_CATEGORY_STREAMING: + case NDPI_PROTOCOL_CATEGORY_MUSIC: + case NDPI_PROTOCOL_CATEGORY_VIDEO: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_BUFFERED_STREAMING; + break; - if(!is_proto_enabled(ndpi_str, match->protocol_id)) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip protocol match for %s/protoId=%d: disabled\n", - match->string_to_match, match->protocol_id); - return 1; + default: + qoeCategory = NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED; + break; } - return 0; + ndpi_set_proto_defaults(ndpi_str, + 0, /* isClearTextProto */ + 1, /* isAppProtocol */ + match->protocol_breed, + match->protocol_id, + match->proto_name, + match->protocol_category, + qoeCategory, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0 /* Internal protocol, no custom */); } /* ******************************************************************** */ -void ndpi_init_protocol_match(struct ndpi_detection_module_struct *ndpi_str, - ndpi_protocol_match const * const match) { - if (ndpi_init_app_protocol(ndpi_str, match) == 0) { - ndpi_add_host_url_subprotocol(ndpi_str, match->string_to_match, - match->protocol_id, match->protocol_category, - match->protocol_breed, match->level); +void load_protocol_match(struct ndpi_detection_module_struct *ndpi_str, + ndpi_protocol_match const * const match) { + + if(!is_proto_enabled(ndpi_str, match->protocol_id)) { + NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip protocol match for %s/protoId=%d: disabled\n", + match->string_to_match, match->protocol_id); + return; } + + ndpi_add_host_url_subprotocol(ndpi_str, match->string_to_match, + match->protocol_id, match->protocol_category, + match->protocol_breed, match->level); } /* ******************************************************************** */ /* Self check function to be called only for testing purposes */ -void ndpi_self_check_host_match(FILE *error_out) { +static void self_check_host_match(struct ndpi_detection_module_struct *ndpi_str, + ndpi_protocol_match *hosts) { u_int32_t i, j; - for(i = 0; host_match[i].string_to_match != NULL; i++) { - if(host_match[i].string_to_match[0] == '.') { - if (error_out != NULL) { - fprintf(error_out, - "[NDPI] INTERNAL ERROR Invalid string detected '%s'. It can not start with '.'\n", - host_match[i].string_to_match); - fprintf(error_out, "\nPlease fix host_match[] in ndpi_content_match.c.inc\n"); - } - abort(); + for(i = 0; hosts[i].string_to_match != NULL; i++) { + if(hosts[i].string_to_match[0] == '.') { + NDPI_LOG_ERR(ndpi_str, + "[NDPI] INTERNAL ERROR Invalid string detected '%s'. It can not start with '.'\n", + hosts[i].string_to_match); } - for(j = 0; host_match[j].string_to_match != NULL; j++) { - if((i != j) && (strcmp(host_match[i].string_to_match, host_match[j].string_to_match) == 0)) { - if (error_out != NULL) { - fprintf(error_out, - "[NDPI] INTERNAL ERROR duplicate string detected '%s' [id: %u, id %u]\n", - host_match[i].string_to_match, i, j); - fprintf(error_out, "\nPlease fix host_match[] in ndpi_content_match.c.inc\n"); - } - abort(); + for(j = 0; hosts[j].string_to_match != NULL; j++) { + if((i != j) && (strcmp(hosts[i].string_to_match, hosts[j].string_to_match) == 0)) { + NDPI_LOG_ERR(ndpi_str, + "[NDPI] INTERNAL ERROR duplicate string detected '%s' [id: %u, id %u]\n", + hosts[i].string_to_match, i, j); } } } @@ -968,28 +1053,29 @@ static void ndpi_xgrams_init(struct ndpi_detection_module_struct *ndpi_str, static void init_string_based_protocols(struct ndpi_detection_module_struct *ndpi_str) { int i; - for(i = 0; host_match[i].string_to_match != NULL; i++) - ndpi_init_protocol_match(ndpi_str, &host_match[i]); - - /* ************************ */ + /* Sanity checks */ + self_check_host_match(ndpi_str, host_match); + self_check_host_match(ndpi_str, teams_host_match); + self_check_host_match(ndpi_str, outlook_host_match); + self_check_host_match(ndpi_str, ms_onedrive_host_match); + self_check_host_match(ndpi_str, microsoft365_host_match); + self_check_host_match(ndpi_str, azure_host_match); - for(i = 0; tls_certificate_match[i].string_to_match != NULL; i++) { - if(!is_proto_enabled(ndpi_str, tls_certificate_match[i].protocol_id)) { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip tls cert match for %s/protoId=%d: disabled\n", - tls_certificate_match[i].string_to_match, tls_certificate_match[i].protocol_id); - continue; - } - /* Note: string_to_match is not malloc'ed here as ac_automata_release is - * called with free_pattern = 0 */ - ndpi_add_string_value_to_automa(ndpi_str->tls_cert_subject_automa.ac_automa, - tls_certificate_match[i].string_to_match, - tls_certificate_match[i].protocol_id); - } + for(i = 0; host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, &host_match[i]); + for(i = 0; teams_host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, &teams_host_match[i]); + for(i = 0; outlook_host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, &outlook_host_match[i]); + for(i = 0; ms_onedrive_host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, &ms_onedrive_host_match[i]); + for(i = 0; microsoft365_host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, µsoft365_host_match[i]); + for(i = 0; azure_host_match[i].string_to_match != NULL; i++) + init_app_protocol(ndpi_str, &azure_host_match[i]); /* ************************ */ - //ndpi_enable_loaded_categories(ndpi_str); - if(!ndpi_xgrams_inited) { ndpi_xgrams_inited = 1; ndpi_xgrams_init(ndpi_str,bigrams_bitmap,sizeof(bigrams_bitmap), @@ -1004,19 +1090,59 @@ static void init_string_based_protocols(struct ndpi_detection_module_struct *ndp /* ******************************************************************** */ -static void ndpi_validate_protocol_initialization(struct ndpi_detection_module_struct *ndpi_str) { +static void load_string_based_protocols(struct ndpi_detection_module_struct *ndpi_str) { + int i; + + for(i = 0; host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, &host_match[i]); + for(i = 0; teams_host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, &teams_host_match[i]); + for(i = 0; outlook_host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, &outlook_host_match[i]); + for(i = 0; ms_onedrive_host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, &ms_onedrive_host_match[i]); + for(i = 0; microsoft365_host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, µsoft365_host_match[i]); + for(i = 0; azure_host_match[i].string_to_match != NULL; i++) + load_protocol_match(ndpi_str, &azure_host_match[i]); + + /* ************************ */ + + for(i = 0; tls_certificate_match[i].string_to_match != NULL; i++) { + if(!is_proto_enabled(ndpi_str, tls_certificate_match[i].protocol_id)) { + NDPI_LOG_DBG(ndpi_str, "[NDPI] Skip tls cert match for %s/protoId=%d: disabled\n", + tls_certificate_match[i].string_to_match, tls_certificate_match[i].protocol_id); + continue; + } + /* Note: string_to_match is not malloc'ed here as ac_automata_release is + * called with free_pattern = 0 */ + ndpi_add_string_value_to_automa(ndpi_str->tls_cert_subject_automa.ac_automa, + tls_certificate_match[i].string_to_match, + tls_certificate_match[i].protocol_id); + } +} + +/* ******************************************************************** */ + +static void validate_protocol_initialization(struct ndpi_detection_module_struct *ndpi_str) { u_int i; - for(i = 0; i < ndpi_str->ndpi_num_supported_protocols; i++) { - if(ndpi_str->proto_defaults[i].protoName == NULL) { + for(i = 0; i < ndpi_str->num_supported_protocols; i++) { + if(ndpi_str->proto_defaults[i].protoName[0] == '\0') { NDPI_LOG_ERR(ndpi_str, "[NDPI] INTERNAL ERROR missing protoName initialization for [protoId=%d]: recovering\n", i); } else { if((i != NDPI_PROTOCOL_UNKNOWN) && - (ndpi_str->proto_defaults[i].protoCategory == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) { + (ndpi_str->proto_defaults[i].protoCategory == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) && + !ndpi_str->proto_defaults[i].isCustomProto /* We can't yet specify category in custom protocols */) { NDPI_LOG_ERR(ndpi_str, - "[NDPI] INTERNAL ERROR missing category [protoId=%d/%s] initialization: recovering\n", i, - ndpi_str->proto_defaults[i].protoName ? ndpi_str->proto_defaults[i].protoName : "???"); + "[NDPI] INTERNAL ERROR missing category [protoId=%d/%s] initialization: recovering\n", + i, ndpi_str->proto_defaults[i].protoName); + } + if(i != ndpi_str->proto_defaults[i].protoId) { + NDPI_LOG_ERR(ndpi_str, + "[NDPI] INTERNAL ERROR non-coherent id %d/%d [%s]: recovering\n", + i, ndpi_str->proto_defaults[i].protoId, ndpi_str->proto_defaults[i].protoName); } } } @@ -1024,77 +1150,82 @@ static void ndpi_validate_protocol_initialization(struct ndpi_detection_module_s /* ******************************************************************** */ -/* 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_str) { +static void init_protocol_defaults(struct ndpi_detection_module_struct *ndpi_str) { ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; - /* Reset all settings */ - memset(ndpi_str->proto_defaults, 0, sizeof(ndpi_str->proto_defaults)); - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNRATED, NDPI_PROTOCOL_UNKNOWN, - "Unknown", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, + "Unknown", NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_FTP_CONTROL, - "FTP_CONTROL", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "FTP_CONTROL", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FTP_DATA, - "FTP_DATA", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "FTP_DATA", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MAIL_POP, - "POP3", NDPI_PROTOCOL_CATEGORY_MAIL, + "POP3", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_POPS, - "POPS", NDPI_PROTOCOL_CATEGORY_MAIL, + "POPS", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MAIL_SMTP, - "SMTP", NDPI_PROTOCOL_CATEGORY_MAIL, + "SMTP", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 25, 587, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_SMTPS, - "SMTPS", NDPI_PROTOCOL_CATEGORY_MAIL, + "SMTPS", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 465, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MAIL_IMAP, - "IMAP", NDPI_PROTOCOL_CATEGORY_MAIL, + "IMAP", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MAIL_IMAPS, - "IMAPS", NDPI_PROTOCOL_CATEGORY_MAIL, + "IMAPS", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DNS, - "DNS", NDPI_PROTOCOL_CATEGORY_NETWORK, + "DNS", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 53, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_DNS, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_DNS can have (content-matched) subprotocols */ - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IPP, - "IPP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IPP, + "IPP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IMO, - "IMO", NDPI_PROTOCOL_CATEGORY_VOIP, + "IMO", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP, - "HTTP", NDPI_PROTOCOL_CATEGORY_WEB, + "HTTP", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_HTTP, NDPI_PROTOCOL_WEBSOCKET, NDPI_PROTOCOL_CROSSFIRE, NDPI_PROTOCOL_SOAP, - NDPI_PROTOCOL_BITTORRENT, NDPI_PROTOCOL_GNUTELLA, - NDPI_PROTOCOL_MAPLESTORY, NDPI_PROTOCOL_ZATTOO, NDPI_PROTOCOL_WORLDOFWARCRAFT, + NDPI_PROTOCOL_BITTORRENT, + NDPI_PROTOCOL_ZATTOO, NDPI_PROTOCOL_IRC, NDPI_PROTOCOL_IPP, NDPI_PROTOCOL_MPEGDASH, @@ -1105,1317 +1236,1691 @@ static void ndpi_init_protocol_defaults(struct ndpi_detection_module_struct *ndp NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_HTTP can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MDNS, - "MDNS", NDPI_PROTOCOL_CATEGORY_NETWORK, + "MDNS", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 5353, 5354, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_MDNS, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_MDNS can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NTP, - "NTP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "NTP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 123, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NETBIOS, - "NetBIOS", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "NetBIOS", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 137, 138, 139, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NFS, - "NFS", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "NFS", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 2049, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SSDP, - "SSDP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "SSDP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BGP, - "BGP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "BGP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SNMP, - "SNMP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "SNMP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 161, 162, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_XDMCP, - "XDMCP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "XDMCP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_DANGEROUS, NDPI_PROTOCOL_SMBV1, - "SMBv1", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + ndpi_build_default_ports(ports_b, 177, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_DANGEROUS, NDPI_PROTOCOL_SMBV1, + "SMBv1", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SYSLOG, - "Syslog", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "Syslog", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 514, 601, 6514, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 514, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 514, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DHCP, - "DHCP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "DHCP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 67, 68, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_POSTGRES, - "PostgreSQL", NDPI_PROTOCOL_CATEGORY_DATABASE, + "PostgreSQL", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MYSQL, - "MySQL", NDPI_PROTOCOL_CATEGORY_DATABASE, + "MySQL", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NATS, - "Nats", NDPI_PROTOCOL_CATEGORY_RPC, + "Nats", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_AMONG_US, - "AmongUs", NDPI_PROTOCOL_CATEGORY_GAME, + "AmongUs", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 22023, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 22023, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_NTOP, - "ntop", NDPI_PROTOCOL_CATEGORY_NETWORK, + "ntop", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VMWARE, - "VMware", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "VMware", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_GNUTELLA, - "Gnutella", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + ndpi_build_default_ports(ports_b, 902, 903, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_GNUTELLA, + "Gnutella", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_EDONKEY, - "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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BITTORRENT, - "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_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE_125, - "FREE_125", 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 */); + "eDonkey", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BITTORRENT, + "BitTorrent", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports_range(ports_a, 6881, 6889, 51413, 51413, 53646, 53646, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports_range(ports_b, 6881, 6889, 51413, 51413, 6771, 6771, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GOOGLE, - "Google", NDPI_PROTOCOL_CATEGORY_WEB, + "Google", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MSTEAMS_CALL, - "TeamsCall", NDPI_PROTOCOL_CATEGORY_VOIP, + "TeamsCall", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TIKTOK, - "TikTok", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "TikTok", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TEREDO, - "Teredo", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Teredo", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WECHAT, - "WeChat", NDPI_PROTOCOL_CATEGORY_CHAT, + "WeChat", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEMCACHED, - "Memcached", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Memcached", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV23, - "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + ndpi_build_default_ports(ports_b, 11211, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMBV23, + "SMBv23", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_MINING, - "Mining", CUSTOM_CATEGORY_MINING, + "Mining", NDPI_PROTOCOL_CATEGORY_MINING, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NEST_LOG_SINK, - "NestLogSink", NDPI_PROTOCOL_CATEGORY_CLOUD, + "NestLogSink", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MODBUS, - "Modbus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "Modbus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 502, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP_CALL, - "WhatsAppCall", NDPI_PROTOCOL_CATEGORY_VOIP, + "WhatsAppCall", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DATASAVER, - "DataSaver", NDPI_PROTOCOL_CATEGORY_WEB /* dummy */, + "DataSaver", NDPI_PROTOCOL_CATEGORY_WEB /* dummy */, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SIGNAL, - "Signal", NDPI_PROTOCOL_CATEGORY_CHAT, + "Signal", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DOH_DOT, - "DoH_DoT", NDPI_PROTOCOL_CATEGORY_NETWORK /* dummy */, + "DoH_DoT", NDPI_PROTOCOL_CATEGORY_NETWORK /* dummy */, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 853, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 784, 853, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 784, 853, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_REDDIT, - "Reddit", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "Reddit", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WIREGUARD, - "WireGuard", NDPI_PROTOCOL_CATEGORY_VPN, + "WireGuard", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 51820, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 51820, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_XBOX, - "Xbox", NDPI_PROTOCOL_CATEGORY_GAME, + "Xbox", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PLAYSTATION, - "Playstation", NDPI_PROTOCOL_CATEGORY_GAME, + "Playstation", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_QQ, - "QQ", NDPI_PROTOCOL_CATEGORY_CHAT, + "QQ", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_RTSP, - "RTSP", NDPI_PROTOCOL_CATEGORY_MEDIA, + "RTSP", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 554, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ICECAST, - "IceCast", NDPI_PROTOCOL_CATEGORY_MEDIA, + "IceCast", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_CPHA, - "CPHA", NDPI_PROTOCOL_CATEGORY_NETWORK, + "CPHA", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 8116, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 8116, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ZATTOO, - "Zattoo", NDPI_PROTOCOL_CATEGORY_VIDEO, + "Zattoo", NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_QOE_CATEGORY_LIVE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DISCORD, - "Discord", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + "Discord", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PLURALSIGHT, - "Pluralsight", NDPI_PROTOCOL_CATEGORY_VIDEO, + "Pluralsight", NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_QOE_CATEGORY_LIVE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_OCSP, - "OCSP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "OCSP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VXLAN, - "VXLAN", NDPI_PROTOCOL_CATEGORY_NETWORK, + "VXLAN", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 4789, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 4789, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_IRC, - "IRC", NDPI_PROTOCOL_CATEGORY_CHAT, + "IRC", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 194, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MERAKI_CLOUD, - "MerakiCloud", NDPI_PROTOCOL_CATEGORY_NETWORK, + "MerakiCloud", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_JABBER, - "Jabber", NDPI_PROTOCOL_CATEGORY_WEB, + "Jabber", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DISNEYPLUS, - "DisneyPlus", NDPI_PROTOCOL_CATEGORY_STREAMING, + "DisneyPlus", NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_QOE_CATEGORY_BUFFERED_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_VRRP, - "VRRP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "VRRP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_STEAM, - "Steam", NDPI_PROTOCOL_CATEGORY_GAME, + "Steam", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HALFLIFE2, - "HalfLife2", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MELSEC, + "MELSEC", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WORLDOFWARCRAFT, - "WorldOfWarcraft", NDPI_PROTOCOL_CATEGORY_GAME, + "WorldOfWarcraft", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_HOTSPOT_SHIELD, - "HotspotShield", NDPI_PROTOCOL_CATEGORY_VPN, + "HotspotShield", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_TELNET, - "Telnet", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "Telnet", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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 */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_STUN, - "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 */); + "STUN", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 3478, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 3478, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_IPSEC, - "IPSec", NDPI_PROTOCOL_CATEGORY_VPN, + "IPSec", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 500, 4500, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_GRE, - "GRE", NDPI_PROTOCOL_CATEGORY_NETWORK, + "GRE", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_ICMP, - "ICMP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "ICMP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_IGMP, - "IGMP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "IGMP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_EGP, - "EGP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "EGP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_PGM, - "PGM", NDPI_PROTOCOL_CATEGORY_NETWORK, + "PGM", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_SCTP, - "SCTP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "SCTP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_OSPF, - "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 */); + "IP_OSPF", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_IP_IN_IP, - "IP_in_IP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "IP_in_IP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTP, - "RTP", NDPI_PROTOCOL_CATEGORY_MEDIA, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTP, + "RTP", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RDP, - "RDP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RDP, + "RDP", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 3389, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 3389, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 3389, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VNC, - "VNC", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "VNC", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TUMBLR, - "Tumblr", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "Tumblr", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ZOOM, - "Zoom", NDPI_PROTOCOL_CATEGORY_VIDEO, + "Zoom", NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_QOE_CATEGORY_LIVE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP_FILES, - "WhatsAppFiles", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "WhatsAppFiles", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHATSAPP, - "WhatsApp", NDPI_PROTOCOL_CATEGORY_CHAT, + "WhatsApp", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_TLS, - "TLS", NDPI_PROTOCOL_CATEGORY_WEB, + "TLS", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_TLS, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_TLS can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_DTLS, - "DTLS", NDPI_PROTOCOL_CATEGORY_WEB, + "DTLS", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_DTLS, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_DTLS can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SSH, - "SSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "SSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_USENET, - "Usenet", NDPI_PROTOCOL_CATEGORY_WEB, + "Usenet", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MGCP, - "MGCP", NDPI_PROTOCOL_CATEGORY_VOIP, + "MGCP", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IAX, - "IAX", NDPI_PROTOCOL_CATEGORY_VOIP, + "IAX", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 4569, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AFP, - "AFP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "AFP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 548, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HULU, - "Hulu", NDPI_PROTOCOL_CATEGORY_STREAMING, + "Hulu", NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_QOE_CATEGORY_BUFFERED_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CHECKMK, - "CHECKMK", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "CHECKMK", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SIP, - "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 */); + "SIP", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, + ndpi_build_default_ports_range(ports_a, 5060, 5061, 0, 0, 0, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports_range(ports_b, 5060, 5061, 0, 0, 0, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TRUPHONE, - "TruPhone", NDPI_PROTOCOL_CATEGORY_VOIP, + "TruPhone", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_ICMPV6, - "ICMPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, + "ICMPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DHCPV6, - "DHCPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, + "DHCPV6", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ARMAGETRON, - "Armagetron", NDPI_PROTOCOL_CATEGORY_GAME, + "Armagetron", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_CROSSFIRE, - "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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DOFUS, - "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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GUILDWARS, - "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 */); + "Crossfire", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_DOFUS, + "Dofus", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GUILDWARS2, + "GuildWars2", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, + ndpi_build_default_ports(ports_a, 6112, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AMAZON_ALEXA, - "AmazonAlexa", NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, + "AmazonAlexa", NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KERBEROS, - "Kerberos", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Kerberos", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 88, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LDAP, - "LDAP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "LDAP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MAPLESTORY, - "MapleStory", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 389, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_NEXON, + "Nexon", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MSSQL_TDS, - "MsSQL-TDS", NDPI_PROTOCOL_CATEGORY_DATABASE, + "MsSQL-TDS", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PPTP, - "PPTP", NDPI_PROTOCOL_CATEGORY_VPN, + "PPTP", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WARCRAFT3, - "Warcraft3", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_IP_AH, + "AH", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_WORLD_OF_KUNG_FU, - "WorldOfKungFu", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_IP_ESP, + "ESP", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MS_RPCH, - "MS-RPCH", NDPI_PROTOCOL_CATEGORY_RPC, + "MS-RPCH", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NETFLOW, - "NetFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, + "NetFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 2055, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SFLOW, - "sFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, + "sFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 6343, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_CONNECT, - "HTTP_Connect", NDPI_PROTOCOL_CATEGORY_WEB, + "HTTP_Connect", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 8080, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_HTTP_CONNECT, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_HTTP_CONNECT can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HTTP_PROXY, - "HTTP_Proxy", NDPI_PROTOCOL_CATEGORY_WEB, + "HTTP_Proxy", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_HTTP_PROXY, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_HTTP_PROXY can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CITRIX, - "Citrix", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Citrix", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBEX, - "Webex", NDPI_PROTOCOL_CATEGORY_VOIP, + "Webex", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RADIUS, - "Radius", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Radius", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 1812, 1813, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TEAMVIEWER, - "TeamViewer", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "TeamViewer", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LOTUS_NOTES, - "LotusNotes", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + ndpi_build_default_ports(ports_b, 5938, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HCL_NOTES, + "HCL_Notes", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SAP, - "SAP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "SAP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, /* Missing dissector: port based only */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP, - "GTP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "GTP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_C, - "GTP_C", NDPI_PROTOCOL_CATEGORY_NETWORK, + ndpi_build_default_ports(ports_b, 2152, 2123, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_C, + "GTP_C", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_U, - "GTP_U", NDPI_PROTOCOL_CATEGORY_NETWORK, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_U, + "GTP_U", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_PRIME, - "GTP_PRIME", NDPI_PROTOCOL_CATEGORY_NETWORK, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GTP_PRIME, + "GTP_PRIME", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HSRP, - "HSRP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "HSRP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 1985, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 1985, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WSD, - "WSD", NDPI_PROTOCOL_CATEGORY_NETWORK, + "WSD", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 3702, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 3702, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ETHERNET_IP, - "EthernetIP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "EthernetIP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 44818, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TELEGRAM, - "Telegram", NDPI_PROTOCOL_CATEGORY_CHAT, + "Telegram", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_QUIC, - "QUIC", NDPI_PROTOCOL_CATEGORY_WEB, + "QUIC", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 443, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 443, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_QUIC, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); /* NDPI_PROTOCOL_QUIC can have (content-matched) subprotocols */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DIAMETER, - "Diameter", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Diameter", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_APPLE_PUSH, - "ApplePush", NDPI_PROTOCOL_CATEGORY_CLOUD, + "ApplePush", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DROPBOX, - "Dropbox", NDPI_PROTOCOL_CATEGORY_CLOUD, + "Dropbox", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 17500, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SONOS, - "Sonos", NDPI_PROTOCOL_CATEGORY_MUSIC, + "Sonos", NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SPOTIFY, - "Spotify", NDPI_PROTOCOL_CATEGORY_MUSIC, + "Spotify", NDPI_PROTOCOL_CATEGORY_MUSIC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LISP, - "LISP", NDPI_PROTOCOL_CATEGORY_CLOUD, + "LISP", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 4342, 4341, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_EAQ, - "EAQ", NDPI_PROTOCOL_CATEGORY_NETWORK, + "EAQ", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 6000, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KAKAOTALK_VOICE, - "KakaoTalk_Voice", NDPI_PROTOCOL_CATEGORY_VOIP, + "KakaoTalk_Voice", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MPEGTS, - "MPEG_TS", NDPI_PROTOCOL_CATEGORY_MEDIA, + "MPEG_TS", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MIKROTIK, - "Mikrotik", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Mikrotik", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); /* http://en.wikipedia.org/wiki/Link-local_Multicast_Name_Resolution */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LLMNR, - "LLMNR", NDPI_PROTOCOL_CATEGORY_NETWORK, + "LLMNR", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 5355, 0, 0, 0, 0) /* UDP */, /* Missing dissector: port based only */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TOCA_BOCA, - "TocaBoca", NDPI_PROTOCOL_CATEGORY_GAME, + "TocaBoca", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 5055, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 5055, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_H323, - "H323", NDPI_PROTOCOL_CATEGORY_VOIP, + "H323", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 1719, 1720, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPENVPN, - "OpenVPN", NDPI_PROTOCOL_CATEGORY_VPN, + "OpenVPN", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 1194, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NOE, - "NOE", NDPI_PROTOCOL_CATEGORY_VOIP, + "NOE", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CISCOVPN, - "CiscoVPN", NDPI_PROTOCOL_CATEGORY_VPN, + "CiscoVPN", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 10000, 8008, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 10000, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 10000, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TEAMSPEAK, - "TeamSpeak", NDPI_PROTOCOL_CATEGORY_VOIP, + "TeamSpeak", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_POTENTIALLY_DANGEROUS, NDPI_PROTOCOL_TOR, - "Tor", NDPI_PROTOCOL_CATEGORY_VPN, + "Tor", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SKINNY, - "CiscoSkinny", NDPI_PROTOCOL_CATEGORY_VOIP, + "CiscoSkinny", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTCP, - "RTCP", NDPI_PROTOCOL_CATEGORY_VOIP, + "RTCP", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RSYNC, - "RSYNC", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "RSYNC", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ORACLE, - "Oracle", NDPI_PROTOCOL_CATEGORY_DATABASE, + "Oracle", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CORBA, - "Corba", NDPI_PROTOCOL_CATEGORY_RPC, + "Corba", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UBUNTUONE, - "UbuntuONE", NDPI_PROTOCOL_CATEGORY_CLOUD, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CANONICAL, + "Canonical", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WHOIS_DAS, - "Whois-DAS", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Whois-DAS", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SD_RTN, - "SD-RTN", NDPI_PROTOCOL_CATEGORY_MEDIA, + "SD-RTN", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOCKS, - "SOCKS", NDPI_PROTOCOL_CATEGORY_WEB, + "SOCKS", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 1080, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TFTP, - "TFTP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "TFTP", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 69, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTMP, - "RTMP", NDPI_PROTOCOL_CATEGORY_MEDIA, + "RTMP", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PINTEREST, - "Pinterest", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "Pinterest", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MEGACO, - "Megaco", NDPI_PROTOCOL_CATEGORY_VOIP, + "Megaco", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 2944, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RESP, - "RESP", NDPI_PROTOCOL_CATEGORY_DATABASE, + "RESP", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ZMQ, - "ZeroMQ", NDPI_PROTOCOL_CATEGORY_RPC, + "ZeroMQ", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VHUA, - "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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_STARCRAFT, - "Starcraft", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_OSPF, + "OSPF", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 2604, 0, 0, 0, 0), /* TCP */ + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_BLIZZARD, + "Blizzard", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_UBNTAC2, - "UBNTAC2", NDPI_PROTOCOL_CATEGORY_NETWORK, + ndpi_build_default_ports(ports_b, 1119, 0, 0, 0, 0), /* UDP */ + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_UBNTAC2, + "UBNTAC2", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 10001, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VIBER, - "Viber", NDPI_PROTOCOL_CATEGORY_VOIP, + "Viber", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 7985, 7987, 5242, 5243, 4244), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_COAP, - "COAP", NDPI_PROTOCOL_CATEGORY_RPC, + "COAP", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 5683, 5684, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MQTT, - "MQTT", NDPI_PROTOCOL_CATEGORY_RPC, + "MQTT", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOMEIP, - "SOMEIP", NDPI_PROTOCOL_CATEGORY_RPC, + "SOMEIP", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 30491, 30501, 30490, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RX, - "RX", NDPI_PROTOCOL_CATEGORY_RPC, + "RX", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_GIT, - "Git", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + "Git", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DRDA, - "DRDA", NDPI_PROTOCOL_CATEGORY_DATABASE, + "DRDA", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GOOGLE_MEET, - "GoogleMeet", NDPI_PROTOCOL_CATEGORY_CHAT, + "GoogleMeet", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GOOGLE_CALL, - "GoogleCall", NDPI_PROTOCOL_CATEGORY_VOIP, + "GoogleCall", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BJNP, - "BJNP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "BJNP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 8612, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SMPP, - "SMPP", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "SMPP", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_OOKLA, - "Ookla", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Ookla", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AMQP, - "AMQP", NDPI_PROTOCOL_CATEGORY_RPC, + "AMQP", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DNSCRYPT, - "DNScrypt", NDPI_PROTOCOL_CATEGORY_NETWORK, + "DNScrypt", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TINC, - "TINC", NDPI_PROTOCOL_CATEGORY_VPN, + "TINC", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 655, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_FIX, - "FIX", NDPI_PROTOCOL_CATEGORY_RPC, + "FIX", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_HFT, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_NINTENDO, - "Nintendo", NDPI_PROTOCOL_CATEGORY_GAME, + "Nintendo", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_VALVE_SDR, - "SteamDatagramRelay", NDPI_PROTOCOL_CATEGORY_GAME, + "SteamDatagramRelay", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_AJP, - "AJP", NDPI_PROTOCOL_CATEGORY_WEB, + "AJP", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 8009, 8010, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TARGUS_GETDATA, - "TargusDataspeed", NDPI_PROTOCOL_CATEGORY_NETWORK, + "TargusDataspeed", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 5001, 5201, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 5001, 5201, 0, 0, 0) /* UDP */); /* Missing dissector: port based only */ + ndpi_build_default_ports(ports_b, 5001, 5201, 0, 0, 0) /* UDP */, /* Missing dissector: port based only */ + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_AMAZON_VIDEO, - "AmazonVideo", NDPI_PROTOCOL_CATEGORY_CLOUD, + "AmazonVideo", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DNP3, - "DNP3", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "DNP3", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 20000, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IEC60870, - "IEC60870", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "IEC60870", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 2404, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BLOOMBERG, - "Bloomberg", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Bloomberg", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CAPWAP, - "CAPWAP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "CAPWAP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 5246, 5247, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 5246, 5247, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ZABBIX, - "Zabbix", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Zabbix", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 10050, 10051, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_S7COMM, - "S7Comm", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "S7Comm", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MSTEAMS, - "Teams", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + "Teams", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBSOCKET, - "WebSocket", NDPI_PROTOCOL_CATEGORY_WEB, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBSOCKET, + "WebSocket", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ANYDESK, - "AnyDesk", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "AnyDesk", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOAP, - "SOAP", NDPI_PROTOCOL_CATEGORY_RPC, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOAP, + "SOAP", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MONGODB, - "MongoDB", NDPI_PROTOCOL_CATEGORY_DATABASE, + "MongoDB", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 27017, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_APPLE_SIRI, - "AppleSiri", NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, + "AppleSiri", NDPI_PROTOCOL_CATEGORY_VIRTUAL_ASSISTANT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SNAPCHAT_CALL, - "SnapchatCall", NDPI_PROTOCOL_CATEGORY_VOIP, + "SnapchatCall", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HPVIRTGRP, - "HP_VIRTGRP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "HP_VIRTGRP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GENSHIN_IMPACT, - "GenshinImpact", NDPI_PROTOCOL_CATEGORY_GAME, + "GenshinImpact", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 22102, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 22102, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ACTIVISION, - "Activision", NDPI_PROTOCOL_CATEGORY_GAME, + "Activision", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_FORTICLIENT, - "FortiClient", NDPI_PROTOCOL_CATEGORY_VPN, + "FortiClient", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 8013, 8014, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_Z3950, - "Z3950", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Z3950", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 210, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_LIKEE, - "Likee", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "Likee", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GITLAB, - "GitLab", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + "GitLab", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_AVAST_SECUREDNS, - "AVASTSecureDNS", NDPI_PROTOCOL_CATEGORY_NETWORK, + "AVASTSecureDNS", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CASSANDRA, - "Cassandra", NDPI_PROTOCOL_CATEGORY_DATABASE, + "Cassandra", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 7000, 9042, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FACEBOOK_VOIP, - "FacebookVoip", NDPI_PROTOCOL_CATEGORY_VOIP, + "FacebookVoip", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SIGNAL_VOIP, - "SignalVoip", NDPI_PROTOCOL_CATEGORY_VOIP, + "SignalVoip", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MICROSOFT_AZURE, - "Azure", NDPI_PROTOCOL_CATEGORY_CLOUD, + "Azure", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GOOGLE_CLOUD, - "GoogleCloud", NDPI_PROTOCOL_CATEGORY_CLOUD, + "GoogleCloud", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TENCENT, - "Tencent", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, + "Tencent", NDPI_PROTOCOL_CATEGORY_SOCIAL_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_RAKNET, - "RakNet", NDPI_PROTOCOL_CATEGORY_GAME, + "RakNet", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_XIAOMI, - "Xiaomi", NDPI_PROTOCOL_CATEGORY_WEB, + "Xiaomi", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_EDGECAST, - "Edgecast", NDPI_PROTOCOL_CATEGORY_CLOUD, + "Edgecast", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CACHEFLY, - "Cachefly", NDPI_PROTOCOL_CATEGORY_CLOUD, + "Cachefly", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SOFTETHER, - "Softether", NDPI_PROTOCOL_CATEGORY_VPN, + "Softether", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MPEGDASH, - "MpegDash", NDPI_PROTOCOL_CATEGORY_MEDIA, + "MpegDash", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); /* - Note: removed RSH port 514 as TCP/514 is often used for syslog and RSH is as such on;y - if both source and destination ports are 514. So we removed the default for RSH and used with syslog + Note: removed RSH port 514 as TCP/514 is often used for syslog and RSH is as such on;y + if both source and destination ports are 514. So we removed the default for RSH and used with syslog */ ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_RSH, - "RSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "RSH", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IP_PIM, - "IP_PIM", NDPI_PROTOCOL_CATEGORY_NETWORK, + "IP_PIM", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_COLLECTD, - "collectd", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "collectd", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 25826, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_I3D, - "i3D", NDPI_PROTOCOL_CATEGORY_GAME, + "i3D", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_RIOTGAMES, - "RiotGames", 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_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ULTRASURF, - "UltraSurf", NDPI_PROTOCOL_CATEGORY_VPN, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_RIOTGAMES, + "RiotGames", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ULTRASURF, + "UltraSurf", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_THREEMA, - "Threema", NDPI_PROTOCOL_CATEGORY_CHAT, + "Threema", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ALICLOUD, - "AliCloud", NDPI_PROTOCOL_CATEGORY_CLOUD, + "AliCloud", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_AVAST, - "AVAST", NDPI_PROTOCOL_CATEGORY_NETWORK, + "AVAST", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TIVOCONNECT, - "TiVoConnect", NDPI_PROTOCOL_CATEGORY_NETWORK, + "TiVoConnect", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 2190, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 2190, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 2190, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KISMET, - "Kismet", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Kismet", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_FASTCGI, - "FastCGI", NDPI_PROTOCOL_CATEGORY_NETWORK, + "FastCGI", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_UNSAFE, NDPI_PROTOCOL_FTPS, - "FTPS", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "FTPS", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NATPMP, - "NAT-PMP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "NAT-PMP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 5351, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 5351, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SYNCTHING, - "Syncthing", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "Syncthing", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_CRYNET, - "CryNetwork", NDPI_PROTOCOL_CATEGORY_GAME, + "CryNetwork", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LINE, - "Line", NDPI_PROTOCOL_CATEGORY_CHAT, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LINE, + "Line", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LINE_CALL, - "LineCall", NDPI_PROTOCOL_CATEGORY_VOIP, + "LineCall", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MUNIN, - "Munin", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "Munin", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4949, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ELASTICSEARCH, - "Elasticsearch", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "Elasticsearch", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TUYA_LP, - "TuyaLP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "TuyaLP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 6667, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 6667, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TPLINK_SHP, - "TPLINK_SHP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "TPLINK_SHP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 9999, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 9999, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 9999, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TAILSCALE, - "Tailscale", NDPI_PROTOCOL_CATEGORY_VPN, + "Tailscale", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 41641, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 41641, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_SOURCE_ENGINE, - "Source_Engine", NDPI_PROTOCOL_CATEGORY_GAME, + "Source_Engine", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 27015, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 27015, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_BACNET, - "BACnet", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "BACnet", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 47808, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 47808, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OICQ, - "OICQ", NDPI_PROTOCOL_CATEGORY_CHAT, + "OICQ", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 8000, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 8000, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HOTS, - "Heroes_of_the_Storm", NDPI_PROTOCOL_CATEGORY_GAME, + "Heroes_of_the_Storm", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 0 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SRTP, - "SRTP", NDPI_PROTOCOL_CATEGORY_MEDIA, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SRTP, + "SRTP", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BITCOIN, - "BITCOIN", NDPI_PROTOCOL_CATEGORY_CRYPTO_CURRENCY, + "BITCOIN", NDPI_PROTOCOL_CATEGORY_CRYPTO_BLOCKCHAIN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PROTONVPN, - "ProtonVPN", NDPI_PROTOCOL_CATEGORY_VPN, + "ProtonVPN", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_APACHE_THRIFT, - "Thrift", NDPI_PROTOCOL_CATEGORY_RPC, + "Thrift", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_ROBLOX, - "Roblox", NDPI_PROTOCOL_CATEGORY_GAME, + "Roblox", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_SERVICE_LOCATION, - "Service_Location_Protocol", NDPI_PROTOCOL_CATEGORY_RPC, + "Service_Location_Protocol", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 427, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 427, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 427, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MULLVAD, - "Mullvad", NDPI_PROTOCOL_CATEGORY_VPN, + "Mullvad", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPERA_VPN, - "OperaVPN", NDPI_PROTOCOL_CATEGORY_VPN, + "OperaVPN", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_HTTP2, - "HTTP2", NDPI_PROTOCOL_CATEGORY_WEB, + "HTTP2", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_HAPROXY, - "HAProxy", 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 */); + "HAProxy", NDPI_PROTOCOL_CATEGORY_WEB, NDPI_PROTOCOL_QOE_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 */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_RMCP, - "RMCP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 623, 0, 0, 0, 0) /* UDP */); + "RMCP", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 623, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_CAN, - "Controller_Area_Network", 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 */); + "Controller_Area_Network", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_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 */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_PROTOBUF, - "Protobuf", 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 */); + "Protobuf", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ETHEREUM, - "ETHEREUM", NDPI_PROTOCOL_CATEGORY_CRYPTO_CURRENCY, - ndpi_build_default_ports(ports_a, 30303, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + "ETHEREUM", NDPI_PROTOCOL_CATEGORY_CRYPTO_BLOCKCHAIN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 30303, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TELEGRAM_VOIP, - "TelegramVoip", NDPI_PROTOCOL_CATEGORY_VOIP, + "TelegramVoip", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TESLA_SERVICES, - "TeslaServices", 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 */); + "TeslaServices", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PTPV2, - "PTPv2", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "PTPv2", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 319, 320, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 319, 320, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HART_IP, - "HART-IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "HART-IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 5094, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RTPS, - "RTPS", NDPI_PROTOCOL_CATEGORY_RPC, + "RTPS", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 7401, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 7401, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPC_UA, - "OPC-UA", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "OPC-UA", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4840, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_S7COMM_PLUS, - "S7CommPlus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "S7CommPlus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FINS, - "FINS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "FINS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 9600, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 9600, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 9600, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ETHERSIO, - "EtherSIO", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "EtherSIO", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 6060, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UMAS, - "UMAS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + ndpi_build_default_ports(ports_b, 6060, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UMAS, + "UMAS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BECKHOFF_ADS, - "BeckhoffADS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "BeckhoffADS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 48898, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ISO9506_1_MMS, - "ISO9506-1-MMS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "ISO9506-1-MMS", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IEEE_C37118, - "IEEE-C37118", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "IEEE-C37118", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4712, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 4713, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 4713, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ETHERSBUS, - "Ether-S-Bus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "Ether-S-Bus", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 5050, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 5050, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MONERO, - "Monero", NDPI_PROTOCOL_CATEGORY_CRYPTO_CURRENCY, + "Monero", NDPI_PROTOCOL_CATEGORY_CRYPTO_BLOCKCHAIN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DCERPC, - "DCERPC", NDPI_PROTOCOL_CATEGORY_RPC, + "DCERPC", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 135, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 135, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 135, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_subprotocols(ndpi_str, NDPI_PROTOCOL_DCERPC, NDPI_PROTOCOL_PROFINET_IO, NDPI_PROTOCOL_MATCHED_BY_CONTENT, NDPI_PROTOCOL_NO_MORE_SUBPROTOCOLS); - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PROFINET_IO, - "PROFINET_IO", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PROFINET_IO, + "PROFINET_IO", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HISLIP, - "HiSLIP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "HiSLIP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4880, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_UFTP, - "UFTP", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "UFTP", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 1044, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 1044, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPENFLOW, - "OpenFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, + "OpenFlow", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 6653, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_JSON_RPC, - "JSON-RPC", 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBDAV, - "WebDAV", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_JSON_RPC, + "JSON-RPC", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_WEBDAV, + "WebDAV", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_APACHE_KAFKA, - "Kafka", NDPI_PROTOCOL_CATEGORY_RPC, + "Kafka", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 9092, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NOMACHINE, - "NoMachine", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "NoMachine", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 4000, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 4000, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 4000, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_IEC62056, - "IEC62056", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "IEC62056", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4059, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 4059, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 4059, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HL7, - "HL7", NDPI_PROTOCOL_CATEGORY_HEALTH, + "HL7", NDPI_PROTOCOL_CATEGORY_HEALTH, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 2575, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DICOM, - "DICOM", NDPI_PROTOCOL_CATEGORY_HEALTH, + "DICOM", NDPI_PROTOCOL_CATEGORY_HEALTH, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 104, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CEPH, - "Ceph", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, + "Ceph", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 3300, 6789, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ROUGHTIME, - "Roughtime", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, + "Roughtime", NDPI_PROTOCOL_CATEGORY_SYSTEM_OS, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 2002, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 2002, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 2002, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KCP, - "KCP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "KCP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MUMBLE, - "Mumble", NDPI_PROTOCOL_CATEGORY_VOIP, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_MUMBLE, + "Mumble", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_YOJIMBO, - "Yojimbo", NDPI_PROTOCOL_CATEGORY_GAME, + "Yojimbo", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_STOMP, - "STOMP", NDPI_PROTOCOL_CATEGORY_RPC, + "STOMP", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 61613, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RADMIN, - "Radmin", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, + "Radmin", NDPI_PROTOCOL_CATEGORY_REMOTE_ACCESS, NDPI_PROTOCOL_QOE_CATEGORY_REMOTE_ACCESS, ndpi_build_default_ports(ports_a, 4899, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RAFT, - "Raft", NDPI_PROTOCOL_CATEGORY_NETWORK, + "Raft", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CIP, - "CIP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "CIP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 2222, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 2222, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GEARMAN, - "Gearman", NDPI_PROTOCOL_CATEGORY_RPC, + "Gearman", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 4730, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TENCENTGAMES, - "TencentGames", NDPI_PROTOCOL_CATEGORY_GAME, + "TencentGames", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GAIJIN, - "GaijinEntertainment", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_GAIJIN, + "GaijinEntertainment", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 20011, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 20011, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_C1222, - "ANSI_C1222", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "ANSI_C1222", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 1153, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 1153, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 1153, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DLEP, - "DLEP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "DLEP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 854, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 854, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 854, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BFD, - "BFD", NDPI_PROTOCOL_CATEGORY_NETWORK, + "BFD", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 3784, 3785, 0, 0, 0) /* UDP */); - ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_NETEASE_GAMES, - "NetEaseGames", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 3784, 3785, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_NETEASE_GAMES, + "NetEaseGames", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_PATHOFEXILE, - "PathofExile", NDPI_PROTOCOL_CATEGORY_GAME, + "PathofExile", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PFCP, - "PFCP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "PFCP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 8805, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 8805, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FLUTE, - "FLUTE", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, + "FLUTE", NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_LOLWILDRIFT, - "LoLWildRift", NDPI_PROTOCOL_CATEGORY_GAME, + "LoLWildRift", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_TESO, - "TES_Online", NDPI_PROTOCOL_CATEGORY_GAME, + "TES_Online", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LDP, - "LDP", NDPI_PROTOCOL_CATEGORY_NETWORK, + "LDP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 646, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 646, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 646, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_KNXNET_IP, - "KNXnet_IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "KNXnet_IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 3671, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 3671, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 3671, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_EGD, - "EthernetGlobalData", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "EthernetGlobalData", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_BFCP, - "BFCP", NDPI_PROTOCOL_CATEGORY_VIDEO, + "BFCP", NDPI_PROTOCOL_CATEGORY_VIDEO, NDPI_PROTOCOL_QOE_CATEGORY_LIVE_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_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_IQIYI, - "iQIYI", NDPI_PROTOCOL_CATEGORY_STREAMING, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_IQIYI, + "iQIYI", NDPI_PROTOCOL_CATEGORY_STREAMING, NDPI_PROTOCOL_QOE_CATEGORY_BUFFERED_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_VIBER_VOIP, - "ViberVoip", NDPI_PROTOCOL_CATEGORY_VOIP, + "ViberVoip", NDPI_PROTOCOL_CATEGORY_VOIP, NDPI_PROTOCOL_QOE_CATEGORY_VOIP_CALLS, 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_COD_MOBILE, - "CoD_Mobile", NDPI_PROTOCOL_CATEGORY_GAME, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_COD_MOBILE, + "CoD_Mobile", NDPI_PROTOCOL_CATEGORY_GAME, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, 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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ZUG, - "ZUG", NDPI_PROTOCOL_CATEGORY_CRYPTO_CURRENCY, + "ZUG", NDPI_PROTOCOL_CATEGORY_CRYPTO_BLOCKCHAIN, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_JRMI, - "JRMI", NDPI_PROTOCOL_CATEGORY_RPC, + "JRMI", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 1099, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_RIPE_ATLAS, - "RipeAtlas", NDPI_PROTOCOL_CATEGORY_NETWORK, + "RipeAtlas", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HLS, - "HLS", NDPI_PROTOCOL_CATEGORY_MEDIA, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_FUN, NDPI_PROTOCOL_HLS, + "HLS", NDPI_PROTOCOL_CATEGORY_MEDIA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CLICKHOUSE, - "ClickHouse", NDPI_PROTOCOL_CATEGORY_DATABASE, + "ClickHouse", NDPI_PROTOCOL_CATEGORY_DATABASE, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_NANO, - "Nano", NDPI_PROTOCOL_CATEGORY_CRYPTO_CURRENCY, + "Nano", NDPI_PROTOCOL_CATEGORY_CRYPTO_BLOCKCHAIN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 7075, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_OPENWIRE, - "OpenWire", NDPI_PROTOCOL_CATEGORY_RPC, + "OpenWire", NDPI_PROTOCOL_CATEGORY_RPC, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 61616, 0, 0, 0, 0), /* TCP */ - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0)); /* UDP */ + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0), /* UDP */ + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_CNP_IP, - "CNP-IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "CNP-IP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_ATG, - "ATG", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "ATG", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_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_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_TRDP, - "TRDP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, + "TRDP", NDPI_PROTOCOL_CATEGORY_IOT_SCADA, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, ndpi_build_default_ports(ports_a, 17225, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 17224, 17225, 0, 0, 0) /* UDP */); + ndpi_build_default_ports(ports_b, 17224, 17225, 0, 0, 0) /* UDP */, + 0); ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LUSTRE, - "Lustre", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, - 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DINGTALK, - "DingTalk", 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_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PALTALK, - "Paltalk", 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 */); - + "Lustre", NDPI_PROTOCOL_CATEGORY_DATA_TRANSFER, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_DINGTALK, + "DingTalk", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_PALTALK, + "Paltalk", NDPI_PROTOCOL_CATEGORY_CHAT, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MS_OUTLOOK, + "Outlook", NDPI_PROTOCOL_CATEGORY_MAIL, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MICROSOFT, + "Microsoft", NDPI_PROTOCOL_CATEGORY_CLOUD, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MICROSOFT_365, + "Microsoft365", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_MS_ONE_DRIVE, + "MS_OneDrive", NDPI_PROTOCOL_CATEGORY_COLLABORATIVE, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_LAGOFAST, + "LagoFast", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GEARUP_BOOSTER, + "GearUP_Booster", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_ONLINE_GAMING, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_MSDO, + "MSDO", NDPI_PROTOCOL_CATEGORY_SW_UPDATE, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 7680, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 0 /* encrypted */, 1 /* app proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_HAMACHI, + "Hamachi", NDPI_PROTOCOL_CATEGORY_VPN, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 12975, 32976, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 17771, 0, 0, 0, 0) /* UDP */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_GLBP, + "GLBP", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED, + ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, + ndpi_build_default_ports(ports_b, 3222, 0, 0, 0, 0) /* UDP */, + 0); + + /* Remove */ + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE, + "FREE", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE_1, + "FREE_1", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); + ndpi_set_proto_defaults(ndpi_str, 1 /* cleartext */, 0 /* nw proto */, NDPI_PROTOCOL_ACCEPTABLE, NDPI_PROTOCOL_FREE_107, + "FREE_107", NDPI_PROTOCOL_CATEGORY_NETWORK, NDPI_PROTOCOL_QOE_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 */, + 0); + #ifdef CUSTOM_NDPI_PROTOCOLS #include "../../../nDPI-custom/custom_ndpi_main.c" #endif /* calling function for host and content matched protocols */ init_string_based_protocols(ndpi_str); - - ndpi_validate_protocol_initialization(ndpi_str); } /* ****************************************************** */ @@ -2490,10 +2995,10 @@ int ac_domain_match_handler(AC_MATCH_t *m, AC_TEXT_t *txt, AC_REP_t *match) { /* pattern is DOMAIN. and string DOMAIN.SOMETHING ? or DOMAIN- and DOMAIN-SOMETHING */ if(start == 0 && ndpi_is_middle_string_char(pattern->astring[pattern->length - 1])) { - if(!txt->match.last || txt->match.last->rep.level < pattern->rep.level) { - txt->match.last = pattern; *match = pattern->rep; - MATCH_DEBUG_INFO("[NDPI] Searching: Found domain match (post). Proto %d \n",pattern->rep.number); - } + if(!txt->match.last || txt->match.last->rep.level < pattern->rep.level) { + txt->match.last = pattern; *match = pattern->rep; + MATCH_DEBUG_INFO("[NDPI] Searching: Found domain match (post). Proto %d \n",pattern->rep.number); + } continue; } } @@ -2671,7 +3176,7 @@ u_int16_t ndpi_network_ptree_match(struct ndpi_detection_module_struct *ndpi_str if(!ndpi_str || !ndpi_str->protocols) return(NDPI_PROTOCOL_UNKNOWN); - if(ndpi_str->ndpi_num_custom_protocols == 0) { + if(ndpi_str->num_custom_protocols == 0) { /* In case we don't have defined any custom protocol we check the ptree only in case of public IP addresses as in ndpi_content_match.c.inc @@ -2694,6 +3199,24 @@ u_int16_t ndpi_network_ptree_match(struct ndpi_detection_module_struct *ndpi_str /* ******************************************* */ +u_int16_t ndpi_network_ptree6_match(struct ndpi_detection_module_struct *ndpi_str, + struct in6_addr *pin) { + ndpi_prefix_t prefix; + ndpi_patricia_node_t *node; + + if(!ndpi_str || !ndpi_str->protocols) + return(NDPI_PROTOCOL_UNKNOWN); + + /* Make sure all in network byte order otherwise compares wont work */ + ndpi_fill_prefix_v6(&prefix, pin, 128, + ((ndpi_patricia_tree_t *) ndpi_str->protocols->v4)->maxbits); + node = ndpi_patricia_search_best(ndpi_str->protocols->v4, &prefix); + + return(node ? node->value.u.uv16[0].user_value : NDPI_PROTOCOL_UNKNOWN); +} + +/* ******************************************* */ + u_int16_t ndpi_network_port_ptree_match(struct ndpi_detection_module_struct *ndpi_str, struct in_addr *pin /* network byte order */, u_int16_t port /* network byte order */) { @@ -2703,7 +3226,7 @@ u_int16_t ndpi_network_port_ptree_match(struct ndpi_detection_module_struct *ndp if(!ndpi_str || !ndpi_str->protocols) return(NDPI_PROTOCOL_UNKNOWN); - if(ndpi_str->ndpi_num_custom_protocols == 0) { + if(ndpi_str->num_custom_protocols == 0) { /* In case we don't have defined any custom protocol we check the ptree only in case of public IP addresses as in ndpi_content_match.c.inc @@ -3175,8 +3698,8 @@ void ndpi_debug_printf(u_int16_t proto, struct ndpi_detection_module_struct *ndp va_list args; #define MAX_STR_LEN 250 char str[MAX_STR_LEN]; - if(ndpi_str != NULL && log_level > NDPI_LOG_ERROR && proto > 0 && proto < NDPI_MAX_SUPPORTED_PROTOCOLS && - !NDPI_ISSET(&ndpi_str->cfg.debug_bitmask, proto)) + if(ndpi_str != NULL && log_level > NDPI_LOG_ERROR && proto > 0 && + !ndpi_bitmask_is_set(&ndpi_str->cfg.debug_bitmask, proto)) return; va_start(args, format); ndpi_vsnprintf(str, sizeof(str) - 1, format, args); @@ -3322,7 +3845,54 @@ static const char *categories[NDPI_PROTOCOL_NUM_CATEGORIES] = { "Antimalware", "Crypto_Currency", "Gambling", - "Health" + "Health", + "ArtifIntelligence", + "Finance", + "News", + "Sport", + "Business", + "Internet", + "Blockchain_Crypto", + "Blog_Forum", + "Government", + "Education", + "CDN_Proxy", + "Hw_Sw", + "Dating", + "Travel", + "Food", + "Bots", + "Scanners", + "Hosting", + "Art", + "Fashion", + "Books", + "Science", + "Maps_Navigation", + "Login_Portal", + "Legal", + "Environmental_Services", + "Culture", + "Housing", + "Telecommunication", + "Transportation", + "Design", + "Employment", + "Events", + "Weather", + "Lifestyle", + "Real_Estate", + "Security", + "Environment", + "Hobby", + "Computer_Science", + "Construction", + "Engineering", + "Religion", + "Entertainment", + "Agriculture", + "Technology", + "Beauty" }; #if !defined(NDPI_CFFI_PREPROCESSING) && defined(__linux__) @@ -3388,6 +3958,8 @@ void ndpi_global_deinit(struct ndpi_global_context *g_ctx) { ndpi_lru_free_cache(g_ctx->msteams_global_cache); if(g_ctx->fpc_dns_global_cache) ndpi_lru_free_cache(g_ctx->fpc_dns_global_cache); + if(g_ctx->signal_global_cache) + ndpi_lru_free_cache(g_ctx->signal_global_cache); ndpi_free(g_ctx); } @@ -3396,7 +3968,7 @@ void ndpi_global_deinit(struct ndpi_global_context *g_ctx) { /* ******************************************************************** */ struct ndpi_detection_module_struct *ndpi_init_detection_module(struct ndpi_global_context *g_ctx) { - struct ndpi_detection_module_struct *ndpi_str = ndpi_malloc(sizeof(struct ndpi_detection_module_struct)); + struct ndpi_detection_module_struct *ndpi_str = ndpi_calloc(1, sizeof(struct ndpi_detection_module_struct)); int i; if(ndpi_str == NULL) { @@ -3413,8 +3985,6 @@ struct ndpi_detection_module_struct *ndpi_init_detection_module(struct ndpi_glob WSAStartup(MAKEWORD(2, 2), &wsaData); #endif - memset(ndpi_str, 0, sizeof(struct ndpi_detection_module_struct)); - #ifdef NDPI_ENABLE_DEBUG_MESSAGES set_ndpi_debug_function(ndpi_str, (ndpi_debug_function_ptr) ndpi_debug_printf); #endif /* NDPI_ENABLE_DEBUG_MESSAGES */ @@ -3425,52 +3995,30 @@ struct ndpi_detection_module_struct *ndpi_init_detection_module(struct ndpi_glob return NULL; } - ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, host_protocol_list); - ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, host_protocol_list_6); - ndpi_str->ip_risk_mask = ndpi_ptree_create(); ndpi_str->g_ctx = g_ctx; - set_default_config(&ndpi_str->cfg); - NDPI_BITMASK_SET_ALL(ndpi_str->detection_bitmask); ndpi_str->user_data = NULL; ndpi_str->tcp_max_retransmission_window_size = NDPI_DEFAULT_MAX_TCP_RETRANSMISSION_WINDOW_SIZE; - ndpi_str->ndpi_num_supported_protocols = NDPI_MAX_SUPPORTED_PROTOCOLS; - ndpi_str->ndpi_num_custom_protocols = 0; + ndpi_str->num_supported_protocols = 0; + ndpi_str->num_custom_protocols = 0; + ndpi_str->num_internal_protocols = 0; + /* We don't really need to check if these init functions fail; the code + correctly handles that case (due only to memory allocation failures) */ ndpi_str->host_automa.ac_automa = ac_automata_init(ac_domain_match_handler); - if(!ndpi_str->host_automa.ac_automa) { - ndpi_exit_detection_module(ndpi_str); - return(NULL); - } - ndpi_str->host_risk_mask_automa.ac_automa = ac_automata_init(ac_domain_match_handler); - if(!ndpi_str->host_risk_mask_automa.ac_automa) { - ndpi_exit_detection_module(ndpi_str); - return(NULL); - } - ndpi_str->common_alpns_automa.ac_automa = ac_automata_init(ac_domain_match_handler); - if(!ndpi_str->common_alpns_automa.ac_automa) { - ndpi_exit_detection_module(ndpi_str); - return(NULL); - } - - load_common_alpns(ndpi_str); - ndpi_str->tls_cert_subject_automa.ac_automa = ac_automata_init(NULL); - if(!ndpi_str->tls_cert_subject_automa.ac_automa) { - ndpi_exit_detection_module(ndpi_str); - return(NULL); - } - - ndpi_str->malicious_ja4_hashmap = NULL; /* Initialized on demand */ - ndpi_str->malicious_sha1_hashmap = NULL; /* Initialized on demand */ ndpi_str->risky_domain_automa.ac_automa = NULL; /* Initialized on demand */ - ndpi_str->trusted_issuer_dn = NULL; + + ndpi_str->malicious_ja4_hashmap = NULL; /* Initialized on demand */ + ndpi_str->malicious_sha1_hashmap = NULL; /* Initialized on demand */ + + ndpi_str->trusted_issuer_dn = NULL; /* Initialized on demand */ ndpi_str->custom_categories.sc_hostnames = ndpi_domain_classify_alloc(); if(!ndpi_str->custom_categories.sc_hostnames) { @@ -3523,7 +4071,47 @@ struct ndpi_detection_module_struct *ndpi_init_detection_module(struct ndpi_glob for(i = 0; i < NUM_CUSTOM_CATEGORIES; i++) ndpi_snprintf(ndpi_str->custom_category_labels[i], CUSTOM_CATEGORY_LABEL_LEN, "User custom category %u", - (unsigned int) (i + 1)); + (unsigned int) (i + 1)); + + /* + *** Note that we don't know if a (internal) protocol is enabled or not until `ndpi_finalize_initialization()` *** + */ + + /* Build `ndpi_str->proto_defaults[]` array. This array does NOT depend on protocols being enable or not! */ + init_protocol_defaults(ndpi_str); + + /* At this point, we MUST have loaded ALL the internal protocols and NONE of + the custom protocols! + Only the first **consecutive** `ndpi_str->num_supported_protocols` entries in the + array `ndpi_str->proto_defaults[]` MUST have been initialized! + In other words, all the other functions can safely access to `ndpi_str->num_supported_protocols` and + `ndpi_str->num_internal_protocols` + + Sanity checks + */ + for(i = 0; i < (int)ndpi_str->num_supported_protocols; i++) { + if(ndpi_str->proto_defaults[i].protoName[0] == '\0' || + ndpi_str->proto_defaults[i].isCustomProto) { + NDPI_LOG_ERR(ndpi_str, "INTERNAL ERROR protocols %d/%d %d\n", + i, ndpi_str->num_supported_protocols, + ndpi_str->proto_defaults[i].isCustomProto); + ndpi_exit_detection_module(ndpi_str); + return(NULL); + } + } + if(ndpi_str->num_supported_protocols != ndpi_str->num_internal_protocols) { + ndpi_exit_detection_module(ndpi_str); + return(NULL); + } + + /* When we know the number of internal protocols, we can set the default configuration + (we need the number to proper initialize the bitmasks)*/ + if(set_default_config(&ndpi_str->cfg, + ndpi_str->num_internal_protocols) != 0) { + NDPI_LOG_ERR(ndpi_str, "Error allocating set_default_config\n"); + ndpi_exit_detection_module(ndpi_str); + return(NULL); + } return(ndpi_str); } @@ -3578,7 +4166,7 @@ static void ndpi_add_domain_risk_exceptions(struct ndpi_detection_module_struct static int is_ip_list_enabled(struct ndpi_detection_module_struct *ndpi_str, int protoId) { - if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_str->cfg.ip_list_bitmask, protoId) == 0) + if(ndpi_bitmask_is_set(&ndpi_str->cfg.ip_list_bitmask, protoId) == 0) return 0; return 1; } @@ -3587,7 +4175,7 @@ static int is_ip_list_enabled(struct ndpi_detection_module_struct *ndpi_str, int int is_monitoring_enabled(struct ndpi_detection_module_struct *ndpi_str, int protoId) { - if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_str->cfg.monitoring, protoId) == 0) + if(ndpi_bitmask_is_set(&ndpi_str->cfg.monitoring, protoId) == 0) return 0; return 1; } @@ -3600,11 +4188,22 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) if(!ndpi_str) return -1; + if(ndpi_str->finalized) /* Already finalized */ + return 0; + + load_string_based_protocols(ndpi_str); + + if(dissectors_init(ndpi_str)) { + NDPI_LOG_ERR(ndpi_str, "Error dissectors_init\n"); + return -1; + } + + load_default_ports(ndpi_str); + if(!ndpi_str->custom_categories.categories_loaded) ndpi_enable_loaded_categories(ndpi_str); - if(ndpi_str->finalized) /* Already finalized */ - return 0; + validate_protocol_initialization(ndpi_str); if(ndpi_str->cfg.libgcrypt_init) { if(!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P)) { @@ -3620,6 +4219,10 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) NDPI_LOG_DBG(ndpi_str, "Libgcrypt initialization skipped\n"); } + /* Hard-coded lists */ + ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, host_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, host_protocol_list_6); + if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_AMAZON_AWS)) { ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_amazon_aws_protocol_list); ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_amazon_aws_protocol_list_6); @@ -3664,10 +4267,6 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_msteams_protocol_list); ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_msteams_protocol_list_6); } - if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_PROTONVPN)) { - ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_protonvpn_protocol_list); - ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_protonvpn_protocol_list_6); - } if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_TOR)) { ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_tor_protocol_list); ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_tor_protocol_list_6); @@ -3736,13 +4335,13 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_dropbox_protocol_list); ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_dropbox_protocol_list_6); } - if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_STARCRAFT)) { - ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_starcraft_protocol_list); - ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_starcraft_protocol_list_6); + if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_BLIZZARD)) { + ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_blizzard_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_blizzard_protocol_list_6); } - if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_UBUNTUONE)) { - ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_ubuntuone_protocol_list); - ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_ubuntuone_protocol_list_6); + if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_CANONICAL)) { + ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_canonical_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_canonical_protocol_list_6); } if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_TWITCH)) { ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_twitch_protocol_list); @@ -3828,6 +4427,14 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_roblox_protocol_list); ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_roblox_protocol_list_6); } + if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_IMO)) { + ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_imo_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_imo_protocol_list_6); + } + if(is_ip_list_enabled(ndpi_str, NDPI_PROTOCOL_BADOO)) { + ndpi_init_ptree_ipv4(ndpi_str->protocols->v4, ndpi_protocol_badoo_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->protocols->v6, ndpi_protocol_badoo_protocol_list_6); + } if(ndpi_str->cfg.flow_risk_lists_enabled) { if((ndpi_str->ip_risk = ndpi_ptree_create()) == NULL) { @@ -3840,10 +4447,10 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->ip_risk->v6, ndpi_anonymous_subscriber_icloud_private_relay_protocol_list_6); } - if(ndpi_str->cfg.risk_anonymous_subscriber_list_protonvpn_enabled) { - ndpi_init_ptree_ipv4(ndpi_str->ip_risk->v4, ndpi_anonymous_subscriber_protonvpn_protocol_list); - ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->ip_risk->v6, ndpi_anonymous_subscriber_protonvpn_protocol_list_6); - } + if(ndpi_str->cfg.risk_anonymous_subscriber_list_tor_exit_nodes_enabled) { + ndpi_init_ptree_ipv4(ndpi_str->ip_risk->v4, ndpi_anonymous_subscriber_tor_exit_nodes_protocol_list); + ndpi_init_ptree_ipv6(ndpi_str, ndpi_str->ip_risk->v6, ndpi_anonymous_subscriber_tor_exit_nodes_protocol_list_6); + } if(ndpi_str->cfg.risk_crawler_bot_list_enabled) { ndpi_init_ptree_ipv4(ndpi_str->ip_risk->v4, ndpi_http_crawler_bot_protocol_list); @@ -3856,6 +4463,10 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_add_domain_risk_exceptions(ndpi_str); + load_common_alpns(ndpi_str); + + ndpi_load_tcp_fingerprints(ndpi_str); + if(ndpi_str->cfg.ookla_cache_num_entries > 0) { if(ndpi_str->cfg.ookla_cache_scope == NDPI_LRUCACHE_SCOPE_GLOBAL) { if(!ndpi_str->g_ctx->ookla_global_cache) { @@ -3872,6 +4483,24 @@ int ndpi_finalize_initialization(struct ndpi_detection_module_struct *ndpi_str) ndpi_str->cfg.ookla_cache_num_entries); } } + + if(ndpi_str->cfg.signal_cache_num_entries > 0) { + if(ndpi_str->cfg.signal_cache_scope == NDPI_LRUCACHE_SCOPE_GLOBAL) { + if(!ndpi_str->g_ctx->signal_global_cache) { + ndpi_str->g_ctx->signal_global_cache = ndpi_lru_cache_init(ndpi_str->cfg.signal_cache_num_entries, + ndpi_str->cfg.signal_cache_ttl, 1); + } + ndpi_str->signal_cache = ndpi_str->g_ctx->signal_global_cache; + } else { + ndpi_str->signal_cache = ndpi_lru_cache_init(ndpi_str->cfg.signal_cache_num_entries, + ndpi_str->cfg.signal_cache_ttl, 0); + } + if(!ndpi_str->signal_cache) { + NDPI_LOG_ERR(ndpi_str, "Error allocating lru cache (num_entries %u)\n", + ndpi_str->cfg.signal_cache_num_entries); + } + } + if(ndpi_str->cfg.bittorrent_cache_num_entries > 0) { if(ndpi_str->cfg.bittorrent_cache_scope == NDPI_LRUCACHE_SCOPE_GLOBAL) { if(!ndpi_str->g_ctx->bittorrent_global_cache) { @@ -4188,7 +4817,7 @@ int ndpi_match_custom_category(struct ndpi_detection_module_struct *ndpi_str, buf[name_len] = '\0'; if(ndpi_domain_classify_hostname(ndpi_str, ndpi_str->custom_categories.sc_hostnames, - &class_id, buf)) { + &class_id, buf)) { *category = (ndpi_protocol_category_t)class_id; return(0); } else @@ -4258,14 +4887,23 @@ int ndpi_get_custom_category_match(struct ndpi_detection_module_struct *ndpi_str void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_str) { if(ndpi_str != NULL) { - int i; + unsigned int i; + - for (i = 0; i < (NDPI_MAX_SUPPORTED_PROTOCOLS + NDPI_MAX_NUM_CUSTOM_PROTOCOLS); i++) { - if(ndpi_str->proto_defaults[i].protoName) - ndpi_free(ndpi_str->proto_defaults[i].protoName); + ndpi_bitmask_free(&ndpi_str->cfg.detection_bitmask); + ndpi_bitmask_free(&ndpi_str->cfg.debug_bitmask); + ndpi_bitmask_free(&ndpi_str->cfg.ip_list_bitmask); + ndpi_bitmask_free(&ndpi_str->cfg.monitoring); + ndpi_bitmask_free(&ndpi_str->cfg.flowrisk_bitmask); + ndpi_bitmask_free(&ndpi_str->cfg.flowrisk_info_bitmask); + + for (i = 0; i < ndpi_str->proto_defaults_num_allocated; i++) { if(ndpi_str->proto_defaults[i].subprotocols != NULL) ndpi_free(ndpi_str->proto_defaults[i].subprotocols); } + ndpi_free(ndpi_str->proto_defaults); + + ndpi_free(ndpi_str->ndpi_to_user_proto_id); #ifdef HAVE_NBPF for(i = 0; (i < MAX_NBPF_CUSTOM_PROTO) && (ndpi_str->nbpf_custom_proto[i].tree != NULL); i++) @@ -4280,6 +4918,10 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_str) { ndpi_str->ookla_cache) ndpi_lru_free_cache(ndpi_str->ookla_cache); + if(!ndpi_str->cfg.signal_cache_scope && + ndpi_str->signal_cache) + ndpi_lru_free_cache(ndpi_str->signal_cache); + if(!ndpi_str->cfg.bittorrent_cache_scope && ndpi_str->bittorrent_cache) ndpi_lru_free_cache(ndpi_str->bittorrent_cache); @@ -4328,6 +4970,9 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_str) { if(ndpi_str->malicious_sha1_hashmap != NULL) ndpi_hash_free(&ndpi_str->malicious_sha1_hashmap); + if(ndpi_str->tcp_fingerprint_hashmap != NULL) + ndpi_hash_free(&ndpi_str->tcp_fingerprint_hashmap); + ndpi_domain_classify_free(ndpi_str->custom_categories.sc_hostnames_shadow); ndpi_domain_classify_free(ndpi_str->custom_categories.sc_hostnames); @@ -4420,16 +5065,15 @@ static default_ports_tree_node_t *ndpi_get_guessed_protocol_id(struct ndpi_detec /* ****************************************************** */ -static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, +static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str, u_int8_t proto, u_int16_t sport, u_int16_t dport, u_int8_t *user_defined_proto) { - struct ndpi_packet_struct *packet = &ndpi_str->packet; *user_defined_proto = 0; /* Default */ if(sport && dport) { default_ports_tree_node_t *found = ndpi_get_guessed_protocol_id(ndpi_str, proto, sport, dport); if(found != NULL) { - u_int16_t guessed_proto = found->proto->protoId; + u_int16_t guessed_proto = found->proto_idx; *user_defined_proto = found->customUserProto; return(guessed_proto); @@ -4437,98 +5081,61 @@ static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str } else { /* No TCP/UDP */ + /* All these calls to `is_proto_enabled()` are needed to avoid classification by-port + if the protocol is disabled */ switch(proto) { case NDPI_IPSEC_PROTOCOL_ESP: + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_ESP)) + return(NDPI_PROTOCOL_IP_ESP); + break; case NDPI_IPSEC_PROTOCOL_AH: - return(NDPI_PROTOCOL_IPSEC); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_AH)) + return(NDPI_PROTOCOL_IP_AH); + break; case NDPI_GRE_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_GRE); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_GRE)) + return(NDPI_PROTOCOL_IP_GRE); + break; case NDPI_PGM_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_PGM); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_PGM)) + return(NDPI_PROTOCOL_IP_PGM); + break; case NDPI_PIM_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_PIM); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_PIM)) + return(NDPI_PROTOCOL_IP_PIM); + break; case NDPI_ICMP_PROTOCOL_TYPE: - if(flow && (packet->payload_packet_len > 0)) { - flow->entropy = 0.0f; - /* Run some basic consistency tests */ - - if(packet->payload_packet_len < sizeof(struct ndpi_icmphdr)) { - char buf[64]; - - snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)", - packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmphdr)); - ndpi_set_risk(ndpi_str, flow, NDPI_MALFORMED_PACKET, buf); - } else { - u_int8_t icmp_type = (u_int8_t)packet->payload[0]; - u_int8_t icmp_code = (u_int8_t)packet->payload[1]; - - /* https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml */ - if(((icmp_type >= 44) && (icmp_type <= 252)) - || (icmp_code > 15)) { - char buf[64]; - - snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)", - icmp_type, icmp_code); - - ndpi_set_risk(ndpi_str, flow, NDPI_MALFORMED_PACKET, buf); - } - - if(packet->payload_packet_len > sizeof(struct ndpi_icmphdr)) { - if(ndpi_str->cfg.compute_entropy && (flow->skip_entropy_check == 0)) { - flow->entropy = ndpi_entropy(packet->payload + sizeof(struct ndpi_icmphdr), - packet->payload_packet_len - sizeof(struct ndpi_icmphdr)); - ndpi_entropy2risk(ndpi_str, flow); - } - - u_int16_t chksm = icmp4_checksum(packet->payload, packet->payload_packet_len); - - if(chksm) { - ndpi_set_risk(ndpi_str, flow, NDPI_MALFORMED_PACKET, "Invalid ICMP checksum"); - } - } - } - } - return(NDPI_PROTOCOL_IP_ICMP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_ICMP)) + return(NDPI_PROTOCOL_IP_ICMP); + break; case NDPI_IGMP_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_IGMP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_IGMP)) + return(NDPI_PROTOCOL_IP_IGMP); + break; case NDPI_EGP_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_EGP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_EGP)) + return(NDPI_PROTOCOL_IP_EGP); + break; case NDPI_SCTP_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_SCTP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_SCTP)) + return(NDPI_PROTOCOL_IP_SCTP); + break; case NDPI_OSPF_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_OSPF); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_OSPF)) + return(NDPI_PROTOCOL_IP_OSPF); + break; case NDPI_IPIP_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_IP_IN_IP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_IP_IN_IP)) + return(NDPI_PROTOCOL_IP_IP_IN_IP); + break; case NDPI_ICMPV6_PROTOCOL_TYPE: - if(flow && (packet->payload_packet_len > 0 /* is 0 when guessing */)) { - /* Run some basic consistency tests */ - - if(packet->payload_packet_len < sizeof(struct ndpi_icmp6hdr)) { - char buf[64]; - - snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)", - packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmp6hdr)); - - ndpi_set_risk(ndpi_str, flow, NDPI_MALFORMED_PACKET, buf); - } else { - u_int8_t icmp6_type = (u_int8_t)packet->payload[0]; - u_int8_t icmp6_code = (u_int8_t)packet->payload[1]; - - /* https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 */ - if(((icmp6_type >= 5) && (icmp6_type <= 127)) - || ((icmp6_code >= 156) && (icmp6_type != 255))) { - char buf[64]; - - snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)", - icmp6_type, icmp6_code); - - ndpi_set_risk(ndpi_str, flow, NDPI_MALFORMED_PACKET, buf); - } - } - } - return(NDPI_PROTOCOL_IP_ICMPV6); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_ICMPV6)) + return(NDPI_PROTOCOL_IP_ICMPV6); + break; case NDPI_VRRP_PROTOCOL_TYPE: - return(NDPI_PROTOCOL_IP_VRRP); + if(is_proto_enabled(ndpi_str, NDPI_PROTOCOL_IP_VRRP)) + return(NDPI_PROTOCOL_IP_VRRP); + break; } } @@ -4537,8 +5144,20 @@ static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str /* ******************************************************************** */ -u_int ndpi_get_num_supported_protocols(struct ndpi_detection_module_struct *ndpi_str) { - return(ndpi_str ? ndpi_str->ndpi_num_supported_protocols : 0); +u_int ndpi_get_num_protocols(struct ndpi_detection_module_struct *ndpi_str) { + if(!ndpi_str || !ndpi_str->finalized) + return 0; + return ndpi_str->num_supported_protocols; +} + +/* ******************************************************************** */ + +bool ndpi_is_custom_protocol(struct ndpi_detection_module_struct *ndpi_str, u_int16_t proto_id) +{ + if(!ndpi_str || proto_id >= ndpi_str->proto_defaults_num_allocated) + return false; + + return(ndpi_str->proto_defaults[proto_id].isCustomProto ? true : false); } /* ******************************************************************** */ @@ -4699,6 +5318,10 @@ static int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, u_int subprotocol_id, i; int ret = 0; + char *additional_params = NULL; + ndpi_protocol_category_t category = NDPI_PROTOCOL_CATEGORY_UNSPECIFIED; + ndpi_protocol_breed_t breed = NDPI_PROTOCOL_ACCEPTABLE; + at = strrchr(rule, '@'); if(at == NULL) { /* This looks like a mask rule or an invalid rule */ @@ -4759,42 +5382,92 @@ static int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, def = &ndpi_str->proto_defaults[subprotocol_id]; if(def == NULL) { - ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; - char *equal = strchr(proto, '='); - u_int16_t user_proto_id = ndpi_str->ndpi_num_supported_protocols; + ndpi_port_range ports_a[MAX_DEFAULT_PORTS], ports_b[MAX_DEFAULT_PORTS]; + u_int16_t user_proto_id, proto_id; - if(equal != NULL) { - /* PROTO=VALUE */ + /* The hard limit on protocols number depends on protocol ids being u_int16_t */ + if(ndpi_str->num_supported_protocols >= 65535) { + NDPI_LOG_ERR(ndpi_str, "Too many protocols defined (%u): skipping protocol\n", + ndpi_str->num_custom_protocols); + return(-2); + } - equal[0] = '\0'; - user_proto_id = atoi(&equal[1]); + proto_id = ndpi_str->num_supported_protocols; /* First free id */ + user_proto_id = proto_id; /* By default, external id is equal to the internal one */ - /* NOTE: ndpi_str->ndpi_num_supported_protocols >= NDPI_MAX_SUPPORTED_PROTOCOLS */ - ndpi_add_user_proto_id_mapping(ndpi_str, ndpi_str->ndpi_num_supported_protocols, user_proto_id); + char *first_comma = strchr(proto, ','); + char *proto_name = proto; + + if(first_comma != NULL) { + first_comma[0] = '\0'; + additional_params = &first_comma[1]; + } - /* printf("***** ADDING MAPPING %s: %u -> %u\n", proto, ndpi_str->ndpi_num_supported_protocols, user_proto_id); */ - } else - ndpi_add_user_proto_id_mapping(ndpi_str, ndpi_str->ndpi_num_supported_protocols, - ndpi_str->ndpi_num_supported_protocols); + char *equal = strchr(proto_name, '='); + + if(equal != NULL) { + equal[0] = '\0'; + char *id_part = &equal[1]; + + const char *errstrp; + user_proto_id = ndpi_strtonum(id_part, ndpi_str->num_supported_protocols, 65535, &errstrp, 10); + if(errstrp != NULL) { + NDPI_LOG_ERR(ndpi_str, "Invalid protocol ID '%s': %s\n", id_part, errstrp); + return(-1); + } - if(ndpi_str->ndpi_num_custom_protocols >= (NDPI_MAX_NUM_CUSTOM_PROTOCOLS - 1)) { - NDPI_LOG_ERR(ndpi_str, "Too many protocols defined (%u): skipping protocol %s\n", - ndpi_str->ndpi_num_custom_protocols, proto); - return(-2); + NDPI_LOG_DBG(ndpi_str, "***** ADDING MAPPING %s: %u -> %u\n", proto_name, proto_id, user_proto_id); + } + + ndpi_add_user_proto_id_mapping(ndpi_str, proto_id, user_proto_id); + + /* Parse additional parameters like cat= and breed= */ + if(additional_params != NULL) { + char *param = NULL; + char *params_copy = additional_params; + + while((param = strsep(¶ms_copy, ",")) != NULL) { + if(strncmp(param, "cat=", 4) == 0) { + char *cat_value = ¶m[4]; + const char *errstrp; + + int cat_id = ndpi_strtonum(cat_value, 1, NDPI_PROTOCOL_NUM_CATEGORIES-1, &errstrp, 10); + if(errstrp == NULL) { + category = (ndpi_protocol_category_t)cat_id; + } else { + NDPI_LOG_ERR(ndpi_str, "Invalid category ID '%s': %s\n", cat_value, errstrp); + } + } else if (strncmp(param, "breed=", 6) == 0) { + char *breed_value = ¶m[6]; + const char *errstrp; + + int breed_id = ndpi_strtonum(breed_value, NDPI_PROTOCOL_SAFE, NDPI_PROTOCOL_UNRATED-1, &errstrp, 10); + if(errstrp == NULL) { + breed = (ndpi_protocol_breed_t)breed_id; + } else { + NDPI_LOG_ERR(ndpi_str, "Invalid breed ID '%s': %s\n", breed_value, errstrp); + } + } } + } - ndpi_set_proto_defaults(ndpi_str, 1 /* is_cleartext */, - 1 /* is_app_protocol */, - NDPI_PROTOCOL_ACCEPTABLE, /* breed*/ - ndpi_str->ndpi_num_supported_protocols /* protoId */, - proto, /* protoName */ - NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, /* TODO add protocol category support in rules */ - ndpi_build_default_ports(ports_a, 0, 0, 0, 0, 0) /* TCP */, - ndpi_build_default_ports(ports_b, 0, 0, 0, 0, 0) /* UDP */); + ret = ndpi_set_proto_defaults(ndpi_str, 1 /* is_cleartext */, + 1 /* is_app_protocol */, + breed, + proto_id, + proto, /* protoName */ + category, + NDPI_PROTOCOL_QOE_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 */, + 1 /* custom protocol */); + if(ret != 0) { + NDPI_LOG_ERR(ndpi_str, "Error ndpi_set_proto_defaults. Skip rule\n"); + return(-3); + } - def = &ndpi_str->proto_defaults[ndpi_str->ndpi_num_supported_protocols]; - subprotocol_id = ndpi_str->ndpi_num_supported_protocols; - ndpi_str->ndpi_num_supported_protocols++, ndpi_str->ndpi_num_custom_protocols++; + def = &ndpi_str->proto_defaults[proto_id]; + subprotocol_id = proto_id; } while((elem = strsep(&rule, ",")) != NULL) { @@ -4848,11 +5521,11 @@ static int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, if((ndpi_str->nbpf_custom_proto[ndpi_str->num_nbpf_custom_proto].tree = nbpf_parse(filter, NULL)) == NULL) { NDPI_LOG_ERR(ndpi_str, "nBPF invalid filter: %s\n", filter) - return(-5); /* Invalid filter */ + return(-5); /* Invalid filter */ } else ndpi_str->nbpf_custom_proto[ndpi_str->num_nbpf_custom_proto].l7_protocol = subprotocol_id; - ndpi_str->num_nbpf_custom_proto++; + ndpi_str->num_nbpf_custom_proto++; #else NDPI_LOG_INFO(ndpi_str, "nDPI compiled without nBPF support: skipping rule\n"); return(-6); @@ -4861,31 +5534,47 @@ static int ndpi_handle_rule(struct ndpi_detection_module_struct *ndpi_str, if(is_tcp || is_udp) { u_int p_low, p_high; - int rc; + int j; if(sscanf(value, "%u-%u", &p_low, &p_high) == 2) range.port_low = p_low, range.port_high = p_high; else range.port_low = range.port_high = atoi(&elem[4]); - - rc = addDefaultPort(ndpi_str, &range, def, 1 /* Custom user proto */, - is_tcp ? &ndpi_str->tcpRoot : &ndpi_str->udpRoot, __FUNCTION__, __LINE__); - - if(rc != 0) ret = rc; + range.is_custom = 1; + + /* Even if this is not a real default port (it is a custom rule matching a port), + we save the information into def->*_default_ports[] and it will be loaded into + the tree during `ndpi_finalize_initialization()`. + */ + if(is_tcp) { + for(j = 0; j < MAX_DEFAULT_PORTS; j++) { + if(def->tcp_default_ports[j].port_low == 0) { + def->tcp_default_ports[j] = range; + break; + } + } + } else { + for(j = 0; j < MAX_DEFAULT_PORTS; j++) { + if(def->udp_default_ports[j].port_low == 0) { + def->udp_default_ports[j] = range; + break; + } + } + } } else if(is_ip) { int rc = ndpi_add_host_ip_subprotocol(ndpi_str, value, subprotocol_id, is_ipv6_ip); if(rc != 0) return(rc); } else { - ndpi_add_host_url_subprotocol(ndpi_str, value, subprotocol_id, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, - NDPI_PROTOCOL_ACCEPTABLE, 0); + ndpi_add_host_url_subprotocol(ndpi_str, value, subprotocol_id, category, breed, 0); } } return(ret); } + /* ******************************************************************** */ /* @@ -5018,22 +5707,21 @@ int load_categories_file_fd(struct ndpi_detection_module_struct *ndpi_str, if(category) { const char *errstrp; cat_id = ndpi_strtonum(category, 1, NDPI_PROTOCOL_NUM_CATEGORIES - 1, &errstrp, 10); - if(errstrp == NULL) { + if(errstrp == NULL) { int rc = ndpi_load_category(ndpi_str, name, (ndpi_protocol_category_t)cat_id, user_data); if(rc >= 0) - num++; + num++; } } } } /* - Not necessay to call ndpi_enable_loaded_categories() as - ndpi_set_protocol_detection_bitmask2() will do that + Not necessary to call ndpi_enable_loaded_categories() */ /* ndpi_enable_loaded_categories(ndpi_str); */ @@ -5106,16 +5794,20 @@ int load_category_file_fd(struct ndpi_detection_module_struct *ndpi_str, line[i] = '\0'; break; } - if (line[i] != '-' && line[i] != '.' && ndpi_isalnum(line[i]) == 0 + + if (line[i] != '-' + && line[i] != '.' + && line[i] != ':' + && line[i] != '/' + && ndpi_isalnum(line[i]) == 0 /* non standard checks for the sake of compatibility */ && line[i] != '_') break; } - if (i != len - 2 && i != len - 1) - { - NDPI_LOG_ERR(ndpi_str, "[NDPI] Failed to read file line #%u, invalid characters found\n", - lines_read); + if ((i != len - 2) && (i != len - 1) && (line[i] != '\0')) { + NDPI_LOG_ERR(ndpi_str, "[NDPI] Failed to read file line #%u [%s], invalid characters [%c] found [pos: %u]\n", + lines_read, line, line[i], i); failed_lines++; continue; } @@ -5126,12 +5818,106 @@ int load_category_file_fd(struct ndpi_detection_module_struct *ndpi_str, if(failed_lines) return(-1 * failed_lines); + + return(num_loaded); +} + +/* ******************************************************************** */ + +int load_protocol_id_file_fd(struct ndpi_detection_module_struct *ndpi_str, + FILE *fd, u_int16_t protocol_id) { + char buffer[256], *line; + u_int num_loaded = 0; + unsigned int failed_lines = 0; + unsigned int lines_read = 0; + + (void)lines_read; + + if(!ndpi_str || !fd || !ndpi_str->protocols) + return(0); + + while(1) { + int len; + + line = fgets(buffer, sizeof(buffer), fd); + + if(line == NULL) + break; + + lines_read++; + len = strlen(line); + + if(len <= 1 || len == sizeof(buffer) - 1) { + NDPI_LOG_ERR(ndpi_str, "[NDPI] Failed to read file line #%u, line too short/long\n", + lines_read); + failed_lines++; + continue; + } else if (line[0] == '#') + continue; + + int i = 0; + + for (i = 0; i < len; ++i) { + if (line[i] == '\r' || line[i] == '\n') { + line[i] = '\0'; + break; + } + } + + if(strchr(line, ':') != NULL) { + if(ndpi_add_host_ip_subprotocol(ndpi_str, line, protocol_id, 1 /* IPv6 */) == 0) + num_loaded++; + else + failed_lines++; + } else if(strchr(line, '.') != NULL) { + /* IPv4 */ + if(ndpi_add_host_ip_subprotocol(ndpi_str, line, protocol_id, 0 /* IPv4 */) == 0) + num_loaded++; + else + failed_lines++; + } else { + /* No clue */ + failed_lines++; + continue; + } + } + + if(failed_lines) + return(-1 * failed_lines); + return(num_loaded); } /* ******************************************************************** */ /* + Loads a file (separated by <cr>) of IP addresses associated with the + specified protocol +*/ +int ndpi_load_protocol_id_file(struct ndpi_detection_module_struct *ndpi_str, + char *path, u_int16_t protocol_id) { + int rc; + FILE *fd; + + if(!ndpi_str || !path) + return(-1); + + fd = fopen(path, "r"); + if(fd == NULL) { + NDPI_LOG_ERR(ndpi_str, "Unable to open file %s [%s]\n", path, strerror(errno)); + return -1; + } + + rc = load_protocol_id_file_fd(ndpi_str, fd, protocol_id); + + fclose(fd); + + return rc; +} + +/* ******************************************************************** */ + +/* Load files (whose name is <categoryid>_<label>.<extension>) stored in a directory and bind each domain to the specified category. @@ -5195,6 +5981,70 @@ int ndpi_load_categories_dir(struct ndpi_detection_module_struct *ndpi_str, /* ******************************************************************** */ +/* + Load files (whose name is <protocolid>_<label>.<extension>) stored + in a directory and bind each domain to the specified protocol. + + It can be used to load all files store in the lists/ directory + + It returns the number of loaded files or -1 in case of failure +*/ +int ndpi_load_protocols_dir(struct ndpi_detection_module_struct *ndpi_str, + char *dir_path) { + DIR *dirp; + struct dirent *dp; + int failed_files = 0; + int num_loaded = 0; + + if(!ndpi_str || !dir_path) + return(0); + + dirp = opendir(dir_path); + if (dirp == NULL) + return(0); + + while((dp = readdir(dirp)) != NULL) { + char *underscore, *extn; + + if(dp->d_name[0] == '.') continue; + extn = strrchr(dp->d_name, '.'); + + if((extn == NULL) || strcmp(extn, ".list")) + continue; + + /* Check if the format is <proto it>_<string>.<extension> */ + if((underscore = strchr(dp->d_name, '_')) != NULL) { + int proto_id; + const char *errstrp; + + underscore[0] = '\0'; + proto_id = ndpi_strtonum(dp->d_name, 1, ndpi_str->num_internal_protocols - 1, &errstrp, 10); + if(errstrp == NULL) { + /* Valid file */ + char path[512]; + + underscore[0] = '_'; + snprintf(path, sizeof(path), "%s/%s", dir_path, dp->d_name); + + if (ndpi_load_protocol_id_file(ndpi_str, path, proto_id) < 0) { + NDPI_LOG_ERR(ndpi_str, "Failed to load '%s'\n", path); + failed_files++; + }else + num_loaded++; + } + } + } + + (void)closedir(dirp); + + if(failed_files) + return(-1 * failed_files); + + return(num_loaded); +} + +/* ******************************************************************** */ + static int ndpi_load_risky_domain(struct ndpi_detection_module_struct *ndpi_str, char* domain_name) { if(ndpi_str->risky_domain_automa.ac_automa == NULL) { @@ -5204,8 +6054,8 @@ static int ndpi_load_risky_domain(struct ndpi_detection_module_struct *ndpi_str, ac_automata_name(ndpi_str->risky_domain_automa.ac_automa, "risky", 0); } - return ndpi_string_to_automa(ndpi_str, (AC_AUTOMATA_t *)ndpi_str->risky_domain_automa.ac_automa, - domain_name, 1, 0, 0, 0, 1); /* domain, protocol, category, breed, level , at_end */ + return string_to_automa((AC_AUTOMATA_t *)ndpi_str->risky_domain_automa.ac_automa, + domain_name, 1, 0, 0, 0, 1); /* domain, protocol, category, breed, level , at_end */ } /* ******************************************************************** */ @@ -5529,830 +6379,834 @@ int load_protocols_file_fd(struct ndpi_detection_module_struct *ndpi_str, FILE * /* ******************************************************************** */ -/* ntop */ -void ndpi_set_bitmask_protocol_detection(char *label, struct ndpi_detection_module_struct *ndpi_str, - const u_int32_t idx, - u_int16_t ndpi_protocol_id, - void (*func)(struct ndpi_detection_module_struct *, - struct ndpi_flow_struct *flow), - const NDPI_SELECTION_BITMASK_PROTOCOL_SIZE ndpi_selection_bitmask, - u_int8_t b_save_bitmask_unknow, u_int8_t b_add_detection_bitmask) { - (void)label; - /* - Compare specify protocol bitmask with main detection bitmask - */ - if(is_proto_enabled(ndpi_str, ndpi_protocol_id)) { -#ifdef NDPI_ENABLE_DEBUG_MESSAGES - NDPI_LOG_DBG2(ndpi_str, - "[NDPI] ndpi_set_bitmask_protocol_detection: %s : [callback_buffer] idx= %u, [proto_defaults] " - "protocol_id=%u\n", - label, idx, ndpi_protocol_id); -#endif +void register_dissector(char *dissector_name, struct ndpi_detection_module_struct *ndpi_str, + void (*func)(struct ndpi_detection_module_struct *, + struct ndpi_flow_struct *flow), + const NDPI_SELECTION_BITMASK_PROTOCOL_SIZE ndpi_selection_bitmask, + int num_protocol_ids, ...) +{ + va_list ap; + int i, dissector_enabled = 0, first_protocol_id = -1; + u_int32_t idx = ndpi_str->callback_buffer_num; - if(ndpi_str->proto_defaults[ndpi_protocol_id].protoIdx != 0) { - NDPI_LOG_DBG2(ndpi_str, "[NDPI] Internal error: protocol %s/%u has been already registered\n", label, - ndpi_protocol_id); -#ifdef NDPI_ENABLE_DEBUG_MESSAGES + if(idx >= NDPI_MAX_NUM_DISSECTORS) { + /* + * You need to increase NDPI_MAX_NUM_DISSECTORS define and recompile everything! + * Please note that custom protocols are independent from NDPI_MAX_NUM_DISSECTORS, so + * if you hit this error is because you are already changing the code + * (adding a new dissector)... + */ + NDPI_LOG_ERR(ndpi_str, "[NDPI] Internal Error. Too many dissectors!!\n"); + /* Not sure what to do here...*/ + return; + } + + va_start(ap, num_protocol_ids); + for(i = 0; i < num_protocol_ids; i++) { + int ndpi_protocol_id = va_arg(ap, int); + if(!is_proto_enabled(ndpi_str, ndpi_protocol_id)) { + NDPI_LOG_DBG(ndpi_str, "Protocol %d not enabled for dissector %s\n", + ndpi_protocol_id, dissector_name); } else { - NDPI_LOG_DBG2(ndpi_str, "[NDPI] Adding %s with protocol id %d\n", label, ndpi_protocol_id); -#endif + + if(ndpi_str->proto_defaults[ndpi_protocol_id].dissector_idx != 0) { + NDPI_LOG_ERR(ndpi_str, "Internal error: protocol %d/%s has been already registered (%d/%d)\n", + ndpi_protocol_id, dissector_name, + ndpi_str->proto_defaults[ndpi_protocol_id].dissector_idx, + idx); + /* TODO */ + } else { + + if(first_protocol_id == -1) + first_protocol_id = ndpi_protocol_id; + + ndpi_str->proto_defaults[ndpi_protocol_id].dissector_idx = idx; + } + dissector_enabled = 1; } + } + va_end(ap); - /* - Set function and index protocol within proto_default structure for port protocol detection - and callback_buffer function for DPI protocol detection - */ - ndpi_str->proto_defaults[ndpi_protocol_id].protoIdx = idx; - ndpi_str->proto_defaults[ndpi_protocol_id].func = ndpi_str->callback_buffer[idx].func = func; - ndpi_str->callback_buffer[idx].ndpi_protocol_id = ndpi_protocol_id; + if(dissector_enabled) { + NDPI_LOG_DBG2(ndpi_str, "Dissector %s enabled. Registering %d...\n", dissector_name, idx); - /* - Set ndpi_selection_bitmask for protocol - */ + memcpy(ndpi_str->callback_buffer[idx].name, dissector_name, + ndpi_min(sizeof(ndpi_str->callback_buffer[idx].name) - 1, strlen(dissector_name))); + ndpi_str->callback_buffer[idx].func = func; + ndpi_str->callback_buffer[idx].dissector_idx = idx; ndpi_str->callback_buffer[idx].ndpi_selection_bitmask = ndpi_selection_bitmask; + ndpi_str->callback_buffer[idx].first_protocol_id = first_protocol_id; /* Just for logging */ - /* - Reset protocol detection bitmask via NDPI_PROTOCOL_UNKNOWN and than add specify protocol bitmast to callback - buffer. - */ - if(b_save_bitmask_unknow) - NDPI_SAVE_AS_BITMASK(ndpi_str->callback_buffer[idx].detection_bitmask, NDPI_PROTOCOL_UNKNOWN); - if(b_add_detection_bitmask) - NDPI_ADD_PROTOCOL_TO_BITMASK(ndpi_str->callback_buffer[idx].detection_bitmask, ndpi_protocol_id); - - NDPI_SAVE_AS_BITMASK(ndpi_str->callback_buffer[idx].excluded_protocol_bitmask, ndpi_protocol_id); + ndpi_str->callback_buffer_num++; } else { - NDPI_LOG_DBG(ndpi_str, "[NDPI] Protocol %s/%u disabled\n", label, ndpi_protocol_id); + NDPI_LOG_DBG(ndpi_str, "Dissector %s disabled\n", dissector_name); } + return; } /* ******************************************************************** */ -static int ndpi_callback_init(struct ndpi_detection_module_struct *ndpi_str) { +static int dissectors_init(struct ndpi_detection_module_struct *ndpi_str) { - NDPI_PROTOCOL_BITMASK *detection_bitmask = &ndpi_str->detection_bitmask; struct call_function_struct *all_cb = NULL; - u_int32_t a = 0; - - if(ndpi_str->callback_buffer) return 0; - ndpi_str->callback_buffer = ndpi_calloc(NDPI_MAX_SUPPORTED_PROTOCOLS+1,sizeof(struct call_function_struct)); + ndpi_str->callback_buffer = ndpi_calloc(NDPI_MAX_NUM_DISSECTORS, sizeof(struct call_function_struct)); if(!ndpi_str->callback_buffer) return 1; - /* set this here to zero to be interrupt safe */ - ndpi_str->callback_buffer_size = 0; - /* HTTP */ - init_http_dissector(ndpi_str, &a); + init_http_dissector(ndpi_str); - /* STARCRAFT */ - init_starcraft_dissector(ndpi_str, &a); + /* BLIZZARD */ + init_blizzard_dissector(ndpi_str); /* TLS+DTLS */ - init_tls_dissector(ndpi_str, &a); + init_tls_dissector(ndpi_str); /* RTP */ - init_rtp_dissector(ndpi_str, &a); + init_rtp_dissector(ndpi_str); /* RTSP */ - init_rtsp_dissector(ndpi_str, &a); + init_rtsp_dissector(ndpi_str); /* RDP */ - init_rdp_dissector(ndpi_str, &a); + init_rdp_dissector(ndpi_str); /* STUN */ - init_stun_dissector(ndpi_str, &a); + init_stun_dissector(ndpi_str); /* SIP */ - init_sip_dissector(ndpi_str, &a); + init_sip_dissector(ndpi_str); /* IMO */ - init_imo_dissector(ndpi_str, &a); + init_imo_dissector(ndpi_str); /* Teredo */ - init_teredo_dissector(ndpi_str, &a); + init_teredo_dissector(ndpi_str); /* EDONKEY */ - init_edonkey_dissector(ndpi_str, &a); + init_edonkey_dissector(ndpi_str); /* GNUTELLA */ - init_gnutella_dissector(ndpi_str, &a); + init_gnutella_dissector(ndpi_str); /* NATS */ - init_nats_dissector(ndpi_str, &a); + init_nats_dissector(ndpi_str); /* SOCKS */ - init_socks_dissector(ndpi_str, &a); + init_socks_dissector(ndpi_str); /* IRC */ - init_irc_dissector(ndpi_str, &a); + init_irc_dissector(ndpi_str); /* JABBER */ - init_jabber_dissector(ndpi_str, &a); + init_jabber_dissector(ndpi_str); /* MAIL_POP */ - init_mail_pop_dissector(ndpi_str, &a); + init_mail_pop_dissector(ndpi_str); /* MAIL_IMAP */ - init_mail_imap_dissector(ndpi_str, &a); + init_mail_imap_dissector(ndpi_str); /* MAIL_SMTP */ - init_mail_smtp_dissector(ndpi_str, &a); + init_mail_smtp_dissector(ndpi_str); /* USENET */ - init_usenet_dissector(ndpi_str, &a); + init_usenet_dissector(ndpi_str); /* DNS */ - init_dns_dissector(ndpi_str, &a); + init_dns_dissector(ndpi_str); /* VMWARE */ - init_vmware_dissector(ndpi_str, &a); + init_vmware_dissector(ndpi_str); /* NON_TCP_UDP */ - init_non_tcp_udp_dissector(ndpi_str, &a); + init_non_tcp_udp_dissector(ndpi_str); /* IAX */ - init_iax_dissector(ndpi_str, &a); + init_iax_dissector(ndpi_str); /* Media Gateway Control Protocol */ - init_mgcp_dissector(ndpi_str, &a); + init_mgcp_dissector(ndpi_str); /* ZATTOO */ - init_zattoo_dissector(ndpi_str, &a); + init_zattoo_dissector(ndpi_str); /* QQ */ - init_qq_dissector(ndpi_str, &a); + init_qq_dissector(ndpi_str); /* SSH */ - init_ssh_dissector(ndpi_str, &a); + init_ssh_dissector(ndpi_str); /* VNC */ - init_vnc_dissector(ndpi_str, &a); + init_vnc_dissector(ndpi_str); /* VXLAN */ - init_vxlan_dissector(ndpi_str, &a); + init_vxlan_dissector(ndpi_str); /* TEAMVIEWER */ - init_teamviewer_dissector(ndpi_str, &a); + init_teamviewer_dissector(ndpi_str); /* DHCP */ - init_dhcp_dissector(ndpi_str, &a); + init_dhcp_dissector(ndpi_str); /* STEAM */ - init_steam_dissector(ndpi_str, &a); - - /* HALFLIFE2 */ - init_halflife2_dissector(ndpi_str, &a); + init_steam_dissector(ndpi_str); /* XBOX */ - init_xbox_dissector(ndpi_str, &a); + init_xbox_dissector(ndpi_str); /* SMB */ - init_smb_dissector(ndpi_str, &a); + init_smb_dissector(ndpi_str); /* MINING */ - init_mining_dissector(ndpi_str, &a); + init_mining_dissector(ndpi_str); /* TELNET */ - init_telnet_dissector(ndpi_str, &a); + init_telnet_dissector(ndpi_str); /* NTP */ - init_ntp_dissector(ndpi_str, &a); + init_ntp_dissector(ndpi_str); /* NFS */ - init_nfs_dissector(ndpi_str, &a); + init_nfs_dissector(ndpi_str); /* SSDP */ - init_ssdp_dissector(ndpi_str, &a); - - /* WORLD_OF_WARCRAFT */ - init_world_of_warcraft_dissector(ndpi_str, &a); + init_ssdp_dissector(ndpi_str); /* POSTGRES */ - init_postgres_dissector(ndpi_str, &a); + init_postgres_dissector(ndpi_str); /* MYSQL */ - init_mysql_dissector(ndpi_str, &a); + init_mysql_dissector(ndpi_str); /* BGP */ - init_bgp_dissector(ndpi_str, &a); + init_bgp_dissector(ndpi_str); /* SNMP */ - init_snmp_dissector(ndpi_str, &a); + init_snmp_dissector(ndpi_str); /* ICECAST */ - init_icecast_dissector(ndpi_str, &a); + init_icecast_dissector(ndpi_str); /* KERBEROS */ - init_kerberos_dissector(ndpi_str, &a); + init_kerberos_dissector(ndpi_str); /* SYSLOG */ - init_syslog_dissector(ndpi_str, &a); + init_syslog_dissector(ndpi_str); /* NETBIOS */ - init_netbios_dissector(ndpi_str, &a); + init_netbios_dissector(ndpi_str); /* IPP */ - init_ipp_dissector(ndpi_str, &a); + init_ipp_dissector(ndpi_str); /* LDAP */ - init_ldap_dissector(ndpi_str, &a); - - /* WARCRAFT3 */ - init_warcraft3_dissector(ndpi_str, &a); + init_ldap_dissector(ndpi_str); /* XDMCP */ - init_xdmcp_dissector(ndpi_str, &a); + init_xdmcp_dissector(ndpi_str); /* TFTP */ - init_tftp_dissector(ndpi_str, &a); + init_tftp_dissector(ndpi_str); /* MSSQL_TDS */ - init_mssql_tds_dissector(ndpi_str, &a); + init_mssql_tds_dissector(ndpi_str); /* PPTP */ - init_pptp_dissector(ndpi_str, &a); + init_pptp_dissector(ndpi_str); /* DHCPV6 */ - init_dhcpv6_dissector(ndpi_str, &a); + init_dhcpv6_dissector(ndpi_str); /* AFP */ - init_afp_dissector(ndpi_str, &a); + init_afp_dissector(ndpi_str); /* check_mk */ - init_checkmk_dissector(ndpi_str, &a); + init_checkmk_dissector(ndpi_str); /* cpha */ - init_cpha_dissector(ndpi_str, &a); + init_cpha_dissector(ndpi_str); - /* MAPLESTORY */ - init_maplestory_dissector(ndpi_str, &a); + /* NEXON */ + init_nexon_dissector(ndpi_str); /* DOFUS */ - init_dofus_dissector(ndpi_str, &a); - - /* WORLD_OF_KUNG_FU */ - init_world_of_kung_fu_dissector(ndpi_str, &a); + init_dofus_dissector(ndpi_str); /* CROSSIFIRE */ - init_crossfire_dissector(ndpi_str, &a); + init_crossfire_dissector(ndpi_str); - /* GUILDWARS */ - init_guildwars_dissector(ndpi_str, &a); + /* Guild Wars 2 */ + init_guildwars2_dissector(ndpi_str); /* ARMAGETRON */ - init_armagetron_dissector(ndpi_str, &a); + init_armagetron_dissector(ndpi_str); /* DROPBOX */ - init_dropbox_dissector(ndpi_str, &a); + init_dropbox_dissector(ndpi_str); /* SONOS */ - init_sonos_dissector(ndpi_str, &a); + init_sonos_dissector(ndpi_str); /* SPOTIFY */ - init_spotify_dissector(ndpi_str, &a); + init_spotify_dissector(ndpi_str); /* RADIUS */ - init_radius_dissector(ndpi_str, &a); + init_radius_dissector(ndpi_str); /* CITRIX */ - init_citrix_dissector(ndpi_str, &a); + init_citrix_dissector(ndpi_str); - /* LOTUS_NOTES */ - init_lotus_notes_dissector(ndpi_str, &a); + /* HCL Notes */ + init_hcl_notes_dissector(ndpi_str); /* GTP */ - init_gtp_dissector(ndpi_str, &a); + init_gtp_dissector(ndpi_str); /* HSRP */ - init_hsrp_dissector(ndpi_str, &a); + init_hsrp_dissector(ndpi_str); /* DCERPC */ - init_dcerpc_dissector(ndpi_str, &a); + init_dcerpc_dissector(ndpi_str); /* NETFLOW */ - init_netflow_dissector(ndpi_str, &a); + init_netflow_dissector(ndpi_str); /* SFLOW */ - init_sflow_dissector(ndpi_str, &a); + init_sflow_dissector(ndpi_str); /* H323 */ - init_h323_dissector(ndpi_str, &a); + init_h323_dissector(ndpi_str); /* OPENVPN */ - init_openvpn_dissector(ndpi_str, &a); + init_openvpn_dissector(ndpi_str); /* NOE */ - init_noe_dissector(ndpi_str, &a); + init_noe_dissector(ndpi_str); /* CISCOVPN */ - init_ciscovpn_dissector(ndpi_str, &a); + init_ciscovpn_dissector(ndpi_str); /* TEAMSPEAK */ - init_teamspeak_dissector(ndpi_str, &a); + init_teamspeak_dissector(ndpi_str); /* SKINNY */ - init_skinny_dissector(ndpi_str, &a); + init_skinny_dissector(ndpi_str); /* RSYNC */ - init_rsync_dissector(ndpi_str, &a); + init_rsync_dissector(ndpi_str); /* WHOIS_DAS */ - init_whois_das_dissector(ndpi_str, &a); + init_whois_das_dissector(ndpi_str); /* ORACLE */ - init_oracle_dissector(ndpi_str, &a); + init_oracle_dissector(ndpi_str); /* CORBA */ - init_corba_dissector(ndpi_str, &a); + init_corba_dissector(ndpi_str); /* RTMP */ - init_rtmp_dissector(ndpi_str, &a); + init_rtmp_dissector(ndpi_str); /* FTP_CONTROL */ - init_ftp_control_dissector(ndpi_str, &a); + init_ftp_control_dissector(ndpi_str); /* FTP_DATA */ - init_ftp_data_dissector(ndpi_str, &a); + init_ftp_data_dissector(ndpi_str); /* MEGACO */ - init_megaco_dissector(ndpi_str, &a); + init_megaco_dissector(ndpi_str); /* RESP */ - init_resp_dissector(ndpi_str, &a); - - /* VHUA */ - init_vhua_dissector(ndpi_str, &a); + init_resp_dissector(ndpi_str); /* ZMQ */ - init_zmq_dissector(ndpi_str, &a); + init_zmq_dissector(ndpi_str); /* TELEGRAM */ - init_telegram_dissector(ndpi_str, &a); + init_telegram_dissector(ndpi_str); /* QUIC */ - init_quic_dissector(ndpi_str, &a); + init_quic_dissector(ndpi_str); /* DIAMETER */ - init_diameter_dissector(ndpi_str, &a); + init_diameter_dissector(ndpi_str); /* APPLE_PUSH */ - init_apple_push_dissector(ndpi_str, &a); + init_apple_push_dissector(ndpi_str); /* EAQ */ - init_eaq_dissector(ndpi_str, &a); + init_eaq_dissector(ndpi_str); /* KAKAOTALK_VOICE */ - init_kakaotalk_voice_dissector(ndpi_str, &a); + init_kakaotalk_voice_dissector(ndpi_str); /* MIKROTIK */ - init_mikrotik_dissector(ndpi_str, &a); + init_mikrotik_dissector(ndpi_str); /* MPEGTS */ - init_mpegts_dissector(ndpi_str, &a); + init_mpegts_dissector(ndpi_str); /* UBNTAC2 */ - init_ubntac2_dissector(ndpi_str, &a); + init_ubntac2_dissector(ndpi_str); /* COAP */ - init_coap_dissector(ndpi_str, &a); + init_coap_dissector(ndpi_str); /* MQTT */ - init_mqtt_dissector(ndpi_str, &a); + init_mqtt_dissector(ndpi_str); /* SOME/IP */ - init_someip_dissector(ndpi_str, &a); + init_someip_dissector(ndpi_str); /* RX */ - init_rx_dissector(ndpi_str, &a); + init_rx_dissector(ndpi_str); /* GIT */ - init_git_dissector(ndpi_str, &a); + init_git_dissector(ndpi_str); /* DRDA */ - init_drda_dissector(ndpi_str, &a); + init_drda_dissector(ndpi_str); /* BJNP */ - init_bjnp_dissector(ndpi_str, &a); + init_bjnp_dissector(ndpi_str); /* SMPP */ - init_smpp_dissector(ndpi_str, &a); + init_smpp_dissector(ndpi_str); /* TINC */ - init_tinc_dissector(ndpi_str, &a); + init_tinc_dissector(ndpi_str); /* FIX */ - init_fix_dissector(ndpi_str, &a); + init_fix_dissector(ndpi_str); /* NINTENDO */ - init_nintendo_dissector(ndpi_str, &a); + init_nintendo_dissector(ndpi_str); /* MODBUS */ - init_modbus_dissector(ndpi_str, &a); + init_modbus_dissector(ndpi_str); /* CAPWAP */ - init_capwap_dissector(ndpi_str, &a); + init_capwap_dissector(ndpi_str); /* ZABBIX */ - init_zabbix_dissector(ndpi_str, &a); + init_zabbix_dissector(ndpi_str); /*** Put false-positive sensitive protocols at the end ***/ /* VIBER */ - init_viber_dissector(ndpi_str, &a); + init_viber_dissector(ndpi_str); /* BITTORRENT */ - init_bittorrent_dissector(ndpi_str, &a); + init_bittorrent_dissector(ndpi_str); /* WHATSAPP */ - init_whatsapp_dissector(ndpi_str, &a); + init_whatsapp_dissector(ndpi_str); /* OOKLA */ - init_ookla_dissector(ndpi_str, &a); + init_ookla_dissector(ndpi_str); /* AMQP */ - init_amqp_dissector(ndpi_str, &a); + init_amqp_dissector(ndpi_str); /* Steam Datagram Relay */ - init_valve_sdr_dissector(ndpi_str, &a); + init_valve_sdr_dissector(ndpi_str); /* LISP */ - init_lisp_dissector(ndpi_str, &a); + init_lisp_dissector(ndpi_str); /* AJP */ - init_ajp_dissector(ndpi_str, &a); + init_ajp_dissector(ndpi_str); /* Memcached */ - init_memcached_dissector(ndpi_str, &a); + init_memcached_dissector(ndpi_str); /* Nest Log Sink */ - init_nest_log_sink_dissector(ndpi_str, &a); + init_nest_log_sink_dissector(ndpi_str); /* WireGuard VPN */ - init_wireguard_dissector(ndpi_str, &a); + init_wireguard_dissector(ndpi_str); /* Amazon_Video */ - init_amazon_video_dissector(ndpi_str, &a); + init_amazon_video_dissector(ndpi_str); /* S7 comm */ - init_s7comm_dissector(ndpi_str, &a); + init_s7comm_dissector(ndpi_str); /* IEC 60870-5-104 */ - init_104_dissector(ndpi_str, &a); + init_104_dissector(ndpi_str); /* DNP3 */ - init_dnp3_dissector(ndpi_str, &a); + init_dnp3_dissector(ndpi_str); /* WEBSOCKET */ - init_websocket_dissector(ndpi_str, &a); + init_websocket_dissector(ndpi_str); /* SOAP */ - init_soap_dissector(ndpi_str, &a); + init_soap_dissector(ndpi_str); /* DNScrypt */ - init_dnscrypt_dissector(ndpi_str, &a); + init_dnscrypt_dissector(ndpi_str); /* MongoDB */ - init_mongodb_dissector(ndpi_str, &a); + init_mongodb_dissector(ndpi_str); /* AmongUS */ - init_among_us_dissector(ndpi_str, &a); + init_among_us_dissector(ndpi_str); /* HP Virtual Machine Group Management */ - init_hpvirtgrp_dissector(ndpi_str, &a); + init_hpvirtgrp_dissector(ndpi_str); /* Genshin Impact */ - init_genshin_impact_dissector(ndpi_str, &a); + init_genshin_impact_dissector(ndpi_str); /* Z39.50 international standard client–server, application layer communications protocol */ - init_z3950_dissector(ndpi_str, &a); + init_z3950_dissector(ndpi_str); /* AVAST SecureDNS */ - init_avast_securedns_dissector(ndpi_str, &a); + init_avast_securedns_dissector(ndpi_str); /* Cassandra */ - init_cassandra_dissector(ndpi_str, &a); + init_cassandra_dissector(ndpi_str); /* EthernetIP */ - init_ethernet_ip_dissector(ndpi_str, &a); + init_ethernet_ip_dissector(ndpi_str); /* WSD */ - init_wsd_dissector(ndpi_str, &a); + init_wsd_dissector(ndpi_str); /* TocaBoca */ - init_toca_boca_dissector(ndpi_str, &a); + init_toca_boca_dissector(ndpi_str); /* SD-RTN Software Defined Real-time Network */ - init_sd_rtn_dissector(ndpi_str, &a); + init_sd_rtn_dissector(ndpi_str); /* RakNet */ - init_raknet_dissector(ndpi_str, &a); + init_raknet_dissector(ndpi_str); /* Xiaomi */ - init_xiaomi_dissector(ndpi_str, &a); + init_xiaomi_dissector(ndpi_str); /* MpegDash */ - init_mpegdash_dissector(ndpi_str, &a); + init_mpegdash_dissector(ndpi_str); /* RSH */ - init_rsh_dissector(ndpi_str, &a); + init_rsh_dissector(ndpi_str); /* IPsec */ - init_ipsec_dissector(ndpi_str, &a); + init_ipsec_dissector(ndpi_str); /* collectd */ - init_collectd_dissector(ndpi_str, &a); + init_collectd_dissector(ndpi_str); /* i3D */ - init_i3d_dissector(ndpi_str, &a); + init_i3d_dissector(ndpi_str); /* RiotGames */ - init_riotgames_dissector(ndpi_str, &a); + init_riotgames_dissector(ndpi_str); /* UltraSurf */ - init_ultrasurf_dissector(ndpi_str, &a); + init_ultrasurf_dissector(ndpi_str); /* Threema */ - init_threema_dissector(ndpi_str, &a); + init_threema_dissector(ndpi_str); /* AliCloud */ - init_alicloud_dissector(ndpi_str, &a); + init_alicloud_dissector(ndpi_str); /* AVAST */ - init_avast_dissector(ndpi_str, &a); + init_avast_dissector(ndpi_str); /* Softether */ - init_softether_dissector(ndpi_str, &a); + init_softether_dissector(ndpi_str); /* Activision */ - init_activision_dissector(ndpi_str, &a); + init_activision_dissector(ndpi_str); /* Discord */ - init_discord_dissector(ndpi_str, &a); + init_discord_dissector(ndpi_str); /* TiVoConnect */ - init_tivoconnect_dissector(ndpi_str, &a); + init_tivoconnect_dissector(ndpi_str); /* Kismet */ - init_kismet_dissector(ndpi_str, &a); + init_kismet_dissector(ndpi_str); /* FastCGI */ - init_fastcgi_dissector(ndpi_str, &a); + init_fastcgi_dissector(ndpi_str); /* NATPMP */ - init_natpmp_dissector(ndpi_str, &a); + init_natpmp_dissector(ndpi_str); /* Syncthing */ - init_syncthing_dissector(ndpi_str, &a); + init_syncthing_dissector(ndpi_str); /* CryNetwork */ - init_crynet_dissector(ndpi_str, &a); + init_crynet_dissector(ndpi_str); /* Line voip */ - init_line_dissector(ndpi_str, &a); + init_line_dissector(ndpi_str); /* Munin */ - init_munin_dissector(ndpi_str, &a); + init_munin_dissector(ndpi_str); /* Elasticsearch */ - init_elasticsearch_dissector(ndpi_str, &a); + init_elasticsearch_dissector(ndpi_str); /* TUYA LP */ - init_tuya_lp_dissector(ndpi_str, &a); + init_tuya_lp_dissector(ndpi_str); /* TPLINK_SHP */ - init_tplink_shp_dissector(ndpi_str, &a); + init_tplink_shp_dissector(ndpi_str); /* Meraki Cloud */ - init_merakicloud_dissector(ndpi_str, &a); + init_merakicloud_dissector(ndpi_str); /* Tailscale */ - init_tailscale_dissector(ndpi_str, &a); + init_tailscale_dissector(ndpi_str); /* Source Engine */ - init_source_engine_dissector(ndpi_str, &a); + init_source_engine_dissector(ndpi_str); /* BACnet */ - init_bacnet_dissector(ndpi_str, &a); + init_bacnet_dissector(ndpi_str); /* OICQ */ - init_oicq_dissector(ndpi_str, &a); + init_oicq_dissector(ndpi_str); /* Heroes of the Storm */ - init_hots_dissector(ndpi_str, &a); + init_hots_dissector(ndpi_str); /* EpicGames */ - init_epicgames_dissector(ndpi_str, &a); + init_epicgames_dissector(ndpi_str); /*BITCOIN*/ - init_bitcoin_dissector(ndpi_str, &a); + init_bitcoin_dissector(ndpi_str); /* Apache Thrift */ - init_apache_thrift_dissector(ndpi_str, &a); + init_apache_thrift_dissector(ndpi_str); /* Service Location Protocol */ - init_slp_dissector(ndpi_str, &a); + init_slp_dissector(ndpi_str); /* HTTP/2 */ - init_http2_dissector(ndpi_str, &a); + init_http2_dissector(ndpi_str); /* HAProxy */ - init_haproxy_dissector(ndpi_str, &a); + init_haproxy_dissector(ndpi_str); /* RMCP */ - init_rmcp_dissector(ndpi_str, &a); + init_rmcp_dissector(ndpi_str); /* Controller Area Network */ - init_can_dissector(ndpi_str, &a); + init_can_dissector(ndpi_str); /* Protobuf */ - init_protobuf_dissector(ndpi_str, &a); + init_protobuf_dissector(ndpi_str); /* ETHEREUM */ - init_ethereum_dissector(ndpi_str, &a); + init_ethereum_dissector(ndpi_str); /* Precision Time Protocol v2 */ - init_ptpv2_dissector(ndpi_str, &a); + init_ptpv2_dissector(ndpi_str); /* Highway Addressable Remote Transducer over IP */ - init_hart_ip_dissector(ndpi_str, &a); + init_hart_ip_dissector(ndpi_str); /* Real-time Publish-Subscribe Protocol */ - init_rtps_dissector(ndpi_str, &a); + init_rtps_dissector(ndpi_str); /* OPC Unified Architecture */ - init_opc_ua_dissector(ndpi_str, &a); + init_opc_ua_dissector(ndpi_str); /* Factory Interface Network Service */ - init_fins_dissector(ndpi_str, &a); + init_fins_dissector(ndpi_str); /* Ether-S-I/O */ - init_ethersio_dissector(ndpi_str, &a); + init_ethersio_dissector(ndpi_str); /* Automation Device Specification */ - init_beckhoff_ads_dissector(ndpi_str, &a); + init_beckhoff_ads_dissector(ndpi_str); /* Manufacturing Message Specification */ - init_iso9506_1_mms_dissector(ndpi_str, &a); + init_iso9506_1_mms_dissector(ndpi_str); /* IEEE C37.118 Synchrophasor Protocol */ - init_ieee_c37118_dissector(ndpi_str, &a); + init_ieee_c37118_dissector(ndpi_str); /* Ether-S-Bus */ - init_ethersbus_dissector(ndpi_str, &a); + init_ethersbus_dissector(ndpi_str); /* Monero Protocol */ - init_monero_dissector(ndpi_str, &a); + init_monero_dissector(ndpi_str); /* PROFINET/IO */ - init_profinet_io_dissector(ndpi_str, &a); + init_profinet_io_dissector(ndpi_str); /* HiSLIP */ - init_hislip_dissector(ndpi_str, &a); + init_hislip_dissector(ndpi_str); /* UFTP */ - init_uftp_dissector(ndpi_str, &a); + init_uftp_dissector(ndpi_str); /* OpenFlow */ - init_openflow_dissector(ndpi_str, &a); + init_openflow_dissector(ndpi_str); /* JSON-RPC */ - init_json_rpc_dissector(ndpi_str, &a); + init_json_rpc_dissector(ndpi_str); /* Apache Kafka */ - init_kafka_dissector(ndpi_str, &a); + init_kafka_dissector(ndpi_str); /* NoMachine */ - init_nomachine_dissector(ndpi_str, &a); + init_nomachine_dissector(ndpi_str); /* IEC 62056 */ - init_iec62056_dissector(ndpi_str, &a); + init_iec62056_dissector(ndpi_str); /* HL7 */ - init_hl7_dissector(ndpi_str, &a); + init_hl7_dissector(ndpi_str); /* DICOM */ - init_dicom_dissector(ndpi_str, &a); + init_dicom_dissector(ndpi_str); /* Ceph */ - init_ceph_dissector(ndpi_str, &a); + init_ceph_dissector(ndpi_str); /* Roughtime */ - init_roughtime_dissector(ndpi_str, &a); + init_roughtime_dissector(ndpi_str); /* KCP */ - init_kcp_dissector(ndpi_str, &a); + init_kcp_dissector(ndpi_str); /* Mumble */ - init_mumble_dissector(ndpi_str, &a); + init_mumble_dissector(ndpi_str); /* Zoom */ - init_zoom_dissector(ndpi_str, &a); + init_zoom_dissector(ndpi_str); /* Yojimbo */ - init_yojimbo_dissector(ndpi_str, &a); + init_yojimbo_dissector(ndpi_str); /* STOMP */ - init_stomp_dissector(ndpi_str, &a); + init_stomp_dissector(ndpi_str); /* RDP */ - init_radmin_dissector(ndpi_str, &a); + init_radmin_dissector(ndpi_str); /* Raft */ - init_raft_dissector(ndpi_str, &a); + init_raft_dissector(ndpi_str); /* CIP (Common Industrial Protocol) */ - init_cip_dissector(ndpi_str, &a); + init_cip_dissector(ndpi_str); /* Gearman */ - init_gearman_dissector(ndpi_str, &a); + init_gearman_dissector(ndpi_str); /* Tencent Games */ - init_tencent_games_dissector(ndpi_str, &a); + init_tencent_games_dissector(ndpi_str); /* Gaijin Entertainment */ - init_gaijin_dissector(ndpi_str, &a); + init_gaijin_dissector(ndpi_str); /* ANSI C12.22 / IEEE 1703 */ - init_c1222_dissector(ndpi_str, &a); + init_c1222_dissector(ndpi_str); /* Dynamic Link Exchange Protocol */ - init_dlep_dissector(ndpi_str, &a); + init_dlep_dissector(ndpi_str); /* Bidirectional Forwarding Detection */ - init_bfd_dissector(ndpi_str, &a); + init_bfd_dissector(ndpi_str); /* NetEase Games */ - init_netease_games_dissector(ndpi_str, &a); + init_netease_games_dissector(ndpi_str); /* Path of Exile */ - init_pathofexile_dissector(ndpi_str, &a); + init_pathofexile_dissector(ndpi_str); /* Packet Forwarding Control Protocol */ - init_pfcp_dissector(ndpi_str, &a); + init_pfcp_dissector(ndpi_str); /* File Delivery over Unidirectional Transport */ - init_flute_dissector(ndpi_str, &a); + init_flute_dissector(ndpi_str); /* League of Legends: Wild Rift */ - init_lolwildrift_dissector(ndpi_str, &a); + init_lolwildrift_dissector(ndpi_str); /* The Elder Scrolls Online */ - init_teso_dissector(ndpi_str, &a); + init_teso_dissector(ndpi_str); /* Label Distribution Protocol */ - init_ldp_dissector(ndpi_str, &a); + init_ldp_dissector(ndpi_str); /* KNXnet/IP */ - init_knxnet_ip_dissector(ndpi_str, &a); + init_knxnet_ip_dissector(ndpi_str); /* Binary Floor Control Protocol */ - init_bfcp_dissector(ndpi_str, &a); + init_bfcp_dissector(ndpi_str); /* iQIYI */ - init_iqiyi_dissector(ndpi_str, &a); + init_iqiyi_dissector(ndpi_str); /* Ethernet Global Data */ - init_egd_dissector(ndpi_str, &a); + init_egd_dissector(ndpi_str); /* Call of Duty: Mobile */ - init_cod_mobile_dissector(ndpi_str, &a); + init_cod_mobile_dissector(ndpi_str); /* ZUG */ - init_zug_dissector(ndpi_str, &a); + init_zug_dissector(ndpi_str); /* JRMI Java Remote Method Invocation*/ - init_jrmi_dissector(ndpi_str, &a); + init_jrmi_dissector(ndpi_str); /* (Magellan) Ripe Atlas */ - init_ripe_atlas_dissector(ndpi_str, &a); + init_ripe_atlas_dissector(ndpi_str); /* Cloudflare WARP */ - init_cloudflare_warp_dissector(ndpi_str, &a); + init_cloudflare_warp_dissector(ndpi_str); /* Nano Cryptocurrency Protocol */ - init_nano_dissector(ndpi_str, &a); + init_nano_dissector(ndpi_str); /* OpenWire */ - init_openwire_dissector(ndpi_str, &a); + init_openwire_dissector(ndpi_str); /* ISO/IEC 14908-4 */ - init_cnp_ip_dissector(ndpi_str, &a); + init_cnp_ip_dissector(ndpi_str); /* ATG */ - init_atg_dissector(ndpi_str, &a); + init_atg_dissector(ndpi_str); /* Train Real Time Data Protocol */ - init_trdp_dissector(ndpi_str, &a); + init_trdp_dissector(ndpi_str); /* Lustre */ - init_lustre_dissector(ndpi_str, &a); + init_lustre_dissector(ndpi_str); /* DingTalk */ - init_dingtalk_dissector(ndpi_str, &a); + init_dingtalk_dissector(ndpi_str); /* Paltalk */ - init_paltalk_dissector(ndpi_str, &a); + init_paltalk_dissector(ndpi_str); + + /* LagoFast */ + init_lagofast_dissector(ndpi_str); + + /* GearUP Booster */ + init_gearup_booster_dissector(ndpi_str); + + /* Microsoft Delivery Optimization */ + init_msdo_dissector(ndpi_str); + + /* MELSEC Communication Protocol */ + init_melsec_dissector(ndpi_str); + + /* Hamachi */ + init_hamachi_dissector(ndpi_str); + + /* Gateway Load Balancing Protocol */ + init_glbp_dissector(ndpi_str); #ifdef CUSTOM_NDPI_PROTOCOLS #include "../../../nDPI-custom/custom_ndpi_main_init.c" @@ -6360,19 +7214,19 @@ static int ndpi_callback_init(struct ndpi_detection_module_struct *ndpi_str) { /* ----------------------------------------------------------------- */ - ndpi_str->callback_buffer_size = a; + ndpi_str->callback_buffer_size = ndpi_str->callback_buffer_num; /* Resize callback_buffer */ - all_cb = ndpi_calloc(a+1,sizeof(struct call_function_struct)); + all_cb = ndpi_calloc(ndpi_str->callback_buffer_size+1,sizeof(struct call_function_struct)); if(all_cb) { - memcpy((char *)all_cb,(char *)ndpi_str->callback_buffer, (a+1) * sizeof(struct call_function_struct)); + memcpy((char *)all_cb,(char *)ndpi_str->callback_buffer, (ndpi_str->callback_buffer_size+1) * sizeof(struct call_function_struct)); ndpi_free(ndpi_str->callback_buffer); ndpi_str->callback_buffer = all_cb; } NDPI_LOG_DBG2(ndpi_str, "callback_buffer_size is %u\n", ndpi_str->callback_buffer_size); /* Calculating the size of an array for callback functions */ - ndpi_enabled_callbacks_init(ndpi_str,detection_bitmask,1); + ndpi_enabled_callbacks_init(ndpi_str, 1); all_cb = ndpi_calloc(ndpi_str->callback_buffer_size_tcp_payload + ndpi_str->callback_buffer_size_tcp_no_payload + ndpi_str->callback_buffer_size_udp + @@ -6388,10 +7242,14 @@ static int ndpi_callback_init(struct ndpi_detection_module_struct *ndpi_str) { all_cb += ndpi_str->callback_buffer_size_udp; ndpi_str->callback_buffer_non_tcp_udp = all_cb; - ndpi_enabled_callbacks_init(ndpi_str,detection_bitmask,0); + ndpi_enabled_callbacks_init(ndpi_str, 0); - /* When the module ends, it is necessary to free the memory ndpi_str->callback_buffer and - ndpi_str->callback_buffer_tcp_payload */ + NDPI_LOG_DBG(ndpi_str, "Tot num dissectors: %d (TCP: %d, TCP_NO_PAYLOAD: %d, UDP: %d, NO_TCP_UDP: %d)\n", + ndpi_str->callback_buffer_size, + ndpi_str->callback_buffer_size_tcp_payload, + ndpi_str->callback_buffer_size_tcp_no_payload, + ndpi_str->callback_buffer_size_udp, + ndpi_str->callback_buffer_size_non_tcp_udp); return 0; } @@ -6440,7 +7298,7 @@ static inline int ndpi_proto_cb_other(const struct ndpi_detection_module_struct /* ******************************************************************** */ static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndpi_str, - const NDPI_PROTOCOL_BITMASK *dbm, int count_only) { + int count_only) { uint32_t a; /* now build the specific buffer for tcp, udp and non_tcp_udp */ @@ -6448,7 +7306,6 @@ static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndp ndpi_str->callback_buffer_size_tcp_no_payload = 0; for(a = 0; a < ndpi_str->callback_buffer_size; a++) { - if(!NDPI_ISSET(dbm,ndpi_str->callback_buffer[a].ndpi_protocol_id)) continue; if(!ndpi_proto_cb_tcp_payload(ndpi_str,a)) continue; if(!count_only) { NDPI_LOG_DBG2(ndpi_str, "callback_buffer_tcp_payload, adding buffer %u as entry %u\n", a, @@ -6460,7 +7317,6 @@ static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndp } for(a = 0; a < ndpi_str->callback_buffer_size; a++) { - if(!NDPI_ISSET(dbm,ndpi_str->callback_buffer[a].ndpi_protocol_id)) continue; if(!ndpi_proto_cb_tcp_nopayload(ndpi_str,a)) continue; if(!count_only) { NDPI_LOG_DBG2(ndpi_str, @@ -6474,7 +7330,6 @@ static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndp ndpi_str->callback_buffer_size_udp = 0; for(a = 0; a < ndpi_str->callback_buffer_size; a++) { - if(!NDPI_ISSET(dbm,ndpi_str->callback_buffer[a].ndpi_protocol_id)) continue; if(!ndpi_proto_cb_udp(ndpi_str,a)) continue; if(!count_only) { NDPI_LOG_DBG2(ndpi_str, "callback_buffer_size_udp: adding buffer : %u\n", a); @@ -6488,7 +7343,6 @@ static void ndpi_enabled_callbacks_init(struct ndpi_detection_module_struct *ndp ndpi_str->callback_buffer_size_non_tcp_udp = 0; for(a = 0; a < ndpi_str->callback_buffer_size; a++) { - if(!NDPI_ISSET(dbm,ndpi_str->callback_buffer[a].ndpi_protocol_id)) continue; if(!ndpi_proto_cb_other(ndpi_str,a)) continue; if(!count_only) { NDPI_LOG_DBG2(ndpi_str, "callback_buffer_non_tcp_udp: adding buffer : %u\n", a); @@ -6539,7 +7393,7 @@ int ndpi_handle_ipv6_extension_headers(u_int16_t l3len, const u_int8_t **l4ptr, frag_offset = ntohs(*(u_int16_t *)((*l4ptr) + 2)) >> 3; // Handle ipv6 fragments as the ipv4 ones: keep the first fragment, drop the others if(frag_offset != 0) - return(1); + return(1); *l4len -= 8; (*l4ptr) += 8; continue; @@ -6699,6 +7553,9 @@ void ndpi_free_flow_data(struct ndpi_flow_struct* flow) { if(flow->tcp.fingerprint) ndpi_free(flow->tcp.fingerprint); + if(flow->tcp.fingerprint_raw) + ndpi_free(flow->tcp.fingerprint_raw); + if(flow->http.url) ndpi_free(flow->http.url); @@ -6741,7 +7598,7 @@ void ndpi_free_flow_data(struct ndpi_flow_struct* flow) { if(flow->monit) ndpi_free(flow->monit); - if(flow_is_proto(flow, NDPI_PROTOCOL_QUIC) || + if(flow_is_proto(flow, NDPI_PROTOCOL_QUIC) || flow_is_proto(flow, NDPI_PROTOCOL_TLS) || flow_is_proto(flow, NDPI_PROTOCOL_DTLS) || flow_is_proto(flow, NDPI_PROTOCOL_MAIL_SMTPS) || @@ -6768,7 +7625,7 @@ void ndpi_free_flow_data(struct ndpi_flow_struct* flow) { if(flow->protos.tls_quic.ja4_client_raw) ndpi_free(flow->protos.tls_quic.ja4_client_raw); - } + } if(flow_is_proto(flow, NDPI_PROTOCOL_SIP)) { if(flow->protos.sip.from) @@ -6777,6 +7634,68 @@ void ndpi_free_flow_data(struct ndpi_flow_struct* flow) { ndpi_free(flow->protos.sip.to); } + if (flow_is_proto(flow, NDPI_PROTOCOL_SSDP)) { + if(flow->protos.ssdp.bootid) + ndpi_free(flow->protos.ssdp.bootid); + + if(flow->protos.ssdp.usn) + ndpi_free(flow->protos.ssdp.usn); + + if(flow->protos.ssdp.cache_controle) + ndpi_free(flow->protos.ssdp.cache_controle); + + if(flow->protos.ssdp.location) + ndpi_free(flow->protos.ssdp.location); + + if(flow->protos.ssdp.household_smart_speaker_audio) + ndpi_free(flow->protos.ssdp.household_smart_speaker_audio); + + if(flow->protos.ssdp.rincon_household) + ndpi_free(flow->protos.ssdp.rincon_household); + + if(flow->protos.ssdp.rincon_bootseq) + ndpi_free(flow->protos.ssdp.rincon_bootseq); + + if(flow->protos.ssdp.rincon_wifimode) + ndpi_free(flow->protos.ssdp.rincon_wifimode); + + if(flow->protos.ssdp.rincon_variant) + ndpi_free(flow->protos.ssdp.rincon_variant); + + if(flow->protos.ssdp.sonos_securelocation) + ndpi_free(flow->protos.ssdp.sonos_securelocation); + + if(flow->protos.ssdp.securelocation_upnp) + ndpi_free(flow->protos.ssdp.securelocation_upnp); + + if(flow->protos.ssdp.location_smart_speaker_audio) + ndpi_free(flow->protos.ssdp.location_smart_speaker_audio); + + if(flow->protos.ssdp.nt) + ndpi_free(flow->protos.ssdp.nt); + + if(flow->protos.ssdp.nts) + ndpi_free(flow->protos.ssdp.nts); + + if(flow->protos.ssdp.server) + ndpi_free(flow->protos.ssdp.server); + + if(flow->protos.ssdp.method) + ndpi_free(flow->protos.ssdp.method); + + if(flow->protos.ssdp.man) + ndpi_free(flow->protos.ssdp.man); + + if(flow->protos.ssdp.mx) + ndpi_free(flow->protos.ssdp.mx); + + if(flow->protos.ssdp.st) + ndpi_free(flow->protos.ssdp.st); + + if(flow->protos.ssdp.user_agent) + ndpi_free(flow->protos.ssdp.user_agent); + } + if(flow->tls_quic.message[0].buffer) ndpi_free(flow->tls_quic.message[0].buffer); if(flow->tls_quic.message[1].buffer) @@ -6794,29 +7713,7 @@ void ndpi_free_flow_data(struct ndpi_flow_struct* flow) { if(flow->tls_quic.obfuscated_heur_state) ndpi_free(flow->tls_quic.obfuscated_heur_state); - if(flow->tls_quic.obfuscated_heur_matching_set) - ndpi_free(flow->tls_quic.obfuscated_heur_matching_set); - } -} - -/* ************************************************ */ - -int ndpi_set_protocol_detection_bitmask2(struct ndpi_detection_module_struct *ndpi_str, - const NDPI_PROTOCOL_BITMASK *dbm) { - if(!ndpi_str) - return -1; - - NDPI_BITMASK_SET(ndpi_str->detection_bitmask, *dbm); - - ndpi_init_protocol_defaults(ndpi_str); - - ndpi_enabled_callbacks_init(ndpi_str,dbm,0); - - if(ndpi_callback_init(ndpi_str)) { - NDPI_LOG_ERR(ndpi_str, "[NDPI] Error allocating callbacks\n"); - return -1; } - return 0; } /* ************************************************ */ @@ -6851,7 +7748,6 @@ static int ndpi_init_packet(struct ndpi_detection_module_struct *ndpi_str, packet->l3_packet_len = packetlen; packet->tcp = NULL, packet->udp = NULL; - packet->generic_l4_ptr = NULL; packet->iphv6 = NULL; l3len = packet->l3_packet_len; @@ -6917,12 +7813,14 @@ static int ndpi_init_packet(struct ndpi_detection_module_struct *ndpi_str, char fingerprint[128], options_fp[128]; u_int8_t i, fp_idx = 0, options_fp_len = 0; - if(tcp_header_len > sizeof(struct ndpi_tcphdr)) { + if(tcp_header_len >= sizeof(struct ndpi_tcphdr)) { u_int8_t *options = (u_int8_t*)(&t[sizeof(struct ndpi_tcphdr)]); u_int8_t options_len = tcp_header_len - sizeof(struct ndpi_tcphdr); u_int16_t tcp_win = ntohs(packet->tcp->window); u_int8_t ip_ttl; u_int8_t sha_hash[NDPI_SHA256_BLOCK_SIZE]; + u_int32_t tcp_mss = 0, tcp_wscale = 0; + int rc; if(packet->iph) ip_ttl = packet->iph->ttl; @@ -6935,71 +7833,186 @@ static int ndpi_init_packet(struct ndpi_detection_module_struct *ndpi_str, else if(ip_ttl <= 192) ip_ttl = 192; else ip_ttl = 255; - fp_idx = snprintf(fingerprint, sizeof(fingerprint), "%u_%u_%u_", flags, ip_ttl, tcp_win); + switch(ndpi_str->cfg.tcp_fingerprint_format) { + case NDPI_NATIVE_TCP_FINGERPRINT: + fp_idx = snprintf(fingerprint, sizeof(fingerprint), "%u_%u_%u_", flags, ip_ttl, tcp_win); + break; + + case NDPI_MUONFP_TCP_FINGERPRINT: + fp_idx = snprintf(fingerprint, sizeof(fingerprint), "%u:", tcp_win); + break; + } - for(i=0; i<options_len; ) { - u_int8_t kind = options[i]; - int rc; + if(options_len == 0) { + const char *msg; + /* + Massive Internet scanner detected. Examples: + - https://zmap.io + - https://github.com/robertdavidgraham/masscan + */ + + if(tcp_win == 1024) + msg = "Massive scanner detected (probably masscan)"; + else if(tcp_win == 65535) + msg = "Massive scanner detected (probably zmap)"; + else + msg = "Massive scanner detected"; + + ndpi_set_risk(ndpi_str, flow, NDPI_MALICIOUS_FINGERPRINT, (char*)msg); + } else { #ifdef DEBUG_TCP_OPTIONS - printf("Option kind: %u\n", kind); + printf("Options len: %u\n", options_len); #endif - rc = snprintf(&options_fp[options_fp_len], sizeof(options_fp)-options_fp_len, "%02x", kind); - if((rc < 0) || ((int)(options_fp_len + rc) == sizeof(options_fp))) break; + for(i=0; i<options_len; /* don't increase here */) { + u_int8_t kind = options[i]; + +#ifdef DEBUG_TCP_OPTIONS + printf("Option kind: %u\n", kind); +#endif + + if(ndpi_str->cfg.tcp_fingerprint_format == NDPI_NATIVE_TCP_FINGERPRINT) { + rc = snprintf(&options_fp[options_fp_len], sizeof(options_fp)-options_fp_len, "%02x", kind); + + if((rc < 0) || ((int)(options_fp_len + rc) == sizeof(options_fp))) + break; + + options_fp_len += rc; + } else if(ndpi_str->cfg.tcp_fingerprint_format == NDPI_MUONFP_TCP_FINGERPRINT) { + if(fp_idx >= sizeof(fingerprint)) + break; - options_fp_len += rc; + rc = snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, "%s%u", (i > 0) ? "-" : "", kind); - if(kind == 0) /* EOL */ { - i++; - continue; - } else if(kind == 1) /* NOP */ - i++; - else if((i+1) < options_len) { - u_int8_t len = options[i+1]; + if((rc < 0) || ((int)(fp_idx + rc) == sizeof(fingerprint))) + break; + + fp_idx += rc; + } + + if(kind == 0) /* EOL */ { + i++; + continue; + } else if(kind == 1) /* NOP */ + i++; + else if((i+1) < options_len) { + u_int8_t len = options[i+1]; #ifdef DEBUG_TCP_OPTIONS - printf("\tOption len: %u\n", len); + printf("\tOption len: %u\n", len); #endif - if(len == 0) - continue; - else if(kind == 8) { - /* Timestamp: ignore it */ - } else if(len > 2) { - int j = i+2; - u_int8_t opt_len = len - 2; - - while((opt_len > 0) && (j < options_len)) { - rc = snprintf(&options_fp[options_fp_len], sizeof(options_fp)-options_fp_len, "%02x", options[j]); - if((rc < 0) || ((int)(options_fp_len + rc) == sizeof(options_fp))) break; - - options_fp_len += rc; - j++, opt_len--; + if(len == 0) + continue; + else if(kind == 8) { + switch(ndpi_str->cfg.tcp_fingerprint_format) { + case NDPI_NATIVE_TCP_FINGERPRINT: + /* Timestamp: ignore it */ + break; + + case NDPI_MUONFP_TCP_FINGERPRINT: + /* Nothing to do */ + break; + } + } else if(len > 2) { + int j = i+2; + u_int8_t opt_len = len - 2; + + if(((kind == 2 /* Maximum segment size */) || (kind == 3 /* TCP window scale */)) && + j + opt_len - 1 < options_len){ + u_int32_t val = 0; + + if(opt_len == 1) + val = options[j]; + else if(opt_len == 2) + val = (options[j] << 8) + options[j+1]; + else if(opt_len == 3) + val = (options[j] << 16) + (options[j+1] << 8) + options[j+2]; + else if(opt_len == 4) + val = ((u_int32_t)options[j] << 24) + (options[j+1] << 16) + (options[j+2] << 8) + options[j+3]; + + if(kind == 2) + tcp_mss = val; + else if(kind == 3) + tcp_wscale = val; + } + + if(ndpi_str->cfg.tcp_fingerprint_format == NDPI_NATIVE_TCP_FINGERPRINT) { + while((opt_len > 0) && (j < options_len)) { + rc = snprintf(&options_fp[options_fp_len], sizeof(options_fp)-options_fp_len, "%02x", options[j]); + if((rc < 0) || ((int)(options_fp_len + rc) == sizeof(options_fp))) break; + + options_fp_len += rc; + j++, opt_len--; + } + } } - } - i += len; + i += len; + } else + break; + } /* for */ + + if((options_len == 4) && (tcp_mss > 0)) { + /* + Not inherently malicious, but unusual for modern general-purpose OSes. + More suspicious if coming from a device that should support full TCP options (e.g., a Windows/Linux server). + Less suspicious if from an embedded device or legacy system. + + For this reason we ignore packets originating from private IP + that might be originated by outdated systems. + */ + if(packet->iphv6 /* Modern IP stack */ + || (packet->iph + && ndpi_is_public_ipv4(ntohl(packet->iph->saddr)))) + ndpi_set_risk(ndpi_str, flow, NDPI_MALICIOUS_FINGERPRINT, + "Unusual TCP fingerprint (scanner detected?)"); } - } /* for */ + } #ifdef DEBUG_TCP_OPTIONS printf("Raw Options Fingerprint: %s\n", options_fp); #endif - ndpi_sha256((const u_char*)options_fp, options_fp_len, sha_hash); + switch(ndpi_str->cfg.tcp_fingerprint_format) { + case NDPI_NATIVE_TCP_FINGERPRINT: + ndpi_sha256((const u_char*)options_fp, options_fp_len, sha_hash); + + snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, "%02x%02x%02x%02x%02x%02x", + sha_hash[0], sha_hash[1], sha_hash[2], + sha_hash[3], sha_hash[4], sha_hash[5]); + break; - snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, "%02x%02x%02x%02x%02x%02x", - sha_hash[0], sha_hash[1], sha_hash[2], - sha_hash[3], sha_hash[4], sha_hash[5]); + case NDPI_MUONFP_TCP_FINGERPRINT: + if(fp_idx < sizeof(fingerprint)) { + if(tcp_mss > 0) + rc = snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, ":%u", tcp_mss); + else + rc = snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, ":"); + + if(rc > 0) { + fp_idx += rc; - flow->tcp.fingerprint = ndpi_strdup(fingerprint), flow->tcp.os_hint = os_hint_unknown; + if(fp_idx < sizeof(fingerprint)) { + if(tcp_wscale > 0) + rc = snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, ":%u", tcp_wscale); + else + rc = snprintf(&fingerprint[fp_idx], sizeof(fingerprint)-fp_idx, ":"); - for(i=0; tcp_fps[i].fingerprint != NULL; i++) { - if(strcmp(tcp_fps[i].fingerprint, fingerprint) == 0) { - flow->tcp.os_hint = tcp_fps[i].os; - break; + if(rc > 0) + fp_idx += rc; + } + } } + break; } + + flow->tcp.fingerprint = ndpi_strdup(fingerprint); + + if(ndpi_str->cfg.tcp_fingerprint_raw_enabled) + flow->tcp.fingerprint_raw = ndpi_strdup(options_fp); + + flow->tcp.os_hint = ndpi_get_os_from_tcp_fingerprint(ndpi_str, flow->tcp.fingerprint); } } } @@ -7023,7 +8036,8 @@ static int ndpi_init_packet(struct ndpi_detection_module_struct *ndpi_str, packet->payload = ((u_int8_t *) l4ptr); packet->payload_packet_len = l4_packet_len; } else { - packet->generic_l4_ptr = l4ptr; + packet->payload = ((u_int8_t *) l4ptr); + packet->payload_packet_len = l4_packet_len; } return(0); @@ -7031,21 +8045,21 @@ static int ndpi_init_packet(struct ndpi_detection_module_struct *ndpi_str, /* ************************************************ */ -static u_int8_t ndpi_is_multi_or_broadcast(struct ndpi_packet_struct *packet) { +static u_int8_t ndpi_is_multi_or_broadcast(struct ndpi_flow_struct *flow) { - if(packet->iph) { + if(!flow->is_ipv6) { /* IPv4 */ - u_int32_t daddr = ntohl(packet->iph->daddr); + u_int32_t daddr = ntohl(flow->s_address.v4); - if(((daddr & 0xE0000000) == 0xE0000000 /* multicast */) + if(((daddr & 0xF0000000) == 0xE0000000 /* multicast 224.0.0.0/4 */) || ((daddr & 0x000000FF) == 0x000000FF /* last byte is 0xFF, not super correct, but a good approximation */) || ((daddr & 0x000000FF) == 0x00000000 /* last byte is 0x00, not super correct, but a good approximation */) || (daddr == 0xFFFFFFFF)) return(1); - } else if(packet->iphv6) { + } else { /* IPv6 */ - if((ntohl(packet->iphv6->ip6_dst.u6_addr.u6_addr32[0]) & 0xFF000000) == 0xFF000000) + if((ntohl((*(u_int32_t *)&flow->s_address.v6)) & 0xFF000000) == 0xFF000000) return(1); } @@ -7143,255 +8157,238 @@ static int tcp_ack_padding(struct ndpi_packet_struct *packet) { /* ******************************************************************** */ -static void ndpi_connection_tracking(struct ndpi_detection_module_struct *ndpi_str, - struct ndpi_flow_struct *flow) { - /* const for gcc code optimization and cleaner code */ - struct ndpi_packet_struct *packet = &ndpi_str->packet; - const struct ndpi_iphdr *iph = packet->iph; - const struct ndpi_ipv6hdr *iphv6 = packet->iphv6; - const struct ndpi_tcphdr *tcph = packet->tcp; - const struct ndpi_udphdr *udph = packet->udp; - - if(ndpi_str->max_payload_track_len > 0 && packet->payload_packet_len > 0) { - /* printf("LEN: %u [%s]\n", packet->payload_packet_len, packet->payload); */ - - if(flow->flow_payload == NULL) - flow->flow_payload = (char*)ndpi_malloc(ndpi_str->max_payload_track_len + 1); - - if(flow->flow_payload != NULL) { - u_int i; - - for(i=0; (i<packet->payload_packet_len) - && (flow->flow_payload_len < ndpi_str->max_payload_track_len); i++) { - flow->flow_payload[flow->flow_payload_len++] = - (ndpi_isprint(packet->payload[i]) - || ndpi_isspace(packet->payload[i])) ? packet->payload[i] : '.'; - } - } - } +static void connection_tracking(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow) { + /* const for gcc code optimization and cleaner code */ + struct ndpi_packet_struct *packet = &ndpi_str->packet; + const struct ndpi_iphdr *iph = packet->iph; + const struct ndpi_ipv6hdr *iphv6 = packet->iphv6; + const struct ndpi_tcphdr *tcph = packet->tcp; + const struct ndpi_udphdr *udph = packet->udp; - packet->tcp_retransmission = 0, packet->packet_direction = 0; + if(ndpi_str->max_payload_track_len > 0 && packet->payload_packet_len > 0) { + /* printf("LEN: %u [%s]\n", packet->payload_packet_len, packet->payload); */ - if(!ndpi_str->cfg.direction_detect_enabled) { - packet->packet_direction = flow->packet_direction; - } else { - if(iph != NULL && ntohl(iph->saddr) < ntohl(iph->daddr)) - packet->packet_direction = 1; + if(flow->flow_payload == NULL) + flow->flow_payload = (char*)ndpi_malloc(ndpi_str->max_payload_track_len + 1); - if((iphv6 != NULL) - && NDPI_COMPARE_IPV6_ADDRESS_STRUCTS(&iphv6->ip6_src, &iphv6->ip6_dst) != 0) - packet->packet_direction = 1; + if(flow->flow_payload != NULL) { + u_int i; + + for(i=0; (i<packet->payload_packet_len) + && (flow->flow_payload_len < ndpi_str->max_payload_track_len); i++) { + flow->flow_payload[flow->flow_payload_len++] = + (ndpi_isprint(packet->payload[i]) + || ndpi_isspace(packet->payload[i])) ? packet->payload[i] : '.'; + } } + } - flow->is_ipv6 = (packet->iphv6 != NULL); + packet->tcp_retransmission = 0, packet->packet_direction = 0; - flow->last_packet_time_ms = packet->current_time_ms; + if(!ndpi_str->cfg.direction_detect_enabled) { + packet->packet_direction = flow->packet_direction; + } else { + if(iph != NULL && ntohl(iph->saddr) < ntohl(iph->daddr)) + packet->packet_direction = 1; - packet->packet_lines_parsed_complete = 0; + if((iphv6 != NULL) + && NDPI_COMPARE_IPV6_ADDRESS_STRUCTS(&iphv6->ip6_src, &iphv6->ip6_dst) != 0) + packet->packet_direction = 1; + } - if(tcph != NULL) { - u_int8_t flags = ((u_int8_t*)tcph)[13]; + flow->is_ipv6 = (packet->iphv6 != NULL); - if(flags == 0) - ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP NULL scan"); - else if(flags == (TH_FIN | TH_PUSH | TH_URG)) - ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP XMAS scan"); + flow->last_packet_time_ms = packet->current_time_ms; - if(ndpi_str->cfg.direction_detect_enabled && - (tcph->source != tcph->dest)) - packet->packet_direction = (ntohs(tcph->source) < ntohs(tcph->dest)) ? 1 : 0; + if(tcph != NULL) { + u_int8_t flags = ((u_int8_t*)tcph)[13]; - if(packet->packet_direction == 0 /* cli -> srv */) { - if(flags == TH_FIN) - ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP FIN scan"); + if(flags == 0) + ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP NULL scan"); + else if(flags == (TH_FIN | TH_PUSH | TH_URG)) + ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP XMAS scan"); - flow->l4.tcp.cli2srv_tcp_flags |= flags; - } else - flow->l4.tcp.srv2cli_tcp_flags |= flags; + if(ndpi_str->cfg.direction_detect_enabled && + (tcph->source != tcph->dest)) + packet->packet_direction = (ntohs(tcph->source) < ntohs(tcph->dest)) ? 1 : 0; - if((ndpi_str->input_info == NULL) - || ndpi_str->input_info->seen_flow_beginning == NDPI_FLOW_BEGINNING_UNKNOWN) { - if(tcph->syn != 0 && tcph->ack == 0 && flow->l4.tcp.seen_syn == 0 + if(packet->packet_direction == 0 /* cli -> srv */) { + if(flags == TH_FIN) + ndpi_set_risk(ndpi_str, flow, NDPI_TCP_ISSUES, "TCP FIN scan"); + + flow->l4.tcp.cli2srv_tcp_flags |= flags; + } else + flow->l4.tcp.srv2cli_tcp_flags |= flags; + + if((ndpi_str->input_info == NULL) + || ndpi_str->input_info->seen_flow_beginning == NDPI_FLOW_BEGINNING_UNKNOWN) { + if(tcph->syn != 0 && tcph->ack == 0 && flow->l4.tcp.seen_syn == 0 + && flow->l4.tcp.seen_syn_ack == 0 && + flow->l4.tcp.seen_ack == 0) { + flow->l4.tcp.seen_syn = 1; + } else { + if(tcph->syn != 0 && tcph->ack != 0 && flow->l4.tcp.seen_syn == 1 && flow->l4.tcp.seen_syn_ack == 0 && flow->l4.tcp.seen_ack == 0) { - flow->l4.tcp.seen_syn = 1; + flow->l4.tcp.seen_syn_ack = 1; } else { - if(tcph->syn != 0 && tcph->ack != 0 && flow->l4.tcp.seen_syn == 1 - && flow->l4.tcp.seen_syn_ack == 0 && + if(tcph->syn == 0 && tcph->ack == 1 && flow->l4.tcp.seen_syn == 1 && flow->l4.tcp.seen_syn_ack == 1 && flow->l4.tcp.seen_ack == 0) { - flow->l4.tcp.seen_syn_ack = 1; - } else { - if(tcph->syn == 0 && tcph->ack == 1 && flow->l4.tcp.seen_syn == 1 && flow->l4.tcp.seen_syn_ack == 1 && - flow->l4.tcp.seen_ack == 0) { - flow->l4.tcp.seen_ack = 1; - } + flow->l4.tcp.seen_ack = 1; } } } + } - if(ndpi_str->cfg.tcp_ack_paylod_heuristic && tcp_ack_padding(packet)) { - NDPI_LOG_DBG2(ndpi_str, "TCP ACK with zero padding. Ignoring\n"); - packet->tcp_retransmission = 1; - } else if(flow->next_tcp_seq_nr[0] == 0 || flow->next_tcp_seq_nr[1] == 0 || - (tcph->syn && flow->packet_counter == 0)) { - /* initialize tcp sequence counters */ - /* the ack flag needs to be set to get valid sequence numbers from the other - * direction. Usually it will catch the second packet syn+ack but it works - * also for asymmetric traffic where it will use the first data packet - * - * if the syn flag is set add one to the sequence number, - * otherwise use the payload length. - * - * If we receive multiple syn-ack (before any real data), keep the last one - */ - if(tcph->ack != 0) { - flow->next_tcp_seq_nr[packet->packet_direction] = - ntohl(tcph->seq) + (tcph->syn ? 1 : packet->payload_packet_len); + if(ndpi_str->cfg.tcp_ack_paylod_heuristic && tcp_ack_padding(packet)) { + NDPI_LOG_DBG2(ndpi_str, "TCP ACK with zero padding. Ignoring\n"); + packet->tcp_retransmission = 1; + } else if(flow->l4.tcp.next_tcp_seq_nr[0] == 0 || flow->l4.tcp.next_tcp_seq_nr[1] == 0 || + (tcph->syn && flow->packet_counter == 0)) { + /* initialize tcp sequence counters */ + /* the ack flag needs to be set to get valid sequence numbers from the other + * direction. Usually it will catch the second packet syn+ack but it works + * also for asymmetric traffic where it will use the first data packet + * + * if the syn flag is set add one to the sequence number, + * otherwise use the payload length. + * + * If we receive multiple syn-ack (before any real data), keep the last one + */ + if(tcph->ack != 0) { + flow->l4.tcp.next_tcp_seq_nr[packet->packet_direction] = + ntohl(tcph->seq) + (tcph->syn ? 1 : packet->payload_packet_len); - /* - Check to avoid discrepancies in case we analyze a flow that does not start with SYN... - but that is already started when nDPI being to process it. See also (***) below - */ - if(flow->num_processed_pkts > 1) - flow->next_tcp_seq_nr[1 - packet->packet_direction] = ntohl(tcph->ack_seq); - } - } else if(packet->payload_packet_len > 0) { - /* check tcp sequence counters */ - if(((u_int32_t)(ntohl(tcph->seq) - flow->next_tcp_seq_nr[packet->packet_direction])) > - ndpi_str->tcp_max_retransmission_window_size) { - if(flow->last_tcp_pkt_payload_len > 0) - packet->tcp_retransmission = 1; - - /* CHECK IF PARTIAL RETRY IS HAPPENING */ - if((flow->next_tcp_seq_nr[packet->packet_direction] - ntohl(tcph->seq) < - packet->payload_packet_len)) { - if(flow->num_processed_pkts > 1) /* See also (***) above */ - flow->next_tcp_seq_nr[packet->packet_direction] = ntohl(tcph->seq) + packet->payload_packet_len; - } - } - else { - flow->next_tcp_seq_nr[packet->packet_direction] = ntohl(tcph->seq) + packet->payload_packet_len; + /* + Check to avoid discrepancies in case we analyze a flow that does not start with SYN... + but that is already started when nDPI being to process it. See also (***) below + */ + if(flow->num_processed_pkts > 1) + flow->l4.tcp.next_tcp_seq_nr[1 - packet->packet_direction] = ntohl(tcph->ack_seq); + } + } else if(packet->payload_packet_len > 0) { + /* check tcp sequence counters */ + if(((u_int32_t)(ntohl(tcph->seq) - flow->l4.tcp.next_tcp_seq_nr[packet->packet_direction])) > + ndpi_str->tcp_max_retransmission_window_size) { + if(flow->l4.tcp.last_tcp_pkt_payload_len > 0) + packet->tcp_retransmission = 1; + + /* CHECK IF PARTIAL RETRY IS HAPPENING */ + if((flow->l4.tcp.next_tcp_seq_nr[packet->packet_direction] - ntohl(tcph->seq) < + packet->payload_packet_len)) { + if(flow->num_processed_pkts > 1) /* See also (***) above */ + flow->l4.tcp.next_tcp_seq_nr[packet->packet_direction] = ntohl(tcph->seq) + packet->payload_packet_len; } } - - if(tcph->rst) { - flow->next_tcp_seq_nr[0] = 0; - flow->next_tcp_seq_nr[1] = 0; + else { + flow->l4.tcp.next_tcp_seq_nr[packet->packet_direction] = ntohl(tcph->seq) + packet->payload_packet_len; } + } - flow->last_tcp_pkt_payload_len = packet->payload_packet_len; - } else if(udph != NULL) { - if(ndpi_str->cfg.direction_detect_enabled && - (udph->source != udph->dest)) - packet->packet_direction = (htons(udph->source) < htons(udph->dest)) ? 1 : 0; + if(tcph->rst) { + flow->l4.tcp.next_tcp_seq_nr[0] = 0; + flow->l4.tcp.next_tcp_seq_nr[1] = 0; } - if(flow->init_finished == 0) { - u_int16_t s_port = 0, d_port = 0; /* Source/Dest ports */ + flow->l4.tcp.last_tcp_pkt_payload_len = packet->payload_packet_len; + } else if(udph != NULL) { + if(ndpi_str->cfg.direction_detect_enabled && + (udph->source != udph->dest)) + packet->packet_direction = (htons(udph->source) < htons(udph->dest)) ? 1 : 0; + } - flow->init_finished = 1; + if(flow->init_finished == 0) { + u_int16_t s_port = 0, d_port = 0; /* Source/Dest ports */ - if(tcph != NULL) { - if(ndpi_str->input_info && - ndpi_str->input_info->seen_flow_beginning == NDPI_FLOW_BEGINNING_SEEN) { - flow->l4.tcp.seen_syn = 1; - flow->l4.tcp.seen_syn_ack = 1; - flow->l4.tcp.seen_ack = 1; - } + flow->init_finished = 1; - s_port = tcph->source, d_port = tcph->dest; - } else if(udph != NULL) { - s_port = udph->source; - d_port = udph->dest; + if(tcph != NULL) { + if(ndpi_str->input_info && + ndpi_str->input_info->seen_flow_beginning == NDPI_FLOW_BEGINNING_SEEN) { + flow->l4.tcp.seen_syn = 1; + flow->l4.tcp.seen_syn_ack = 1; + flow->l4.tcp.seen_ack = 1; } - /* Client/Server direction */ + s_port = tcph->source, d_port = tcph->dest; + } else if(udph != NULL) { + s_port = udph->source; + d_port = udph->dest; + } - if(ndpi_str->input_info && - ndpi_str->input_info->in_pkt_dir != NDPI_IN_PKT_DIR_UNKNOWN) { - if(ndpi_str->input_info->in_pkt_dir == NDPI_IN_PKT_DIR_C_TO_S) - flow->client_packet_direction = packet->packet_direction; - else - flow->client_packet_direction = !packet->packet_direction; - } else { - if(tcph && tcph->syn) { - if(tcph->ack == 0) { - flow->client_packet_direction = packet->packet_direction; - } else { - flow->client_packet_direction = !packet->packet_direction; - } - } else if(ntohs(s_port) > 1024 && ntohs(d_port) < 1024) { - flow->client_packet_direction = packet->packet_direction; - } else if(ntohs(s_port) < 1024 && ntohs(d_port) > 1024) { - flow->client_packet_direction = !packet->packet_direction; - } else { - flow->client_packet_direction = packet->packet_direction; - } - } + /* Client/Server direction */ - if(current_pkt_from_client_to_server(ndpi_str, flow)) { - if(flow->is_ipv6 == 0) { - flow->c_address.v4 = packet->iph->saddr; - flow->s_address.v4 = packet->iph->daddr; + if(ndpi_str->input_info && + ndpi_str->input_info->in_pkt_dir != NDPI_IN_PKT_DIR_UNKNOWN) { + if(ndpi_str->input_info->in_pkt_dir == NDPI_IN_PKT_DIR_C_TO_S) + flow->client_packet_direction = packet->packet_direction; + else + flow->client_packet_direction = !packet->packet_direction; + } else { + if(tcph && tcph->syn) { + if(tcph->ack == 0) { + flow->client_packet_direction = packet->packet_direction; } else { - memcpy(flow->c_address.v6, &packet->iphv6->ip6_src, 16); - memcpy(flow->s_address.v6, &packet->iphv6->ip6_dst, 16); + flow->client_packet_direction = !packet->packet_direction; } - - flow->c_port = s_port; - flow->s_port = d_port; + } else if(ntohs(s_port) > 1024 && ntohs(d_port) < 1024) { + flow->client_packet_direction = packet->packet_direction; + } else if(ntohs(s_port) < 1024 && ntohs(d_port) > 1024) { + flow->client_packet_direction = !packet->packet_direction; } else { - if(flow->is_ipv6 == 0) { - flow->c_address.v4 = packet->iph->daddr; - flow->s_address.v4 = packet->iph->saddr; - } else { - memcpy(flow->c_address.v6, &packet->iphv6->ip6_dst, 16); - memcpy(flow->s_address.v6, &packet->iphv6->ip6_src, 16); - } - - flow->c_port = d_port; - flow->s_port = s_port; + flow->client_packet_direction = packet->packet_direction; } } - if(flow->packet_counter < MAX_PACKET_COUNTER && packet->payload_packet_len) { - flow->packet_counter++; - } + if(current_pkt_from_client_to_server(ndpi_str, flow)) { + if(flow->is_ipv6 == 0) { + flow->c_address.v4 = packet->iph->saddr; + flow->s_address.v4 = packet->iph->daddr; + } else { + memcpy(flow->c_address.v6, &packet->iphv6->ip6_src, 16); + memcpy(flow->s_address.v6, &packet->iphv6->ip6_dst, 16); + } - if(flow->all_packets_counter < MAX_PACKET_COUNTER) - flow->all_packets_counter++; + flow->c_port = s_port; + flow->s_port = d_port; + } else { + if(flow->is_ipv6 == 0) { + flow->c_address.v4 = packet->iph->daddr; + flow->s_address.v4 = packet->iph->saddr; + } else { + memcpy(flow->c_address.v6, &packet->iphv6->ip6_dst, 16); + memcpy(flow->s_address.v6, &packet->iphv6->ip6_src, 16); + } - if((flow->packet_direction_counter[packet->packet_direction] < MAX_PACKET_COUNTER) - && packet->payload_packet_len) { - flow->packet_direction_counter[packet->packet_direction]++; + flow->c_port = d_port; + flow->s_port = s_port; } + } - if(flow->packet_direction_complete_counter[packet->packet_direction] < MAX_PACKET_COUNTER) { - flow->packet_direction_complete_counter[packet->packet_direction]++; - } + if(flow->packet_counter < MAX_PACKET_COUNTER && packet->payload_packet_len) { + flow->packet_counter++; + } - if(packet->payload_packet_len > 0) - flow->packet_direction_with_payload_observed[packet->packet_direction] = 1; + if(flow->all_packets_counter < MAX_PACKET_COUNTER) + flow->all_packets_counter++; - if(!ndpi_is_multi_or_broadcast(packet)) { - /* ! (multicast or broadcast) */ + if((flow->packet_direction_counter[packet->packet_direction] < MAX_PACKET_COUNTER) + && packet->payload_packet_len) { + flow->packet_direction_counter[packet->packet_direction]++; + } - if(flow->packet_direction_complete_counter[flow->client_packet_direction] == 0) - ndpi_set_risk(ndpi_str, flow, NDPI_UNIDIRECTIONAL_TRAFFIC, "No client to server traffic"); /* Should never happen */ - else if(flow->packet_direction_complete_counter[!flow->client_packet_direction] == 0) - ndpi_set_risk(ndpi_str, flow, NDPI_UNIDIRECTIONAL_TRAFFIC, "No server to client traffic"); - else { - ndpi_unset_risk(flow, NDPI_UNIDIRECTIONAL_TRAFFIC); /* Clear bit */ - } - } + if(flow->packet_direction_complete_counter[packet->packet_direction] < MAX_PACKET_COUNTER) { + flow->packet_direction_complete_counter[packet->packet_direction]++; + } - if(ndpi_str->input_info && - ndpi_str->input_info->in_pkt_dir == NDPI_IN_PKT_DIR_UNKNOWN) { - if(current_pkt_from_client_to_server(ndpi_str, flow)) - ndpi_str->input_info->in_pkt_dir = NDPI_IN_PKT_DIR_C_TO_S; - else - ndpi_str->input_info->in_pkt_dir = NDPI_IN_PKT_DIR_S_TO_C; - } + if(ndpi_str->input_info && + ndpi_str->input_info->in_pkt_dir == NDPI_IN_PKT_DIR_UNKNOWN) { + if(current_pkt_from_client_to_server(ndpi_str, flow)) + ndpi_str->input_info->in_pkt_dir = NDPI_IN_PKT_DIR_C_TO_S; + else + ndpi_str->input_info->in_pkt_dir = NDPI_IN_PKT_DIR_S_TO_C; + } } /* ************************************************ */ @@ -7399,7 +8396,6 @@ static void ndpi_connection_tracking(struct ndpi_detection_module_struct *ndpi_s static u_int32_t check_ndpi_subprotocols(struct ndpi_detection_module_struct * const ndpi_str, struct ndpi_flow_struct * const flow, NDPI_SELECTION_BITMASK_PROTOCOL_SIZE const ndpi_selection_packet, - NDPI_PROTOCOL_BITMASK detection_bitmask, u_int16_t detected_protocol) { u_int32_t num_calls = 0, a; @@ -7411,19 +8407,18 @@ static u_int32_t check_ndpi_subprotocols(struct ndpi_detection_module_struct * c u_int16_t subproto_id = ndpi_str->proto_defaults[detected_protocol].subprotocols[a]; if(subproto_id == (uint16_t)NDPI_PROTOCOL_MATCHED_BY_CONTENT || - subproto_id == flow->detected_protocol_stack[0] || - subproto_id == flow->detected_protocol_stack[1]) { + subproto_id == flow->detected_protocol_stack[0] || + subproto_id == flow->detected_protocol_stack[1]) { continue; } - u_int16_t subproto_index = ndpi_str->proto_defaults[subproto_id].protoIdx; + u_int16_t subproto_index = ndpi_str->proto_defaults[subproto_id].dissector_idx; - if((ndpi_str->callback_buffer[subproto_index].ndpi_selection_bitmask & ndpi_selection_packet) == - ndpi_str->callback_buffer[subproto_index].ndpi_selection_bitmask && - NDPI_BITMASK_COMPARE(flow->excluded_protocol_bitmask, - ndpi_str->callback_buffer[subproto_index].excluded_protocol_bitmask) == 0 && - NDPI_BITMASK_COMPARE(ndpi_str->callback_buffer[subproto_index].detection_bitmask, - detection_bitmask) != 0) { + if(subproto_index > 0 && + (ndpi_str->callback_buffer[subproto_index].ndpi_selection_bitmask & ndpi_selection_packet) == + ndpi_str->callback_buffer[subproto_index].ndpi_selection_bitmask && + !dissector_bitmask_is_set(&flow->excluded_dissectors_bitmask, subproto_index)) { + ndpi_str->current_dissector_idx = subproto_index; ndpi_str->callback_buffer[subproto_index].func(ndpi_str, flow); num_calls++; } @@ -7438,52 +8433,40 @@ static u_int32_t check_ndpi_detection_func(struct ndpi_detection_module_struct * struct ndpi_flow_struct * const flow, NDPI_SELECTION_BITMASK_PROTOCOL_SIZE const ndpi_selection_packet, struct call_function_struct const * const callback_buffer, - uint32_t callback_buffer_size, - int is_tcp_without_payload) { + uint32_t callback_buffer_size) { void *func = NULL; u_int32_t num_calls = 0; /* First callback is associated to classification by-port, if we don't already have a partial classification */ u_int16_t fast_callback_protocol_id = flow->fast_callback_protocol_id ? flow->fast_callback_protocol_id : flow->guessed_protocol_id; - u_int16_t proto_index = ndpi_str->proto_defaults[fast_callback_protocol_id].protoIdx; - u_int16_t proto_id = ndpi_str->proto_defaults[fast_callback_protocol_id].protoId; - NDPI_PROTOCOL_BITMASK detection_bitmask; + u_int16_t dissector_idx = ndpi_str->proto_defaults[fast_callback_protocol_id].dissector_idx; u_int32_t a; - NDPI_SAVE_AS_BITMASK(detection_bitmask, flow->detected_protocol_stack[0]); + if(fast_callback_protocol_id != NDPI_PROTOCOL_UNKNOWN && + ndpi_str->callback_buffer[dissector_idx].func && + !dissector_bitmask_is_set(&flow->excluded_dissectors_bitmask, dissector_idx) && + (ndpi_str->callback_buffer[dissector_idx].ndpi_selection_bitmask & ndpi_selection_packet) == + ndpi_str->callback_buffer[dissector_idx].ndpi_selection_bitmask) { - if((proto_id != NDPI_PROTOCOL_UNKNOWN) && - NDPI_BITMASK_COMPARE(flow->excluded_protocol_bitmask, - ndpi_str->callback_buffer[proto_index].excluded_protocol_bitmask) == 0 && - NDPI_BITMASK_COMPARE(ndpi_str->callback_buffer[proto_index].detection_bitmask, detection_bitmask) != 0 && - (ndpi_str->callback_buffer[proto_index].ndpi_selection_bitmask & ndpi_selection_packet) == - ndpi_str->callback_buffer[proto_index].ndpi_selection_bitmask) - { - if((fast_callback_protocol_id != NDPI_PROTOCOL_UNKNOWN) && - (ndpi_str->proto_defaults[fast_callback_protocol_id].func != NULL) && - (is_tcp_without_payload == 0 || - ((ndpi_str->callback_buffer[proto_index].ndpi_selection_bitmask & - NDPI_SELECTION_BITMASK_PROTOCOL_HAS_PAYLOAD) == 0))) - { - ndpi_str->proto_defaults[fast_callback_protocol_id].func(ndpi_str, flow); - func = ndpi_str->proto_defaults[fast_callback_protocol_id].func; - num_calls++; - } - } + ndpi_str->current_dissector_idx = dissector_idx; + ndpi_str->callback_buffer[dissector_idx].func(ndpi_str, flow); + func = ndpi_str->callback_buffer[dissector_idx].func; + num_calls++; + } if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { /* TODO: optimize as today we're doing a linear scan */ for (a = 0; a < callback_buffer_size; a++) { + dissector_idx = callback_buffer[a].dissector_idx; + if((func != callback_buffer[a].func) && - (callback_buffer[a].ndpi_selection_bitmask & ndpi_selection_packet) == - callback_buffer[a].ndpi_selection_bitmask && - NDPI_BITMASK_COMPARE(flow->excluded_protocol_bitmask, - callback_buffer[a].excluded_protocol_bitmask) == 0 && - NDPI_BITMASK_COMPARE(callback_buffer[a].detection_bitmask, - detection_bitmask) != 0) + (callback_buffer[a].ndpi_selection_bitmask & ndpi_selection_packet) == + callback_buffer[a].ndpi_selection_bitmask && + !dissector_bitmask_is_set(&flow->excluded_dissectors_bitmask, dissector_idx)) { + ndpi_str->current_dissector_idx = dissector_idx; callback_buffer[a].func(ndpi_str, flow); num_calls++; @@ -7495,9 +8478,9 @@ static u_int32_t check_ndpi_detection_func(struct ndpi_detection_module_struct * } } - num_calls += check_ndpi_subprotocols(ndpi_str, flow, ndpi_selection_packet, detection_bitmask, + num_calls += check_ndpi_subprotocols(ndpi_str, flow, ndpi_selection_packet, flow->detected_protocol_stack[0]); - num_calls += check_ndpi_subprotocols(ndpi_str, flow, ndpi_selection_packet, detection_bitmask, + num_calls += check_ndpi_subprotocols(ndpi_str, flow, ndpi_selection_packet, flow->detected_protocol_stack[1]); return num_calls; @@ -7511,7 +8494,7 @@ u_int32_t check_ndpi_other_flow_func(struct ndpi_detection_module_struct *ndpi_s { return check_ndpi_detection_func(ndpi_str, flow, *ndpi_selection_packet, ndpi_str->callback_buffer_non_tcp_udp, - ndpi_str->callback_buffer_size_non_tcp_udp, 0); + ndpi_str->callback_buffer_size_non_tcp_udp); } /* ************************************************ */ @@ -7521,7 +8504,7 @@ static u_int32_t check_ndpi_udp_flow_func(struct ndpi_detection_module_struct *n NDPI_SELECTION_BITMASK_PROTOCOL_SIZE *ndpi_selection_packet) { return check_ndpi_detection_func(ndpi_str, flow, *ndpi_selection_packet, ndpi_str->callback_buffer_udp, - ndpi_str->callback_buffer_size_udp, 0); + ndpi_str->callback_buffer_size_udp); } /* ************************************************ */ @@ -7533,12 +8516,12 @@ static u_int32_t check_ndpi_tcp_flow_func(struct ndpi_detection_module_struct *n if(ndpi_str->packet.payload_packet_len != 0) { return check_ndpi_detection_func(ndpi_str, flow, *ndpi_selection_packet, ndpi_str->callback_buffer_tcp_payload, - ndpi_str->callback_buffer_size_tcp_payload, 0); + ndpi_str->callback_buffer_size_tcp_payload); } else { /* no payload */ return check_ndpi_detection_func(ndpi_str, flow, *ndpi_selection_packet, ndpi_str->callback_buffer_tcp_no_payload, - ndpi_str->callback_buffer_size_tcp_no_payload, 1); + ndpi_str->callback_buffer_size_tcp_no_payload); } } @@ -7574,7 +8557,6 @@ u_int16_t ndpi_guess_host_protocol_id(struct ndpi_detection_module_struct *ndpi_ addr.s_addr = flow->c_address.v4; ret = ndpi_network_port_ptree_match(ndpi_str, &addr, flow->c_port); } - } else { struct in6_addr addr; @@ -7585,7 +8567,6 @@ u_int16_t ndpi_guess_host_protocol_id(struct ndpi_detection_module_struct *ndpi_ addr = *(struct in6_addr *)&flow->c_address.v6; ret = ndpi_network_port_ptree6_match(ndpi_str, &addr, flow->c_port); } - } return(ret); @@ -7593,32 +8574,6 @@ u_int16_t ndpi_guess_host_protocol_id(struct ndpi_detection_module_struct *ndpi_ /* ********************************************************************************* */ -static u_int64_t make_fpc_dns_cache_key(struct ndpi_flow_struct *flow) { - u_int64_t key; - - if(flow->is_ipv6) - key = ndpi_quick_hash64((const char *)flow->s_address.v6, 16); - else - key = (u_int64_t)(flow->s_address.v4); - - return key; -} - -/* ********************************************************************************* */ - -u_int64_t fpc_dns_cache_key_from_dns_info(struct ndpi_flow_struct *flow) { - u_int64_t key; - - if(flow->protos.dns.is_rsp_addr_ipv6[0]) - key = ndpi_quick_hash64((const char *)&flow->protos.dns.rsp_addr[0].ipv6, 16); - else - key = (u_int64_t)(flow->protos.dns.rsp_addr[0].ipv4); - - return key; -} - -/* ********************************************************************************* */ - static u_int64_t make_msteams_key(struct ndpi_flow_struct *flow, u_int8_t use_client) { u_int64_t key; @@ -7677,7 +8632,7 @@ static int ndpi_reconcile_msteams_call_udp_port(struct ndpi_flow_struct *flow, Audio: UDP 50000-50019; 3478; 3479 Video: UDP 50020-50039; 3480 - Sharing: UDP 50040-50059; 3481 + Sharing: UDP 50040-50059; 3481 */ if((dport == 3478) || (dport == 3479) || ((sport >= 50000) && (sport <= 50019))) @@ -7725,77 +8680,90 @@ static void ndpi_reconcile_protocols(struct ndpi_detection_module_struct *ndpi_s flow->risk_shadow = flow->risk; } - switch(ret->proto.app_protocol) { - case NDPI_PROTOCOL_MICROSOFT_AZURE: - ndpi_reconcile_msteams_udp(ndpi_str, flow, flow->detected_protocol_stack[1]); - break; + /* If we have a classification by port/ip, it means everything else failed so we + shouldn't apply any logic on top of it involving: + * different classification + * LRU cache + */ + if(flow->confidence != NDPI_CONFIDENCE_MATCH_BY_PORT && + flow->confidence != NDPI_CONFIDENCE_MATCH_BY_IP) { - /* - Skype for a host doing MS Teams means MS Teams - (MS Teams uses Skype as transport protocol for voice/video) - */ - case NDPI_PROTOCOL_MSTEAMS: - if(flow->l4_proto == IPPROTO_TCP) { - // printf("====>> NDPI_PROTOCOL_MSTEAMS\n"); + switch(ret->proto.app_protocol) { + case NDPI_PROTOCOL_MICROSOFT_AZURE: + ndpi_reconcile_msteams_udp(ndpi_str, flow, flow->detected_protocol_stack[1]); + break; - if(ndpi_str->msteams_cache) - ndpi_lru_add_to_cache(ndpi_str->msteams_cache, - make_msteams_key(flow, 1 /* client */), - 0 /* dummy */, - ndpi_get_current_time(flow)); - } - break; + /* + Skype for a host doing MS Teams means MS Teams + (MS Teams uses Skype as transport protocol for voice/video) + */ + case NDPI_PROTOCOL_MSTEAMS: + if(flow->l4_proto == IPPROTO_TCP) { + // printf("====>> NDPI_PROTOCOL_MSTEAMS\n"); + + if(ndpi_str->msteams_cache) + ndpi_lru_add_to_cache(ndpi_str->msteams_cache, + make_msteams_key(flow, 1 /* client */), + 0 /* dummy */, + ndpi_get_current_time(flow)); + } + break; - case NDPI_PROTOCOL_STUN: - if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_MICROSOFT_AZURE) - ndpi_reconcile_msteams_udp(ndpi_str, flow, NDPI_PROTOCOL_STUN); - break; + case NDPI_PROTOCOL_STUN: + if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_MICROSOFT_AZURE) + ndpi_reconcile_msteams_udp(ndpi_str, flow, NDPI_PROTOCOL_STUN); + break; - case NDPI_PROTOCOL_NETFLOW: - case NDPI_PROTOCOL_SFLOW: - case NDPI_PROTOCOL_RTP: - case NDPI_PROTOCOL_COLLECTD: - /* Remove NDPI_UNIDIRECTIONAL_TRAFFIC from unidirectional protocols */ - ndpi_unset_risk(flow, NDPI_UNIDIRECTIONAL_TRAFFIC); - break; + case NDPI_PROTOCOL_TLS: + /* + When Teams is unable to communicate via UDP + it switches to TLS.TCP. Let's try to catch it + */ + if((flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_MICROSOFT_AZURE) + && (ret->proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) + && ndpi_str->msteams_cache + ) { + u_int16_t dummy; + + if(ndpi_lru_find_cache(ndpi_str->msteams_cache, + make_msteams_key(flow, 1 /* client */), + &dummy, 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow))) { + ndpi_int_change_protocol(flow, + NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_TLS, + NDPI_CONFIDENCE_DPI_PARTIAL); + } + } else if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_TELEGRAM) { + ndpi_int_change_protocol(flow, + flow->guessed_protocol_id_by_ip, flow->detected_protocol_stack[0], + NDPI_CONFIDENCE_DPI_PARTIAL); + } + break; - case NDPI_PROTOCOL_SYSLOG: - case NDPI_PROTOCOL_MDNS: - case NDPI_PROTOCOL_SONOS: - if(flow->l4_proto == IPPROTO_UDP) - ndpi_unset_risk(flow, NDPI_UNIDIRECTIONAL_TRAFFIC); - break; + case NDPI_PROTOCOL_MSTEAMS_CALL: + ndpi_reconcile_msteams_call_udp(flow); + break; - case NDPI_PROTOCOL_TLS: - /* - When Teams is unable to communicate via UDP - it switches to TLS.TCP. Let's try to catch it - */ - if((flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_MICROSOFT_AZURE) - && (ret->proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) - && ndpi_str->msteams_cache - ) { - u_int16_t dummy; - - if(ndpi_lru_find_cache(ndpi_str->msteams_cache, - make_msteams_key(flow, 1 /* client */), - &dummy, 0 /* Don't remove it as it can be used for other connections */, - ndpi_get_current_time(flow))) { - ndpi_int_change_protocol(flow, - NDPI_PROTOCOL_MSTEAMS, NDPI_PROTOCOL_TLS, - NDPI_CONFIDENCE_DPI_PARTIAL); - } - } else if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_TELEGRAM) { - ndpi_int_change_protocol(flow, - flow->guessed_protocol_id_by_ip, flow->detected_protocol_stack[0], - NDPI_CONFIDENCE_DPI_PARTIAL); + /* Generic container for microsoft subprotocols */ + case NDPI_PROTOCOL_MICROSOFT: + switch(flow->guessed_protocol_id_by_ip) { + case NDPI_PROTOCOL_MICROSOFT_365: + case NDPI_PROTOCOL_MS_ONE_DRIVE: + case NDPI_PROTOCOL_MS_OUTLOOK: + case NDPI_PROTOCOL_MSTEAMS: + ndpi_int_change_protocol(flow, + flow->guessed_protocol_id_by_ip, flow->detected_protocol_stack[1], + NDPI_CONFIDENCE_DPI_PARTIAL); + break; } - break; + break; - case NDPI_PROTOCOL_MSTEAMS_CALL: - ndpi_reconcile_msteams_call_udp(flow); - break; + case NDPI_PROTOCOL_UNKNOWN: + break; + } /* switch */ + } + switch(ret->proto.app_protocol) { case NDPI_PROTOCOL_RDP: ndpi_set_risk(ndpi_str, flow, NDPI_DESKTOP_OR_FILE_SHARING_SESSION, "Found RDP"); /* Remote assistance */ break; @@ -7804,39 +8772,10 @@ static void ndpi_reconcile_protocols(struct ndpi_detection_module_struct *ndpi_s if(flow->l4_proto == IPPROTO_TCP) /* TCP only */ ndpi_set_risk(ndpi_str, flow, NDPI_DESKTOP_OR_FILE_SHARING_SESSION, "Found AnyDesk"); /* Remote assistance */ break; + } - /* Generic container for microsoft subprotocols */ - case NDPI_PROTOCOL_MICROSOFT: - switch(flow->guessed_protocol_id_by_ip) { - case NDPI_PROTOCOL_MICROSOFT_365: - case NDPI_PROTOCOL_MS_ONE_DRIVE: - case NDPI_PROTOCOL_MS_OUTLOOK: - case NDPI_PROTOCOL_MSTEAMS: - ndpi_int_change_protocol(flow, - flow->guessed_protocol_id_by_ip, flow->detected_protocol_stack[1], - NDPI_CONFIDENCE_DPI_PARTIAL); - break; - } - break; - - /* Generic container for google subprotocols */ - case NDPI_PROTOCOL_GOOGLE: - switch(flow->guessed_protocol_id_by_ip) { - case NDPI_PROTOCOL_GOOGLE_CLOUD: - ndpi_int_change_protocol(flow, - flow->guessed_protocol_id_by_ip, flow->detected_protocol_stack[1], - NDPI_CONFIDENCE_DPI_PARTIAL); - - break; - } - break; - - case NDPI_PROTOCOL_UNKNOWN: - break; - } /* switch */ - - ret->proto.master_protocol = flow->detected_protocol_stack[1], - ret->proto.app_protocol = flow->detected_protocol_stack[0]; + ret->proto.master_protocol = flow->detected_protocol_stack[1]; + ret->proto.app_protocol = flow->detected_protocol_stack[0]; for(i=0; i<2; i++) { switch(ndpi_get_proto_breed(ndpi_str, flow->detected_protocol_stack[i])) { @@ -7858,11 +8797,11 @@ static void ndpi_reconcile_protocols(struct ndpi_detection_module_struct *ndpi_s skip_risk = 1; } } - + if(!skip_risk) ndpi_set_risk(ndpi_str, flow, NDPI_UNSAFE_PROTOCOL, NULL); break; - + default: /* Nothing to do */ break; @@ -7924,7 +8863,7 @@ int search_into_bittorrent_cache(struct ndpi_detection_module_struct *ndpi_struc flows that have anomalous conditions such as SYN+RST ACK+RST.... As these conditions won't happen with nDPI protocol-detected protocols it is not necessary to call this function elsewhere - */ +*/ static void ndpi_check_tcp_flags(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { // printf("[TOTAL] %u / %u [tot: %u]\n", flow->packet_direction_complete_counter[0], flow->packet_direction_complete_counter[1], flow->all_packets_counter); bool is_probing = false; @@ -7953,8 +8892,8 @@ static void ndpi_check_probing_attempt(struct ndpi_detection_module_struct *ndpi if((flow->l4_proto == IPPROTO_TCP) && (flow->l4.tcp.cli2srv_tcp_flags & TH_PUSH) && (flow->l4.tcp.srv2cli_tcp_flags & TH_PUSH)) { - if(flow->packet_direction_with_payload_observed[0] - && flow->packet_direction_with_payload_observed[1]) { + if(flow->packet_direction_counter[0] + && flow->packet_direction_counter[1]) { /* Both directions observed */ /* Nothing to do */ } else { @@ -7974,11 +8913,6 @@ static void ndpi_check_probing_attempt(struct ndpi_detection_module_struct *ndpi if(flow->host_server_name[0] == '\0') ndpi_set_risk(ndpi_str, flow, NDPI_PROBING_ATTEMPT, "TLS Probing"); break; - - case NDPI_PROTOCOL_QUIC: - if(flow->host_server_name[0] == '\0') - ndpi_set_risk(ndpi_str, flow, NDPI_PROBING_ATTEMPT, "QUIC Probing"); - break; } } } @@ -7987,6 +8921,66 @@ static void ndpi_check_probing_attempt(struct ndpi_detection_module_struct *ndpi /* ********************************************************************************* */ +static int is_unidir_traffic_exception(struct ndpi_flow_struct *flow) { + + switch(flow->detected_protocol_stack[0]) { + case NDPI_PROTOCOL_NETFLOW: + case NDPI_PROTOCOL_SFLOW: + case NDPI_PROTOCOL_COLLECTD: + return 1; + + case NDPI_PROTOCOL_SYSLOG: + case NDPI_PROTOCOL_MDNS: + case NDPI_PROTOCOL_SONOS: + case NDPI_PROTOCOL_RTP: + if(flow->l4_proto == IPPROTO_UDP) + return 1; + } + return 0; +} + +/* ********************************************************************************* */ + +static void internal_giveup(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + ndpi_protocol *ret) { + + if(flow->already_gaveup) { + NDPI_LOG_INFO(ndpi_struct, "Already called!\n"); /* We shoudn't be here ...*/ + return; + } + flow->already_gaveup = 1; + + NDPI_LOG_DBG2(ndpi_struct, ""); + + /* This (internal) function is expected to be called for **every** flows, + exactly once, as **last** code processing the flow itself */ + + /* TODO: this function is similar to ndpi_detection_giveup(). We should try to unify them + or to have two more distinct logics... + The/A critical point is that ndpi_detection_giveup() is public and it is always used by + any programs linking to libnDPI: we must be sure to not change the external behavior + */ + + /* *** + * *** We can't access ndpi_str->packet from this function!! + * ***/ + + if(!ndpi_is_multi_or_broadcast(flow) && + !is_unidir_traffic_exception(flow)) { + + if(flow->packet_direction_complete_counter[flow->client_packet_direction] == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_UNIDIRECTIONAL_TRAFFIC, "No client to server traffic"); + else if(flow->packet_direction_complete_counter[!flow->client_packet_direction] == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_UNIDIRECTIONAL_TRAFFIC, "No server to client traffic"); + } + + /* TODO */ + (void)ret; +} + +/* ********************************************************************************* */ + ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, u_int8_t *protocol_was_guessed) { ndpi_protocol ret = NDPI_PROTOCOL_NULL; @@ -8011,8 +9005,11 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st ret.category = flow->category; /* Ensure that we don't change our mind if detection is already complete */ - if(ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN) + if(ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN) { + /* Reason: public "ndpi_detection_giveup", already classified */ + internal_giveup(ndpi_str, flow, &ret); return(ret); + } /* Partial classification */ if(flow->fast_callback_protocol_id != NDPI_PROTOCOL_UNKNOWN) { @@ -8048,23 +9045,23 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st /* TODO: not sure about the best "order" among fully encrypted logic, classification by-port and classification by-ip...*/ if(ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && flow->first_pkt_fully_encrypted == 1) { - ndpi_set_risk(ndpi_str, flow, NDPI_FULLY_ENCRYPTED, NULL); + ndpi_set_risk(ndpi_str, flow, NDPI_OBFUSCATED_TRAFFIC, "Fully Encrypted"); } /* If guess_ip_before_port is enabled, classify by-ip first */ if((ndpi_str->cfg.guess_ip_before_port)) - { - if((ndpi_str->cfg.guess_on_giveup & NDPI_GIVEUP_GUESS_BY_IP) && - ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && - flow->guessed_protocol_id_by_ip != NDPI_PROTOCOL_UNKNOWN) { - - ndpi_set_detected_protocol(ndpi_str, flow, - flow->guessed_protocol_id_by_ip, - ret.proto.master_protocol, - NDPI_CONFIDENCE_MATCH_BY_IP); - ret.proto.app_protocol = flow->detected_protocol_stack[0]; + { + if((ndpi_str->cfg.guess_on_giveup & NDPI_GIVEUP_GUESS_BY_IP) && + ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && + flow->guessed_protocol_id_by_ip != NDPI_PROTOCOL_UNKNOWN) { + + ndpi_set_detected_protocol(ndpi_str, flow, + flow->guessed_protocol_id_by_ip, + ret.proto.master_protocol, + NDPI_CONFIDENCE_MATCH_BY_IP); + ret.proto.app_protocol = flow->detected_protocol_stack[0]; + } } - } /* Classification by-port */ if((ndpi_str->cfg.guess_on_giveup & NDPI_GIVEUP_GUESS_BY_PORT) && ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && @@ -8078,11 +9075,11 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && flow->guessed_protocol_id_by_ip != NDPI_PROTOCOL_UNKNOWN) { - ndpi_set_detected_protocol(ndpi_str, flow, - flow->guessed_protocol_id_by_ip, - ret.proto.master_protocol, - NDPI_CONFIDENCE_MATCH_BY_IP); - ret.proto.app_protocol = flow->detected_protocol_stack[0]; + ndpi_set_detected_protocol(ndpi_str, flow, + flow->guessed_protocol_id_by_ip, + ret.proto.master_protocol, + NDPI_CONFIDENCE_MATCH_BY_IP); + ret.proto.app_protocol = flow->detected_protocol_stack[0]; } if(ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN) { @@ -8090,27 +9087,20 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st ndpi_fill_protocol_category(ndpi_str, flow, &ret); } + /* Reason: public "ndpi_detection_giveup" */ + internal_giveup(ndpi_str, flow, &ret); + return(ret); } /* ********************************************************************************* */ -void ndpi_process_extra_packet(struct ndpi_detection_module_struct *ndpi_str, - struct ndpi_flow_struct *flow, - const unsigned char *packet_data, const unsigned short packetlen, - const u_int64_t current_time_ms, - struct ndpi_flow_input_info *input_info) { - if(flow == NULL) - return; - - /* set up the packet headers for the extra packet function to use if it wants */ - if(ndpi_init_packet(ndpi_str, flow, current_time_ms, packet_data, packetlen, input_info) != 0) - return; - - ndpi_connection_tracking(ndpi_str, flow); +static void process_extra_packet(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_str->packet; - /* call the extra packet function (which may add more data/info to flow) */ - if(flow->extra_packets_func) { + /* Workaround: safety check to skip non TCP/UDP packets sent to extra dissectors (see #2762) */ + if(((packet->udp != NULL) || (packet->tcp != NULL))) { if((flow->extra_packets_func(ndpi_str, flow) == 0) || (!flow->monitoring && ++flow->num_extra_packets_checked == flow->max_extra_packets_to_check)) { flow->extra_packets_func = NULL; /* Done */ @@ -8156,6 +9146,7 @@ int ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_str, NDPI_LOG_DBG2(ndpi_str, "Invalid ip4/ip4+netmask: %s\n", ip_address_and_mask); return(-1); } + node = add_to_ptree(ndpi_str->custom_categories.ipAddresses_shadow, AF_INET, &pin, bits); } else if(is_ipv6 && ndpi_str->custom_categories.ipAddresses6_shadow) { struct in6_addr pin6; @@ -8202,11 +9193,11 @@ int ndpi_load_category(struct ndpi_detection_module_struct *ndpi_struct, const c if(rv < 0) { /* - IP load failed, load as hostname + IP load failed, load as hostname - NOTE: - we cannot add user_data here as with Aho-Corasick this - information would not be used + NOTE: + we cannot add user_data here as with Aho-Corasick this + information would not be used */ rv = ndpi_load_hostname_category(ndpi_struct, ip_or_name, category); } @@ -8330,7 +9321,7 @@ int ndpi_fill_ip_protocol_category(struct ndpi_detection_module_struct *ndpi_str ret->category = (ndpi_protocol_category_t) node->value.u.uv32.user_value; ret->custom_category_userdata = node->custom_user_data; - if((ret->category == CUSTOM_CATEGORY_MALWARE) && (match_client == false)) { + if((ret->category == NDPI_PROTOCOL_CATEGORY_MALWARE) && (match_client == false)) { ndpi_set_risk(ndpi_str, flow, NDPI_MALWARE_HOST_CONTACTED, "Client contacted malware host"); } @@ -8376,7 +9367,7 @@ int ndpi_fill_ipv6_protocol_category(struct ndpi_detection_module_struct *ndpi_s ret->category = (ndpi_protocol_category_t) node->value.u.uv32.user_value; ret->custom_category_userdata = node->custom_user_data; - if((ret->category == CUSTOM_CATEGORY_MALWARE) && (match_client == false)) { + if((ret->category == NDPI_PROTOCOL_CATEGORY_MALWARE) && (match_client == false)) { ndpi_set_risk(ndpi_str, flow, NDPI_MALWARE_HOST_CONTACTED, "Client contacted malware host"); } @@ -8434,11 +9425,28 @@ static void ndpi_reset_packet_line_info(struct ndpi_packet_struct *packet) { packet->http_response.ptr = NULL, packet->http_response.len = 0, packet->forwarded_line.ptr = NULL, packet->forwarded_line.len = 0; packet->upgrade_line.ptr = NULL, packet->upgrade_line.len = 0; + packet->bootid.ptr = NULL, packet->bootid.len = 0; + packet->usn.ptr = NULL, packet->usn.len = 0; + packet->cache_controle.ptr = NULL, packet->cache_controle.len = 0; + packet->location.ptr = NULL, packet->location.len = 0; + packet->household_smart_speaker_audio.ptr = NULL, packet->household_smart_speaker_audio.len = 0; + packet->rincon_household.ptr = NULL, packet->rincon_household.len = 0; + packet->rincon_bootseq.ptr = NULL, packet->rincon_bootseq.len = 0; + packet->rincon_wifimode.ptr = NULL, packet->rincon_wifimode.len = 0; + packet->rincon_variant.ptr = NULL, packet->rincon_variant.len = 0; + packet->sonos_securelocation.ptr = NULL, packet->sonos_securelocation.len = 0; + packet->securelocation_upnp.ptr = NULL, packet->securelocation_upnp.len = 0; + packet->location_smart_speaker_audio.ptr = NULL, packet->location_smart_speaker_audio.len = 0; + packet->nt.ptr = NULL, packet->nt.len = 0; + packet->nts.ptr = NULL, packet->nts.len = 0; + packet->man.ptr = NULL, packet->man.len = 0; + packet->mx.ptr = NULL, packet->mx.len = 0; + packet->st.ptr = NULL, packet->st.len = 0; } /* ********************************************************************************* */ -static int ndpi_is_ntop_protocol(ndpi_protocol *ret) { +static int is_ntop_protocol(const ndpi_protocol *ret) { if((ret->proto.master_protocol == NDPI_PROTOCOL_HTTP) && (ret->proto.app_protocol == NDPI_PROTOCOL_NTOP)) return(1); else @@ -8518,18 +9526,18 @@ static void ndpi_search_portable_executable(struct ndpi_detection_module_struct /* ********************************************************************************* */ -static int ndpi_check_protocol_port_mismatch_exceptions(default_ports_tree_node_t *expected_proto, - ndpi_protocol *returned_proto) { +static int check_protocol_port_mismatch_exceptions(default_ports_tree_node_t *expected_proto, + const ndpi_protocol *returned_proto) { /* For TLS (and other protocols) it is not simple to guess the exact protocol so before triggering an alert we need to make sure what we have exhausted all the possible options available */ - if(ndpi_is_ntop_protocol(returned_proto)) return(1); + if(is_ntop_protocol(returned_proto)) return(1); if(returned_proto->proto.master_protocol == NDPI_PROTOCOL_TLS) { - switch(expected_proto->proto->protoId) { + switch(expected_proto->proto_idx) { case NDPI_PROTOCOL_MAIL_IMAPS: case NDPI_PROTOCOL_MAIL_POPS: case NDPI_PROTOCOL_MAIL_SMTPS: @@ -8543,63 +9551,52 @@ static int ndpi_check_protocol_port_mismatch_exceptions(default_ports_tree_node_ /* ****************************************************** */ -static int ndpi_do_guess(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, ndpi_protocol *ret) { +static int do_guess(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, ndpi_protocol *ret) { struct ndpi_packet_struct *packet = &ndpi_str->packet; + u_int8_t user_defined_proto; - ret->proto.master_protocol = ret->proto.app_protocol = NDPI_PROTOCOL_UNKNOWN, ret->category = 0; - - if(packet->iphv6 || packet->iph) { - u_int8_t user_defined_proto; - - /* guess protocol */ - flow->guessed_protocol_id = (int16_t) guess_protocol_id(ndpi_str, flow, flow->l4_proto, - ntohs(flow->c_port), ntohs(flow->s_port), - &user_defined_proto); - flow->guessed_protocol_id_by_ip = ndpi_guess_host_protocol_id(ndpi_str, flow); - flow->fast_callback_protocol_id = NDPI_PROTOCOL_UNKNOWN; - - ret->protocol_by_ip = flow->guessed_protocol_id_by_ip; - - if(ndpi_str->custom_categories.categories_loaded) { - if(packet->iph) - ndpi_fill_ip_protocol_category(ndpi_str, flow, flow->c_address.v4, flow->s_address.v4, ret); - else - ndpi_fill_ipv6_protocol_category(ndpi_str, flow, (struct in6_addr *)flow->c_address.v6, - (struct in6_addr *)flow->s_address.v6, ret); - flow->guessed_header_category = ret->category; - } else - flow->guessed_header_category = NDPI_PROTOCOL_CATEGORY_UNSPECIFIED; - - if(flow->guessed_protocol_id >= NDPI_MAX_SUPPORTED_PROTOCOLS) { - /* This is a custom protocol and it has priority over everything else */ - ret->proto.master_protocol = NDPI_PROTOCOL_UNKNOWN, - ret->proto.app_protocol = flow->guessed_protocol_id; - flow->confidence = NDPI_CONFIDENCE_CUSTOM_RULE; - ndpi_fill_protocol_category(ndpi_str, flow, ret); - return(-1); - } - - if(user_defined_proto && flow->guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) { - if(flow->guessed_protocol_id_by_ip != NDPI_PROTOCOL_UNKNOWN) { - u_int8_t protocol_was_guessed; + /* guess protocol */ + flow->guessed_protocol_id = (int16_t) guess_protocol_id(ndpi_str, flow->l4_proto, + ntohs(flow->c_port), ntohs(flow->s_port), + &user_defined_proto); + flow->guessed_protocol_id_by_ip = ndpi_guess_host_protocol_id(ndpi_str, flow); + flow->fast_callback_protocol_id = NDPI_PROTOCOL_UNKNOWN; - *ret = ndpi_detection_giveup(ndpi_str, flow, &protocol_was_guessed); - } + ret->protocol_by_ip = flow->guessed_protocol_id_by_ip; - flow->confidence = NDPI_CONFIDENCE_CUSTOM_RULE; - ndpi_fill_protocol_category(ndpi_str, flow, ret); - return(-1); - } + if(ndpi_str->custom_categories.categories_loaded) { + if(packet->iph) + ndpi_fill_ip_protocol_category(ndpi_str, flow, flow->c_address.v4, flow->s_address.v4, ret); + else + ndpi_fill_ipv6_protocol_category(ndpi_str, flow, (struct in6_addr *)flow->c_address.v6, + (struct in6_addr *)flow->s_address.v6, ret); + flow->guessed_header_category = ret->category; + } else { + flow->guessed_header_category = NDPI_PROTOCOL_CATEGORY_UNSPECIFIED; } - if(flow->guessed_protocol_id_by_ip >= NDPI_MAX_SUPPORTED_PROTOCOLS) { - NDPI_SELECTION_BITMASK_PROTOCOL_SIZE ndpi_selection_packet = {0}; - + if(ndpi_is_custom_protocol(ndpi_str, flow->guessed_protocol_id)) { /* This is a custom protocol and it has priority over everything else */ - ret->proto.master_protocol = flow->guessed_protocol_id, ret->proto.app_protocol = flow->guessed_protocol_id_by_ip; + ret->proto.master_protocol = NDPI_PROTOCOL_UNKNOWN; + ret->proto.app_protocol = flow->guessed_protocol_id; + flow->confidence = NDPI_CONFIDENCE_CUSTOM_RULE; + ndpi_fill_protocol_category(ndpi_str, flow, ret); + return(-1); + } - flow->num_dissector_calls += ndpi_check_flow_func(ndpi_str, flow, &ndpi_selection_packet); + if(user_defined_proto && flow->guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN) { + /* This is a custom protocol/range and it has priority over everything else */ + ret->proto.master_protocol = NDPI_PROTOCOL_UNKNOWN; + ret->proto.app_protocol = flow->guessed_protocol_id; + flow->confidence = NDPI_CONFIDENCE_CUSTOM_RULE; + ndpi_fill_protocol_category(ndpi_str, flow, ret); + return(-1); + } + if(ndpi_is_custom_protocol(ndpi_str, flow->guessed_protocol_id_by_ip)) { + /* This is a custom protocol and it has priority over everything else */ + ret->proto.master_protocol = flow->guessed_protocol_id; + ret->proto.app_protocol = flow->guessed_protocol_id_by_ip; flow->confidence = NDPI_CONFIDENCE_CUSTOM_RULE; ndpi_fill_protocol_category(ndpi_str, flow, ret); return(-1); @@ -8646,7 +9643,7 @@ static void fpc_check_eval(struct ndpi_detection_module_struct *ndpi_str, /* Check via fpc DNS cache */ if(ndpi_str->fpc_dns_cache && - ndpi_lru_find_cache(ndpi_str->fpc_dns_cache, make_fpc_dns_cache_key(flow), + ndpi_lru_find_cache(ndpi_str->fpc_dns_cache, fpc_dns_cache_key_from_flow(flow), &fpc_dns_cached_proto, 0 /* Don't remove it as it can be used for other connections */, ndpi_get_current_time(flow))) { fpc_update(ndpi_str, flow, NDPI_PROTOCOL_UNKNOWN, @@ -8664,17 +9661,29 @@ static void fpc_check_eval(struct ndpi_detection_module_struct *ndpi_str, /* ********************************************************************************* */ -static char* ndpi_expected_ports_str(u_int16_t *default_ports, char *str, u_int str_len) { +static char* ndpi_expected_ports_str(ndpi_port_range *default_ports, char *str, u_int str_len) { + int rc; + str[0] = '\0'; - if(default_ports[0] != 0) { + if(default_ports[0].port_low != 0) { u_int8_t i, offset; offset = snprintf(str, str_len, "Expected on port "); - for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i] != 0); i++) { - int rc = snprintf(&str[offset], str_len-offset, "%s%u", - (i > 0) ? "," : "", default_ports[i]); + for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i].port_low != 0); i++) { + if(default_ports[i].is_custom) + continue; + + if(default_ports[i].port_low == default_ports[i].port_high) + rc = snprintf(&str[offset], str_len-offset, "%s%u", + (i > 0) ? "," : "", + default_ports[i].port_low); + else + rc = snprintf(&str[offset], str_len-offset, "%s%u-%u", + (i > 0) ? "," : "", + default_ports[i].port_low, + default_ports[i].port_high); if(rc > 0) offset += rc; @@ -8690,6 +9699,142 @@ static char* ndpi_expected_ports_str(u_int16_t *default_ports, char *str, u_int /* ********************************************************************************* */ +static void check_proto_on_non_std_port_risk(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow, + const ndpi_protocol *ret) +{ + struct ndpi_packet_struct *packet = &ndpi_str->packet; + default_ports_tree_node_t *found; + ndpi_port_range *default_ports; + + if(!is_flowrisk_enabled(ndpi_str, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT)) + return; + + /* Exceptions: + * STUN has a default port (used for TURN) but all p2p traffic is on random ports + */ + if(ret->proto.master_protocol == NDPI_PROTOCOL_STUN || + ret->proto.app_protocol == NDPI_PROTOCOL_STUN) + return; + + if(packet->udp) + found = ndpi_get_guessed_protocol_id(ndpi_str, IPPROTO_UDP, + ntohs(flow->c_port), + ntohs(flow->s_port)), + default_ports = ndpi_str->proto_defaults[ret->proto.master_protocol ? ret->proto.master_protocol : ret->proto.app_protocol].udp_default_ports; + else if(packet->tcp) + found = ndpi_get_guessed_protocol_id(ndpi_str, IPPROTO_TCP, + ntohs(flow->c_port), + ntohs(flow->s_port)), + default_ports = ndpi_str->proto_defaults[ret->proto.master_protocol ? ret->proto.master_protocol : ret->proto.app_protocol].tcp_default_ports; + else + found = NULL, default_ports = NULL; + + if(found + && (found->proto_idx != NDPI_PROTOCOL_UNKNOWN) + && (found->proto_idx != ret->proto.master_protocol) + && (found->proto_idx != ret->proto.app_protocol) + ) { + // printf("******** %u / %u\n", found->proto->protoId, ret->proto.master_protocol); + + if(!check_protocol_port_mismatch_exceptions(found, ret)) { + /* + Before triggering the alert we need to make some extra checks + - the protocol found is not running on the port we have found + (i.e. two or more protools share the same default port) + */ + u_int8_t found = 0, i; + + for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i].port_low != 0); i++) { + if(default_ports[i].port_low >= ntohs(flow->s_port) && + default_ports[i].port_high <= ntohs(flow->s_port)) { + found = 1; + break; + } + } /* for */ + + if(!found) { + default_ports_tree_node_t *r = ndpi_get_guessed_protocol_id(ndpi_str, packet->udp ? IPPROTO_UDP : IPPROTO_TCP, + ntohs(flow->c_port), ntohs(flow->s_port)); + + if((r == NULL) + || ((r->proto_idx != ret->proto.app_protocol) && (r->proto_idx != ret->proto.master_protocol))) { + if(default_ports && (default_ports[0].port_low != 0)) { + char str[64]; + int only_custom = 1; + + /* "Default ports" set via custom rules are ignored */ + for(i = 0; i < MAX_DEFAULT_PORTS && (default_ports[i].port_low != 0); i++) + if(!default_ports[i].is_custom) + only_custom = 0; + + if(!only_custom) + ndpi_set_risk(ndpi_str, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT, + ndpi_expected_ports_str(default_ports, str, sizeof(str))); + } + } + } + } + } else if((!is_ntop_protocol(ret)) && default_ports && (default_ports[0].port_low != 0)) { + u_int8_t found = 0, i, num_loops = 0; + + check_default_ports: + for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i].port_low != 0); i++) { + if((default_ports[i].port_low >= ntohs(flow->c_port) && + default_ports[i].port_high <= ntohs(flow->c_port)) || + (default_ports[i].port_low >= ntohs(flow->s_port) && + default_ports[i].port_high <= ntohs(flow->s_port))) { + found = 1; + break; + } + } /* for */ + + if((num_loops == 0) && (!found)) { + if(packet->udp) + default_ports = ndpi_str->proto_defaults[ret->proto.app_protocol].udp_default_ports; + else + default_ports = ndpi_str->proto_defaults[ret->proto.app_protocol].tcp_default_ports; + + num_loops = 1; + goto check_default_ports; + } + + if(!found) { + default_ports_tree_node_t *r = ndpi_get_guessed_protocol_id(ndpi_str, packet->udp ? IPPROTO_UDP : IPPROTO_TCP, + ntohs(flow->c_port), ntohs(flow->s_port)); + + if((r == NULL) + || ((r->proto_idx != ret->proto.app_protocol) + && (r->proto_idx != ret->proto.master_protocol))) { + if(ret->proto.app_protocol != NDPI_PROTOCOL_FTP_DATA) { + ndpi_port_range *default_ports; + + if(packet->udp) + default_ports = ndpi_str->proto_defaults[ret->proto.master_protocol ? ret->proto.master_protocol : ret->proto.app_protocol].udp_default_ports; + else if(packet->tcp) + default_ports = ndpi_str->proto_defaults[ret->proto.master_protocol ? ret->proto.master_protocol : ret->proto.app_protocol].tcp_default_ports; + else + default_ports = NULL; + + if(default_ports && (default_ports[0].port_low != 0)) { + char str[64]; + int only_custom = 1; + + /* "Default ports" set via custom rules are ignored */ + for(i = 0; i < MAX_DEFAULT_PORTS && (default_ports[i].port_low != 0); i++) + if(!default_ports[i].is_custom) + only_custom = 0; + + if(!only_custom) + ndpi_set_risk(ndpi_str, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT, + ndpi_expected_ports_str(default_ports, str, sizeof(str))); + } + } + } + } + } +} + static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, const unsigned char *packet_data, @@ -8713,8 +9858,8 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio flow->detected_protocol_stack[0], flow->detected_protocol_stack[1]); - ret.proto.master_protocol = flow->detected_protocol_stack[1], - ret.proto.app_protocol = flow->detected_protocol_stack[0]; + ret.proto.master_protocol = flow->detected_protocol_stack[1]; + ret.proto.app_protocol = flow->detected_protocol_stack[0]; ret.protocol_by_ip = flow->guessed_protocol_id_by_ip; ret.category = flow->category; @@ -8726,40 +9871,44 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio return(ret); } + if(ndpi_init_packet(ndpi_str, flow, current_time_ms, packet_data, packetlen, input_info) != 0) + return(ret); + + connection_tracking(ndpi_str, flow); + + /* At this point, we updated ndpi_str->input_info->in_pkt_dir */ + if(ndpi_str->cfg.max_packets_to_process > 0 && flow->num_processed_pkts >= ndpi_str->cfg.max_packets_to_process && !flow->monitoring) { flow->extra_packets_func = NULL; /* To allow ndpi_extra_dissection_possible() to fail */ flow->fail_with_unknown = 1; - /* Let's try to update ndpi_str->input_info->in_pkt_dir even in this case. - * It is quite uncommon, so we are not going to spend a lot of resources here... */ - if(ndpi_init_packet(ndpi_str, flow, current_time_ms, packet_data, packetlen, input_info) == 0) - ndpi_connection_tracking(ndpi_str, flow); + + /* Reason: too many packets */ + internal_giveup(ndpi_str, flow, &ret); + return(ret); /* Avoid spending too much time with this flow */ } ndpi_str->current_ts = current_time_ms; - /* Init default */ - if(flow->extra_packets_func) { - ndpi_process_extra_packet(ndpi_str, flow, packet_data, packetlen, current_time_ms, input_info); + process_extra_packet(ndpi_str, flow); /* Update in case of new match */ - ret.proto.master_protocol = flow->detected_protocol_stack[1], - ret.proto.app_protocol = flow->detected_protocol_stack[0], - ret.category = flow->category; + ret.proto.master_protocol = flow->detected_protocol_stack[1]; + ret.proto.app_protocol = flow->detected_protocol_stack[0]; + ret.category = flow->category; + + if(flow->extra_packets_func == NULL) { + /* Reason: extra dissection ended */ + internal_giveup(ndpi_str, flow, &ret); + } return(ret); } else if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_UNKNOWN) { - if(ndpi_init_packet(ndpi_str, flow, current_time_ms, packet_data, packetlen, input_info) != 0) - return(ret); - goto ret_protocols; } - if(ndpi_init_packet(ndpi_str, flow, current_time_ms, packet_data, packetlen, input_info) != 0) - return(ret); - if(flow->num_processed_pkts == 1) { /* first packet of this flow to be analyzed */ @@ -8794,7 +9943,6 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio /* match found */ ret.proto.master_protocol = ret.proto.app_protocol = ndpi_str->nbpf_custom_proto[i].l7_protocol; ndpi_fill_protocol_category(ndpi_str, flow, &ret); - ndpi_reconcile_protocols(ndpi_str, flow, &ret); flow->confidence = NDPI_CONFIDENCE_NBPF; return(ret); @@ -8804,8 +9952,6 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio #endif } - ndpi_connection_tracking(ndpi_str, flow); - /* build ndpi_selection packet bitmask */ ndpi_selection_packet = NDPI_SELECTION_BITMASK_PROTOCOL_COMPLETE_TRAFFIC; if(packet->iph != NULL) @@ -8831,8 +9977,13 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio if(!flow->protocol_id_already_guessed) { flow->protocol_id_already_guessed = 1; - if(ndpi_do_guess(ndpi_str, flow, &ret) == -1) + if(do_guess(ndpi_str, flow, &ret) == -1) { + + /* Reason: custom rules */ + internal_giveup(ndpi_str, flow, &ret); + return(ret); + } } num_calls = ndpi_check_flow_func(ndpi_str, flow, &ndpi_selection_packet); @@ -8855,107 +10006,8 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio if((!flow->risk_checked) && ((ret.proto.master_protocol != NDPI_PROTOCOL_UNKNOWN) || (ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN)) ) { - default_ports_tree_node_t *found; - u_int16_t *default_ports; - - if(packet->udp) - found = ndpi_get_guessed_protocol_id(ndpi_str, IPPROTO_UDP, - ntohs(flow->c_port), - ntohs(flow->s_port)), - default_ports = ndpi_str->proto_defaults[ret.proto.master_protocol ? ret.proto.master_protocol : ret.proto.app_protocol].udp_default_ports; - else if(packet->tcp) - found = ndpi_get_guessed_protocol_id(ndpi_str, IPPROTO_TCP, - ntohs(flow->c_port), - ntohs(flow->s_port)), - default_ports = ndpi_str->proto_defaults[ret.proto.master_protocol ? ret.proto.master_protocol : ret.proto.app_protocol].tcp_default_ports; - else - found = NULL, default_ports = NULL; - - if(found - && (found->proto->protoId != NDPI_PROTOCOL_UNKNOWN) - && (found->proto->protoId != ret.proto.master_protocol) - && (found->proto->protoId != ret.proto.app_protocol) - ) { - // printf("******** %u / %u\n", found->proto->protoId, ret.proto.master_protocol); - - if(!ndpi_check_protocol_port_mismatch_exceptions(found, &ret)) { - /* - Before triggering the alert we need to make some extra checks - - the protocol found is not running on the port we have found - (i.e. two or more protools share the same default port) - */ - u_int8_t found = 0, i; - - for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i] != 0); i++) { - if(default_ports[i] == ntohs(flow->s_port)) { - found = 1; - break; - } - } /* for */ - - if(!found) { - default_ports_tree_node_t *r = ndpi_get_guessed_protocol_id(ndpi_str, packet->udp ? IPPROTO_UDP : IPPROTO_TCP, - ntohs(flow->c_port), ntohs(flow->s_port)); - if((r == NULL) - || ((r->proto->protoId != ret.proto.app_protocol) && (r->proto->protoId != ret.proto.master_protocol))) { - if(default_ports && (default_ports[0] != 0)) { - char str[64]; - - ndpi_set_risk(ndpi_str, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT, - ndpi_expected_ports_str(default_ports, str, sizeof(str))); - } - } - } - } - } else if((!ndpi_is_ntop_protocol(&ret)) && default_ports && (default_ports[0] != 0)) { - u_int8_t found = 0, i, num_loops = 0; - - check_default_ports: - for(i=0; (i<MAX_DEFAULT_PORTS) && (default_ports[i] != 0); i++) { - if((default_ports[i] == ntohs(flow->c_port)) || (default_ports[i] == ntohs(flow->s_port))) { - found = 1; - break; - } - } /* for */ - - if((num_loops == 0) && (!found)) { - if(packet->udp) - default_ports = ndpi_str->proto_defaults[ret.proto.app_protocol].udp_default_ports; - else - default_ports = ndpi_str->proto_defaults[ret.proto.app_protocol].tcp_default_ports; - - num_loops = 1; - goto check_default_ports; - } - - if(!found) { - default_ports_tree_node_t *r = ndpi_get_guessed_protocol_id(ndpi_str, packet->udp ? IPPROTO_UDP : IPPROTO_TCP, - ntohs(flow->c_port), ntohs(flow->s_port)); - - if((r == NULL) - || ((r->proto->protoId != ret.proto.app_protocol) - && (r->proto->protoId != ret.proto.master_protocol))) { - if(ret.proto.app_protocol != NDPI_PROTOCOL_FTP_DATA) { - u_int16_t *default_ports; - - if(packet->udp) - default_ports = ndpi_str->proto_defaults[ret.proto.master_protocol ? ret.proto.master_protocol : ret.proto.app_protocol].udp_default_ports; - else if(packet->tcp) - default_ports = ndpi_str->proto_defaults[ret.proto.master_protocol ? ret.proto.master_protocol : ret.proto.app_protocol].tcp_default_ports; - else - default_ports = NULL; - - if(default_ports && (default_ports[0] != 0)) { - char str[64]; - - ndpi_set_risk(ndpi_str, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT, - ndpi_expected_ports_str(default_ports, str, sizeof(str))); - } - } - } - } - } + check_proto_on_non_std_port_risk(ndpi_str, flow, &ret); flow->risk_checked = 1; } @@ -9000,7 +10052,7 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio if(ndpi_str->cfg.fully_encrypted_heuristic && ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN && /* Only for unknown traffic */ flow->packet_counter == 1 && packet->payload_packet_len > 0) { - flow->first_pkt_fully_encrypted = fully_enc_heuristic(ndpi_str, flow); + flow->first_pkt_fully_encrypted = fully_enc_heuristic(ndpi_str, flow); } if((ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN) @@ -9030,6 +10082,12 @@ static ndpi_protocol ndpi_internal_detection_process_packet(struct ndpi_detectio if(flow->all_packets_counter == 1) fpc_check_eval(ndpi_str, flow); + if(ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN && + flow->extra_packets_func == NULL) { + /* Reason: "normal" classification, without extra dissection */ + internal_giveup(ndpi_str, flow, &ret); + } + return(ret); } @@ -9177,23 +10235,43 @@ static void parse_single_packet_line(struct ndpi_detection_module_struct *ndpi_s struct header_line headers_a[] = { { "Accept:", &packet->accept_line }, { "Authorization:", &packet->authorization_line }, { NULL, NULL} }; + struct header_line headers_b[] = { { "BOOTID.UPNP.ORG:", &packet->bootid}, + { NULL, NULL} }; struct header_line headers_u[] = { { "User-agent:", &packet->user_agent_line }, { "Upgrade:", &packet->upgrade_line }, + { "USN:", &packet->usn }, { NULL, NULL} }; struct header_line headers_c[] = { { "Content-Disposition:", &packet->content_disposition_line }, { "Content-type:", &packet->content_line }, + { "CACHE-CONTROL:", &packet->cache_controle}, { NULL, NULL} }; struct header_line headers_o[] = { { "Origin:", &packet->http_origin }, { NULL, NULL} }; struct header_line headers_h[] = { { "Host:", &packet->host_line }, + { "HOUSEHOLD.SMARTSPEAKER.AUDIO:", &packet->household_smart_speaker_audio }, { NULL, NULL} }; struct header_line headers_x[] = { { "X-Forwarded-For:", &packet->forwarded_line }, + { "X-RINCON-HOUSEHOLD:", &packet->rincon_household }, + { "X-RINCON-BOOTSEQ:", &packet->rincon_bootseq }, + { "X-RINCON-WIFIMODE:", &packet->rincon_wifimode }, + { "X-RINCON-VARIANT:", &packet->rincon_variant }, + { "X-SONOS-HHSECURELOCATION:", &packet->sonos_securelocation }, { NULL, NULL} }; struct header_line headers_r[] = { { "Referer:", &packet->referer_line }, { NULL, NULL} }; struct header_line headers_s[] = { { "Server:", &packet->server_line }, + { "SECURELOCATION.UPNP.ORG:", &packet->securelocation_upnp }, + { "ST", &packet->st }, { NULL, NULL} }; - + struct header_line headers_l[] = { { "LOCATION:", &packet->location }, + { "LOCATION.SMARTSPEAKER.AUDIO:", &packet->location_smart_speaker_audio }, + { NULL, NULL}}; + struct header_line headers_m[] = { { "MAN:", &packet->man }, + { "MX:", &packet->mx }, + { NULL, NULL}}; + struct header_line headers_n[] = { { "NT:", &packet->nt }, + { "NTS:", &packet->nts }, + { NULL, NULL}}; line = &packet->line[packet->parsed_lines]; if(line->len == 0) @@ -9210,8 +10288,8 @@ static void parse_single_packet_line(struct ndpi_detection_module_struct *ndpi_s } if(packet->parsed_lines == 0 && line->len > 0) { /* - Check if the file contains a : otherwise ignore the line as this - line i slike "GET /.... + Check if the file contains a : otherwise ignore the line as this + line i slike "GET /.... */ if(memchr((char *)line->ptr, ':', line->len) == NULL) return; @@ -9222,6 +10300,10 @@ static void parse_single_packet_line(struct ndpi_detection_module_struct *ndpi_s case 'A': hs = headers_a; break; + case 'b': + case 'B': + hs = headers_b; + break; case 'c': case 'C': hs = headers_c; @@ -9250,6 +10332,18 @@ static void parse_single_packet_line(struct ndpi_detection_module_struct *ndpi_s case 'X': hs = headers_x; break; + case 'l': + case 'L': + hs = headers_l; + break; + case 'm': + case 'M': + hs = headers_m; + break; + case 'n': + case 'N': + hs = headers_n; + break; default: return; } @@ -9492,7 +10586,7 @@ static void ndpi_int_change_flow_protocol(struct ndpi_flow_struct *flow, u_int16_t upper_detected_protocol, u_int16_t lower_detected_protocol, ndpi_confidence_t confidence) { flow->detected_protocol_stack[0] = upper_detected_protocol, - flow->detected_protocol_stack[1] = lower_detected_protocol; + flow->detected_protocol_stack[1] = lower_detected_protocol; flow->confidence = confidence; } @@ -9653,7 +10747,7 @@ static ndpi_protocol ndpi_internal_guess_undetected_protocol(struct ndpi_detecti ret.proto.app_protocol = NDPI_PROTOCOL_BITTORRENT; } } else { - ret.proto.app_protocol = guess_protocol_id(ndpi_str, flow, proto, 0, 0, &user_defined_proto); + ret.proto.app_protocol = guess_protocol_id(ndpi_str, proto, 0, 0, &user_defined_proto); } ret.category = ndpi_get_proto_category(ndpi_str, ret); @@ -9673,7 +10767,7 @@ ndpi_protocol ndpi_guess_undetected_protocol_v4(struct ndpi_detection_module_str 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) { - u_int32_t rc; + u_int32_t rc = NDPI_PROTOCOL_UNKNOWN; ndpi_protocol ret = NDPI_PROTOCOL_NULL; u_int8_t user_defined_proto; @@ -9681,19 +10775,34 @@ ndpi_protocol ndpi_guess_undetected_protocol_v4(struct ndpi_detection_module_str return ret; if((proto == IPPROTO_TCP) || (proto == IPPROTO_UDP)) { - if(shost && dhost) - rc = ndpi_search_tcp_or_udp_raw(ndpi_str, flow, shost, dhost); - else + if(shost && dhost) { + struct in_addr addr; + u_int16_t rcode = NDPI_PROTOCOL_UNKNOWN; + + /* guess host protocol; server first */ + addr.s_addr = htonl(shost); + rcode = ndpi_network_port_ptree_match(ndpi_str, &addr, htons(sport)); + + if(rcode == NDPI_PROTOCOL_UNKNOWN) { + addr.s_addr = htonl(dhost); + rcode = ndpi_network_port_ptree_match(ndpi_str, &addr, htons(dport)); + } + + if(rcode == NDPI_PROTOCOL_UNKNOWN) + rc = ndpi_search_tcp_or_udp_raw(ndpi_str, flow, shost, dhost); + else + rc = (u_int32_t)rcode; + } else rc = NDPI_PROTOCOL_UNKNOWN; if(rc != NDPI_PROTOCOL_UNKNOWN) { ret.proto.app_protocol = rc, - ret.proto.master_protocol = guess_protocol_id(ndpi_str, flow, proto, sport, dport, &user_defined_proto); + ret.proto.master_protocol = guess_protocol_id(ndpi_str, proto, sport, dport, &user_defined_proto); if(ret.proto.app_protocol == ret.proto.master_protocol) ret.proto.master_protocol = NDPI_PROTOCOL_UNKNOWN; } else { - ret.proto.app_protocol = guess_protocol_id(ndpi_str, flow, proto, sport, dport, &user_defined_proto), + ret.proto.app_protocol = guess_protocol_id(ndpi_str, proto, sport, dport, &user_defined_proto), ret.proto.master_protocol = NDPI_PROTOCOL_UNKNOWN; } @@ -9739,7 +10848,7 @@ char *ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_str, if((proto.proto.master_protocol != NDPI_PROTOCOL_UNKNOWN) && (proto.proto.master_protocol != proto.proto.app_protocol)) { if(proto.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN) ndpi_snprintf(buf, buf_len, "%s.%s", ndpi_get_proto_name(ndpi_str, proto.proto.master_protocol), - ndpi_get_proto_name(ndpi_str, proto.proto.app_protocol)); + ndpi_get_proto_name(ndpi_str, proto.proto.app_protocol)); else ndpi_snprintf(buf, buf_len, "%s", ndpi_get_proto_name(ndpi_str, proto.proto.master_protocol)); } else @@ -9750,17 +10859,17 @@ char *ndpi_protocol2name(struct ndpi_detection_module_struct *ndpi_str, /* ****************************************************** */ -int ndpi_is_custom_category(ndpi_protocol_category_t category) { +bool ndpi_is_custom_category(ndpi_protocol_category_t category) { switch(category) { case NDPI_PROTOCOL_CATEGORY_CUSTOM_1: case NDPI_PROTOCOL_CATEGORY_CUSTOM_2: case NDPI_PROTOCOL_CATEGORY_CUSTOM_3: case NDPI_PROTOCOL_CATEGORY_CUSTOM_4: case NDPI_PROTOCOL_CATEGORY_CUSTOM_5: - return(1); + return(true); default: - return(0); + return(false); } } @@ -9925,13 +11034,13 @@ ndpi_protocol_category_t ndpi_get_proto_category(struct ndpi_detection_module_st /* Simple rule: sub protocol first, master after, with some exceptions (i.e. mail) */ if(category_depends_on_master(proto.proto.master_protocol)) { - if(ndpi_is_valid_protoId(proto.proto.master_protocol)) + if(ndpi_is_valid_protoId(ndpi_str, proto.proto.master_protocol)) return(ndpi_str->proto_defaults[proto.proto.master_protocol].protoCategory); } else if((proto.proto.master_protocol == NDPI_PROTOCOL_UNKNOWN) || - (ndpi_str->proto_defaults[proto.proto.app_protocol].protoCategory != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) { - if(ndpi_is_valid_protoId(proto.proto.app_protocol)) + (ndpi_str->proto_defaults[proto.proto.app_protocol].protoCategory != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)) { + if(ndpi_is_valid_protoId(ndpi_str, proto.proto.app_protocol)) return(ndpi_str->proto_defaults[proto.proto.app_protocol].protoCategory); - } else if(ndpi_is_valid_protoId(proto.proto.master_protocol)) + } else if(ndpi_is_valid_protoId(ndpi_str, proto.proto.master_protocol)) return(ndpi_str->proto_defaults[proto.proto.master_protocol].protoCategory); return(NDPI_PROTOCOL_CATEGORY_UNSPECIFIED); @@ -9945,9 +11054,8 @@ char *ndpi_get_proto_name(struct ndpi_detection_module_struct *ndpi_str, proto_id = ndpi_map_user_proto_id_to_ndpi_id(ndpi_str, proto_id); - if((proto_id >= ndpi_str->ndpi_num_supported_protocols) - || (!ndpi_is_valid_protoId(proto_id)) - || (ndpi_str->proto_defaults[proto_id].protoName == NULL)) + if(!ndpi_is_valid_protoId(ndpi_str, proto_id) || + ndpi_str->proto_defaults[proto_id].protoName[0] == '\0') proto_id = NDPI_PROTOCOL_UNKNOWN; return(ndpi_str->proto_defaults[proto_id].protoName); @@ -9962,9 +11070,8 @@ ndpi_protocol_breed_t ndpi_get_proto_breed(struct ndpi_detection_module_struct * proto_id = ndpi_map_user_proto_id_to_ndpi_id(ndpi_str, proto_id); - if((proto_id >= ndpi_str->ndpi_num_supported_protocols) || - (!ndpi_is_valid_protoId(proto_id)) || - (ndpi_str->proto_defaults[proto_id].protoName == NULL)) + if(!ndpi_is_valid_protoId(ndpi_str, proto_id) || + ndpi_str->proto_defaults[proto_id].protoName[0] == '\0') proto_id = NDPI_PROTOCOL_UNKNOWN; return(ndpi_str->proto_defaults[proto_id].protoBreed); @@ -9983,9 +11090,9 @@ char *ndpi_get_proto_breed_name(ndpi_protocol_breed_t breed_id) { case NDPI_PROTOCOL_UNSAFE: return("Unsafe"); case NDPI_PROTOCOL_POTENTIALLY_DANGEROUS: - return("Potentially Dangerous"); + return("Potentially_Dangerous"); case NDPI_PROTOCOL_TRACKER_ADS: - return("Tracker/Ads"); + return("Tracker_Ads"); case NDPI_PROTOCOL_DANGEROUS: return("Dangerous"); case NDPI_PROTOCOL_UNRATED: @@ -9995,6 +11102,30 @@ char *ndpi_get_proto_breed_name(ndpi_protocol_breed_t breed_id) { } } +ndpi_protocol_breed_t ndpi_get_breed_by_name(const char *name) { + int i; + + if(!name) + return(NDPI_PROTOCOL_UNRATED); + + if (*name == '\0') + return(NDPI_PROTOCOL_UNRATED); + + /* Cache the lowercased first character of 'name' */ + const unsigned char fc = tolower((unsigned char)*name); + + for(i = NDPI_PROTOCOL_SAFE; i <= NDPI_PROTOCOL_UNRATED; i++) { + char *breed_name = ndpi_get_proto_breed_name((ndpi_protocol_breed_t)i); + + if(breed_name && tolower((unsigned char)*breed_name) == fc) { + if(strcasecmp(breed_name + 1, name + 1) == 0) + return((ndpi_protocol_breed_t)i); + } + } + + return(NDPI_PROTOCOL_UNRATED); +} + /* ****************************************************** */ #ifdef OBSOLETE @@ -10009,13 +11140,21 @@ u_int16_t ndpi_get_protocol_id(struct ndpi_detection_module_struct *ndpi_str, ch int ndpi_get_category_id(struct ndpi_detection_module_struct *ndpi_str, char *cat) { int i; - if(!ndpi_str) return(-1); + if(!ndpi_str || !cat) + return(-1); + + if (*cat == '\0') + return(-1); + + /* Cache the lowercased first character of 'cat' */ + const unsigned char fc = tolower((unsigned char)*cat); for(i = 0; i < NDPI_PROTOCOL_NUM_CATEGORIES; i++) { const char *name = ndpi_category_get_name(ndpi_str, i); - - if(strcasecmp(cat, name) == 0) - return(i); + if(name && tolower((unsigned char)*name) == fc) { + if(strcasecmp(name + 1, cat + 1) == 0) + return(i); + } } return(-1); @@ -10023,54 +11162,55 @@ int ndpi_get_category_id(struct ndpi_detection_module_struct *ndpi_str, char *ca /* ****************************************************** */ +static char *default_ports_string(char *ports_str, ndpi_port_range *default_ports){ -static char *default_ports_string(char *ports_str,u_int16_t *default_ports){ - - //dont display zero ports on help screen - if (default_ports[0] == 0) - //- for readability - return "-"; + //dont display zero ports on help screen + if (default_ports[0].port_low == 0) + //- for readability + return "-"; - int j=0; - do + int j=0; + do { - //max port len 5(eg 65535) + comma + nul - char port[7]; - sprintf(port,"%d,",default_ports[j]); + char port[18]; + if(default_ports[j].port_low == default_ports[j].port_high) + sprintf(port,"%d,",default_ports[j].port_low); + else + sprintf(port,"%d-%d,",default_ports[j].port_low, default_ports[j].port_high); strcat(ports_str,port); j++; - } while (j < MAX_DEFAULT_PORTS && default_ports[j]!= 0); + } while (j < MAX_DEFAULT_PORTS && default_ports[j].port_low != 0); - //remove last comma - ports_str[strlen(ports_str)-1] = '\0'; - - return ports_str; + //remove last comma + ports_str[strlen(ports_str)-1] = '\0'; + return ports_str; } /* ****************************************************** */ - void ndpi_dump_protocols(struct ndpi_detection_module_struct *ndpi_str, FILE *dump_out) { int i; if(!ndpi_str || !dump_out) return; - for(i = 0; i < (int) ndpi_str->ndpi_num_supported_protocols; i++) { - //max port size(eg 65535) * 5 + 4 commas + nul - char udp_ports[30] = ""; - char tcp_ports[30] = ""; + ndpi_finalize_initialization(ndpi_str); + + for(i = 0; i < (int)ndpi_get_num_protocols(ndpi_str); i++) { + char udp_ports[128] = ""; + char tcp_ports[128] = ""; - fprintf(dump_out, "%3d %8d %-22s %-10s %-8s %-12s %-18s %-31s %-31s\n", - i, ndpi_map_ndpi_id_to_user_proto_id(ndpi_str, i), - ndpi_str->proto_defaults[i].protoName, - ndpi_get_l4_proto_name(ndpi_get_l4_proto_info(ndpi_str, i)), - ndpi_str->proto_defaults[i].isAppProtocol ? "" : "X", - ndpi_get_proto_breed_name(ndpi_str->proto_defaults[i].protoBreed), - ndpi_category_get_name(ndpi_str, ndpi_str->proto_defaults[i].protoCategory), - default_ports_string(udp_ports,ndpi_str->proto_defaults[i].udp_default_ports), - default_ports_string(tcp_ports,ndpi_str->proto_defaults[i].tcp_default_ports) - ); + fprintf(dump_out, "%3d %8d %-26s %-10s %-8s %-21s %-18s %-31s %-31s %6d\n", + i, ndpi_map_ndpi_id_to_user_proto_id(ndpi_str, i), + ndpi_str->proto_defaults[i].protoName, + ndpi_get_l4_proto_name(ndpi_get_l4_proto_info(ndpi_str, i)), + ndpi_str->proto_defaults[i].isAppProtocol ? "" : "X", + ndpi_get_proto_breed_name(ndpi_str->proto_defaults[i].protoBreed), + ndpi_category_get_name(ndpi_str, ndpi_str->proto_defaults[i].protoCategory), + default_ports_string(udp_ports,ndpi_str->proto_defaults[i].udp_default_ports), + default_ports_string(tcp_ports,ndpi_str->proto_defaults[i].tcp_default_ports), + ndpi_str->proto_defaults[i].isCustomProto + ); } } @@ -10081,22 +11221,23 @@ void ndpi_dump_protocols(struct ndpi_detection_module_struct *ndpi_str, FILE *du void ndpi_generate_options(u_int opt, FILE *options_out) { struct ndpi_detection_module_struct *ndpi_str; - NDPI_PROTOCOL_BITMASK all; u_int i; if (!options_out) return; ndpi_str = ndpi_init_detection_module(NULL); if (!ndpi_str) return; - NDPI_BITMASK_SET_ALL(all); - ndpi_set_protocol_detection_bitmask2(ndpi_str, &all); + if(ndpi_finalize_initialization(ndpi_str) != 0) { + ndpi_exit_detection_module(ndpi_str); + return; + } switch(opt) { case 0: /* List known protocols */ { - for(i = 1 /* Skip unknown */; i < ndpi_str->ndpi_num_supported_protocols; i++) { + for(i = 1 /* Skip unknown */; i < ndpi_get_num_protocols(ndpi_str); i++) { fprintf(options_out, " <Option%d value=\"%u\">%s</Option%d>\n", - i, i, ndpi_str->proto_defaults[i].protoName, i); + i, i, ndpi_str->proto_defaults[i].protoName, i); } } break; @@ -10107,8 +11248,8 @@ void ndpi_generate_options(u_int opt, FILE *options_out) { const char *name = ndpi_category_get_name(ndpi_str, i); if((name != NULL) && (name[0] != '\0')) { - fprintf(options_out, " <Option%d value=\"%u\">%s</Option%d>\n", - i, i, name, i); + fprintf(options_out, " <Option%d value=\"%u\">%s</Option%d>\n", + i, i, name, i); } } } @@ -10142,7 +11283,7 @@ void ndpi_dump_risks_score(FILE *risk_out) { return; fprintf(risk_out, "%3s %-46s %-44s %-8s %s %-8s %-8s\n", - "Id", "Code", "Risk", "Severity", "Score", "CliScore", "SrvScore"); + "Id", "Code", "Risk", "Severity", "Score", "CliScore", "SrvScore"); for(i = 1; i < NDPI_MAX_RISK; i++) { ndpi_risk_enum r = (ndpi_risk_enum)i; @@ -10153,10 +11294,10 @@ void ndpi_dump_risks_score(FILE *risk_out) { u_int16_t score = ndpi_risk2score(risk, &client_score, &server_score); fprintf(risk_out, "%3d %-46s %-44s %-8s %-8u %-8u %-8u\n", - i, ndpi_risk2code(r), ndpi_risk2str(r), - ndpi_severity2str(s), - score, - client_score, server_score); + i, ndpi_risk2code(r), ndpi_risk2str(r), + ndpi_severity2str(s), + score, + client_score, server_score); } } @@ -10191,10 +11332,18 @@ const char * ndpi_strncasestr(const char *s, const char *find, size_t len) { const size_t s_len = strnlen(s, len); + /* If 'find' is longer than 's', no match is possible */ + if (find_len > s_len) { + return NULL; + } + const char *const end_of_search = s + s_len - find_len + 1; + /* Cache the lowercased first character of 'find' */ + const unsigned char fc = tolower((unsigned char) *find); + for (; s < end_of_search; ++s) { - if (tolower((unsigned char)*s) == tolower((unsigned char)*find)) { + if (tolower((unsigned char)*s) == fc) { if (strncasecmp(s + 1, find + 1, find_len - 1) == 0) { return s; } @@ -10231,34 +11380,11 @@ int ndpi_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_str, return rc < 0 ? rc : (int)ret_match->protocol_id; } -/* **************************************** */ - -static u_int8_t ndpi_is_more_generic_protocol(u_int16_t previous_proto, u_int16_t new_proto) { - /* Sometimes certificates are more generic than previously identified protocols */ - - if((previous_proto == NDPI_PROTOCOL_UNKNOWN) || (previous_proto == new_proto)) - return(0); - - switch(previous_proto) { - case NDPI_PROTOCOL_WHATSAPP_CALL: - case NDPI_PROTOCOL_WHATSAPP_FILES: - if(new_proto == NDPI_PROTOCOL_WHATSAPP) - return(1); - break; - case NDPI_PROTOCOL_FACEBOOK_VOIP: - if(new_proto == NDPI_PROTOCOL_FACEBOOK) - return(1); - break; - } - - return(0); -} - /* ****************************************************** */ static u_int16_t ndpi_automa_match_string_subprotocol(struct ndpi_detection_module_struct *ndpi_str, - struct ndpi_flow_struct *flow, char *string_to_match, - u_int string_to_match_len, u_int16_t master_protocol_id, + char *string_to_match, + u_int string_to_match_len, ndpi_protocol_match_result *ret_match) { int matching_protocol_id; @@ -10281,18 +11407,8 @@ static u_int16_t ndpi_automa_match_string_subprotocol(struct ndpi_detection_modu } #endif - if((matching_protocol_id != NDPI_PROTOCOL_UNKNOWN) && - (!ndpi_is_more_generic_protocol(flow->detected_protocol_stack[0], matching_protocol_id))) { - /* Move the protocol on slot 0 down one position */ - flow->detected_protocol_stack[1] = master_protocol_id, - flow->detected_protocol_stack[0] = matching_protocol_id; - flow->confidence = NDPI_CONFIDENCE_DPI; - if(!category_depends_on_master(master_protocol_id) && - flow->category == NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) - flow->category = ret_match->protocol_category; - - return(flow->detected_protocol_stack[0]); - } + if(matching_protocol_id != NDPI_PROTOCOL_UNKNOWN) + return matching_protocol_id; #ifdef NDPI_ENABLE_DEBUG_MESSAGES { @@ -10332,7 +11448,8 @@ u_int16_t ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_ 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) { + u_int16_t master_protocol_id, + int update_flow_classification) { u_int16_t rc; ndpi_protocol_category_t id; @@ -10340,18 +11457,27 @@ u_int16_t ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_ memset(ret_match, 0, sizeof(*ret_match)); - rc = ndpi_automa_match_string_subprotocol(ndpi_str, flow, + rc = ndpi_automa_match_string_subprotocol(ndpi_str, string_to_match, string_to_match_len, - master_protocol_id, ret_match); + ret_match); id = ret_match->protocol_category; if(ndpi_get_custom_category_match(ndpi_str, string_to_match, string_to_match_len, &id) != -1) { - /* if(id != -1) */ { - flow->category = ret_match->protocol_category = id; - rc = master_protocol_id; + ret_match->protocol_category = id; + rc = master_protocol_id; + } + + if(update_flow_classification && ret_match->protocol_id != NDPI_PROTOCOL_UNKNOWN ) { + ndpi_set_detected_protocol(ndpi_str, flow, ret_match->protocol_id, master_protocol_id, NDPI_CONFIDENCE_DPI); + + if(ret_match->protocol_id == NDPI_PROTOCOL_OOKLA) { + ookla_add_to_cache(ndpi_str, flow); } } + if(!category_depends_on_master(master_protocol_id) && + ret_match->protocol_category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) + flow->category = ret_match->protocol_category; if(ndpi_str->risky_domain_automa.ac_automa != NULL) { u_int32_t proto_id; @@ -10359,19 +11485,27 @@ u_int16_t ndpi_match_host_subprotocol(struct ndpi_detection_module_struct *ndpi_ string_to_match, string_to_match_len, &proto_id, NULL, NULL); if(rc1 > 0) { - char str[64] = { '\0' }; + if(is_flowrisk_info_enabled(ndpi_str, NDPI_RISKY_DOMAIN)) { + char str[64] = { '\0' }; - strncpy(str, string_to_match, ndpi_min(string_to_match_len, sizeof(str)-1)); - ndpi_set_risk(ndpi_str, flow, NDPI_RISKY_DOMAIN, str); + strncpy(str, string_to_match, ndpi_min(string_to_match_len, sizeof(str)-1)); + ndpi_set_risk(ndpi_str, flow, NDPI_RISKY_DOMAIN, str); + } else { + ndpi_set_risk(ndpi_str, flow, NDPI_RISKY_DOMAIN, NULL); + } } } /* Add punycode check */ if(ndpi_check_punycode_string(string_to_match, string_to_match_len)) { - char str[64] = { '\0' }; + if(is_flowrisk_info_enabled(ndpi_str, NDPI_PUNYCODE_IDN)) { + char str[64] = { '\0' }; - strncpy(str, string_to_match, ndpi_min(string_to_match_len, sizeof(str)-1)); - ndpi_set_risk(ndpi_str, flow, NDPI_PUNYCODE_IDN, str); + strncpy(str, string_to_match, ndpi_min(string_to_match_len, sizeof(str)-1)); + ndpi_set_risk(ndpi_str, flow, NDPI_PUNYCODE_IDN, str); + } else { + ndpi_set_risk(ndpi_str, flow, NDPI_PUNYCODE_IDN, NULL); + } } return(rc); @@ -10394,17 +11528,9 @@ int ndpi_match_hostname_protocol(struct ndpi_detection_module_struct *ndpi_struc what = name, what_len = name_len; subproto = ndpi_match_host_subprotocol(ndpi_struct, flow, what, what_len, - &ret_match, master_protocol); + &ret_match, master_protocol, 1); if(subproto != NDPI_PROTOCOL_UNKNOWN) { - ndpi_set_detected_protocol(ndpi_struct, flow, subproto, master_protocol, NDPI_CONFIDENCE_DPI); - if(!category_depends_on_master(master_protocol)) - change_category(flow, ret_match.protocol_category); - - if(subproto == NDPI_PROTOCOL_OOKLA) { - ookla_add_to_cache(ndpi_struct, flow); - } - return(1); } else return(0); @@ -10456,17 +11582,6 @@ char *ndpi_revision() { /* ****************************************************** */ -int NDPI_BITMASK_COMPARE(NDPI_PROTOCOL_BITMASK a, NDPI_PROTOCOL_BITMASK b) { - unsigned int i; - - for(i = 0; i < NDPI_NUM_FDS_BITS; i++) { - if(a.fds_bits[i] & b.fds_bits[i]) - return(1); - } - - return(0); -} - u_int16_t ndpi_get_api_version() { return(NDPI_API_VERSION); } @@ -10479,14 +11594,6 @@ ndpi_proto_defaults_t *ndpi_get_proto_defaults(struct ndpi_detection_module_stru return(ndpi_str ? ndpi_str->proto_defaults : NULL); } -u_int ndpi_get_ndpi_num_supported_protocols(struct ndpi_detection_module_struct *ndpi_str) { - return(ndpi_str ? ndpi_str->ndpi_num_supported_protocols : 0); -} - -u_int ndpi_get_ndpi_num_custom_protocols(struct ndpi_detection_module_struct *ndpi_str) { - return(ndpi_str ? ndpi_str->ndpi_num_custom_protocols : 0); -} - u_int ndpi_get_ndpi_detection_module_size() { return(sizeof(struct ndpi_detection_module_struct)); } @@ -10510,9 +11617,9 @@ u_int32_t ndpi_get_current_time(struct ndpi_flow_struct *flow) u_int8_t ndpi_extra_dissection_possible(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow) { NDPI_LOG_DBG2(ndpi_str, "Protos (%u.%u): %d\n", - flow->detected_protocol_stack[0], - flow->detected_protocol_stack[1], - !!flow->extra_packets_func); + flow->detected_protocol_stack[0], + flow->detected_protocol_stack[1], + !!flow->extra_packets_func); if(!flow->extra_packets_func) { ndpi_check_probing_attempt(ndpi_str, flow); @@ -10546,8 +11653,8 @@ const char *ndpi_get_l4_proto_name(ndpi_l4_proto_info proto) { ndpi_l4_proto_info ndpi_get_l4_proto_info(struct ndpi_detection_module_struct *ndpi_struct, u_int16_t ndpi_proto_id) { - if(ndpi_struct && ndpi_proto_id < ndpi_struct->ndpi_num_supported_protocols) { - u_int16_t idx = ndpi_struct->proto_defaults[ndpi_proto_id].protoIdx; + if(ndpi_struct && ndpi_proto_id < ndpi_get_num_protocols(ndpi_struct)) { + u_int16_t idx = ndpi_struct->proto_defaults[ndpi_proto_id].dissector_idx; NDPI_SELECTION_BITMASK_PROTOCOL_SIZE bm = ndpi_struct->callback_buffer[idx].ndpi_selection_bitmask; if(bm & NDPI_SELECTION_BITMASK_PROTOCOL_INT_TCP) @@ -10747,7 +11854,8 @@ static int ndpi_is_vowel(char c) { int ndpi_check_dga_name(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_flow_struct *flow, - char *name, u_int8_t is_hostname, u_int8_t check_subproto) { + char *name, u_int8_t is_hostname, u_int8_t check_subproto, + u_int8_t flow_fully_classified) { /* Get domain name if ndpi_load_domain_suffixes(..) has been called */ name = (char*)ndpi_get_host_domain(ndpi_str, name); @@ -10780,7 +11888,7 @@ int ndpi_check_dga_name(struct ndpi_detection_module_struct *ndpi_str, ) return(0); - if(flow && (flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN)) + if(flow && (flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN || flow_fully_classified)) return(0); /* Ignore DGA check for protocols already fully detected */ if(check_subproto && @@ -11089,11 +12197,12 @@ char *ndpi_hostname_sni_set(struct ndpi_flow_struct *flow, for(i = 0; i < len; i++) { char c = value[value_len - len + i]; if(!c) break; + if(c == ':') break; /* e.g. skip port in "239.255.255.250:1900" */ if(normalize & NDPI_HOSTNAME_NORM_LC) c = tolower(c); if(normalize & NDPI_HOSTNAME_NORM_REPLACE_IC) { if (c == '\t') c = ' '; if (ndpi_isprint(c) == 0) - c = '?'; + c = '?'; } dst[i] = c; } @@ -11145,14 +12254,14 @@ int ndpi_seen_flow_beginning(const struct ndpi_flow_struct *flow) void ndpi_set_user_data(struct ndpi_detection_module_struct *ndpi_str, void *user_data) { if (ndpi_str == NULL) - { - return; - } + { + return; + } if (ndpi_str->user_data != NULL) - { - NDPI_LOG_ERR(ndpi_str, "%s", "User data is already set. Overwriting.") - } + { + NDPI_LOG_ERR(ndpi_str, "%s", "User data is already set. Overwriting.") + } ndpi_str->user_data = user_data; } @@ -11168,10 +12277,8 @@ void *ndpi_get_user_data(struct ndpi_detection_module_struct *ndpi_str) /* ******************************************************************** */ -static u_int16_t __get_proto_id(const char *proto_name_or_id) +static u_int16_t __get_proto_id(const struct ndpi_detection_module_struct *ndpi_str, const char *proto_name_or_id) { - struct ndpi_detection_module_struct *module; - NDPI_PROTOCOL_BITMASK all; u_int16_t proto_id; char *endptr; long val; @@ -11182,24 +12289,16 @@ static u_int16_t __get_proto_id(const char *proto_name_or_id) errno = 0; /* To distinguish success/failure after call */ val = strtol(proto_name_or_id, &endptr, 10); if(errno == 0 && *endptr == '\0' && - (val >= 0 && val < NDPI_MAX_SUPPORTED_PROTOCOLS + NDPI_MAX_NUM_CUSTOM_PROTOCOLS)) { + (val >= 0 && val < (long)ndpi_str->num_internal_protocols)) { return val; } /* Try to decode the string as protocol name */ - /* Use a temporary module with all protocols enabled */ - module = ndpi_init_detection_module(NULL); - if(!module) - return NDPI_PROTOCOL_UNKNOWN; - NDPI_BITMASK_SET_ALL(all); - ndpi_set_protocol_detection_bitmask2(module, &all); - /* Try to be fast: we need only the protocol name -> protocol id mapping! */ - ndpi_set_config(module, "any", "ip_list.load", "0"); - ndpi_set_config(module, NULL, "flow_risk_lists.load", "0"); - ndpi_finalize_initialization(module); - proto_id = ndpi_get_proto_by_name(module, proto_name_or_id); - ndpi_exit_detection_module(module); + /* Use the current module, even if `ndpi_finalize_initialization` has not + been called yet: internal protocols have been already initialized + and we can get the name of disabled protocols, too */ + proto_id = ndpi_get_proto_by_name(ndpi_str, proto_name_or_id); return proto_id; } @@ -11293,9 +12392,11 @@ static ndpi_cfg_error _set_param_int(struct ndpi_detection_module_struct *ndpi_s /* ******************************************************************** */ -static char *_get_param_int(void *_variable, const char *proto, char *buf, int buf_len) { +static char *_get_param_int(struct ndpi_detection_module_struct *ndpi_str, + void *_variable, const char *proto, char *buf, int buf_len) { int *variable = (int *)_variable; + (void)ndpi_str; (void)proto; snprintf(buf, buf_len, "%d", *variable); @@ -11305,9 +12406,11 @@ static char *_get_param_int(void *_variable, const char *proto, char *buf, int b /* ******************************************************************** */ -static char *_get_param_string(void *_variable, const char *proto, char *buf, int buf_len) { +static char *_get_param_string(struct ndpi_detection_module_struct *ndpi_str, + void *_variable, const char *proto, char *buf, int buf_len) { char *variable = (char *)_variable; + (void)ndpi_str; (void)proto; snprintf(buf, buf_len, "%s", variable); @@ -11370,17 +12473,18 @@ static ndpi_cfg_error _set_param_filename_config(struct ndpi_detection_module_st /* ******************************************************************** */ -static char *_get_param_protocol_enable_disable(void *_variable, const char *proto, +static char *_get_param_protocol_enable_disable(struct ndpi_detection_module_struct *ndpi_str, + void *_variable, const char *proto, char *buf, int buf_len) { - NDPI_PROTOCOL_BITMASK *bitmask = (NDPI_PROTOCOL_BITMASK *)_variable; + struct ndpi_bitmask *bitmask = (struct ndpi_bitmask *)_variable; u_int16_t proto_id; - proto_id = __get_proto_id(proto); + proto_id = __get_proto_id(ndpi_str, proto); if(proto_id == NDPI_PROTOCOL_UNKNOWN) return NULL; - snprintf(buf, buf_len, "%d", !!NDPI_ISSET(bitmask, proto_id)); + snprintf(buf, buf_len, "%d", !!ndpi_bitmask_is_set(bitmask, proto_id)); buf[buf_len - 1] = '\0'; return buf; } @@ -11390,7 +12494,7 @@ static ndpi_cfg_error _set_param_protocol_enable_disable(struct ndpi_detection_m const char *min_value, const char *max_value, const char *proto, const char *param) { - NDPI_PROTOCOL_BITMASK *bitmask = (NDPI_PROTOCOL_BITMASK *)_variable; + struct ndpi_bitmask *bitmask = (struct ndpi_bitmask *)_variable; u_int16_t proto_id; (void)ndpi_str; @@ -11403,44 +12507,47 @@ static ndpi_cfg_error _set_param_protocol_enable_disable(struct ndpi_detection_m strcmp(proto, "$PROTO_NAME_OR_ID") == 0) { if(strcmp(value, "1") == 0 || strcmp(value, "enable") == 0) { - NDPI_BITMASK_SET_ALL(*bitmask); + ndpi_bitmask_set_all(bitmask); return NDPI_CFG_OK; } if(strcmp(value, "0") == 0 || strcmp(value, "disable") == 0) { - NDPI_BITMASK_RESET(*bitmask); + ndpi_bitmask_reset(bitmask); return NDPI_CFG_OK; } } - proto_id = __get_proto_id(proto); + proto_id = __get_proto_id(ndpi_str, proto); if(proto_id == NDPI_PROTOCOL_UNKNOWN) return NDPI_CFG_INVALID_PARAM; if(strcmp(value, "1") == 0 || strcmp(value, "enable") == 0) { - NDPI_BITMASK_ADD(*bitmask, proto_id); + ndpi_bitmask_set(bitmask, proto_id); return NDPI_CFG_OK; } if(strcmp(value, "0") == 0 || strcmp(value, "disable") == 0) { - NDPI_BITMASK_DEL(*bitmask, proto_id); + ndpi_bitmask_clear(bitmask, proto_id); return NDPI_CFG_OK; } return NDPI_CFG_INVALID_PARAM; } -static char *_get_param_flowrisk_enable_disable(void *_variable, const char *proto, +static char *_get_param_flowrisk_enable_disable(struct ndpi_detection_module_struct *ndpi_str, + void *_variable, const char *proto, char *buf, int buf_len) { - NDPI_PROTOCOL_BITMASK *bitmask = (NDPI_PROTOCOL_BITMASK *)_variable; + struct ndpi_bitmask *bitmask = (struct ndpi_bitmask *)_variable; ndpi_risk_enum flowrisk_id; + (void)ndpi_str; + flowrisk_id = __get_flowrisk_id(proto); if(flowrisk_id == NDPI_NO_RISK) return NULL; - snprintf(buf, buf_len, "%d", !!NDPI_ISSET(bitmask, flowrisk_id)); + snprintf(buf, buf_len, "%d", !!ndpi_bitmask_is_set(bitmask, flowrisk_id)); buf[buf_len - 1] = '\0'; return buf; } @@ -11448,32 +12555,39 @@ static char *_get_param_flowrisk_enable_disable(void *_variable, const char *pro static ndpi_cfg_error _set_param_flowrisk_enable_disable(struct ndpi_detection_module_struct *ndpi_str, void *_variable, const char *value, const char *min_value, const char *max_value, - const char *proto, const char *param) + const char *proto, const char *_param) { - NDPI_PROTOCOL_BITMASK *bitmask = (NDPI_PROTOCOL_BITMASK *)_variable; + struct ndpi_bitmask *bitmask = (struct ndpi_bitmask *)_variable; ndpi_risk_enum flowrisk_id; + char param[128] = {0}; (void)ndpi_str; (void)min_value; (void)max_value; (void)proto; - if(strncmp(param, "flow_risk.", 10) != 0) + if(strncmp(_param, "flow_risk.", 10) != 0) return NDPI_CFG_INVALID_PARAM; - param += 10; /* Strip initial "flow_risk." */ + _param += 10; /* Strip initial "flow_risk." */ + + if(strlen(_param) > 5 && + strncmp(_param + (strlen(_param) - 5), ".info", 5) == 0) + memcpy(param, _param, ndpi_min(strlen(_param) - 5, sizeof(param) - 1)); /* Strip trailing ".info" */ + else + strncpy(param, _param, sizeof(param) - 1); if(strcmp(param, "any") == 0 || strcmp(param, "all") == 0 || strcmp(param, "$FLOWRISK_NAME_OR_ID") == 0) { if(strcmp(value, "1") == 0 || strcmp(value, "enable") == 0) { - NDPI_BITMASK_SET_ALL(*bitmask); + ndpi_bitmask_set_all(bitmask); return NDPI_CFG_OK; } if(strcmp(value, "0") == 0 || strcmp(value, "disable") == 0) { - NDPI_BITMASK_RESET(*bitmask); + ndpi_bitmask_reset(bitmask); return NDPI_CFG_OK; } } @@ -11484,12 +12598,12 @@ static ndpi_cfg_error _set_param_flowrisk_enable_disable(struct ndpi_detection_m if(strcmp(value, "1") == 0 || strcmp(value, "enable") == 0) { - NDPI_BITMASK_ADD(*bitmask, flowrisk_id); + ndpi_bitmask_set(bitmask, flowrisk_id); return NDPI_CFG_OK; } if(strcmp(value, "0") == 0 || strcmp(value, "disable") == 0) { - NDPI_BITMASK_DEL(*bitmask, flowrisk_id); + ndpi_bitmask_clear(bitmask, flowrisk_id); return NDPI_CFG_OK; } return NDPI_CFG_INVALID_PARAM; @@ -11525,7 +12639,7 @@ typedef ndpi_cfg_error (*cfg_set)(struct ndpi_detection_module_struct *ndpi_str, void *_variable, const char *value, const char *min_value, const char *max_value, const char *proto, const char *param); -typedef char *(*cfg_get)(void *_variable, const char *proto, char *buf, int buf_len); +typedef char *(*cfg_get)(struct ndpi_detection_module_struct *ndpi_str, void *_variable, const char *proto, char *buf, int buf_len); typedef int (*cfg_calback)(struct ndpi_detection_module_struct *ndpi_str, void *_variable, const char *proto, const char *param); static const struct cfg_op { @@ -11554,11 +12668,25 @@ static const struct cfg_param { } cfg_params[] = { /* Per-protocol parameters */ + { "http", "metadata.request_content_type", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_request_content_type_enabled), NULL }, + { "http", "metadata.referer", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_referer_enabled), NULL }, + { "http", "metadata.host", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_host_enabled), NULL }, + { "http", "metadata.username", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_username_enabled), NULL }, + { "http", "metadata.password", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_password_enabled), NULL }, + { "tls", "certificate_expiration_threshold", "30", "0", "365", CFG_PARAM_INT, __OFF(tls_certificate_expire_in_x_days), NULL }, { "tls", "application_blocks_tracking", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_app_blocks_tracking_enabled), NULL }, { "tls", "dpi.heuristics", "0x00", "0", "0x07", CFG_PARAM_INT, __OFF(tls_heuristics), NULL }, { "tls", "dpi.heuristics.max_packets_extra_dissection", "25", "0", "255", CFG_PARAM_INT, __OFF(tls_heuristics_max_packets), NULL }, { "tls", "metadata.sha1_fingerprint", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_sha1_fingerprint_enabled), NULL }, + { "tls", "metadata.versions_supported", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_versions_supported_enabled), NULL }, + { "tls", "metadata.alpn_negotiated", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_alpn_negotiated_enabled), NULL }, + { "tls", "metadata.cipher", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_cipher_enabled), NULL }, + { "tls", "metadata.cert_server_names", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_cert_server_names_enabled), NULL }, + { "tls", "metadata.cert_validity", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_cert_validity_enabled), NULL }, + { "tls", "metadata.cert_issuer", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_cert_issuer_enabled), NULL }, + { "tls", "metadata.cert_subject", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_cert_subject_enabled), NULL }, + { "tls", "metadata.browser", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_broswer_enabled), NULL }, { "tls", "metadata.ja3s_fingerprint", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_ja3s_fingerprint_enabled), NULL }, { "tls", "metadata.ja4c_fingerprint", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_ja4c_fingerprint_enabled), NULL }, { "tls", "metadata.ja4r_fingerprint", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tls_ja4r_fingerprint_enabled), NULL }, @@ -11587,7 +12715,12 @@ static const struct cfg_param { { "stun", "metadata.attribute.relayed_address", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(stun_relayed_address_enabled), NULL }, { "stun", "metadata.attribute.peer_address", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(stun_peer_address_enabled), NULL }, - { "dns", "subclassification", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(dns_subclassification_enabled), NULL }, + { "bittorrent", "metadata.hash", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(bittorrent_hash_enabled), NULL }, + + { "ssdp", "metadata", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(ssdp_metadata_enabled), NULL }, + + + { "dns", "subclassification", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(dns_subclassification_enabled), NULL }, { "dns", "process_response", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(dns_parse_response_enabled), NULL }, { "http", "process_response", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(http_parse_response_enabled), NULL }, @@ -11598,6 +12731,7 @@ static const struct cfg_param { { "zoom", "max_packets_extra_dissection", "4", "0", "255", CFG_PARAM_INT, __OFF(zoom_max_packets_extra_dissection), NULL }, { "rtp", "search_for_stun", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(rtp_search_for_stun), NULL }, + { "rtp", "max_packets_extra_dissection", "32", "0", "255", CFG_PARAM_INT, __OFF(rtp_max_packets_extra_dissection), NULL }, { "openvpn", "dpi.heuristics", "0x00", "0", "0x01", CFG_PARAM_INT, __OFF(openvpn_heuristics), NULL }, { "openvpn", "dpi.heuristics.num_messages", "10", "0", "255", CFG_PARAM_INT, __OFF(openvpn_heuristics_num_msgs), NULL }, @@ -11608,6 +12742,7 @@ static const struct cfg_param { { "$PROTO_NAME_OR_ID", "log", "disable", NULL, NULL, CFG_PARAM_PROTOCOL_ENABLE_DISABLE, __OFF(debug_bitmask), NULL }, { "$PROTO_NAME_OR_ID", "ip_list.load", "1", NULL, NULL, CFG_PARAM_PROTOCOL_ENABLE_DISABLE, __OFF(ip_list_bitmask), NULL }, { "$PROTO_NAME_OR_ID", "monitoring", "disable", NULL, NULL, CFG_PARAM_PROTOCOL_ENABLE_DISABLE, __OFF(monitoring), NULL }, + { "$PROTO_NAME_OR_ID", "enable", "1", NULL, NULL, CFG_PARAM_PROTOCOL_ENABLE_DISABLE, __OFF(detection_bitmask), NULL }, /* Global parameters */ @@ -11617,7 +12752,7 @@ static const struct cfg_param { { NULL, "flow.use_client_ip_in_guess", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(use_client_ip_in_guess), NULL}, { NULL, "flow.use_client_port_in_guess", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(use_client_port_in_guess), NULL}, { NULL, "tcp_ack_payload_heuristic", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tcp_ack_paylod_heuristic), NULL }, - { NULL, "fully_encrypted_heuristic", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(fully_encrypted_heuristic), NULL }, + { NULL, "fully_encrypted_heuristic", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(fully_encrypted_heuristic), NULL }, { NULL, "libgcrypt.init", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(libgcrypt_init), NULL }, { NULL, "dpi.guess_on_giveup", "0x3", "0", "3", CFG_PARAM_INT, __OFF(guess_on_giveup), NULL }, { NULL, "dpi.guess_ip_before_port", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(guess_ip_before_port), NULL}, @@ -11626,13 +12761,16 @@ static const struct cfg_param { { NULL, "fpc", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(fpc_enabled), NULL }, { NULL, "metadata.tcp_fingerprint", "enable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tcp_fingerprint_enabled), NULL }, + { NULL, "metadata.tcp_fingerprint_raw", "disable", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(tcp_fingerprint_raw_enabled), NULL }, + { NULL, "metadata.tcp_fingerprint_format", "0", "0" /* min */, "1" /* max */, CFG_PARAM_INT, __OFF(tcp_fingerprint_format), NULL }, { NULL, "flow_risk_lists.load", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(flow_risk_lists_enabled), NULL }, { NULL, "flow_risk.$FLOWRISK_NAME_OR_ID", "enable", NULL, NULL, CFG_PARAM_FLOWRISK_ENABLE_DISABLE, __OFF(flowrisk_bitmask), NULL }, + { NULL, "flow_risk.$FLOWRISK_NAME_OR_ID.info", "enable", NULL, NULL, CFG_PARAM_FLOWRISK_ENABLE_DISABLE, __OFF(flowrisk_info_bitmask), NULL }, { NULL, "flow_risk.anonymous_subscriber.list.icloudprivaterelay.load", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(risk_anonymous_subscriber_list_icloudprivaterelay_enabled), NULL }, - { NULL, "flow_risk.anonymous_subscriber.list.protonvpn.load", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(risk_anonymous_subscriber_list_protonvpn_enabled), NULL }, + { NULL, "flow_risk.anonymous_subscriber.list.tor.load", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(risk_anonymous_subscriber_list_tor_exit_nodes_enabled), NULL }, { NULL, "flow_risk.crawler_bot.list.load", "1", NULL, NULL, CFG_PARAM_ENABLE_DISABLE, __OFF(risk_crawler_bot_list_enabled), NULL }, { NULL, "filename.config", NULL, NULL, NULL, CFG_PARAM_FILENAME_CONFIG, __OFF(filename_config), NULL }, @@ -11646,19 +12784,19 @@ static const struct cfg_param { { NULL, "lru.ookla.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(ookla_cache_scope), clbk_only_with_global_ctx }, { NULL, "lru.bittorrent.size", "32768", "0", "16777215", CFG_PARAM_INT, __OFF(bittorrent_cache_num_entries), NULL }, - { NULL, "lru.bittorrent.ttl", "0", "0", "16777215", CFG_PARAM_INT, __OFF(bittorrent_cache_ttl), NULL }, + { NULL, "lru.bittorrent.ttl", "300", "0", "16777215", CFG_PARAM_INT, __OFF(bittorrent_cache_ttl), NULL }, { NULL, "lru.bittorrent.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(bittorrent_cache_scope), clbk_only_with_global_ctx }, { NULL, "lru.stun.size", "1024", "0", "16777215", CFG_PARAM_INT, __OFF(stun_cache_num_entries), NULL }, - { NULL, "lru.stun.ttl", "0", "0", "16777215", CFG_PARAM_INT, __OFF(stun_cache_ttl), NULL }, + { NULL, "lru.stun.ttl", "300", "0", "16777215", CFG_PARAM_INT, __OFF(stun_cache_ttl), NULL }, { NULL, "lru.stun.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(stun_cache_scope), clbk_only_with_global_ctx }, { NULL, "lru.tls_cert.size", "1024", "0", "16777215", CFG_PARAM_INT, __OFF(tls_cert_cache_num_entries), NULL }, - { NULL, "lru.tls_cert.ttl", "0", "0", "16777215", CFG_PARAM_INT, __OFF(tls_cert_cache_ttl), NULL }, + { NULL, "lru.tls_cert.ttl", "300", "0", "16777215", CFG_PARAM_INT, __OFF(tls_cert_cache_ttl), NULL }, { NULL, "lru.tls_cert.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(tls_cert_cache_scope), clbk_only_with_global_ctx }, { NULL, "lru.mining.size", "1024", "0", "16777215", CFG_PARAM_INT, __OFF(mining_cache_num_entries), NULL }, - { NULL, "lru.mining.ttl", "0", "0", "16777215", CFG_PARAM_INT, __OFF(mining_cache_ttl), NULL }, + { NULL, "lru.mining.ttl", "300", "0", "16777215", CFG_PARAM_INT, __OFF(mining_cache_ttl), NULL }, { NULL, "lru.mining.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(mining_cache_scope), clbk_only_with_global_ctx }, { NULL, "lru.msteams.size", "1024", "0", "16777215", CFG_PARAM_INT, __OFF(msteams_cache_num_entries), NULL }, @@ -11669,19 +12807,33 @@ static const struct cfg_param { { NULL, "lru.fpc_dns.ttl", "60", "0", "16777215", CFG_PARAM_INT, __OFF(fpc_dns_cache_ttl), NULL }, { NULL, "lru.fpc_dns.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(fpc_dns_cache_scope), clbk_only_with_global_ctx }, + { NULL, "lru.signal.size", "32768", "0", "16777215", CFG_PARAM_INT, __OFF(signal_cache_num_entries), NULL }, + { NULL, "lru.signal.ttl", "300", "0", "16777215", CFG_PARAM_INT, __OFF(signal_cache_ttl), NULL }, + { NULL, "lru.signal.scope", "0", "0", "1", CFG_PARAM_INT, __OFF(signal_cache_scope), clbk_only_with_global_ctx }, + { NULL, NULL, NULL, NULL, NULL, 0, -1, NULL }, }; #undef __OFF -static void set_default_config(struct ndpi_detection_module_config_struct *cfg) +static int set_default_config(struct ndpi_detection_module_config_struct *cfg, + u_int16_t max_internal_proto) { const struct cfg_param *c; + if(ndpi_bitmask_alloc(&cfg->detection_bitmask, max_internal_proto) != 0 || + ndpi_bitmask_alloc(&cfg->debug_bitmask, max_internal_proto) != 0 || + ndpi_bitmask_alloc(&cfg->ip_list_bitmask, max_internal_proto) != 0 || + ndpi_bitmask_alloc(&cfg->monitoring, max_internal_proto) != 0 || + ndpi_bitmask_alloc(&cfg->flowrisk_bitmask, NDPI_MAX_RISK) != 0 || + ndpi_bitmask_alloc(&cfg->flowrisk_info_bitmask, NDPI_MAX_RISK) != 0) + return -1; + for(c = &cfg_params[0]; c && c->param; c++) { cfg_ops[c->type].fn_set(NULL, (void *)((char *)cfg + c->offset), c->default_value, c->min_value, c->max_value, c->proto, c->param); } + return 0; } ndpi_cfg_error ndpi_set_config(struct ndpi_detection_module_struct *ndpi_str, @@ -11698,6 +12850,9 @@ ndpi_cfg_error ndpi_set_config(struct ndpi_detection_module_struct *ndpi_str, NDPI_LOG_DBG(ndpi_str, "Set [%s][%s][%s]\n", proto, param, value); + if(proto && (strcmp(proto, "NULL") == 0)) + proto = NULL; + for(c = &cfg_params[0]; c && c->param; c++) { if((((proto == NULL && c->proto == NULL) || (proto && c->proto && strcmp(proto, c->proto) == 0)) && @@ -11706,8 +12861,14 @@ ndpi_cfg_error ndpi_set_config(struct ndpi_detection_module_struct *ndpi_str, strcmp(c->proto, "$PROTO_NAME_OR_ID") == 0 && strcmp(param, c->param) == 0) || (proto == NULL && c->proto == NULL && - strncmp(c->param, "flow_risk.", 10) == 0 && - strncmp(param, "flow_risk.", 10) == 0)) { + strncmp(c->param, "flow_risk.$FLOWRISK_NAME_OR_ID", 30) == 0 && + strncmp(param, "flow_risk.", 10) == 0 && + !ndpi_str_endswith(param, ".info") && + !ndpi_str_endswith(param, ".load")) || + (proto == NULL && c->proto == NULL && + strncmp(c->param, "flow_risk.$FLOWRISK_NAME_OR_ID.info", 35) == 0 && + strncmp(param, "flow_risk.", 10) == 0 && + ndpi_str_endswith(param, ".info"))) { rc = cfg_ops[c->type].fn_set(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), value, c->min_value, c->max_value, proto, param); @@ -11733,9 +12894,9 @@ ndpi_cfg_error ndpi_set_config_u64(struct ndpi_detection_module_struct *ndpi_str value_len = ndpi_snprintf(value_str, sizeof(value_str), "%llu", (unsigned long long int)value); if (value_len <= 0 || value_len >= (int)sizeof(value_str)) - { - return NDPI_CFG_INVALID_PARAM; - } + { + return NDPI_CFG_INVALID_PARAM; + } return ndpi_set_config(ndpi_str, proto, param, value_str); } @@ -11761,15 +12922,13 @@ char *ndpi_get_config(struct ndpi_detection_module_struct *ndpi_str, strcmp(c->param, "flow_risk.$FLOWRISK_NAME_OR_ID") == 0 && strcmp(param, c->param) == 0)) { - return cfg_ops[c->type].fn_get((void *)((char *)&ndpi_str->cfg + c->offset), proto, buf, buf_len); + return cfg_ops[c->type].fn_get(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), proto, buf, buf_len); } } return NULL; } -char *ndpi_dump_config(struct ndpi_detection_module_struct *ndpi_str, - FILE *fd) -{ +char *ndpi_dump_config(struct ndpi_detection_module_struct *ndpi_str, FILE *fd) { const struct cfg_param *c; char buf[64]; @@ -11786,7 +12945,7 @@ char *ndpi_dump_config(struct ndpi_detection_module_struct *ndpi_str, fprintf(fd, " *) %s %s: %s [%s]", c->proto ? c->proto : "NULL", c->param, - _get_param_int((void *)((char *)&ndpi_str->cfg + c->offset), c->proto, buf, sizeof(buf)), + _get_param_int(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), c->proto, buf, sizeof(buf)), c->default_value); if(c->min_value && c->max_value) fprintf(fd, " [%s-%s]", c->min_value, c->max_value); @@ -11796,35 +12955,35 @@ char *ndpi_dump_config(struct ndpi_detection_module_struct *ndpi_str, fprintf(fd, " *) %s %s: %s [%s]", c->proto ? c->proto : "NULL", c->param, - _get_param_string((void *)((char *)&ndpi_str->cfg + c->offset), c->proto, buf, sizeof(buf)), + _get_param_string(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), c->proto, buf, sizeof(buf)), c->default_value); fprintf(fd, "\n"); break; - /* TODO */ + /* TODO */ case CFG_PARAM_PROTOCOL_ENABLE_DISABLE: fprintf(fd, " *) %s %s: %s [all %s]", c->proto, c->param, - /* TODO */ _get_param_protocol_enable_disable((void *)((char *)&ndpi_str->cfg + c->offset), "any", buf, sizeof(buf)), + /* TODO */ _get_param_protocol_enable_disable(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), "any", buf, sizeof(buf)), c->default_value); fprintf(fd, "\n"); break; /* TODO */ - case CFG_PARAM_FLOWRISK_ENABLE_DISABLE: - fprintf(fd, " *) %s %s: %s [all %s]", - c->proto ? c->proto : "NULL", - c->param, - /* TODO */ _get_param_flowrisk_enable_disable((void *)((char *)&ndpi_str->cfg + c->offset), "any", buf, sizeof(buf)), - c->default_value); - fprintf(fd, "\n"); - break; + case CFG_PARAM_FLOWRISK_ENABLE_DISABLE: + fprintf(fd, " *) %s %s: %s [all %s]", + c->proto ? c->proto : "NULL", + c->param, + /* TODO */ _get_param_flowrisk_enable_disable(ndpi_str, (void *)((char *)&ndpi_str->cfg + c->offset), "any", buf, sizeof(buf)), + c->default_value); + fprintf(fd, "\n"); + break; } } + return NULL; } -void* ndpi_memmem(const void* haystack, size_t haystack_len, const void* needle, size_t needle_len) -{ +void* ndpi_memmem(const void* haystack, size_t haystack_len, const void* needle, size_t needle_len) { if (!haystack || !needle || haystack_len < needle_len) { return NULL; } @@ -11861,8 +13020,7 @@ void* ndpi_memmem(const void* haystack, size_t haystack_len, const void* needle, return NULL; } -size_t ndpi_strlcpy(char *dst, const char* src, size_t dst_len, size_t src_len) -{ +size_t ndpi_strlcpy(char *dst, const char* src, size_t dst_len, size_t src_len) { if (!dst || !src || dst_len == 0) { return 0; } @@ -11873,3 +13031,50 @@ size_t ndpi_strlcpy(char *dst, const char* src, size_t dst_len, size_t src_len) return src_len; } + +int ndpi_memcasecmp(const void *s1, const void *s2, size_t n) { + if (s1 == NULL && s2 == NULL) { + return 0; + } + + if (s1 == NULL) { + return -1; + } + + if (s2 == NULL) { + return 1; + } + + if (n == 0) { + return 0; + } + + const unsigned char *p1 = (const unsigned char *)s1; + const unsigned char *p2 = (const unsigned char *)s2; + + if (n == 1) { + return tolower(*p1) - tolower(*p2); + } + + /* Early exit optimization - check first and last bytes */ + + int first_cmp = tolower(p1[0]) - tolower(p2[0]); + if (first_cmp != 0) { + return first_cmp; + } + + int last_cmp = tolower(p1[n-1]) - tolower(p2[n-1]); + if (last_cmp != 0) { + return last_cmp; + } + + size_t i; + for (i = 1; i < n-1; i++) { + int cmp = tolower(p1[i]) - tolower(p2[i]); + if (cmp != 0) { + return cmp; + } + } + + return 0; +} diff --git a/src/lib/ndpi_memory.c b/src/lib/ndpi_memory.c index f9df7acc6..bb8173108 100644 --- a/src/lib/ndpi_memory.c +++ b/src/lib/ndpi_memory.c @@ -1,10 +1,7 @@ /* * ndpi_memory.c * - * Copyright (C) 2011-23 - 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 + * Copyright (C) 2011-25 - 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/ndpi_os_fingerprint.c.inc b/src/lib/ndpi_os_fingerprint.c.inc index c22fe4e7a..110c5f34f 100644 --- a/src/lib/ndpi_os_fingerprint.c.inc +++ b/src/lib/ndpi_os_fingerprint.c.inc @@ -1,77 +1,76 @@ static struct os_fingerprint tcp_fps[] = { - { "2_64_65535_8bf9e292397e", os_hint_freebsd }, + { "2_64_65535_8bf9e292397e", ndpi_os_freebsd }, - { "2_64_64800_83b2f9a5576c", os_hint_linux }, - { "2_64_64240_2e3cee914fc1", os_hint_linux }, - { "2_64_29200_2e3cee914fc1", os_hint_linux }, - { "2_64_29200_d853e95bd80f", os_hint_linux }, /* Sonos */ - { "2_64_14600_8c07a80cc645", os_hint_linux }, /* QNAP */ - { "2_64_64240_2e3cee914fc1", os_hint_linux }, /* rPI */ - { "2_64_32120_2e3cee914fc1", os_hint_linux }, /* rPI */ - { "2_64_29200_90541420d839", os_hint_linux }, /* Suse Linux */ - { "2_64_64240_41a9d5af7dd3", os_hint_linux }, + { "2_64_64800_83b2f9a5576c", ndpi_os_linux }, + { "2_64_64240_2e3cee914fc1", ndpi_os_linux }, + { "2_64_29200_2e3cee914fc1", ndpi_os_linux }, + { "2_64_29200_d853e95bd80f", ndpi_os_linux }, /* Sonos */ + { "2_64_14600_8c07a80cc645", ndpi_os_linux }, /* QNAP */ + { "2_64_64240_2e3cee914fc1", ndpi_os_linux }, /* rPI */ + { "2_64_32120_2e3cee914fc1", ndpi_os_linux }, /* rPI */ + { "2_64_29200_90541420d839", ndpi_os_linux }, /* Suse Linux */ + { "2_64_64240_41a9d5af7dd3", ndpi_os_linux }, - { "2_64_65535_d876f498b09e", os_hint_android }, - { "2_64_65535_685ad951a756", os_hint_android }, - { "2_64_65535_41a9d5af7dd3", os_hint_android }, - { "2_64_65535_148107a0d970", os_hint_android }, - { "2_64_65535_f518bfb025b0", os_hint_android }, + { "2_64_65535_d876f498b09e", ndpi_os_android }, + { "2_64_65535_685ad951a756", ndpi_os_android }, + { "2_64_65535_41a9d5af7dd3", ndpi_os_android }, + { "2_64_65535_148107a0d970", ndpi_os_android }, + { "2_64_65535_f518bfb025b0", ndpi_os_android }, - { "2_128_64240_6bb88f5575fd", os_hint_windows }, - { "2_128_8192_4697958db063", os_hint_windows }, /* Windows 7 */ - { "194_128_64240_0c6c715fcb8e", os_hint_windows }, - { "194_128_64240_29659b8d8574", os_hint_windows }, - { "194_128_32768_e75eea53a4fd", os_hint_windows }, - { "194_128_32768_84fee6d35dde", os_hint_windows }, - { "194_128_64240_6bb88f5575fd", os_hint_windows }, - { "2_128_32768_5a9ef1c58d0b", os_hint_windows }, - { "194_128_32768_5a9ef1c58d0b", os_hint_windows }, - { "2_128_65535_6bb88f5575fd", os_hint_windows }, + { "2_128_64240_6bb88f5575fd", ndpi_os_windows }, + { "2_128_8192_4697958db063", ndpi_os_windows }, /* Windows 7 */ + { "194_128_64240_0c6c715fcb8e", ndpi_os_windows }, + { "194_128_64240_29659b8d8574", ndpi_os_windows }, + { "194_128_32768_e75eea53a4fd", ndpi_os_windows }, + { "194_128_32768_84fee6d35dde", ndpi_os_windows }, + { "194_128_64240_6bb88f5575fd", ndpi_os_windows }, + { "2_128_32768_5a9ef1c58d0b", ndpi_os_windows }, + { "194_128_32768_5a9ef1c58d0b", ndpi_os_windows }, + { "2_128_65535_6bb88f5575fd", ndpi_os_windows }, - { "194_128_32_5a9ef1c58d0b", os_hint_windows }, - { "194_128_64954_5df61ba47d16", os_hint_windows }, - { "194_128_65160_720287bf387b", os_hint_windows }, - { "194_128_65160_f7c19d625909", os_hint_windows }, - { "194_128_65340_5df61ba47d16", os_hint_windows }, - { "194_128_65535_35ea98532c26", os_hint_windows }, - { "194_128_65535_6bb88f5575fd", os_hint_windows }, - { "194_128_65535_9f39700b863a", os_hint_windows }, - { "194_128_8192_5a9ef1c58d0b", os_hint_windows }, - { "2_128_62636_f7c19d625909", os_hint_windows }, - { "2_128_62720_6bb88f5575fd", os_hint_windows }, - { "2_128_64390_186255600578", os_hint_windows }, - { "2_128_64512_d978a30274f9", os_hint_windows }, - { "2_128_64668_ba856ac24bae", os_hint_windows }, - { "2_128_64872_7ec39e7a0c60", os_hint_windows }, - { "2_128_65010_d7f34a3d4a0e", os_hint_windows }, - { "2_128_65088_e6db4d959510", os_hint_windows }, - { "2_128_65160_f7c19d625909", os_hint_windows }, - { "2_128_65312_6e130c7ac874", os_hint_windows }, - { "2_128_65424_d408bed9ba71", os_hint_windows }, - { "2_128_65520_91f9ecb5d85c", os_hint_windows }, - { "2_128_65535_46c195dc1606", os_hint_windows }, - { "2_128_65535_8739305ee1fa", os_hint_windows }, - { "2_128_65535_91f9ecb5d85c", os_hint_windows }, - { "2_128_65535_d408bed9ba71", os_hint_windows }, - { "2_128_65535_d7f34a3d4a0e", os_hint_windows }, - { "2_128_65535_e83222749ab9", os_hint_windows }, - { "2_128_65535_f7c19d625909", os_hint_windows }, + { "194_128_32_5a9ef1c58d0b", ndpi_os_windows }, + { "194_128_64954_5df61ba47d16", ndpi_os_windows }, + { "194_128_65160_720287bf387b", ndpi_os_windows }, + { "194_128_65160_f7c19d625909", ndpi_os_windows }, + { "194_128_65340_5df61ba47d16", ndpi_os_windows }, + { "194_128_65535_35ea98532c26", ndpi_os_windows }, + { "194_128_65535_6bb88f5575fd", ndpi_os_windows }, + { "194_128_65535_9f39700b863a", ndpi_os_windows }, + { "194_128_8192_5a9ef1c58d0b", ndpi_os_windows }, + { "2_128_62636_f7c19d625909", ndpi_os_windows }, + { "2_128_62720_6bb88f5575fd", ndpi_os_windows }, + { "2_128_64390_186255600578", ndpi_os_windows }, + { "2_128_64512_d978a30274f9", ndpi_os_windows }, + { "2_128_64668_ba856ac24bae", ndpi_os_windows }, + { "2_128_64872_7ec39e7a0c60", ndpi_os_windows }, + { "2_128_65010_d7f34a3d4a0e", ndpi_os_windows }, + { "2_128_65088_e6db4d959510", ndpi_os_windows }, + { "2_128_65160_f7c19d625909", ndpi_os_windows }, + { "2_128_65312_6e130c7ac874", ndpi_os_windows }, + { "2_128_65424_d408bed9ba71", ndpi_os_windows }, + { "2_128_65520_91f9ecb5d85c", ndpi_os_windows }, + { "2_128_65535_46c195dc1606", ndpi_os_windows }, + { "2_128_65535_8739305ee1fa", ndpi_os_windows }, + { "2_128_65535_91f9ecb5d85c", ndpi_os_windows }, + { "2_128_65535_d408bed9ba71", ndpi_os_windows }, + { "2_128_65535_d7f34a3d4a0e", ndpi_os_windows }, + { "2_128_65535_e83222749ab9", ndpi_os_windows }, + { "2_128_65535_f7c19d625909", ndpi_os_windows }, - { "194_64_65535_15db81ff8b0d", os_hint_ios_ipad_os }, - { "2_64_65535_41a9d5af7dd3", os_hint_ios_ipad_os }, - { "194_64_65535_dd5737e4fedb", os_hint_ios_ipad_os }, - { "194_64_65535_d3a424420f2a", os_hint_ios_ipad_os }, - { "194_64_0_d29295416479", os_hint_ios_ipad_os }, + { "194_64_65535_15db81ff8b0d", ndpi_os_ios_ipad_os }, + { "194_64_65535_dd5737e4fedb", ndpi_os_ios_ipad_os }, + { "194_64_65535_d3a424420f2a", ndpi_os_ios_ipad_os }, + { "194_64_0_d29295416479", ndpi_os_ios_ipad_os }, - { "194_64_65535_d29295416479", os_hint_macos }, - { "194_64_65535_78dd6871cb6d", os_hint_macos }, - { "2_64_65535_d29295416479", os_hint_macos }, - { "2_64_0_d29295416479", os_hint_macos }, - { "2_64_65535_d29295416479", os_hint_macos }, - { "2_64_65535_dd5737e4fedb", os_hint_macos }, - { "2_64_65535_99a660d3e328", os_hint_macos }, - { "2_64_65535_78dd6871cb6d", os_hint_macos }, - { "2_64_65535_09b18f059744", os_hint_macos }, + { "194_64_65535_d29295416479", ndpi_os_macos }, + { "194_64_65535_78dd6871cb6d", ndpi_os_macos }, + { "2_64_65535_d29295416479", ndpi_os_macos }, + { "2_64_0_d29295416479", ndpi_os_macos }, + { "2_64_65535_d29295416479", ndpi_os_macos }, + { "2_64_65535_dd5737e4fedb", ndpi_os_macos }, + { "2_64_65535_99a660d3e328", ndpi_os_macos }, + { "2_64_65535_78dd6871cb6d", ndpi_os_macos }, + { "2_64_65535_09b18f059744", ndpi_os_macos }, - { NULL, os_hint_unknown }, + { NULL, ndpi_os_unknown }, }; diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index 3cda728bd..dfec1620e 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -1,7 +1,7 @@ /* * ndpi_serializer.c * - * Copyright (C) 2011-23 - ntop.org and contributors + * Copyright (C) 2011-25 - ntop.org and contributors * * 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 @@ -88,47 +88,71 @@ static int ndpi_is_number(const char *str, u_int32_t str_len) { * Upon successful return, these functions return the number of characters printed (excluding the null byte used to terminate the string). */ int ndpi_json_string_escape(const char *src, int src_len, char *dst, int dst_max_len) { - char c = 0; + u_char c = 0; int i, j = 0; dst[j++] = '"'; for(i = 0; i < src_len && j < dst_max_len; i++) { - c = src[i]; + c = (u_char) src[i]; + + if (c < 0x20 /* ' ' */ || c == 0x7F) { + ; // Non-printable ASCII character (skip) + } else if (c >= 0x20 && c <= 0x7E) { + // Valid ASCII character (escape if required by JSON) + switch (c) { + case '\\': + case '"': + case '/': + dst[j++] = '\\'; + dst[j++] = c; + break; + case '\b': + dst[j++] = '\\'; + dst[j++] = 'b'; + break; + case '\t': + dst[j++] = '\\'; + dst[j++] = 't'; + break; + case '\n': + dst[j++] = '\\'; + dst[j++] = 'n'; + break; + case '\f': + dst[j++] = '\\'; + dst[j++] = 'f'; + break; + case '\r': + dst[j++] = '\\'; + dst[j++] = 'r'; + break; + default: + dst[j++] = c; + } - switch (c) { - case '\\': - case '"': - case '/': - dst[j++] = '\\'; + } else if ((c >= 0xC2 && c <= 0xDF) && (src_len - i) >= 2 && + ((u_char) src[i+1] >= 0x80 && (u_char) src[i+1] <= 0xBF)) { + // 2-byte sequence (U+0080 to U+07FF) dst[j++] = c; - break; - case '\b': - dst[j++] = '\\'; - dst[j++] = 'b'; - break; - case '\t': - dst[j++] = '\\'; - dst[j++] = 't'; - break; - case '\n': - dst[j++] = '\\'; - dst[j++] = 'n'; - break; - case '\f': - dst[j++] = '\\'; - dst[j++] = 'f'; - break; - case '\r': - dst[j++] = '\\'; - dst[j++] = 'r'; - break; - default: - if(c < ' ') - ; /* non printable */ - else - dst[j++] = c; + dst[j++] = src[++i]; + } else if ((c >= 0xE0 && c <= 0xEF) && (src_len - i) >= 3 && + ((u_char) src[i+1] >= 0x80 && (u_char) src[i+1] <= 0xBF) && + ((u_char) src[i+2] >= 0x80 && (u_char) src[i+2] <= 0xBF)) { + // 3-byte sequence (U+0800 to U+FFFF) + dst[j++] = c; + dst[j++] = src[++i]; + dst[j++] = src[++i]; + } else if ((c >= 0xF0 && c <= 0xF4) && (src_len - i) >= 4 && + ((u_char) src[i+1] >= 0x80 && (u_char) src[i+1] <= 0xBF) && + ((u_char) src[i+2] >= 0x80 && (u_char) src[i+2] <= 0xBF) && + ((u_char) src[i+3] >= 0x80 && (u_char) src[i+3] <= 0xBF)) { + // 4-byte sequence (U+10000 to U+10FFiFF) + dst[j++] = c; + dst[j++] = src[++i]; + dst[j++] = src[++i]; + dst[j++] = src[++i]; } } @@ -701,7 +725,7 @@ int ndpi_serialize_end_of_record(ndpi_serializer *_serializer) { static inline void ndpi_serialize_csv_pre(ndpi_private_serializer *serializer) { if(serializer->status.flags & NDPI_SERIALIZER_STATUS_EOR) { serializer->status.flags &= ~NDPI_SERIALIZER_STATUS_EOR; - } else if (serializer->status.buffer.size_used == 0) { + } else if (!(serializer->status.flags & NDPI_SERIALIZER_STATUS_NOT_EMPTY)){ /* nothing to do */ } else { if(serializer->buffer.size > serializer->status.buffer.size_used) { @@ -709,6 +733,7 @@ static inline void ndpi_serialize_csv_pre(ndpi_private_serializer *serializer) { serializer->status.buffer.size_used++; } } + serializer->status.flags |= NDPI_SERIALIZER_STATUS_NOT_EMPTY; } /* ********************************** */ @@ -1273,7 +1298,7 @@ int ndpi_serialize_uint32_binary(ndpi_serializer *_serializer, int rc; if(serializer->fmt == ndpi_serialization_format_json) - needed += 24 + slen; + needed += 24 + slen*2 /* account escape (x2) */; if(buff_diff < needed) { if(ndpi_extend_serializer_buffer(&serializer->buffer, needed - buff_diff) < 0) @@ -2104,7 +2129,8 @@ int ndpi_serialize_string_string_len(ndpi_serializer *_serializer, ndpi_serialize_csv_pre(serializer); needed--; - memcpy(&serializer->buffer.data[serializer->status.buffer.size_used], value, needed); + if (needed > 0) + memcpy(&serializer->buffer.data[serializer->status.buffer.size_used], value, needed); serializer->status.buffer.size_used += needed; return(0); } else @@ -3015,9 +3041,9 @@ int ndpi_deserialize_clone_item(ndpi_deserializer *_deserializer, ndpi_serialize /* Clone all elements in deserializer to serializer (this can be used to convert a TLV record to JSON) */ int ndpi_deserialize_clone_all(ndpi_deserializer *deserializer, ndpi_serializer *serializer) { ndpi_serialization_type kt, et; - u_int32_t u32, k32; + u_int32_t u32, k32 = 0; int32_t i32; - u_int64_t u64; + u_int64_t u64 = 0; int64_t i64; float f; ndpi_string vs, ks; diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c index 4fcb5b26e..af190a768 100644 --- a/src/lib/ndpi_utils.c +++ b/src/lib/ndpi_utils.c @@ -1,10 +1,7 @@ /* * ndpi_utils.c * - * Copyright (C) 2011-24 - ntop.org and contributors - * - * This file is part of nDPI, an open source deep packet inspection - * library based on the OpenDPI and PACE technology by ipoque GmbH + * Copyright (C) 2011-25 - ntop.org and contributors * * 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 @@ -1163,11 +1160,8 @@ void ndpi_serialize_proto(struct ndpi_detection_module_struct *ndpi_struct, ndpi_get_proto_breed(ndpi_struct, (l7_protocol.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN ? l7_protocol.proto.app_protocol : l7_protocol.proto.master_protocol)); ndpi_serialize_string_string(serializer, "breed", ndpi_get_proto_breed_name(breed)); - if(l7_protocol.category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) - { - ndpi_serialize_string_uint32(serializer, "category_id", l7_protocol.category); - ndpi_serialize_string_string(serializer, "category", ndpi_category_get_name(ndpi_struct, l7_protocol.category)); - } + ndpi_serialize_string_uint32(serializer, "category_id", l7_protocol.category); + ndpi_serialize_string_string(serializer, "category", ndpi_category_get_name(ndpi_struct, l7_protocol.category)); } /* ********************************** */ @@ -1386,8 +1380,8 @@ int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct, case NDPI_PROTOCOL_NTP: ndpi_serialize_start_of_block(serializer, "ntp"); - ndpi_serialize_string_uint32(serializer, "request_code", flow->protos.ntp.request_code); - ndpi_serialize_string_uint32(serializer, "version", flow->protos.ntp.request_code); + ndpi_serialize_string_uint32(serializer, "version", flow->protos.ntp.version); + ndpi_serialize_string_uint32(serializer, "mode", flow->protos.ntp.mode); ndpi_serialize_end_of_block(serializer); break; @@ -1471,39 +1465,31 @@ int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct, case NDPI_PROTOCOL_HTTP_CONNECT: case NDPI_PROTOCOL_HTTP_PROXY: ndpi_serialize_start_of_block(serializer, "http"); + if(flow->http.url != NULL) { - ndpi_risk_enum risk = ndpi_validate_url(flow->http.url); - if (risk != NDPI_NO_RISK) - { - NDPI_SET_BIT(flow->risk, risk); - } ndpi_serialize_string_string(serializer, "url", flow->http.url); ndpi_serialize_string_uint32(serializer, "code", flow->http.response_status_code); ndpi_serialize_string_string(serializer, "content_type", flow->http.content_type); ndpi_serialize_string_string(serializer, "user_agent", flow->http.user_agent); } + if (flow->http.request_content_type != NULL) - { ndpi_serialize_string_string(serializer, "request_content_type", flow->http.request_content_type); - } + if (flow->http.detected_os != NULL) - { ndpi_serialize_string_string(serializer, "detected_os", flow->http.detected_os); - } + if (flow->http.nat_ip != NULL) - { ndpi_serialize_string_string(serializer, "nat_ip", flow->http.nat_ip); - } + ndpi_serialize_end_of_block(serializer); break; case NDPI_PROTOCOL_QUIC: ndpi_serialize_start_of_block(serializer, "quic"); - if(flow->http.user_agent) - ndpi_serialize_string_string(serializer, "user_agent", flow->http.user_agent); ndpi_quic_version2str(quic_version, sizeof(quic_version), flow->protos.tls_quic.quic_version); @@ -1595,6 +1581,92 @@ int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct, } break; + case NDPI_PROTOCOL_SSDP: + ndpi_serialize_start_of_block(serializer, "ssdp"); + + if (flow->protos.ssdp.method) { + ndpi_serialize_string_string(serializer, "METHOD", flow->protos.ssdp.method); + } + + if (flow->protos.ssdp.cache_controle) { + ndpi_serialize_string_string(serializer, "CACHE-CONTROL", flow->protos.ssdp.cache_controle); + } + + if (flow->protos.ssdp.location) { + ndpi_serialize_string_string(serializer, "LOCATION", flow->protos.ssdp.location); + } + + if (flow->protos.ssdp.nt) { + ndpi_serialize_string_string(serializer, "NT", flow->protos.ssdp.nt); + } + + if (flow->protos.ssdp.nts) { + ndpi_serialize_string_string(serializer, "NTS", flow->protos.ssdp.nts); + } + + if (flow->protos.ssdp.server) { + ndpi_serialize_string_string(serializer, "SERVER", flow->protos.ssdp.server); + } + + if (flow->protos.ssdp.usn) { + ndpi_serialize_string_string(serializer, "USN", flow->protos.ssdp.usn); + } + + if (flow->protos.ssdp.rincon_household) { + ndpi_serialize_string_string(serializer, "X-RINCON-HOUSEHOLD", flow->protos.ssdp.rincon_household); + } + + if (flow->protos.ssdp.rincon_bootseq) { + ndpi_serialize_string_string(serializer, "X-RINCON-BOOTSEQ", flow->protos.ssdp.rincon_bootseq); + } + + if (flow->protos.ssdp.bootid) { + ndpi_serialize_string_string(serializer, "BOOTID.UPNP.ORG", flow->protos.ssdp.bootid); + } + + if (flow->protos.ssdp.rincon_wifimode) { + ndpi_serialize_string_string(serializer, "X-RINCON-WIFIMODE", flow->protos.ssdp.rincon_wifimode); + } + + if (flow->protos.ssdp.rincon_variant) { + ndpi_serialize_string_string(serializer, "X-RINCON-VARIANT", flow->protos.ssdp.rincon_variant); + } + + if (flow->protos.ssdp.household_smart_speaker_audio) { + ndpi_serialize_string_string(serializer, "HOUSEHOLD.SMARTSPEAKER.AUDIO", flow->protos.ssdp.household_smart_speaker_audio); + } + + if (flow->protos.ssdp.location_smart_speaker_audio) { + ndpi_serialize_string_string(serializer, "LOCATION.SMARTSPEAKER.AUDIO", flow->protos.ssdp.location_smart_speaker_audio); + } + + if (flow->protos.ssdp.securelocation_upnp) { + ndpi_serialize_string_string(serializer, "SECURELOCATION.UPNP.ORG", flow->protos.ssdp.securelocation_upnp); + } + + if (flow->protos.ssdp.sonos_securelocation) { + ndpi_serialize_string_string(serializer, "X-SONOS-HHSECURELOCATION", flow->protos.ssdp.sonos_securelocation); + } + + if (flow->protos.ssdp.man) { + ndpi_serialize_string_string(serializer, "MAN", flow->protos.ssdp.man); + } + + if (flow->protos.ssdp.mx) { + ndpi_serialize_string_string(serializer, "MX", flow->protos.ssdp.mx); + } + + if (flow->protos.ssdp.st) { + ndpi_serialize_string_string(serializer, "ST", flow->protos.ssdp.st); + } + + if (flow->protos.ssdp.user_agent) { + ndpi_serialize_string_string(serializer, "USER_AGENT", flow->protos.ssdp.user_agent); + } + + ndpi_serialize_end_of_block(serializer); + break; + case NDPI_PROTOCOL_DISCORD: if (l7_protocol.proto.master_protocol != NDPI_PROTOCOL_TLS) { ndpi_serialize_start_of_block(serializer, "discord"); @@ -1787,6 +1859,9 @@ int ndpi_flow2json(struct ndpi_detection_module_struct *ndpi_struct, if(flow->tcp.fingerprint) ndpi_serialize_string_string(serializer, "tcp_fingerprint", flow->tcp.fingerprint); + if(flow->tcp.fingerprint_raw) + ndpi_serialize_string_string(serializer, "tcp_fingerprint_raw", flow->tcp.fingerprint_raw); + ndpi_serialize_string_string(serializer, "proto", ndpi_get_ip_proto_name(l4_protocol, l4_proto_name, sizeof(l4_proto_name))); @@ -1983,7 +2058,9 @@ static int ndpi_is_rce_injection(char* query) { /* ********************************** */ -ndpi_risk_enum ndpi_validate_url(char *url) { +ndpi_risk_enum ndpi_validate_url(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow, + char *url) { char *orig_str = NULL, *str = NULL, *question_mark = strchr(url, '?'); ndpi_risk_enum rc = NDPI_NO_RISK; @@ -2030,8 +2107,15 @@ ndpi_risk_enum ndpi_validate_url(char *url) { ndpi_free(decoded); - if(rc != NDPI_NO_RISK) + if(rc != NDPI_NO_RISK) { + if(flow != NULL) { + char msg[128]; + + snprintf(msg, sizeof(msg), "Suspicious URL [%s]", url); + ndpi_set_risk(ndpi_str, flow, rc, msg); + } break; + } } str = strtok_r(NULL, "&", &tmp); @@ -2129,8 +2213,8 @@ const char* ndpi_risk2str(ndpi_risk_enum risk) { case NDPI_SMB_INSECURE_VERSION: return("SMB Insecure Vers"); - case NDPI_TLS_SUSPICIOUS_ESNI_USAGE: - return("TLS Susp ESNI Usage"); + case NDPI_FREE_21: + return("FREE21"); case NDPI_UNSAFE_PROTOCOL: return("Unsafe Protocol"); @@ -2219,8 +2303,8 @@ const char* ndpi_risk2str(ndpi_risk_enum risk) { case NDPI_TCP_ISSUES: return("TCP Connection Issues"); - case NDPI_FULLY_ENCRYPTED: - return("Fully Encrypted Flow"); + case NDPI_FREE_51: + return("FREE51"); case NDPI_TLS_ALPN_SNI_MISMATCH: return("ALPN/SNI Mismatch"); @@ -2291,8 +2375,8 @@ const char* ndpi_risk2code(ndpi_risk_enum risk) { return STRINGIFY(NDPI_SSH_OBSOLETE_SERVER_VERSION_OR_CIPHER); case NDPI_SMB_INSECURE_VERSION: return STRINGIFY(NDPI_SMB_INSECURE_VERSION); - case NDPI_TLS_SUSPICIOUS_ESNI_USAGE: - return STRINGIFY(NDPI_TLS_SUSPICIOUS_ESNI_USAGE); + case NDPI_FREE_21: + return STRINGIFY(NDPI_FREE_21); case NDPI_UNSAFE_PROTOCOL: return STRINGIFY(NDPI_TLS_SUSPICIOUS_ESNI_USAGE); case NDPI_DNS_SUSPICIOUS_TRAFFIC: @@ -2351,8 +2435,8 @@ const char* ndpi_risk2code(ndpi_risk_enum risk) { return STRINGIFY(NDPI_MINOR_ISSUES); case NDPI_TCP_ISSUES: return STRINGIFY(NDPI_MINOR_ISSUES); - case NDPI_FULLY_ENCRYPTED: - return STRINGIFY(NDPI_FULLY_ENCRYPTED); + case NDPI_FREE_51: + return STRINGIFY(NDPI_FREE_51); case NDPI_TLS_ALPN_SNI_MISMATCH: return STRINGIFY(NDPI_TLS_ALPN_SNI_MISMATCH); case NDPI_MALWARE_HOST_CONTACTED: @@ -2414,10 +2498,10 @@ ndpi_risk_enum ndpi_code2risk(const char* risk) { return(NDPI_SSH_OBSOLETE_SERVER_VERSION_OR_CIPHER); else if(strcmp(STRINGIFY(NDPI_SMB_INSECURE_VERSION), risk) == 0) return(NDPI_SMB_INSECURE_VERSION); - else if(strcmp(STRINGIFY(NDPI_TLS_SUSPICIOUS_ESNI_USAGE), risk) == 0) - return(NDPI_TLS_SUSPICIOUS_ESNI_USAGE); + else if(strcmp(STRINGIFY(NDPI_FREE_21), risk) == 0) + return(NDPI_FREE_21); else if(strcmp(STRINGIFY(NDPI_UNSAFE_PROTOCOL), risk) == 0) - return(NDPI_TLS_SUSPICIOUS_ESNI_USAGE); + return(NDPI_UNSAFE_PROTOCOL); else if(strcmp(STRINGIFY(NDPI_DNS_SUSPICIOUS_TRAFFIC), risk) == 0) return(NDPI_DNS_SUSPICIOUS_TRAFFIC); else if(strcmp(STRINGIFY(NDPI_TLS_MISSING_SNI), risk) == 0) @@ -2474,8 +2558,8 @@ ndpi_risk_enum ndpi_code2risk(const char* risk) { return(NDPI_MINOR_ISSUES); else if(strcmp(STRINGIFY(NDPI_TCP_ISSUES), risk) == 0) return(NDPI_MINOR_ISSUES); - else if(strcmp(STRINGIFY(NDPI_FULLY_ENCRYPTED), risk) == 0) - return(NDPI_FULLY_ENCRYPTED); + else if(strcmp(STRINGIFY(NDPI_FREE_51), risk) == 0) + return(NDPI_FREE_51); else if(strcmp(STRINGIFY(NDPI_TLS_ALPN_SNI_MISMATCH), risk) == 0) return(NDPI_TLS_ALPN_SNI_MISMATCH); else if(strcmp(STRINGIFY(NDPI_MALWARE_HOST_CONTACTED), risk) == 0) @@ -2593,7 +2677,7 @@ const char *ndpi_risk_shortnames[NDPI_MAX_RISK] = { "ssh_obsolete_client", "ssh_obsolete_server", "smb_insecure_ver", /* NDPI_SMB_INSECURE_VERSION */ - "tls_esni", + "free21", "unsafe_proto", "dns_susp", "tls_no_sni", @@ -2623,7 +2707,7 @@ const char *ndpi_risk_shortnames[NDPI_MAX_RISK] = { "periodic_flow", "minor_issues", "tcp_issues", /* NDPI_TCP_ISSUES */ - "fully_encrypted", + "free51", "tls_alpn_mismatch", "malware_host", "binary_data_transfer", @@ -2934,9 +3018,18 @@ static u_int8_t ndpi_check_ipv6_exception(struct ndpi_detection_module_struct *n /* ********************************************************************************* */ -static int is_flowrisk_enabled(struct ndpi_detection_module_struct *ndpi_str, ndpi_risk_enum flowrisk_id) +int is_flowrisk_enabled(struct ndpi_detection_module_struct *ndpi_str, ndpi_risk_enum flowrisk_id) +{ + if(ndpi_bitmask_is_set(&ndpi_str->cfg.flowrisk_bitmask, flowrisk_id) == 0) + return 0; + return 1; +} + +/* ********************************************************************************* */ + +int is_flowrisk_info_enabled(struct ndpi_detection_module_struct *ndpi_str, ndpi_risk_enum flowrisk_id) { - if(NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_str->cfg.flowrisk_bitmask, flowrisk_id) == 0) + if(ndpi_bitmask_is_set(&ndpi_str->cfg.flowrisk_info_bitmask, flowrisk_id) == 0) return 0; return 1; } @@ -3020,7 +3113,8 @@ void ndpi_set_risk(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_fl // ndpi_handle_risk_exceptions(ndpi_str, flow); if(flow->risk != 0 /* check if it has been masked */) { - if(risk_message != NULL) { + if(is_flowrisk_info_enabled(ndpi_str, r) && + risk_message != NULL) { if(flow->num_risk_infos < MAX_NUM_RISK_INFOS) { char *s = ndpi_strdup(risk_message); @@ -3032,7 +3126,7 @@ void ndpi_set_risk(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_fl } } } - } else if(risk_message) { + } else if(is_flowrisk_info_enabled(ndpi_str, r) && risk_message) { u_int8_t i; for(i = 0; i < flow->num_risk_infos; i++) @@ -3057,13 +3151,17 @@ void ndpi_set_risk(struct ndpi_detection_module_struct *ndpi_str, struct ndpi_fl /* ******************************************************************** */ -void ndpi_unset_risk(struct ndpi_flow_struct *flow, ndpi_risk_enum r) { +void ndpi_unset_risk(struct ndpi_detection_module_struct *ndpi_str, + struct ndpi_flow_struct *flow, ndpi_risk_enum r) { if(ndpi_isset_risk(flow, r)) { u_int8_t i, j; ndpi_risk v = 1ull << r; flow->risk &= ~v; + if(!is_flowrisk_info_enabled(ndpi_str, r)) + return; + for(i = 0; i < flow->num_risk_infos; i++) { if(flow->risk_infos[i].id == r) { flow->risk_infos[i].id = 0; @@ -3238,7 +3336,7 @@ void ndpi_entropy2risk(struct ndpi_detection_module_struct *ndpi_struct, } reset_risk: - ndpi_unset_risk(flow, NDPI_SUSPICIOUS_ENTROPY); + ndpi_unset_risk(ndpi_struct, flow, NDPI_SUSPICIOUS_ENTROPY); } /* ******************************************************************** */ @@ -3356,17 +3454,19 @@ u_int8_t is_a_common_alpn(struct ndpi_detection_module_struct *ndpi_str, /* ******************************************* */ -u_int8_t ndpi_is_valid_protoId(u_int16_t protoId) { - return((protoId >= NDPI_MAX_SUPPORTED_PROTOCOLS + NDPI_MAX_NUM_CUSTOM_PROTOCOLS) ? 0 : 1); +u_int8_t ndpi_is_valid_protoId(const struct ndpi_detection_module_struct *ndpi_str, u_int16_t protoId) { + if(!ndpi_str) + return 0; + return(protoId >= ndpi_str->num_supported_protocols ? 0 : 1); } /* ******************************************* */ u_int8_t ndpi_is_encrypted_proto(struct ndpi_detection_module_struct *ndpi_str, ndpi_protocol proto) { - if(proto.proto.master_protocol == NDPI_PROTOCOL_UNKNOWN && ndpi_is_valid_protoId(proto.proto.app_protocol)) { + if(proto.proto.master_protocol == NDPI_PROTOCOL_UNKNOWN && ndpi_is_valid_protoId(ndpi_str, proto.proto.app_protocol)) { return(!ndpi_str->proto_defaults[proto.proto.app_protocol].isClearTextProto); - } else if(ndpi_is_valid_protoId(proto.proto.master_protocol) && ndpi_is_valid_protoId(proto.proto.app_protocol)) { + } else if(ndpi_is_valid_protoId(ndpi_str, proto.proto.master_protocol) && ndpi_is_valid_protoId(ndpi_str, proto.proto.app_protocol)) { if(ndpi_str->proto_defaults[proto.proto.master_protocol].isClearTextProto && (!ndpi_str->proto_defaults[proto.proto.app_protocol].isClearTextProto)) return(0); @@ -3442,28 +3542,48 @@ int ndpi_snprintf(char * str, size_t size, char const * format, ...) { /* ******************************************* */ +static int risk_infos_pair_cmp (const void *_a, const void *_b) +{ + struct ndpi_risk_information *a = (struct ndpi_risk_information *)_a; + struct ndpi_risk_information *b = (struct ndpi_risk_information *)_b; + + return b->id - a->id; +} + +/* ******************************************* */ + char* ndpi_get_flow_risk_info(struct ndpi_flow_struct *flow, char *out, u_int out_len, u_int8_t use_json) { u_int i, offset = 0; + struct ndpi_risk_information *ordered_risk_infos; if((out == NULL) || (flow == NULL) || (flow->num_risk_infos == 0)) return(NULL); + /* Ordered list of flow risk infos */ + ordered_risk_infos = ndpi_malloc(sizeof(flow->risk_infos)); + if(!ordered_risk_infos) + return(NULL); + memcpy(ordered_risk_infos, flow->risk_infos, sizeof(flow->risk_infos)); + qsort(ordered_risk_infos, flow->num_risk_infos, sizeof(struct ndpi_risk_information), risk_infos_pair_cmp); + if(use_json) { ndpi_serializer serializer; u_int32_t buffer_len; char *buffer; - if(ndpi_init_serializer(&serializer, ndpi_serialization_format_json) == -1) + if(ndpi_init_serializer(&serializer, ndpi_serialization_format_json) == -1) { + ndpi_free(ordered_risk_infos); return(NULL); + } for(i=0; i<flow->num_risk_infos; i++) ndpi_serialize_uint32_string(&serializer, - flow->risk_infos[i].id, - flow->risk_infos[i].info); + ordered_risk_infos[i].id, + ordered_risk_infos[i].info); buffer = ndpi_serializer_get_buffer(&serializer, &buffer_len); @@ -3476,6 +3596,7 @@ char* ndpi_get_flow_risk_info(struct ndpi_flow_struct *flow, ndpi_term_serializer(&serializer); + ndpi_free(ordered_risk_infos); return(out); } else { out[0] = '\0', out_len--; @@ -3483,7 +3604,7 @@ char* ndpi_get_flow_risk_info(struct ndpi_flow_struct *flow, for(i=0; (i<flow->num_risk_infos) && (out_len > offset); i++) { int rc = snprintf(&out[offset], out_len-offset, "%s%s", (i == 0) ? "" : " / ", - flow->risk_infos[i].info); + ordered_risk_infos[i].info); if(rc <= 0) break; @@ -3495,6 +3616,7 @@ char* ndpi_get_flow_risk_info(struct ndpi_flow_struct *flow, out[offset] = '\0'; + ndpi_free(ordered_risk_infos); return(out[0] == '\0' ? NULL : out); } } @@ -3744,7 +3866,7 @@ const char *ndpi_lru_cache_idx_to_name(lru_cache_type idx) { const char *names[NDPI_LRUCACHE_MAX] = { "ookla", "bittorrent", "stun", "tls_cert", "mining", "msteams", - "fpc_dns" }; + "fpc_dns", "signal" }; if(idx < 0 || idx >= NDPI_LRUCACHE_MAX) return "unknown"; @@ -4093,14 +4215,16 @@ char* ndpi_quick_decrypt(const char *encrypted_msg, /* ************************************************************** */ -const char* ndpi_print_os_hint(u_int8_t os_hint) { +const char* ndpi_print_os_hint(ndpi_os os_hint) { switch(os_hint) { - case os_hint_windows: return("Windows"); - case os_hint_macos: return("macOS"); - case os_hint_ios_ipad_os: return("iOS/iPad"); - case os_hint_android: return("Android"); - case os_hint_linux: return("Linux"); - case os_hint_freebsd: return("FreeBSD"); + case ndpi_os_windows: return("Windows"); + case ndpi_os_macos: return("macOS"); + case ndpi_os_ios_ipad_os: return("iOS/iPad"); + case ndpi_os_android: return("Android"); + case ndpi_os_linux: return("Linux"); + case ndpi_os_freebsd: return("FreeBSD"); + default: + break; } return("Unknown"); @@ -4140,3 +4264,235 @@ char *ndpi_strip_leading_trailing_spaces(char *ptr, int *ptr_len) { return ptr; } + +/* ************************************************************** */ + +ndpi_protocol_qoe_category_t ndpi_find_protocol_qoe(struct ndpi_detection_module_struct *ndpi_str, + u_int16_t protoId) { + if(!ndpi_is_valid_protoId(ndpi_str, protoId)) + return(NDPI_PROTOCOL_QOE_CATEGORY_UNSPECIFIED); + else + return(ndpi_str->proto_defaults[protoId].qoeCategory); +} + +/* ************************************************************** */ + +/* https://gitlab.com/wireshark/wireshark/-/blob/master/epan/dissectors/packet-rtp.c */ +const char* ndpi_rtp_payload_type2str(u_int8_t payload_type, u_int32_t evs_payload_type) { + switch(payload_type) { + case 0: return("ITU-T G.711 PCMU"); + case 1: return("USA Federal Standard FS-1016"); + case 2: return("ITU-T G.721"); + case 3: return("GSM 06.10"); + case 4: return("ITU-T G.723"); + case 5: return("DVI4 8000 samples/s"); + case 6: return("DVI4 16000 samples/s"); + case 8: return("ITU-T G.711 PCMA"); + case 9: return("ITU-T G.722"); + case 10: return("16-bit uncompressed audio, stereo"); + case 11: return("16-bit uncompressed audio, monaural"); + case 12: return("Qualcomm Code Excited Linear Predictive coding"); + case 13: return("Comfort noise"); + case 14: return("MPEG-I/II Audio"); + case 15: return("ITU-T G.728"); + case 16: return("DVI4 11025 samples/s"); + case 17: return("DVI4 22050 samples/s"); + case 18: return("ITU-T G.729"); + case 19: return("Comfort noise (old)"); + case 25: return("Sun CellB video encoding"); + case 26: return("JPEG-compressed video"); + case 28: return("'nv' program"); + case 31: return("ITU-T H.261"); + case 32: return("MPEG-I/II Video"); + case 33: return("MPEG-II transport streams"); + case 34: return("ITU-T H.263"); + case 98: return("AMR-WB"); + case 118: return("AMR"); /* Adptive Multirate */ + case 126: /* Enhanced Voice Services */ + case 127: /* Enhanced Voice Services */ + { + switch(evs_payload_type) { + /* https://gitlab.com/wireshark/wireshark/-/blob/master/epan/dissectors/packet-evs.c */ + + case 0x0: return("AMR-WB IO 6.6 kbps"); + case 0x1: return("AMR-WB IO 8.85 kbps"); + case 0x2: return("AMR-WB IO 12.65 kbps"); + case 0x3: return("AMR-WB IO 14.24 kbps"); + case 0x4: return("AMR-WB IO 15.85 kbps"); + case 0x5: return("AMR-WB IO 18.25 kbps"); + case 0x6: return("AMR-WB IO 19.85 kbps"); + case 0x7: return("AMR-WB IO 23.05 kbps"); + case 0x8: return("AMR-WB IO 23.85 kbps"); + case 0x9: return("AMR-WB IO 2.0 kbps SID"); + + /* ** */ + /* Dummy SWB 30 offset */ + case 0x3+30: return("SWB 9.6 kbps"); + case 0x4+30: return("SWB 13.2 kbps"); + case 0x5+30: return("SWB 16.4 kbps"); + case 0x6+30: return("SWB 24.4 kbps"); + case 0x7+30: return("SWB 32 kbps"); + case 0x8+30: return("SWB 48 kbps"); + case 0x9+30: return("SWB 64 kbps"); + case 0xa+30: return("SWB 96 kbps"); + case 0xb+30: return("SWB 128 kbps"); + + + case 48: return("EVS Primary SID 2.4"); + case 136: return("EVS AMR-WB IO 6.6"); + case 144: return("EVS Primary 7.2"); + case 160: return("EVS Primary 8.0"); + case 184: return("EVS AMR-WB IO 8.85"); + case 192: return("EVS Primary 9.6"); + case 256: return("EVS AMR-WB IO 12.65"); + case 264: return("EVS Primary 13.2"); + case 288: return("EVS AMR-WB IO 14.25"); + case 320: return("EVS AMR-WB IO 15.85"); + case 328: return("EVS Primary 16.4"); + case 368: return("EVS AMR-WB IO 18.25"); + case 400: return("EVS AMR-WB IO 19.85"); + case 464: return("EVS AMR-WB IO 23.05"); + case 480: return("EVS AMR-WB IO 23.85"); + case 488: return("EVS Primary 24.4"); + case 640: return("EVS Primary 32.0"); + case 960: return("EVS Primary 48.0"); + case 1280: return("EVS Primary 64.0"); + case 1920: return("EVS Primary 96.0"); + case 2560: return("EVS Primary 128.0"); + default: return("EVS 13.2"); + } + } + break; + default: return("Unknown"); + } +} + +/* ************************************************************** */ + +u_char* ndpi_str_to_utf8(u_char *in, u_int in_len, u_char *out, u_int out_len) { + if(out_len < ((in_len*2)+1)) { + out[0] = '\0'; + } else { + u_int i = 0, j = 0; + + while((i < in_len) && (in[i] != '\0')) { + if(in[i] < 0x80) { + out[j] = in[i]; + i++, j++; + } else { + out[j] = 0xC0 +(in[i] >> 6); + j++; + out[j] = 0x80 | (in[i] & 0x3F); + i++, j++; + } + } + + out[j] = '\0'; + } + + return(out); +} + +/* ************************************************************** */ + +/* + The function below checks whether the specified protocol is a + "real" master protocol or not, meaning that the protocol cannot + be encapsulated on another nDPI protocol. +*/ +bool ndpi_is_master_only_protocol(struct ndpi_detection_module_struct *ndpi_str, + u_int16_t proto_id) { + if(!ndpi_is_valid_protoId(ndpi_str, proto_id)) + return(false); + else + return(ndpi_str->proto_defaults[proto_id].isAppProtocol ? false : true); +} + +/* ************************************************************** */ + +bool ndpi_normalize_protocol(struct ndpi_detection_module_struct *ndpi_str, + ndpi_master_app_protocol *proto) { + /* Move app to master when not an application protocol */ + if((proto->master_protocol == NDPI_PROTOCOL_UNKNOWN) + && (proto->app_protocol != NDPI_PROTOCOL_UNKNOWN)) { + if(ndpi_is_master_only_protocol(ndpi_str, proto->app_protocol)) { + proto->master_protocol = proto->app_protocol; + proto->app_protocol = NDPI_PROTOCOL_UNKNOWN; + return(true); + } else { + #ifdef DEBUG + NDPI_LOG_ERR(ndpi_str, "INTERNAL ERROR: unexpected protocol combination %u.%u/%s", + proto->master_protocol, proto->app_protocol, + ndpi_get_proto_name(ndpi_str, proto)); + #endif + } + } + + /* Remove duplicate protocols */ + if((proto->master_protocol != NDPI_PROTOCOL_UNKNOWN) + && (proto->master_protocol == proto->app_protocol)) { + if(ndpi_is_master_only_protocol(ndpi_str, proto->app_protocol)) { + proto->master_protocol = proto->app_protocol; + proto->app_protocol = NDPI_PROTOCOL_UNKNOWN; + return(true); + } else { + proto->master_protocol = NDPI_PROTOCOL_UNKNOWN; + return(true); + } + } + + return(false); +} + + + +int ndpi_bitmask_alloc(struct ndpi_bitmask *b, u_int16_t max_bits) +{ + if(!b) + return -1; + b->fds = ndpi_calloc(howmanybits(max_bits, sizeof(ndpi_ndpi_mask)), sizeof(ndpi_ndpi_mask)); + if(!b->fds) + return -1; + b->max_bits = max_bits; + b->num_fds = howmanybits(max_bits, sizeof(ndpi_ndpi_mask)); + return 0; +} + +void ndpi_bitmask_free(struct ndpi_bitmask *b) +{ + if(b) { + ndpi_free(b->fds); + b->num_fds = 0; + } +} + +void ndpi_bitmask_set(struct ndpi_bitmask *b, u_int16_t bit) +{ + if(b && b->fds && bit < b->max_bits) + b->fds[bit / 32] |= (1ul << (bit % 32)); +} + +void ndpi_bitmask_clear(struct ndpi_bitmask *b, u_int16_t bit) +{ + if(b && b->fds && bit < b->max_bits) + b->fds[bit / 32] &= ~(1ul << (bit % 32)); +} + +int ndpi_bitmask_is_set(const struct ndpi_bitmask *b, u_int16_t bit) +{ + if(b && b->fds && bit < b->max_bits) + return b->fds[bit / 32] & (1ul << (bit % 32)); + return -1; +} + +void ndpi_bitmask_set_all(struct ndpi_bitmask *b) +{ + if(b && b->fds) + memset(b->fds, 0xFF, b->num_fds * sizeof(ndpi_ndpi_mask)); +} + +void ndpi_bitmask_reset(struct ndpi_bitmask *b) +{ + if(b && b->fds) + memset(b->fds, 0x00, b->num_fds * sizeof(ndpi_ndpi_mask)); +} diff --git a/src/lib/protocols/activision.c b/src/lib/protocols/activision.c index ac24ee80f..42503966a 100644 --- a/src/lib/protocols/activision.c +++ b/src/lib/protocols/activision.c @@ -45,7 +45,7 @@ static void ndpi_search_activision(struct ndpi_detection_module_struct *ndpi_str if (packet->payload_packet_len < 18) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -55,20 +55,20 @@ static void ndpi_search_activision(struct ndpi_detection_module_struct *ndpi_str { if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x0c02) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } else { if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x0d02) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } if (packet->payload_packet_len < 29) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -81,13 +81,13 @@ static void ndpi_search_activision(struct ndpi_detection_module_struct *ndpi_str } else if (packet->packet_direction == 0) { if (packet->payload[0] != 0x29) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } else if (packet->packet_direction == 1) { if (packet->payload[0] != 0x28) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -98,16 +98,10 @@ static void ndpi_search_activision(struct ndpi_detection_module_struct *ndpi_str } } -void init_activision_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_activision_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Activision", ndpi_struct, *id, - NDPI_PROTOCOL_ACTIVISION, - ndpi_search_activision, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Activision", ndpi_struct, + ndpi_search_activision, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ACTIVISION); } diff --git a/src/lib/protocols/afp.c b/src/lib/protocols/afp.c index 73d623457..4560ac71a 100644 --- a/src/lib/protocols/afp.c +++ b/src/lib/protocols/afp.c @@ -2,7 +2,7 @@ * afp.c * * Copyright (C) 2009-11 by ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -58,7 +58,7 @@ static void ndpi_search_afp(struct ndpi_detection_module_struct *ndpi_struct, st as they are not an indication that this flow is not AFP */ if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -72,18 +72,15 @@ static void ndpi_search_afp(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_afp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("AFP", ndpi_struct, *id, - NDPI_PROTOCOL_AFP, - ndpi_search_afp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("AFP", ndpi_struct, + ndpi_search_afp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_AFP); } diff --git a/src/lib/protocols/ajp.c b/src/lib/protocols/ajp.c index 4d8768890..9d1db7485 100644 --- a/src/lib/protocols/ajp.c +++ b/src/lib/protocols/ajp.c @@ -72,7 +72,7 @@ static void ndpi_check_ajp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_packet_struct *packet = &ndpi_struct->packet; if (packet->payload_packet_len < sizeof(ajp_hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -89,7 +89,7 @@ static void ndpi_check_ajp(struct ndpi_detection_module_struct *ndpi_struct, } else { NDPI_LOG_DBG(ndpi_struct, "Invalid AJP request type"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } else if (ajp_hdr.len > 0 && ajp_hdr.magic == AJP_CONTAINER_TO_SERVER) { if (ajp_hdr.code == AJP_SEND_BODY_CHUNK || ajp_hdr.code == AJP_SEND_HEADERS @@ -100,11 +100,11 @@ static void ndpi_check_ajp(struct ndpi_detection_module_struct *ndpi_struct, } else { NDPI_LOG_DBG(ndpi_struct, "Invalid AJP response type"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } else { NDPI_LOG_DBG(ndpi_struct,"Invalid AJP packet\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } @@ -120,14 +120,10 @@ static void ndpi_search_ajp(struct ndpi_detection_module_struct *ndpi_struct, /* ********************************* */ -void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ajp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("AJP", ndpi_struct, - *id, NDPI_PROTOCOL_AJP, ndpi_search_ajp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("AJP", ndpi_struct, + ndpi_search_ajp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_AJP); } diff --git a/src/lib/protocols/alicloud.c b/src/lib/protocols/alicloud.c index 9ec87f3ec..7c4cb8ce1 100644 --- a/src/lib/protocols/alicloud.c +++ b/src/lib/protocols/alicloud.c @@ -44,7 +44,7 @@ static void ndpi_search_alicloud(struct ndpi_detection_module_struct *ndpi_struc if (packet->payload_packet_len < 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -64,20 +64,14 @@ static void ndpi_search_alicloud(struct ndpi_detection_module_struct *ndpi_struc if (flow->packet_counter > 3) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_alicloud_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_alicloud_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("AliCloud", ndpi_struct, *id, - NDPI_PROTOCOL_ALICLOUD, - ndpi_search_alicloud, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("AliCloud", ndpi_struct, + ndpi_search_alicloud, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ALICLOUD); } diff --git a/src/lib/protocols/amazon_video.c b/src/lib/protocols/amazon_video.c index bbb446eb3..1e6ce8f82 100644 --- a/src/lib/protocols/amazon_video.c +++ b/src/lib/protocols/amazon_video.c @@ -54,7 +54,7 @@ static void ndpi_check_amazon_video(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_amazon_video(struct ndpi_detection_module_struct *ndpi_struct, @@ -65,13 +65,9 @@ static void ndpi_search_amazon_video(struct ndpi_detection_module_struct *ndpi_s } -void init_amazon_video_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("AMAZON_VIDEO", ndpi_struct, *id, - NDPI_PROTOCOL_AMAZON_VIDEO, - ndpi_search_amazon_video, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_amazon_video_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("AMAZON_VIDEO", ndpi_struct, + ndpi_search_amazon_video, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_AMAZON_VIDEO); } diff --git a/src/lib/protocols/among_us.c b/src/lib/protocols/among_us.c index 9cc90ac38..5c0707a68 100644 --- a/src/lib/protocols/among_us.c +++ b/src/lib/protocols/among_us.c @@ -43,16 +43,15 @@ static void ndpi_search_among_us(struct ndpi_detection_module_struct *ndpi_struc { ndpi_int_among_us_add_connection(ndpi_struct, flow); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_among_us_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_among_us_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection( - "AmongUs", ndpi_struct, *id, - NDPI_PROTOCOL_AMONG_US, ndpi_search_among_us, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("AmongUs", ndpi_struct, + ndpi_search_among_us, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_AMONG_US); } diff --git a/src/lib/protocols/amqp.c b/src/lib/protocols/amqp.c index ce0397e70..299579975 100644 --- a/src/lib/protocols/amqp.c +++ b/src/lib/protocols/amqp.c @@ -1,7 +1,7 @@ /* * amqp.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -69,18 +69,14 @@ static void ndpi_search_amqp(struct ndpi_detection_module_struct *ndpi_struct, s } if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_amqp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("AMQP", ndpi_struct, *id, - NDPI_PROTOCOL_AMQP, - ndpi_search_amqp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_amqp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("AMQP", ndpi_struct, + ndpi_search_amqp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_AMQP); } diff --git a/src/lib/protocols/apple_push.c b/src/lib/protocols/apple_push.c index 6cc233f61..0df85e580 100644 --- a/src/lib/protocols/apple_push.c +++ b/src/lib/protocols/apple_push.c @@ -83,7 +83,7 @@ static void ndpi_check_apple_push(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_apple_push(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -94,14 +94,11 @@ static void ndpi_search_apple_push(struct ndpi_detection_module_struct *ndpi_str } -void init_apple_push_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_apple_push_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("APPLE_PUSH", ndpi_struct, *id, - NDPI_PROTOCOL_APPLE_PUSH, - ndpi_search_apple_push, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("APPLE_PUSH", ndpi_struct, + ndpi_search_apple_push, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_APPLE_PUSH); } diff --git a/src/lib/protocols/armagetron.c b/src/lib/protocols/armagetron.c index d9cdd1b20..33c4fec2f 100644 --- a/src/lib/protocols/armagetron.c +++ b/src/lib/protocols/armagetron.c @@ -2,7 +2,7 @@ * armagetron.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -42,69 +42,39 @@ static void ndpi_search_armagetron_udp(struct ndpi_detection_module_struct *ndpi NDPI_LOG_DBG(ndpi_struct, "search armagetron\n"); - if (packet->payload_packet_len > 10) { + if (packet->payload_packet_len >= 8) { /* login request */ if (get_u_int32_t(packet->payload, 0) == htonl(0x000b0000)) { const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); - if (dataLength == 0 || dataLength * 2 + 8 != packet->payload_packet_len) - goto exclude; - if (get_u_int16_t(packet->payload, 6) == htons(0x0008) - && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { + if (dataLength * 2 + 8 == packet->payload_packet_len && + get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); ndpi_int_armagetron_add_connection(ndpi_struct, flow); return; } } - /* sync_msg */ - if (packet->payload_packet_len == 16 && get_u_int16_t(packet->payload, 0) == htons(0x001c) - && get_u_int16_t(packet->payload, 2) != 0) { + /* big_server/big_request */ + if (get_u_int32_t(packet->payload, 0) == htonl(0x00330000) || + get_u_int32_t(packet->payload, 0) == htonl(0x00350000)) { const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); - if (dataLength != 4) - goto exclude; - if (get_u_int32_t(packet->payload, 6) == htonl(0x00000500) && get_u_int32_t(packet->payload, 6 + 4) == htonl(0x00010000) - && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { + if (dataLength * 2 + 8 == packet->payload_packet_len && + get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); ndpi_int_armagetron_add_connection(ndpi_struct, flow); return; } } - - /* net_sync combination */ - if (packet->payload_packet_len > 50 && get_u_int16_t(packet->payload, 0) == htons(0x0018) - && get_u_int16_t(packet->payload, 2) != 0) { - u_int16_t val; - const u_int16_t dataLength = ntohs(get_u_int16_t(packet->payload, 4)); - if (dataLength == 0 || dataLength * 2 + 8 > packet->payload_packet_len) - goto exclude; - val = get_u_int16_t(packet->payload, 6 + 2); - if (val == get_u_int16_t(packet->payload, 6 + 6)) { - val = ntohs(get_u_int16_t(packet->payload, 6 + 8)); - if ((6 + 10 + val + 4) < packet->payload_packet_len - && (get_u_int32_t(packet->payload, 6 + 10 + val) == htonl(0x00010000) - || get_u_int32_t(packet->payload, 6 + 10 + val) == htonl(0x00000001)) - && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found armagetron\n"); - ndpi_int_armagetron_add_connection(ndpi_struct, flow); - return; - } - } - } } - exclude: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_armagetron_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_armagetron_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Armagetron", ndpi_struct, *id, - NDPI_PROTOCOL_ARMAGETRON, - ndpi_search_armagetron_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Armagetron", ndpi_struct, + ndpi_search_armagetron_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ARMAGETRON); } diff --git a/src/lib/protocols/atg.c b/src/lib/protocols/atg.c index cc25a70ce..5dd30aa28 100644 --- a/src/lib/protocols/atg.c +++ b/src/lib/protocols/atg.c @@ -52,16 +52,12 @@ static void ndpi_search_atg(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_atg_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("ATG", ndpi_struct, *id, - NDPI_PROTOCOL_ATG, - ndpi_search_atg, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_atg_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("ATG", ndpi_struct, + ndpi_search_atg, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ATG); } diff --git a/src/lib/protocols/avast.c b/src/lib/protocols/avast.c index 388538dea..d7ead6892 100644 --- a/src/lib/protocols/avast.c +++ b/src/lib/protocols/avast.c @@ -39,7 +39,7 @@ static void ndpi_search_avast(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 6) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -50,18 +50,13 @@ static void ndpi_search_avast(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_avast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_avast_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("AVAST", - ndpi_struct, *id, - NDPI_PROTOCOL_AVAST, - ndpi_search_avast, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("AVAST", ndpi_struct, + ndpi_search_avast, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_AVAST); } diff --git a/src/lib/protocols/avast_securedns.c b/src/lib/protocols/avast_securedns.c index c42a39736..d5d850457 100644 --- a/src/lib/protocols/avast_securedns.c +++ b/src/lib/protocols/avast_securedns.c @@ -41,7 +41,7 @@ static void ndpi_search_avast_securedns(struct ndpi_detection_module_struct *ndp ntohl(get_u_int32_t(packet->payload, 11)) != 0x00013209 || flow->packet_counter > 1) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -51,18 +51,13 @@ static void ndpi_search_avast_securedns(struct ndpi_detection_module_struct *ndp return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_avast_securedns_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_avast_securedns_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("AVAST SecureDNS", - ndpi_struct, *id, - NDPI_PROTOCOL_AVAST_SECUREDNS, - ndpi_search_avast_securedns, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("AVAST SecureDNS", ndpi_struct, + ndpi_search_avast_securedns, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_AVAST_SECUREDNS); } diff --git a/src/lib/protocols/bacnet.c b/src/lib/protocols/bacnet.c index b79455d1e..df0ebcc66 100644 --- a/src/lib/protocols/bacnet.c +++ b/src/lib/protocols/bacnet.c @@ -60,25 +60,25 @@ static void ndpi_search_bacnet(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < sizeof(*bvlc)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (bvlc->type != 0x81) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (bvlc->function > 0x0b) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (ntohs(bvlc->length) != packet->payload_packet_len) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -87,16 +87,10 @@ static void ndpi_search_bacnet(struct ndpi_detection_module_struct *ndpi_struct, /* ***************************************************** */ -void init_bacnet_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_bacnet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BACnet", ndpi_struct, *id, - NDPI_PROTOCOL_BACNET, - ndpi_search_bacnet, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("BACnet", ndpi_struct, + ndpi_search_bacnet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_BACNET); } diff --git a/src/lib/protocols/beckhoff_ads.c b/src/lib/protocols/beckhoff_ads.c index b976b873d..c6fa4ce52 100644 --- a/src/lib/protocols/beckhoff_ads.c +++ b/src/lib/protocols/beckhoff_ads.c @@ -109,17 +109,13 @@ static void ndpi_search_beckhoff_ads(struct ndpi_detection_module_struct *ndpi_s } not_beckhoff_ads: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_beckhoff_ads_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_beckhoff_ads_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BeckhoffADS", ndpi_struct, *id, - NDPI_PROTOCOL_BECKHOFF_ADS, - ndpi_search_beckhoff_ads, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("BeckhoffADS", ndpi_struct, + ndpi_search_beckhoff_ads, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BECKHOFF_ADS); } diff --git a/src/lib/protocols/bfcp.c b/src/lib/protocols/bfcp.c index b2bd52bdb..8e7917b28 100644 --- a/src/lib/protocols/bfcp.c +++ b/src/lib/protocols/bfcp.c @@ -43,43 +43,44 @@ static void ndpi_search_bfcp(struct ndpi_detection_module_struct *ndpi_struct, } u_int8_t version = (packet->payload[0] >> 5) & 0x07; - u_int8_t reserved = (packet->payload[0] >> 3) & 0x01; + u_int8_t reserved = (packet->payload[0] & 0x03); - if (version != 1 || reserved != 0) { + /* RFC4582: 1 + RFC8855: 1 on TCP, 2 on UDP */ + if (!(version == 1 || + (version == 2 && flow->l4_proto == IPPROTO_UDP))) { + goto not_bfcp; + } + if (reserved != 0) { goto not_bfcp; } u_int8_t primitive = packet->payload[1]; - if (primitive < 1 || primitive > 17) { + if (primitive < 1 || primitive > 18) { goto not_bfcp; } - u_int32_t conference_id = ntohl(get_u_int32_t(packet->payload, 4)); - if (!flow->bfcp_stage) { - flow->bfcp_conference_id = conference_id; - flow->bfcp_stage = 1; - return; + u_int16_t length = ntohs(get_u_int16_t(packet->payload, 2)); + if (12 + length * 4 != packet->payload_packet_len) { + goto not_bfcp; } - if (flow->bfcp_stage && flow->bfcp_conference_id == conference_id) { - NDPI_LOG_INFO(ndpi_struct, "found BFCP\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BFCP, - NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - return; - } + NDPI_LOG_INFO(ndpi_struct, "found BFCP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BFCP, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + + flow->protos.bfcp.conference_id = ntohl(get_u_int32_t(packet->payload, 4)); + flow->protos.bfcp.user_id = ntohs(get_u_int16_t(packet->payload, 10)); + return; not_bfcp: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_bfcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_bfcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BFCP", ndpi_struct, *id, - NDPI_PROTOCOL_BFCP, - ndpi_search_bfcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("BFCP", ndpi_struct, + ndpi_search_bfcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BFCP); } diff --git a/src/lib/protocols/bfd.c b/src/lib/protocols/bfd.c index eb7eb82e9..23b738c63 100644 --- a/src/lib/protocols/bfd.c +++ b/src/lib/protocols/bfd.c @@ -66,17 +66,12 @@ static void ndpi_search_bfd(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_bfd_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_bfd_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BFD", ndpi_struct, *id, - NDPI_PROTOCOL_BFD, - ndpi_search_bfd, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("BFD", ndpi_struct, + ndpi_search_bfd, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_BFD); } diff --git a/src/lib/protocols/bgp.c b/src/lib/protocols/bgp.c index 956eef48d..ac0440053 100644 --- a/src/lib/protocols/bgp.c +++ b/src/lib/protocols/bgp.c @@ -51,18 +51,15 @@ static void ndpi_search_bgp(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_bgp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_bgp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BGP", ndpi_struct, *id, - NDPI_PROTOCOL_BGP, - ndpi_search_bgp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("BGP", ndpi_struct, + ndpi_search_bgp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BGP); } diff --git a/src/lib/protocols/bitcoin.c b/src/lib/protocols/bitcoin.c index e7ac4cffb..5f473d54a 100644 --- a/src/lib/protocols/bitcoin.c +++ b/src/lib/protocols/bitcoin.c @@ -52,21 +52,16 @@ static void ndpi_search_bitcoin(struct ndpi_detection_module_struct *ndpi_struct } } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************************** */ -void init_bitcoin_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_bitcoin_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Bitcoin", ndpi_struct, *id, - NDPI_PROTOCOL_BITCOIN, - ndpi_search_bitcoin, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Bitcoin", ndpi_struct, + ndpi_search_bitcoin, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BITCOIN); } diff --git a/src/lib/protocols/bittorrent.c b/src/lib/protocols/bittorrent.c index 01080906f..6c77e29ef 100644 --- a/src/lib/protocols/bittorrent.c +++ b/src/lib/protocols/bittorrent.c @@ -2,7 +2,7 @@ * bittorrent.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-24 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -184,13 +184,15 @@ static void ndpi_add_connection_as_bittorrent(struct ndpi_detection_module_struc struct ndpi_flow_struct *flow, int bt_offset, int check_hash, ndpi_confidence_t confidence) { - if(check_hash) + if(ndpi_struct->cfg.bittorrent_hash_enabled && + check_hash) ndpi_search_bittorrent_hash(ndpi_struct, flow, bt_offset); ndpi_set_detected_protocol_keeping_master(ndpi_struct, flow, NDPI_PROTOCOL_BITTORRENT, confidence); - if(flow->protos.bittorrent.hash[0] == '\0') { + if(ndpi_struct->cfg.bittorrent_hash_enabled && + flow->protos.bittorrent.hash[0] == '\0') { /* Don't use just 1 as in TCP DNS more packets could be returned (e.g. ACK). */ flow->max_extra_packets_to_check = 3; flow->extra_packets_func = search_bittorrent_again; @@ -511,10 +513,12 @@ static u_int8_t is_port(u_int16_t a, u_int16_t b, u_int16_t what) { static void ndpi_skip_bittorrent(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_BITTORRENT) + return; if(search_into_bittorrent_cache(ndpi_struct, flow)) ndpi_add_connection_as_bittorrent(ndpi_struct, flow, -1, 0, NDPI_CONFIDENCE_DPI_CACHE); else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************* */ @@ -537,7 +541,7 @@ static void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_str if(is_port(sport, dport, 3544) /* teredo */ || is_port(sport, dport, 5246) || is_port(sport, dport, 5247) /* CAPWAP */) { exclude_bt: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -649,14 +653,10 @@ static void ndpi_search_bittorrent(struct ndpi_detection_module_struct *ndpi_str /* ************************************* */ -void init_bittorrent_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_bittorrent_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BitTorrent", ndpi_struct, *id, - NDPI_PROTOCOL_BITTORRENT, - ndpi_search_bittorrent, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("BitTorrent", ndpi_struct, + ndpi_search_bittorrent, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BITTORRENT); } diff --git a/src/lib/protocols/bjnp.c b/src/lib/protocols/bjnp.c index 91277ecda..e16ffd023 100644 --- a/src/lib/protocols/bjnp.c +++ b/src/lib/protocols/bjnp.c @@ -29,7 +29,7 @@ static void ndpi_check_bjnp(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_bjnp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -40,13 +40,10 @@ static void ndpi_search_bjnp(struct ndpi_detection_module_struct *ndpi_struct, s } -void init_bjnp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_bjnp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("BJNP", ndpi_struct, *id, - NDPI_PROTOCOL_BJNP, - ndpi_search_bjnp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("BJNP", ndpi_struct, + ndpi_search_bjnp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_BJNP); } diff --git a/src/lib/protocols/blizzard.c b/src/lib/protocols/blizzard.c new file mode 100644 index 000000000..af80735a6 --- /dev/null +++ b/src/lib/protocols/blizzard.c @@ -0,0 +1,152 @@ +/* +* blizzard.c +* +* Copyright (C) 2015 - Matteo Bracci <matteobracci1@gmail.com> +* Copyright (C) 2015-22 - 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_BLIZZARD + +#include "ndpi_api.h" +#include "ndpi_private.h" + + +static void search_blizzard_tcp(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) +{ + struct ndpi_packet_struct* packet = &ndpi_struct->packet; + char wow_string[] = "WORLD OF WARCRAFT CONNECTION"; + char overwatch2_string_c[] = "HELLO PRO CLIENT\0"; + char overwatch2_string_s[] = "HELLO PRO SERVER\0"; + + NDPI_LOG_DBG(ndpi_struct, "search Blizzard\n"); + + /* Generic Battle.net traffic */ + if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_BLIZZARD && + flow->s_port == htons(1119)) { + /* Looking for the first pkt sent by the server */ + if(current_pkt_from_server_to_client(ndpi_struct, flow) && + packet->payload_packet_len == 2 && + packet->payload[0] == 0x52 && packet->payload[1] == 0x08) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (battle.net)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } else if(flow->packet_direction_counter[packet->packet_direction] == 1) { + return; + } + } + + /* Pattern found on Hearthstone */ + if(packet->payload_packet_len >= 8 && + le32toh(*(uint32_t *)&packet->payload[4]) == (u_int32_t)(packet->payload_packet_len - 8)) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (Hearthstone)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + /* Pattern found on WoW */ + if(packet->payload_packet_len >= NDPI_STATICSTRING_LEN(wow_string) && + memcmp(packet->payload, wow_string, NDPI_STATICSTRING_LEN(wow_string)) == 0) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (wow)\n"); + /* Which id? It should be NDPI_PROTOCOL_BLIZZARD, but we already have NDPI_PROTOCOL_WORLDOFWARCRAFT. + Keep using the latter for the time being.... */ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WORLDOFWARCRAFT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + /* Pattern found on Overwatch2 */ + if((packet->payload_packet_len == NDPI_STATICSTRING_LEN(overwatch2_string_c) && + memcmp(packet->payload, overwatch2_string_c, NDPI_STATICSTRING_LEN(overwatch2_string_c)) == 0) || + (packet->payload_packet_len == NDPI_STATICSTRING_LEN(overwatch2_string_s) && + memcmp(packet->payload, overwatch2_string_s, NDPI_STATICSTRING_LEN(overwatch2_string_s)) == 0)) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (overwatch2)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + /* TODO: other patterns */ + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +static void search_blizzard_udp(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) +{ + struct ndpi_packet_struct* packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Blizzard\n"); + + /* Patterns found on Warcraft Rumble */ + + /* The last bytes are some kind of sequence number, always starting from 1 */ + if(/* First pkt send by the client */ + (packet->payload_packet_len == 18 && + le32toh(*(uint32_t *)&packet->payload[14]) == 1) || + /* First pkt send by the server */ + (packet->payload_packet_len == 15 && + packet->payload[14] == 1)) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (Warcraft Ramble; pattern 1)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + /* First pkt send by the client */ + if(packet->payload_packet_len == 23 && + ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "\xff\xff\xff\xff\xa3\x1f\xb6\x1e\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x00\x04\x03\x02\x01")) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (Warcraft Ramble; pattern 2)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + /* Patterns found on Overwatch2 */ + /* Some kind of ping */ + if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_BLIZZARD && + packet->payload_packet_len == 40 && + *(uint32_t *)&packet->payload[17] == 0 /* Seq number starting from 0 */) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (overwatch2; pattern 1)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + if(flow->guessed_protocol_id_by_ip == NDPI_PROTOCOL_BLIZZARD && + packet->payload_packet_len == 50 && + ((*(uint64_t *)&packet->payload[32] == 0 && *(uint64_t *)&packet->payload[40] == 0) /* First pkt from client */ || + (*(uint64_t *)&packet->payload[0] == 0 && *(uint64_t *)&packet->payload[8] == 0)) /* First pkt from server */) { + NDPI_LOG_INFO(ndpi_struct, "Found Blizzard (overwatch2; pattern 2)\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_BLIZZARD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + + /* TODO: other patterns */ + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +static void ndpi_search_blizzard(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) +{ + if(flow->l4_proto == IPPROTO_TCP) + search_blizzard_tcp(ndpi_struct, flow); + else + search_blizzard_udp(ndpi_struct, flow); +} + +void init_blizzard_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("Blizzard", ndpi_struct, + ndpi_search_blizzard, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_BLIZZARD); +} + diff --git a/src/lib/protocols/btlib.c b/src/lib/protocols/btlib.c index 14ec331b2..9b65ecffb 100644 --- a/src/lib/protocols/btlib.c +++ b/src/lib/protocols/btlib.c @@ -1,7 +1,7 @@ /* * btlib.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Contributed by Vitaly Lavrov <vel21ripn@gmail.com> * * This file is part of nDPI, an open source deep packet inspection diff --git a/src/lib/protocols/c1222.c b/src/lib/protocols/c1222.c index 6247769a8..38fdaa832 100644 --- a/src/lib/protocols/c1222.c +++ b/src/lib/protocols/c1222.c @@ -50,7 +50,7 @@ static void ndpi_search_c1222(struct ndpi_detection_module_struct *ndpi_struct, if ((packet->payload_packet_len < 50) || (packet->payload[0] != 0x60) || ((u_int8_t)(packet->payload_packet_len-2) != packet->payload[1])) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -59,17 +59,13 @@ static void ndpi_search_c1222(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_c1222_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_c1222_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("ANSI_C1222", ndpi_struct, *id, - NDPI_PROTOCOL_C1222, - ndpi_search_c1222, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("ANSI_C1222", ndpi_struct, + ndpi_search_c1222, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_C1222); } diff --git a/src/lib/protocols/can.c b/src/lib/protocols/can.c index fc12866a8..126211807 100644 --- a/src/lib/protocols/can.c +++ b/src/lib/protocols/can.c @@ -54,13 +54,13 @@ static void ndpi_search_can(struct ndpi_detection_module_struct *ndpi_struct, u_int64_t const signature = 0x49534f3131383938; // "ISO11898" if (packet->payload_packet_len < sizeof(struct can_hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } struct can_hdr const * const can_header = (struct can_hdr *)packet->payload; if (ndpi_ntohll(can_header->signature) != signature) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -71,15 +71,10 @@ static void ndpi_search_can(struct ndpi_detection_module_struct *ndpi_struct, } } -void init_can_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_can_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Controller_Area_Network", ndpi_struct, *id, - NDPI_PROTOCOL_CAN, - ndpi_search_can, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Controller_Area_Network", ndpi_struct, + ndpi_search_can, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CAN); } diff --git a/src/lib/protocols/capwap.c b/src/lib/protocols/capwap.c index e42a3b6be..efabad971 100644 --- a/src/lib/protocols/capwap.c +++ b/src/lib/protocols/capwap.c @@ -115,7 +115,7 @@ static void ndpi_search_setup_capwap(struct ndpi_detection_module_struct *ndpi_s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; capwap_found: @@ -131,15 +131,10 @@ static void ndpi_search_capwap(struct ndpi_detection_module_struct *ndpi_struct, } -void init_capwap_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_capwap_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CAPWAP", ndpi_struct, *id, - NDPI_PROTOCOL_CAPWAP, - ndpi_search_capwap, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("CAPWAP", ndpi_struct, + ndpi_search_capwap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CAPWAP); } diff --git a/src/lib/protocols/cassandra.c b/src/lib/protocols/cassandra.c index 7e52dab14..975a8566b 100644 --- a/src/lib/protocols/cassandra.c +++ b/src/lib/protocols/cassandra.c @@ -71,12 +71,12 @@ static void ndpi_search_cassandra(struct ndpi_detection_module_struct *ndpi_stru (!ndpi_validate_cassandra_response(packet->payload[0]) || !ndpi_validate_cassandra_request(packet->payload[0]))) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (flow->packet_direction_counter[packet->packet_direction] > 2) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -92,17 +92,9 @@ static void ndpi_search_cassandra(struct ndpi_detection_module_struct *ndpi_stru } } -void init_cassandra_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - - ndpi_set_bitmask_protocol_detection("Cassandra", - ndpi_struct, - *id, - NDPI_PROTOCOL_CASSANDRA, - ndpi_search_cassandra, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_cassandra_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Cassandra", ndpi_struct, + ndpi_search_cassandra, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CASSANDRA); } diff --git a/src/lib/protocols/ceph.c b/src/lib/protocols/ceph.c index 8c1dc8df6..25d216c43 100644 --- a/src/lib/protocols/ceph.c +++ b/src/lib/protocols/ceph.c @@ -48,16 +48,13 @@ static void ndpi_search_ceph(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ceph_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ceph_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Ceph", ndpi_struct, *id, - NDPI_PROTOCOL_CEPH, - ndpi_search_ceph, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Ceph", ndpi_struct, + ndpi_search_ceph, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CEPH); } diff --git a/src/lib/protocols/checkmk.c b/src/lib/protocols/checkmk.c index cfc70f451..4638d6afd 100644 --- a/src/lib/protocols/checkmk.c +++ b/src/lib/protocols/checkmk.c @@ -1,7 +1,7 @@ /* * checkmk.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -52,7 +52,7 @@ static void ndpi_search_checkmk(struct ndpi_detection_module_struct *ndpi_struct as they are not an indication that this flow is not AFP */ if(flow->packet_counter > 6) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -69,19 +69,14 @@ static void ndpi_search_checkmk(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_LOG_DBG(ndpi_struct, "Check_MK excluded.\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_CHECKMK); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_checkmk_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_checkmk_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CHECKMK", ndpi_struct, *id, - NDPI_PROTOCOL_CHECKMK, - ndpi_search_checkmk, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("CHECKMK", ndpi_struct, + ndpi_search_checkmk, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CHECKMK); } diff --git a/src/lib/protocols/cip.c b/src/lib/protocols/cip.c index f9412b809..21dba3efe 100644 --- a/src/lib/protocols/cip.c +++ b/src/lib/protocols/cip.c @@ -59,16 +59,13 @@ static void ndpi_search_cip(struct ndpi_detection_module_struct *ndpi_struct, /* TODO add TCP dissection */ } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_cip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("CIP", ndpi_struct, *id, - NDPI_PROTOCOL_CIP, - ndpi_search_cip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_cip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("CIP", ndpi_struct, + ndpi_search_cip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CIP); } diff --git a/src/lib/protocols/ciscovpn.c b/src/lib/protocols/ciscovpn.c index b8bf8d09b..b584ffe9a 100644 --- a/src/lib/protocols/ciscovpn.c +++ b/src/lib/protocols/ciscovpn.c @@ -59,19 +59,16 @@ static void ndpi_search_ciscovpn(struct ndpi_detection_module_struct *ndpi_struc } if(flow->num_processed_pkts > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ciscovpn_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ciscovpn_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CiscoVPN", ndpi_struct, *id, - NDPI_PROTOCOL_CISCOVPN, - ndpi_search_ciscovpn, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("CiscoVPN", ndpi_struct, + ndpi_search_ciscovpn, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CISCOVPN); } diff --git a/src/lib/protocols/citrix.c b/src/lib/protocols/citrix.c index 0db341f02..f7b9de976 100644 --- a/src/lib/protocols/citrix.c +++ b/src/lib/protocols/citrix.c @@ -55,7 +55,7 @@ static void ndpi_check_citrix(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_citrix(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -66,13 +66,10 @@ static void ndpi_search_citrix(struct ndpi_detection_module_struct *ndpi_struct, } -void init_citrix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_citrix_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Citrix", ndpi_struct, *id, - NDPI_PROTOCOL_CITRIX, - ndpi_search_citrix, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Citrix", ndpi_struct, + ndpi_search_citrix, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CITRIX); } diff --git a/src/lib/protocols/cloudflare_warp.c b/src/lib/protocols/cloudflare_warp.c index af3ab0b85..0dbf00419 100644 --- a/src/lib/protocols/cloudflare_warp.c +++ b/src/lib/protocols/cloudflare_warp.c @@ -79,18 +79,14 @@ static void ndpi_search_cloudflare_warp(struct ndpi_detection_module_struct *ndp } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_cloudflare_warp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_cloudflare_warp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CloudflareWarp", ndpi_struct, *id, - NDPI_PROTOCOL_CLOUDFLARE_WARP, - ndpi_search_cloudflare_warp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("CloudflareWarp", ndpi_struct, + ndpi_search_cloudflare_warp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CLOUDFLARE_WARP); } diff --git a/src/lib/protocols/cnp-ip.c b/src/lib/protocols/cnp-ip.c index 9e3590d40..ef87728ea 100644 --- a/src/lib/protocols/cnp-ip.c +++ b/src/lib/protocols/cnp-ip.c @@ -51,17 +51,13 @@ static void ndpi_search_cnp_ip(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_cnp_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_cnp_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CNP-IP", ndpi_struct, *id, - NDPI_PROTOCOL_CNP_IP, - ndpi_search_cnp_ip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("CNP-IP", ndpi_struct, + ndpi_search_cnp_ip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CNP_IP); } diff --git a/src/lib/protocols/coap.c b/src/lib/protocols/coap.c index bf6e06924..32affa3d4 100644 --- a/src/lib/protocols/coap.c +++ b/src/lib/protocols/coap.c @@ -119,7 +119,7 @@ static void ndpi_search_coap(struct ndpi_detection_module_struct *ndpi_struct, if((!isCoAPport(s_port) && !isCoAPport(d_port)) || (packet->payload_packet_len < 4) ) { // header too short - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -142,21 +142,18 @@ static void ndpi_search_coap(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /** * Entry point for the ndpi library */ -void init_coap_dissector (struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_coap_dissector (struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection ("COAP", ndpi_struct, *id, - NDPI_PROTOCOL_COAP, - ndpi_search_coap, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id +=1; + register_dissector("COAP", ndpi_struct, + ndpi_search_coap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_COAP); } diff --git a/src/lib/protocols/cod_mobile.c b/src/lib/protocols/cod_mobile.c index 97bdca42d..0efa72b11 100644 --- a/src/lib/protocols/cod_mobile.c +++ b/src/lib/protocols/cod_mobile.c @@ -66,18 +66,14 @@ static void ndpi_search_cod_mobile(struct ndpi_detection_module_struct *ndpi_str } if (flow->packet_counter >= 4) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_cod_mobile_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_cod_mobile_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CoD_Mobile", ndpi_struct, *id, - NDPI_PROTOCOL_COD_MOBILE, - ndpi_search_cod_mobile, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("CoD_Mobile", ndpi_struct, + ndpi_search_cod_mobile, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_COD_MOBILE); } diff --git a/src/lib/protocols/collectd.c b/src/lib/protocols/collectd.c index 3c878e9c9..a84a253ff 100644 --- a/src/lib/protocols/collectd.c +++ b/src/lib/protocols/collectd.c @@ -169,7 +169,7 @@ static void ndpi_search_collectd(struct ndpi_detection_module_struct *ndpi_struc block_length < COLLECTD_ENCR_AES256_MIN_BLOCK_SIZE || ndpi_int_collectd_dissect_username(flow, packet) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else { ndpi_int_collectd_add_connection(ndpi_struct, flow); } @@ -180,7 +180,7 @@ static void ndpi_search_collectd(struct ndpi_detection_module_struct *ndpi_struc if (num_blocks < COLLECTD_MIN_BLOCKS_REQUIRED) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -190,16 +190,10 @@ static void ndpi_search_collectd(struct ndpi_detection_module_struct *ndpi_struc ndpi_int_collectd_add_connection(ndpi_struct, flow); } -void init_collectd_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_collectd_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("collectd", ndpi_struct, *id, - NDPI_PROTOCOL_COLLECTD, - ndpi_search_collectd, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("collectd", ndpi_struct, + ndpi_search_collectd, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_COLLECTD); } diff --git a/src/lib/protocols/corba.c b/src/lib/protocols/corba.c index 8aa98babe..1218a38ec 100644 --- a/src/lib/protocols/corba.c +++ b/src/lib/protocols/corba.c @@ -55,17 +55,14 @@ static void ndpi_search_corba(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_corba_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_corba_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Corba", ndpi_struct, *id, - NDPI_PROTOCOL_CORBA, - ndpi_search_corba, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Corba", ndpi_struct, + ndpi_search_corba, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CORBA); } diff --git a/src/lib/protocols/cpha.c b/src/lib/protocols/cpha.c index b2967413f..6b2f1c79f 100644 --- a/src/lib/protocols/cpha.c +++ b/src/lib/protocols/cpha.c @@ -1,7 +1,7 @@ /* * qq.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -48,17 +48,13 @@ static void ndpi_search_cpha(struct ndpi_detection_module_struct *ndpi_struct, s ) { ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CPHA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_cpha_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("CPHA", ndpi_struct, *id, - NDPI_PROTOCOL_CPHA, - ndpi_search_cpha, - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* TODO: ipv6 support? */ - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_cpha_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("CPHA", ndpi_struct, + ndpi_search_cpha, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* TODO: ipv6 support? */ + 1, NDPI_PROTOCOL_CPHA); } diff --git a/src/lib/protocols/crossfire.c b/src/lib/protocols/crossfire.c index e0f462f86..ec7cf0d08 100644 --- a/src/lib/protocols/crossfire.c +++ b/src/lib/protocols/crossfire.c @@ -30,60 +30,48 @@ static void ndpi_int_crossfire_add_connection(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) + struct ndpi_flow_struct *flow) { - + NDPI_LOG_INFO(ndpi_struct, "found CrossFire\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_CROSSFIRE, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } static void ndpi_search_crossfire_tcp_udp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - struct ndpi_packet_struct *packet = &ndpi_struct->packet; + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search CrossFire\n"); - NDPI_LOG_DBG(ndpi_struct, "search crossfire\n"); - if (packet->udp != 0) { - if (packet->payload_packet_len == 25 - && get_u_int32_t(packet->payload, 0) == ntohl(0xc7d91999) - && get_u_int16_t(packet->payload, 4) == ntohs(0x0200) - && get_u_int16_t(packet->payload, 22) == ntohs(0x7d00)) { - NDPI_LOG_INFO(ndpi_struct, "found Crossfire: udp packet\n"); - ndpi_int_crossfire_add_connection(ndpi_struct, flow); - return; - } + if (packet->udp != NULL && packet->payload_packet_len >= 8 && + get_u_int32_t(packet->payload, 0) == ntohl(0xc7d91999)) + { + ndpi_int_crossfire_add_connection(ndpi_struct, flow); + return; + } - } else if (packet->tcp != 0) { - if (packet->payload_packet_len > 4 && memcmp(packet->payload, "GET /", 5) == 0) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - if (packet->parsed_lines == 8 - && (packet->line[0].ptr != NULL && packet->line[0].len >= 30 - && (memcmp(&packet->payload[5], "notice/login_big", 16) == 0 - || memcmp(&packet->payload[5], "notice/login_small", 18) == 0)) - && memcmp(&packet->payload[packet->line[0].len - 19], "/index.asp HTTP/1.", 18) == 0 - && (packet->host_line.ptr != NULL && packet->host_line.len >= 13 - && (memcmp(packet->host_line.ptr, "crossfire", 9) == 0 - || memcmp(packet->host_line.ptr, "www.crossfire", 13) == 0)) - ) { - NDPI_LOG_DBG(ndpi_struct, "found Crossfire: HTTP request\n"); - ndpi_int_crossfire_add_connection(ndpi_struct, flow); - return; - } - } + if (packet->tcp != NULL && packet->payload_packet_len > 100 && + (packet->payload[0] == 0xF1 && packet->payload[packet->payload_packet_len-1] == 0xF2)) + { + /* Login packet */ + if (ntohl(get_u_int32_t(packet->payload, 2)) == 0x01000000) + { + ndpi_int_crossfire_add_connection(ndpi_struct, flow); + return; + } - } + /* TODO: add more CrossFire TCP signatures*/ + } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_crossfire_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_crossfire_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Crossfire", ndpi_struct, *id, - NDPI_PROTOCOL_CROSSFIRE, - ndpi_search_crossfire_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Crossfire", ndpi_struct, + ndpi_search_crossfire_tcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_CROSSFIRE); } diff --git a/src/lib/protocols/crynet.c b/src/lib/protocols/crynet.c index 21cbe7607..3ec918558 100644 --- a/src/lib/protocols/crynet.c +++ b/src/lib/protocols/crynet.c @@ -45,13 +45,13 @@ static void ndpi_search_crynet(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 26) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (packet->payload_packet_len != packet->payload[0] + 10) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -60,23 +60,17 @@ static void ndpi_search_crynet(struct ndpi_detection_module_struct *ndpi_struct, packet->payload[20] != 0x07 || ntohs(get_u_int16_t(packet->payload, 24)) != 0x0307) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ndpi_int_crynet_add_connection(ndpi_struct, flow); } -void init_crynet_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_crynet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CryNetwork", ndpi_struct, *id, - NDPI_PROTOCOL_CRYNET, - ndpi_search_crynet, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("CryNetwork", ndpi_struct, + ndpi_search_crynet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_CRYNET); } diff --git a/src/lib/protocols/dcerpc.c b/src/lib/protocols/dcerpc.c index 838d5f292..b22ddc84e 100644 --- a/src/lib/protocols/dcerpc.c +++ b/src/lib/protocols/dcerpc.c @@ -90,17 +90,14 @@ static void ndpi_search_dcerpc(struct ndpi_detection_module_struct *ndpi_struct, } if(packet->payload_packet_len>1) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_dcerpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dcerpc_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DCERPC", ndpi_struct, *id, - NDPI_PROTOCOL_DCERPC, - ndpi_search_dcerpc, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("DCERPC", ndpi_struct, + ndpi_search_dcerpc, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DCERPC); } diff --git a/src/lib/protocols/dhcp.c b/src/lib/protocols/dhcp.c index 4c400df9a..7074b0503 100644 --- a/src/lib/protocols/dhcp.c +++ b/src/lib/protocols/dhcp.c @@ -127,7 +127,7 @@ static void ndpi_search_dhcp_udp(struct ndpi_detection_module_struct *ndpi_struc #ifdef DHCP_DEBUG NDPI_LOG_DBG2(ndpi_struct, "[DHCP] Invalid message type %d. Not dhcp\n", msg_type); #endif - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -194,18 +194,14 @@ static void ndpi_search_dhcp_udp(struct ndpi_detection_module_struct *ndpi_struc } } } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_dhcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("DHCP", ndpi_struct, *id, - NDPI_PROTOCOL_DHCP, - ndpi_search_dhcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_dhcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("DHCP", ndpi_struct, + ndpi_search_dhcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_DHCP); } diff --git a/src/lib/protocols/dhcpv6.c b/src/lib/protocols/dhcpv6.c index 6afcd7a8c..97704025c 100644 --- a/src/lib/protocols/dhcpv6.c +++ b/src/lib/protocols/dhcpv6.c @@ -2,7 +2,7 @@ * dhcpv6.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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,17 +53,14 @@ static void ndpi_search_dhcpv6_udp(struct ndpi_detection_module_struct *ndpi_str return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_dhcpv6_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dhcpv6_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DHCPV6", ndpi_struct, *id, - NDPI_PROTOCOL_DHCPV6, - ndpi_search_dhcpv6_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("DHCPV6", ndpi_struct, + ndpi_search_dhcpv6_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_DHCPV6); } diff --git a/src/lib/protocols/diameter.c b/src/lib/protocols/diameter.c index 0d9a8382b..8c19387b1 100644 --- a/src/lib/protocols/diameter.c +++ b/src/lib/protocols/diameter.c @@ -101,17 +101,15 @@ static void ndpi_search_diameter(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_diameter_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Diameter", ndpi_struct, *id, - NDPI_PROTOCOL_DIAMETER, ndpi_search_diameter, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Diameter", ndpi_struct, + ndpi_search_diameter, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DIAMETER); } diff --git a/src/lib/protocols/dicom.c b/src/lib/protocols/dicom.c index 18354258f..a32d299c3 100644 --- a/src/lib/protocols/dicom.c +++ b/src/lib/protocols/dicom.c @@ -51,20 +51,16 @@ static void ndpi_search_dicom(struct ndpi_detection_module_struct *ndpi_struct, NDPI_PROTOCOL_DICOM, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ********************************* */ -void init_dicom_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("DICOM", ndpi_struct, - *id, NDPI_PROTOCOL_DICOM, ndpi_search_dicom, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_dicom_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("DICOM", ndpi_struct, + ndpi_search_dicom, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DICOM); } diff --git a/src/lib/protocols/dingtalk.c b/src/lib/protocols/dingtalk.c index 25aea3f99..c42a5adea 100644 --- a/src/lib/protocols/dingtalk.c +++ b/src/lib/protocols/dingtalk.c @@ -48,16 +48,13 @@ static void ndpi_search_dingtalk(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_dingtalk_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dingtalk_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DingTalk", ndpi_struct, *id, - NDPI_PROTOCOL_DINGTALK, - ndpi_search_dingtalk, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("DingTalk", ndpi_struct, + ndpi_search_dingtalk, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DINGTALK); } diff --git a/src/lib/protocols/discord.c b/src/lib/protocols/discord.c index 5256910db..75231e2c6 100644 --- a/src/lib/protocols/discord.c +++ b/src/lib/protocols/discord.c @@ -72,19 +72,13 @@ static void ndpi_search_discord(struct ndpi_detection_module_struct *ndpi_struct } if (flow->packet_counter >= 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_discord_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_discord_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Discord", ndpi_struct, *id, - NDPI_PROTOCOL_DISCORD, - ndpi_search_discord, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Discord", ndpi_struct, + ndpi_search_discord, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_DISCORD); } diff --git a/src/lib/protocols/dlep.c b/src/lib/protocols/dlep.c index dc40d1a09..1ac00870e 100644 --- a/src/lib/protocols/dlep.c +++ b/src/lib/protocols/dlep.c @@ -67,17 +67,13 @@ static void ndpi_search_dlep(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_dlep_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dlep_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DLEP", ndpi_struct, *id, - NDPI_PROTOCOL_DLEP, - ndpi_search_dlep, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("DLEP", ndpi_struct, + ndpi_search_dlep, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DLEP); } diff --git a/src/lib/protocols/dnp3.c b/src/lib/protocols/dnp3.c index 99d23dad7..7472e33cd 100644 --- a/src/lib/protocols/dnp3.c +++ b/src/lib/protocols/dnp3.c @@ -1,7 +1,7 @@ /* * dnp3.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -49,20 +49,16 @@ static void ndpi_search_dnp3_tcp(struct ndpi_detection_module_struct *ndpi_struc return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ******************************************************** */ -void init_dnp3_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - - ndpi_set_bitmask_protocol_detection("DNP3", ndpi_struct, *id, - NDPI_PROTOCOL_DNP3, - ndpi_search_dnp3_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_dnp3_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + + register_dissector("DNP3", ndpi_struct, + ndpi_search_dnp3_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DNP3); } diff --git a/src/lib/protocols/dns.c b/src/lib/protocols/dns.c index ce991735d..59566d5c7 100644 --- a/src/lib/protocols/dns.c +++ b/src/lib/protocols/dns.c @@ -39,8 +39,8 @@ #define PKT_LEN_ALERT 512 -static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow); +static void search_dns(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); /* *********************************************** */ @@ -161,16 +161,13 @@ static u_int getNameLength(u_int i, const u_int8_t *payload, u_int payloadLen) { return(0); else if(payload[i] == 0x00) return(1); - else if(payload[i] == 0xC0) + else if((payload[i] & 0xC0)== 0xC0) return(2); else { u_int8_t len = payload[i]; u_int8_t off = len + 1; - if(off == 0) /* Bad packet */ - return(0); - else - return(off + getNameLength(i+off, payload, payloadLen)); + return(off + getNameLength(i+off, payload, payloadLen)); } } /* @@ -213,6 +210,32 @@ static char* dns_error_code2string(u_int16_t error_code, char *buf, u_int buf_le /* *********************************************** */ +u_int64_t fpc_dns_cache_key_from_flow(struct ndpi_flow_struct *flow) { + u_int64_t key; + + if(flow->is_ipv6) + key = ndpi_quick_hash64((const char *)flow->s_address.v6, 16); + else + key = (u_int64_t)(flow->s_address.v4); + + return key; +} + +/* *********************************************** */ + +static u_int64_t fpc_dns_cache_key_from_packet(const unsigned char *ip, int ip_len) { + u_int64_t key; + + if(ip_len == 16) + key = ndpi_quick_hash64((const char *)ip, 16); + else + key = (u_int64_t)(*(u_int32_t *)ip); + + return key; +} + +/* *********************************************** */ + static u_int8_t ndpi_grab_dns_name(struct ndpi_packet_struct *packet, u_int *off /* payload offset */, char *_hostname, u_int max_len, @@ -226,14 +249,17 @@ static u_int8_t ndpi_grab_dns_name(struct ndpi_packet_struct *packet, while((j < max_len) && ((*off) < packet->payload_packet_len) && (packet->payload[(*off)] != '\0')) { - u_int8_t c, cl = packet->payload[(*off)++]; + u_int8_t c, cl = packet->payload[*off]; if(((cl & 0xc0) != 0) || // we not support compressed names in query - ((*off) + cl >= packet->payload_packet_len)) { + (((*off)+1) + cl >= packet->payload_packet_len)) { + /* Don't update the offset */ j = 0; break; } + (*off)++; + if(j && (j < max_len)) _hostname[j++] = '.'; while((j < max_len) && (cl != 0)) { @@ -272,645 +298,619 @@ static u_int8_t ndpi_grab_dns_name(struct ndpi_packet_struct *packet, /* *********************************************** */ -static int search_valid_dns(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow, - struct ndpi_dns_packet_header *dns_header, - u_int payload_offset, u_int8_t *is_query, - u_int8_t ignore_checks) { +static int process_queries(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + u_int payload_offset) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int x = payload_offset; + u_int16_t rsp_type; + u_int16_t num; - memcpy(dns_header, (struct ndpi_dns_packet_header*)&packet->payload[x], - sizeof(struct ndpi_dns_packet_header)); - - dns_header->tr_id = ntohs(dns_header->tr_id); - dns_header->flags = ntohs(dns_header->flags); - dns_header->num_queries = ntohs(dns_header->num_queries); - dns_header->num_answers = ntohs(dns_header->num_answers); - dns_header->authority_rrs = ntohs(dns_header->authority_rrs); - dns_header->additional_rrs = ntohs(dns_header->additional_rrs); + for(num = 0; num < dns_header->num_queries; num++) { + u_int16_t data_len; - x += sizeof(struct ndpi_dns_packet_header); + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + return -1; + } else + x += data_len; - /* 0x0000 QUERY */ - if((dns_header->flags & FLAGS_MASK) == 0x0000) - *is_query = 1; - /* 0x8000 RESPONSE */ - else - *is_query = 0; + if(data_len > 253) + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Query Lenght"); - if(*is_query) { - /* DNS Request */ - if((dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS) - // && (dns_header->num_answers == 0) - && (((dns_header->flags & 0x2800) == 0x2800 /* Dynamic DNS Update */) - || ((dns_header->flags & 0xFCF0) == 0x00) /* Standard Query */ - || ((dns_header->flags & 0xFCFF) == 0x0800) /* Inverse query */ - || ((dns_header->num_answers == 0) && (dns_header->authority_rrs == 0)))) { - /* This is a good query */ - while(x+2 < packet->payload_packet_len) { - if(packet->payload[x] == '\0') { - x++; - flow->protos.dns.query_type = get16(&x, packet->payload); -#ifdef DNS_DEBUG - NDPI_LOG_DBG2(ndpi_struct, "query_type=%2d\n", flow->protos.dns.query_type); - printf("[DNS] [request] query_type=%d\n", flow->protos.dns.query_type); -#endif - break; - } else - x++; - } - } else { - if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_UNKNOWN) - ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Header"); - return(1 /* invalid */); + if((x+4) > packet->payload_packet_len) { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Query Lenght"); + return -1; } - } else { - /* DNS Reply */ - if(flow->protos.dns.query_type == 0) { - /* In case we missed the query packet... */ + rsp_type = get16(&x, packet->payload); - while(x+2 < packet->payload_packet_len) { - if(packet->payload[x] == '\0') { - x++; - flow->protos.dns.query_type = get16(&x, packet->payload); #ifdef DNS_DEBUG - NDPI_LOG_DBG2(ndpi_struct, "query_type=%2d\n", flow->protos.dns.query_type); - printf("[DNS] [request] query_type=%d\n", flow->protos.dns.query_type); + printf("[DNS] [response (query)] response_type=%d\n", rsp_type); #endif - break; - } else - x++; - } + if(flow->protos.dns.query_type == 0) { + /* In case we missed the query packet... */ + flow->protos.dns.query_type = rsp_type; } - flow->protos.dns.reply_code = dns_header->flags & 0x0F; + /* here x points to the response "class" field */ + x += 2; /* Skip class */ + } - if(flow->protos.dns.reply_code != 0) { - char str[32], buf[16]; + return x; +} - snprintf(str, sizeof(str), "DNS Error Code %s", - dns_error_code2string(flow->protos.dns.reply_code, buf, sizeof(buf))); - ndpi_set_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED, str); - } else { - if(ndpi_isset_risk(flow, NDPI_SUSPICIOUS_DGA_DOMAIN)) { - ndpi_set_risk(ndpi_struct, flow, NDPI_RISKY_DOMAIN, "DGA Name Query with no Error Code"); - } - } +static int process_answers(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + u_int payload_offset, + ndpi_master_app_protocol *proto) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int x = payload_offset; + u_int16_t rsp_type; + u_int32_t rsp_ttl; + u_int16_t num; + u_int8_t found = 0; + int ignore_checks; - if((dns_header->num_queries > 0) && (dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS) /* Don't assume that num_queries must be zero */ - && ((((dns_header->num_answers > 0) && (dns_header->num_answers <= NDPI_MAX_DNS_REQUESTS)) - || ((dns_header->authority_rrs > 0) && (dns_header->authority_rrs <= NDPI_MAX_DNS_REQUESTS)) - || ((dns_header->additional_rrs > 0) && (dns_header->additional_rrs <= NDPI_MAX_DNS_REQUESTS)))) - ) { - /* This is a good reply: we dissect it both for request and response */ - - if(dns_header->num_queries > 0) { -#ifdef DNS_DEBUG - u_int16_t rsp_type; -#endif - u_int16_t num; + ignore_checks = (proto->master_protocol == NDPI_PROTOCOL_MDNS); - for(num = 0; num < dns_header->num_queries; num++) { - u_int16_t data_len; + for(num = 0; num < dns_header->num_answers; num++) { + u_int16_t data_len; - if((x+6) >= packet->payload_packet_len) { - break; - } + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + return -1; + } else + x += data_len; - if((data_len = getNameLength(x, packet->payload, - packet->payload_packet_len)) == 0) { - break; - } else - x += data_len; + if((x+8) >= packet->payload_packet_len) { + return -1; + } - if((x+8) >= packet->payload_packet_len) { - break; - } + rsp_type = get16(&x, packet->payload); + rsp_ttl = ntohl(*((u_int32_t*)&packet->payload[x+2])); - /* To avoid warning: variable ‘rsp_type’ set but not used [-Wunused-but-set-variable] */ -#ifdef DNS_DEBUG - rsp_type = get16(&x, packet->payload); -#else - get16(&x, packet->payload); -#endif + if(rsp_ttl == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_MINOR_ISSUES, "DNS Record with zero TTL"); #ifdef DNS_DEBUG - printf("[DNS] [response (query)] response_type=%d\n", rsp_type); + printf("[DNS] Date len %u; TTL = %u\n", data_len, rsp_ttl); + printf("[DNS] [response] response_type=%d\n", rsp_type); #endif - /* here x points to the response "class" field */ - x += 2; /* Skip class */ - } - } + if(found == 0) { + ndpi_check_dns_type(ndpi_struct, flow, rsp_type); + flow->protos.dns.rsp_type = rsp_type; + } - if(dns_header->num_answers > 0) { - u_int16_t rsp_type; - u_int32_t rsp_ttl; - u_int16_t num; - u_int8_t found = 0; + /* x points to the response "class" field */ + if((x+12) <= packet->payload_packet_len) { + u_int32_t ttl = ntohl(*((u_int32_t*)&packet->payload[x+2])); - for(num = 0; num < dns_header->num_answers; num++) { - u_int16_t data_len; + x += 6; + data_len = get16(&x, packet->payload); - if((x+6) >= packet->payload_packet_len) { - break; - } + if((x + data_len) <= packet->payload_packet_len) { +#ifdef DNS_DEBUG + printf("[DNS] [rsp_type: %u][data_len: %u]\n", rsp_type, data_len); +#endif - if((data_len = getNameLength(x, packet->payload, - packet->payload_packet_len)) == 0) { - break; - } else - x += data_len; + if(rsp_type == 0x05 /* CNAME */) { + ; + } else if(rsp_type == 0x0C /* PTR */) { + u_int16_t ptr_len = (packet->payload[x-2] << 8) + packet->payload[x-1]; + + if((x + ptr_len) <= packet->payload_packet_len) { + if(found == 0) { + u_int len, orig_x; + + orig_x = x; + ndpi_grab_dns_name(packet, &x, + flow->protos.dns.ptr_domain_name, + sizeof(flow->protos.dns.ptr_domain_name), &len, + ignore_checks); + /* ndpi_grab_dns_name doesn't update the offset if it failed. + We unconditionally update it at the end of the for loop */ + x = orig_x; + found = 1; + } + } + } else if((((rsp_type == 0x1) && (data_len == 4)) /* A */ + || ((rsp_type == 0x1c) && (data_len == 16)) /* AAAA */ + )) { + if(found == 0) { + + if(flow->protos.dns.num_rsp_addr < MAX_NUM_DNS_RSP_ADDRESSES) { + /* Necessary for IP address comparison */ + memset(&flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], 0, sizeof(ndpi_ip_addr_t)); + + memcpy(&flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], packet->payload + x, data_len); + flow->protos.dns.is_rsp_addr_ipv6[flow->protos.dns.num_rsp_addr] = (data_len == 16) ? 1 : 0; + flow->protos.dns.rsp_addr_ttl[flow->protos.dns.num_rsp_addr] = ttl; + + if(ndpi_struct->cfg.address_cache_size) + ndpi_cache_address(ndpi_struct, + flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], + flow->host_server_name, + packet->current_time_ms/1000, + flow->protos.dns.rsp_addr_ttl[flow->protos.dns.num_rsp_addr]); + + ++flow->protos.dns.num_rsp_addr; + } + + if(flow->protos.dns.num_rsp_addr >= MAX_NUM_DNS_RSP_ADDRESSES) + found = 1; + } + + /* Add (all addresses) to FPC DNS cache */ + if(ndpi_struct->cfg.fpc_enabled && + proto->app_protocol != NDPI_PROTOCOL_UNKNOWN && + proto->app_protocol != proto->master_protocol && + ndpi_struct->fpc_dns_cache) { + ndpi_lru_add_to_cache(ndpi_struct->fpc_dns_cache, + fpc_dns_cache_key_from_packet(packet->payload + x, data_len), + proto->app_protocol, + ndpi_get_current_time(flow)); - if((x+8) >= packet->payload_packet_len) { - break; - } + NDPI_LOG_DBG(ndpi_struct, "Adding entry to fpc_dns: %s proto %d\n", + data_len == 4 ? "ipv4" : "ipv6", proto->app_protocol); + } + } - rsp_type = get16(&x, packet->payload); - rsp_ttl = ntohl(*((u_int32_t*)&packet->payload[x+2])); + x += data_len; + } + } - if(rsp_ttl == 0) - ndpi_set_risk(ndpi_struct, flow, NDPI_MINOR_ISSUES, "DNS Record with zero TTL"); - -#ifdef DNS_DEBUG - printf("[DNS] TTL = %u\n", rsp_ttl); - printf("[DNS] [response] response_type=%d\n", rsp_type); -#endif + if(found && (dns_header->additional_rrs == 0)) { + /* + In case we have RR we need to iterate + all the answers and not just consider the + first one as we need to properly move 'x' + to the right offset + */ + break; + } + } - if(found == 0) { - ndpi_check_dns_type(ndpi_struct, flow, rsp_type); - flow->protos.dns.rsp_type = rsp_type; - } - - /* x points to the response "class" field */ - if((x+12) <= packet->payload_packet_len) { - u_int32_t ttl = ntohl(*((u_int32_t*)&packet->payload[x+2])); - - x += 6; - data_len = get16(&x, packet->payload); - - if((x + data_len) <= packet->payload_packet_len) { -#ifdef DNS_DEBUG - printf("[DNS] [rsp_type: %u][data_len: %u]\n", rsp_type, data_len); -#endif + return x; +} - if(rsp_type == 0x05 /* CNAME */) { - ; - } else if(rsp_type == 0x0C /* PTR */) { - u_int16_t ptr_len = (packet->payload[x-2] << 8) + packet->payload[x-1]; - - if((x + ptr_len) <= packet->payload_packet_len) { - if(found == 0) { - u_int len; - - ndpi_grab_dns_name(packet, &x, - flow->protos.dns.ptr_domain_name, - sizeof(flow->protos.dns.ptr_domain_name), &len, - ignore_checks); - found = 1; - } - } - } else if((((rsp_type == 0x1) && (data_len == 4)) /* A */ - || ((rsp_type == 0x1c) && (data_len == 16)) /* AAAA */ - )) { - if(found == 0) { - - if(flow->protos.dns.num_rsp_addr < MAX_NUM_DNS_RSP_ADDRESSES) { - /* Necessary for IP address comparison */ - memset(&flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], 0, sizeof(ndpi_ip_addr_t)); - - memcpy(&flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], packet->payload + x, data_len); - flow->protos.dns.is_rsp_addr_ipv6[flow->protos.dns.num_rsp_addr] = (data_len == 16) ? 1 : 0; - flow->protos.dns.rsp_addr_ttl[flow->protos.dns.num_rsp_addr] = ttl; - - if(ndpi_struct->cfg.address_cache_size) - ndpi_cache_address(ndpi_struct, - flow->protos.dns.rsp_addr[flow->protos.dns.num_rsp_addr], - flow->host_server_name, - packet->current_time_ms/1000, - flow->protos.dns.rsp_addr_ttl[flow->protos.dns.num_rsp_addr]); - - ++flow->protos.dns.num_rsp_addr; - } - - if(flow->protos.dns.num_rsp_addr >= MAX_NUM_DNS_RSP_ADDRESSES) - found = 1; - } - } - - x += data_len; - } - } - - if(found && (dns_header->additional_rrs == 0)) { - /* - In case we have RR we need to iterate - all the answers and not just consider the - first one as we need to properly move 'x' - to the right offset - */ - break; - } - } - } +static int process_additionals(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + u_int payload_offset) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int x = payload_offset; - if(dns_header->additional_rrs > 0) { - /* - Dissect the rest of the packet only if there are - additional_rrs as we need to check fo EDNS(0) + /* + Dissect the rest of the packet only if there are + additional_rrs as we need to check for: + * EDNS(0) + * NSID - In this case we need to go through the whole packet - as we need to update the 'x' offset - */ - if(dns_header->authority_rrs > 0) { + In this case we need to go through the whole packet + as we need to update the 'x' offset + */ + + if(dns_header->additional_rrs == 0) + return x; + + if(dns_header->authority_rrs > 0) { #ifdef DNS_DEBUG - u_int16_t rsp_type; + u_int16_t rsp_type; #endif - u_int16_t num; + u_int16_t num; - for(num = 0; num < dns_header->authority_rrs; num++) { - u_int16_t data_len; + for(num = 0; num < dns_header->authority_rrs; num++) { + u_int16_t data_len; - if((x+6) >= packet->payload_packet_len) { - break; - } + if((x+6) >= packet->payload_packet_len) { + return -1; + } - if((data_len = getNameLength(x, packet->payload, - packet->payload_packet_len)) == 0) { - break; - } else - x += data_len; + if((data_len = getNameLength(x, packet->payload, + packet->payload_packet_len)) == 0) { + return -1; + } else + x += data_len; - if((x+8) >= packet->payload_packet_len) { - break; - } + if((x+8) >= packet->payload_packet_len) { + return -1; + } - /* To avoid warning: variable ‘rsp_type’ set but not used [-Wunused-but-set-variable] */ + /* To avoid warning: variable ‘rsp_type’ set but not used [-Wunused-but-set-variable] */ #ifdef DNS_DEBUG - rsp_type = get16(&x, packet->payload); + rsp_type = get16(&x, packet->payload); #else - get16(&x, packet->payload); + get16(&x, packet->payload); #endif #ifdef DNS_DEBUG - printf("[DNS] [RRS response] response_type=%d\n", rsp_type); + printf("[DNS] [RRS response] response_type=%d\n", rsp_type); #endif - /* here x points to the response "class" field */ - if((x+12) <= packet->payload_packet_len) { - x += 6; - data_len = get16(&x, packet->payload); + /* here x points to the response "class" field */ + if((x+12) <= packet->payload_packet_len) { + x += 6; + data_len = get16(&x, packet->payload); - if((x + data_len) <= packet->payload_packet_len) - x += data_len; - } - } - } + if((x + data_len) <= packet->payload_packet_len) + x += data_len; + } + } + } + + if(dns_header->additional_rrs > 0) { + u_int16_t rsp_type; + u_int16_t num; - if(dns_header->additional_rrs > 0) { - u_int16_t rsp_type; - u_int16_t num; + for(num = 0; num < dns_header->additional_rrs; num++) { + u_int16_t data_len, rdata_len, opt_code, opt_len; + const unsigned char *opt; - for(num = 0; num < dns_header->additional_rrs; num++) { - u_int16_t data_len, rdata_len, opt_code, opt_len; - const unsigned char *opt; +#ifdef DNS_DEBUG + printf("[DNS] [RR response %d/%d]\n", num + 1, dns_header->additional_rrs); +#endif - if((x+6) > packet->payload_packet_len) { - break; - } + if((x+6) > packet->payload_packet_len) { + return -1; + } - if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { - break; - } else - x += data_len; + if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { + return -1; + } else + x += data_len; - if((x+10) > packet->payload_packet_len) { - break; - } + if((x+10) > packet->payload_packet_len) { + return -1; + } - rsp_type = get16(&x, packet->payload); + rsp_type = get16(&x, packet->payload); #ifdef DNS_DEBUG - printf("[DNS] [RR response] response_type=%d\n", rsp_type); + printf("[DNS] [RR response] response_type=%d\n", rsp_type); #endif - if(rsp_type == 41 /* OPT */) { - /* https://en.wikipedia.org/wiki/Extension_Mechanisms_for_DNS */ - flow->protos.dns.edns0_udp_payload_size = ntohs(*((u_int16_t*)&packet->payload[x])); /* EDNS(0) */ + if(rsp_type == 41 /* OPT */) { + /* https://en.wikipedia.org/wiki/Extension_Mechanisms_for_DNS */ + flow->protos.dns.edns0_udp_payload_size = ntohs(*((u_int16_t*)&packet->payload[x])); /* EDNS(0) */ #ifdef DNS_DEBUG - printf("[DNS] [response] edns0_udp_payload_size: %u\n", flow->protos.dns.edns0_udp_payload_size); + printf("[DNS] [response] edns0_udp_payload_size: %u\n", flow->protos.dns.edns0_udp_payload_size); #endif - x += 6; + x += 6; - rdata_len = ntohs(*((u_int16_t *)&packet->payload[x])); + rdata_len = ntohs(*((u_int16_t *)&packet->payload[x])); #ifdef DNS_DEBUG - printf("[DNS] [response] rdata len: %u\n", rdata_len); + printf("[DNS] [response] rdata len: %u\n", rdata_len); #endif - if(rdata_len > 0 && - x + 6 <= packet->payload_packet_len) { - opt_code = ntohs(*((u_int16_t *)&packet->payload[x + 2])); - opt_len = ntohs(*((u_int16_t *)&packet->payload[x + 4])); - opt = &packet->payload[x + 6]; - /* TODO: parse the TLV list */ - if(opt_code == 0x03 && - opt_len <= rdata_len + 4 && - opt_len > 6 && - x + 6 + opt_len <= packet->payload_packet_len) { + if(rdata_len > 0 && + x + 6 <= packet->payload_packet_len) { + opt_code = ntohs(*((u_int16_t *)&packet->payload[x + 2])); + opt_len = ntohs(*((u_int16_t *)&packet->payload[x + 4])); + opt = &packet->payload[x + 6]; + /* TODO: parse the TLV list */ + if(opt_code == 0x03 && + opt_len <= rdata_len + 4 && + opt_len > 6 && + x + 6 + opt_len <= packet->payload_packet_len) { #ifdef DNS_DEBUG - printf("[DNS] NSID: [%.*s]\n", opt_len, opt); + printf("[DNS] NSID: [%.*s]\n", opt_len, opt); #endif - if(memcmp(opt, "gpdns-", 6) == 0) { + if(memcmp(opt, "gpdns-", 6) == 0) { #ifdef DNS_DEBUG - printf("[DNS] NSID Airport code [%.*s]\n", opt_len - 6, opt + 6); + printf("[DNS] NSID Airport code [%.*s]\n", opt_len - 6, opt + 6); #endif - memcpy(flow->protos.dns.geolocation_iata_code, opt + 6, - ndpi_min(opt_len - 6, (int)sizeof(flow->protos.dns.geolocation_iata_code) - 1)); - } - } - - } - } else { - x += 6; - } - - if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { - break; - } else - x += data_len; - } - } + memcpy(flow->protos.dns.geolocation_iata_code, opt + 6, + ndpi_min(opt_len - 6, (int)sizeof(flow->protos.dns.geolocation_iata_code) - 1)); + } + } - if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) - || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) { - /* Request already set the protocol */ - // flow->extra_packets_func = NULL; /* Removed so the caller can keep dissecting DNS flows */ - } else { - /* We missed the request */ - u_int16_t s_port = packet->udp ? ntohs(packet->udp->source) : ntohs(packet->tcp->source); - - ndpi_set_detected_protocol(ndpi_struct, flow, checkPort(s_port), NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - } + } + } else { + x += 6; } + + if((data_len = getNameLength(x, packet->payload, packet->payload_packet_len)) == 0) { + return -1; + } else + x += data_len; } } - /* Valid */ - return(0); + return x; +} + +static int is_valid_dns(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + u_int payload_offset, u_int8_t *is_query) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + if(packet->payload_packet_len < sizeof(struct ndpi_dns_packet_header) + payload_offset) + return 0; + + memcpy(dns_header, (struct ndpi_dns_packet_header*)&packet->payload[payload_offset], + sizeof(struct ndpi_dns_packet_header)); + + dns_header->tr_id = ntohs(dns_header->tr_id); + dns_header->flags = ntohs(dns_header->flags); + dns_header->num_queries = ntohs(dns_header->num_queries); + dns_header->num_answers = ntohs(dns_header->num_answers); + dns_header->authority_rrs = ntohs(dns_header->authority_rrs); + dns_header->additional_rrs = ntohs(dns_header->additional_rrs); + + if((dns_header->flags & FLAGS_MASK) == 0x0000) + *is_query = 1; + else + *is_query = 0; + + if(*is_query) { + if(dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS && + /* dns_header->num_answers == 0 && */ + ((dns_header->flags & 0x2800) == 0x2800 /* Dynamic DNS Update */ || + (dns_header->flags & 0xFCF0) == 0x00 /* Standard Query */ || + (dns_header->flags & 0xFCFF) == 0x0800 /* Inverse query */ || + (dns_header->num_answers == 0 && dns_header->authority_rrs == 0))) { + /* This is a good query */ + return 1; + } + } else { + if(((dns_header->num_queries > 0 && dns_header->num_queries <= NDPI_MAX_DNS_REQUESTS) || /* Don't assume that num_queries must be zero */ + (checkDNSSubprotocol(ntohs(flow->c_port), ntohs(flow->s_port)) == NDPI_PROTOCOL_MDNS && dns_header->num_queries == 0)) && + ((dns_header->num_answers > 0 && dns_header->num_answers <= NDPI_MAX_DNS_REQUESTS) || + (dns_header->authority_rrs > 0 && dns_header->authority_rrs <= NDPI_MAX_DNS_REQUESTS) || + (dns_header->additional_rrs > 0 && dns_header->additional_rrs <= NDPI_MAX_DNS_REQUESTS) || + (dns_header->num_answers == 0 && dns_header->authority_rrs == 0 && dns_header->additional_rrs == 0))) { + /* This is a good reply */ + return 1; + } + if(dns_header->num_queries == 0 && dns_header->num_answers == 0 && + dns_header->authority_rrs == 0 && dns_header->additional_rrs == 0 && + packet->payload_packet_len == sizeof(struct ndpi_dns_packet_header)) { + /* This is a good empty reply */ + return 1; + } + } + return 0; +} + +/* *********************************************** */ + +static int keep_extra_dissection(struct ndpi_flow_struct *flow) +{ + /* As a general rule, we wait for a valid response + (in the ideal world, we want to process the request/response pair) */ + return !(!flow->protos.dns.is_query && flow->protos.dns.num_answers != 0); } /* *********************************************** */ static int search_dns_again(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - /* possibly dissect the DNS reply */ - ndpi_search_dns(ndpi_struct, flow); + struct ndpi_packet_struct *packet = &ndpi_struct->packet; - if(flow->protos.dns.num_answers != 0) - return(0); + if(packet->tcp_retransmission || packet->payload_packet_len == 0) + return keep_extra_dissection(flow); + + /* possibly dissect the DNS reply */ + search_dns(ndpi_struct, flow); - /* Possibly more processing */ - return(1); + return keep_extra_dissection(flow); } /* *********************************************** */ -static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { +static int process_hostname(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + struct ndpi_dns_packet_header *dns_header, + ndpi_master_app_protocol *proto) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; - int payload_offset; - u_int8_t is_query, is_mdns; - u_int16_t s_port = 0, d_port = 0; + char *dot; + u_int len, is_mdns, off = sizeof(struct ndpi_dns_packet_header) + (packet->tcp ? 2 : 0); + char _hostname[256]; + u_int8_t hostname_is_valid; - NDPI_LOG_DBG(ndpi_struct, "search DNS\n"); + proto->master_protocol = checkDNSSubprotocol(ntohs(flow->c_port), ntohs(flow->s_port)); + proto->app_protocol = flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN ? flow->detected_protocol_stack[0] : NDPI_PROTOCOL_UNKNOWN; - if(packet->udp != NULL) { - s_port = ntohs(packet->udp->source); - d_port = ntohs(packet->udp->dest); - payload_offset = 0; + /* We try to get hostname only from "standard" query/answer */ + if(dns_header->num_queries == 0 && dns_header->num_answers == 0) + return -1; - /* For MDNS/LLMNR: If the packet is not a response, dest addr needs to be multicast. */ - if ((d_port == MDNS_PORT && isMDNSMulticastAddress(packet) == 0) || - (d_port == LLMNR_PORT && isLLMNRMulticastAddress(packet) == 0)) - { - if (packet->payload_packet_len > 5 && - ntohs(get_u_int16_t(packet->payload, 2)) != 0 && - ntohs(get_u_int16_t(packet->payload, 4)) != 0) - { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; + is_mdns = (proto->master_protocol == NDPI_PROTOCOL_MDNS); + + /* TODO: should we overwrite existing hostname? + For the time being, keep the old/current behavior */ + + hostname_is_valid = ndpi_grab_dns_name(packet, &off, _hostname, sizeof(_hostname), &len, is_mdns); + +#ifdef DNS_DEBUG + printf("[DNS] [%s]\n", _hostname); +#endif + + ndpi_hostname_sni_set(flow, (const u_int8_t *)_hostname, len, is_mdns ? NDPI_HOSTNAME_NORM_LC : NDPI_HOSTNAME_NORM_ALL); + + if (hostname_is_valid == 0) + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, "Invalid chars detected in domain name"); + + /* Ignore reverse DNS queries */ + if(strstr(_hostname, ".in-addr.") == NULL) { + dot = strchr(_hostname, '.'); + + if(dot) { + uintptr_t first_element_len = dot - _hostname; + + if((first_element_len > 48) && (!is_mdns)) { + /* + The length of the first element in the query is very long + and this might be an issue or indicate an exfiltration + */ + + if(ends_with(ndpi_struct, _hostname, "multi.surbl.org") + || ends_with(ndpi_struct, _hostname, "spamhaus.org") + || ends_with(ndpi_struct, _hostname, "rackcdn.com") + || ends_with(ndpi_struct, _hostname, "akamaiedge.net") + || ends_with(ndpi_struct, _hostname, "mx-verification.google.com") + || ends_with(ndpi_struct, _hostname, "amazonaws.com") + ) + ; /* Check common domain exceptions [TODO: if the list grows too much use a different datastructure] */ + else + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_SUSPICIOUS_TRAFFIC, "Long DNS host name"); } } - } else if(packet->tcp != NULL) /* pkt size > 512 bytes */ { - s_port = ntohs(packet->tcp->source); - d_port = ntohs(packet->tcp->dest); - payload_offset = 2; } - is_mdns = ((s_port == MDNS_PORT) || (d_port == MDNS_PORT)) ? 1 : 0; - - if(((s_port == DNS_PORT) || (d_port == DNS_PORT) - || is_mdns - || (d_port == LLMNR_PORT)) - && (packet->payload_packet_len > sizeof(struct ndpi_dns_packet_header)+payload_offset)) { - struct ndpi_dns_packet_header dns_header; - char *dot; - u_int len, off; - int invalid = search_valid_dns(ndpi_struct, flow, &dns_header, payload_offset, &is_query, is_mdns); - ndpi_protocol ret; - u_int num_queries, idx; - char _hostname[256]; - - ret.proto.master_protocol = NDPI_PROTOCOL_UNKNOWN; - ret.proto.app_protocol = (d_port == LLMNR_PORT) ? NDPI_PROTOCOL_LLMNR : (((d_port == MDNS_PORT) && isLLMNRMulticastAddress(packet) ) ? NDPI_PROTOCOL_MDNS : NDPI_PROTOCOL_DNS); - - if(invalid) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; + if(strlen(flow->host_server_name) > 0) { + ndpi_protocol_match_result ret_match; + + if(flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN) { + proto->app_protocol = ndpi_match_host_subprotocol(ndpi_struct, flow, + flow->host_server_name, + strlen(flow->host_server_name), + &ret_match, + proto->master_protocol, + /* Avoid updating classification if subclassification is disabled */ + ndpi_struct->cfg.dns_subclassification_enabled ? 1 : 0); } - /* extract host name server */ - off = sizeof(struct ndpi_dns_packet_header) + payload_offset; + ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0, proto->app_protocol != NDPI_PROTOCOL_UNKNOWN); + } - /* Before continuing let's dissect the following queries to see if they are valid */ - for(idx=off, num_queries=0; (num_queries < dns_header.num_queries) && (idx < packet->payload_packet_len);) { - u_int32_t i, tot_len = 0; + return 0; +} - for(i=idx; i<packet->payload_packet_len;) { - u_int8_t is_ptr = 0, name_len = packet->payload[i]; /* Lenght of the individual name blocks aaa.bbb.com */ +static void search_dns(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + int payload_offset = 0; + u_int8_t is_query; + struct ndpi_dns_packet_header dns_header; + u_int off; + ndpi_master_app_protocol proto; + int rc; - if(name_len == 0) { - tot_len++; /* \0 */ - /* End of query */ - break; - } else if((name_len & 0xC0) == 0xC0) - is_ptr = 1, name_len = 0; /* Pointer */ + if(packet->udp != NULL) { + payload_offset = 0; + } else if(packet->tcp != NULL) { + payload_offset = 2; + } + if(!is_valid_dns(ndpi_struct, flow, &dns_header, payload_offset, &is_query)) { #ifdef DNS_DEBUG - if((!is_ptr) && (name_len > 0)) { - printf("[DNS] [name_len: %u][", name_len); - - { - int idx; + printf("[DNS] invalid packet\n"); +#endif + if(flow->extra_packets_func == NULL) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Header"); + } + return; + } - for(idx=0; idx<name_len; idx++) - printf("%c", packet->payload[i+1+idx]); + process_hostname(ndpi_struct, flow, &dns_header, &proto); - printf("]\n"); - } - } -#endif + off = sizeof(struct ndpi_dns_packet_header) + payload_offset; - i += name_len+1, tot_len += name_len+1; - if(is_ptr) break; - } /* for */ + if(is_query) { + flow->protos.dns.is_query = 1; + flow->protos.dns.transaction_id = dns_header.tr_id; + rc = process_queries(ndpi_struct, flow, &dns_header, off); #ifdef DNS_DEBUG - printf("[DNS] [tot_len: %u]\n\n", tot_len+4 /* type + class */); + if(rc == -1) + printf("[DNS] Error queries (query msg)\n"); #endif + } else { + flow->protos.dns.is_query = 0; + flow->protos.dns.transaction_id = dns_header.tr_id; + flow->protos.dns.reply_code = dns_header.flags & 0x0F; + flow->protos.dns.num_queries = dns_header.num_queries; + flow->protos.dns.num_answers = dns_header.num_answers + dns_header.authority_rrs + dns_header.additional_rrs; - if(((i+4 /* Skip query type and class */) > packet->payload_packet_len) - || ((packet->payload[i+1] == 0x0) && (packet->payload[i+2] == 0x0)) /* Query type cannot be 0 */ - || (tot_len > 253) - ) { - /* Invalid */ -#ifdef DNS_DEBUG - printf("[DNS] Invalid query len [%u >= %u]\n", i+4, packet->payload_packet_len); -#endif - ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid DNS Query Lenght"); - break; + if(flow->protos.dns.reply_code != 0) { + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_ERROR_CODE_DETECTED)) { + char str[32], buf[16]; + + snprintf(str, sizeof(str), "DNS Error Code %s", + dns_error_code2string(flow->protos.dns.reply_code, buf, sizeof(buf))); + ndpi_set_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED, str); } else { - idx = i+5, num_queries++; + ndpi_set_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED, NULL); } - } /* for */ - - u_int8_t hostname_is_valid = ndpi_grab_dns_name(packet, &off, _hostname, sizeof(_hostname), &len, is_mdns); - - ndpi_hostname_sni_set(flow, (const u_int8_t *)_hostname, len, is_mdns ? NDPI_HOSTNAME_NORM_LC : NDPI_HOSTNAME_NORM_ALL); - - if (hostname_is_valid == 0) - ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, "Invalid chars detected in domain name"); - - /* Ignore reverse DNS queries */ - if(strstr(_hostname, ".in-addr.") == NULL) { - dot = strchr(_hostname, '.'); - - if(dot) { - uintptr_t first_element_len = dot - _hostname; - - if((first_element_len > 48) && (!is_mdns)) { - /* - The lenght of the first element in the query is very long - and this might be an issue or indicate an exfiltration - */ - - if(ends_with(ndpi_struct, _hostname, "multi.surbl.org") - || ends_with(ndpi_struct, _hostname, "spamhaus.org") - || ends_with(ndpi_struct, _hostname, "rackcdn.com") - || ends_with(ndpi_struct, _hostname, "akamaiedge.net") - || ends_with(ndpi_struct, _hostname, "mx-verification.google.com") - || ends_with(ndpi_struct, _hostname, "amazonaws.com") - ) - ; /* Check common domain exceptions [TODO: if the list grows too much use a different datastructure] */ - else - ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_SUSPICIOUS_TRAFFIC, "Long DNS host name"); - } + } else { + if(ndpi_isset_risk(flow, NDPI_SUSPICIOUS_DGA_DOMAIN)) { + ndpi_set_risk(ndpi_struct, flow, NDPI_RISKY_DOMAIN, "DGA Name Query with no Error Code"); } } - - if(len > 0) { - if(ndpi_struct->cfg.dns_subclassification_enabled) { - ndpi_protocol_match_result ret_match; - - ret.proto.app_protocol = ndpi_match_host_subprotocol(ndpi_struct, flow, - flow->host_server_name, - strlen(flow->host_server_name), - &ret_match, - NDPI_PROTOCOL_DNS); - /* Add to FPC DNS cache */ - if(ret.proto.app_protocol != NDPI_PROTOCOL_UNKNOWN && - (flow->protos.dns.rsp_type == 0x1 || flow->protos.dns.rsp_type == 0x1c) && /* A, AAAA */ - ndpi_struct->fpc_dns_cache) { - ndpi_lru_add_to_cache(ndpi_struct->fpc_dns_cache, - fpc_dns_cache_key_from_dns_info(flow), ret.proto.app_protocol, - ndpi_get_current_time(flow)); - } - - if(ret.proto.app_protocol == NDPI_PROTOCOL_UNKNOWN) - ret.proto.master_protocol = checkDNSSubprotocol(s_port, d_port); - else - ret.proto.master_protocol = NDPI_PROTOCOL_DNS; - ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0); + rc = process_queries(ndpi_struct, flow, &dns_header, off); + if(rc == -1) { +#ifdef DNS_DEBUG + printf("[DNS] Error queries (response msg)\n"); +#endif + } else { + off = rc; + rc = process_answers(ndpi_struct, flow, &dns_header, off, &proto); + if(rc == -1) { +#ifdef DNS_DEBUG + printf("[DNS] Error answers\n"); +#endif } else { - ret.proto.master_protocol = checkDNSSubprotocol(s_port, d_port); - ret.proto.app_protocol = NDPI_PROTOCOL_UNKNOWN; + off = rc; + rc = process_additionals(ndpi_struct, flow, &dns_header, off); +#ifdef DNS_DEBUG + if(rc == -1) + printf("[DNS] Error additionals\n"); +#endif } - - /* Category is always NDPI_PROTOCOL_CATEGORY_NETWORK, regardless of the subprotocol */ - flow->category = NDPI_PROTOCOL_CATEGORY_NETWORK; - } - /* Report if this is a DNS query or reply */ - flow->protos.dns.is_query = is_query; + if(proto.master_protocol == NDPI_PROTOCOL_DNS && + /* TODO: add support to RFC6891 to avoid some false positives */ + packet->udp && + packet->payload_packet_len > PKT_LEN_ALERT && + packet->payload_packet_len > flow->protos.dns.edns0_udp_payload_size) { + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_DNS_LARGE_PACKET)) { + char str[48]; - if(is_query) { - /* In this case we say that the protocol has been detected just to let apps carry on with their activities */ - ndpi_set_detected_protocol(ndpi_struct, flow, ret.proto.app_protocol, ret.proto.master_protocol, NDPI_CONFIDENCE_DPI); - - if(ndpi_struct->cfg.dns_parse_response_enabled) { - /* We have never triggered extra-dissection for LLMNR. Keep the old behaviour */ - if(ret.proto.master_protocol != NDPI_PROTOCOL_LLMNR) { - /* Don't use just 1 as in TCP DNS more packets could be returned (e.g. ACK). */ - flow->max_extra_packets_to_check = 5; - flow->extra_packets_func = search_dns_again; - } + snprintf(str, sizeof(str), "%u Bytes DNS Packet", packet->payload_packet_len); + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_LARGE_PACKET, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_LARGE_PACKET, NULL); } - return; /* The response will set the verdict */ } - 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); - -#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, - flow->protos.dns.reply_code, flow->protos.dns.rsp_type, flow->host_server_name - ); -#endif + NDPI_LOG_DBG2(ndpi_struct, "Response: [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, + flow->protos.dns.reply_code, flow->protos.dns.rsp_type, flow->host_server_name); + } - if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { - /** - Do not set the protocol with DNS if ndpi_match_host_subprotocol() has - matched a subprotocol - **/ - NDPI_LOG_INFO(ndpi_struct, "found DNS\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, ret.proto.app_protocol, ret.proto.master_protocol, NDPI_CONFIDENCE_DPI); - } else { - if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) - || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) - ; - else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) { + if(ndpi_struct->cfg.dns_subclassification_enabled) + ndpi_set_detected_protocol(ndpi_struct, flow, proto.app_protocol, proto.master_protocol, NDPI_CONFIDENCE_DPI); + else + ndpi_set_detected_protocol(ndpi_struct, flow, proto.master_protocol, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + /* Category is always NDPI_PROTOCOL_CATEGORY_NETWORK, regardless of the subprotocol */ + flow->category = NDPI_PROTOCOL_CATEGORY_NETWORK; + + if(!flow->extra_packets_func && + ndpi_struct->cfg.dns_parse_response_enabled && + /* We have never triggered extra-dissection for LLMNR. Keep the old behavior */ + flow->detected_protocol_stack[0] != NDPI_PROTOCOL_LLMNR && + flow->detected_protocol_stack[1] != NDPI_PROTOCOL_LLMNR) { + if(keep_extra_dissection(flow)) { + NDPI_LOG_DBG(ndpi_struct, "Enabling extra dissection\n"); + flow->max_extra_packets_to_check = 5; + flow->extra_packets_func = search_dns_again; } } - if(flow->packet_counter > 3) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - + /* The bigger packets are usually the replies, but it shouldn't harm + to check the requests, too */ if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_DNS) || (flow->detected_protocol_stack[1] == NDPI_PROTOCOL_DNS)) { - /* TODO: add support to RFC6891 to avoid some false positives */ - if((packet->udp != NULL) - && (packet->payload_packet_len > PKT_LEN_ALERT) - && (packet->payload_packet_len > flow->protos.dns.edns0_udp_payload_size) - ) { - char str[48]; - - snprintf(str, sizeof(str), "%u Bytes DNS Packet", packet->payload_packet_len); - ndpi_set_risk(ndpi_struct, flow, NDPI_DNS_LARGE_PACKET, str); - } if(packet->iph != NULL) { /* IPv4 */ @@ -934,15 +934,62 @@ static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, st /* *********************************************** */ -void init_dns_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("DNS", ndpi_struct, *id, - NDPI_PROTOCOL_DNS, - ndpi_search_dns, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); +static void ndpi_search_dns(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int16_t s_port = 0, d_port = 0; + int payload_offset = 0; + + NDPI_LOG_DBG(ndpi_struct, "search DNS\n"); - *id += 1; + if(packet->udp != NULL) { + s_port = ntohs(packet->udp->source); + d_port = ntohs(packet->udp->dest); + payload_offset = 0; + + /* For MDNS/LLMNR: If the packet is not a response, dest addr needs to be multicast. */ + if ((d_port == MDNS_PORT && isMDNSMulticastAddress(packet) == 0) || + (d_port == LLMNR_PORT && isLLMNRMulticastAddress(packet) == 0)) + { + if (packet->payload_packet_len > 5 && + ntohs(get_u_int16_t(packet->payload, 2)) != 0 && + ntohs(get_u_int16_t(packet->payload, 4)) != 0) + { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + } + } else if(packet->tcp != NULL) { + s_port = ntohs(packet->tcp->source); + d_port = ntohs(packet->tcp->dest); + payload_offset = 2; + } + + /* We are able to detect DNS/MDNS/LLMNR only on standard ports (see #1788) */ + if(!(s_port == DNS_PORT || d_port == DNS_PORT || + s_port == MDNS_PORT || d_port == MDNS_PORT || + d_port == LLMNR_PORT)) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + /* Since: + UDP: every packet must contains a complete/valid DNS message; + TCP: we are not able to handle DNS messages spanning multiple TCP packets; + we must be able to detect these protocols on the first packet + */ + if(packet->payload_packet_len < sizeof(struct ndpi_dns_packet_header) + payload_offset) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + search_dns(ndpi_struct, flow); +} + +/* *********************************************** */ +void init_dns_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("DNS", ndpi_struct, + ndpi_search_dns, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DNS); } diff --git a/src/lib/protocols/dnscrypt.c b/src/lib/protocols/dnscrypt.c index a77bade98..782ae0763 100644 --- a/src/lib/protocols/dnscrypt.c +++ b/src/lib/protocols/dnscrypt.c @@ -62,17 +62,16 @@ static void ndpi_search_dnscrypt(struct ndpi_detection_module_struct *ndpi_struc * Wait for at least one packet per direction, up to a max * Required as we need to wait for the server response which contains the ASCII pattern below. */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } -void init_dnscrypt_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dnscrypt_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection( - "DNScrypt", ndpi_struct, *id, - NDPI_PROTOCOL_DNSCRYPT, ndpi_search_dnscrypt, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("DNScrypt", ndpi_struct, + ndpi_search_dnscrypt, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DNSCRYPT); } diff --git a/src/lib/protocols/dofus.c b/src/lib/protocols/dofus.c index 37dbb2310..d87763d88 100644 --- a/src/lib/protocols/dofus.c +++ b/src/lib/protocols/dofus.c @@ -2,7 +2,7 @@ * dofus.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -41,113 +41,24 @@ static void ndpi_search_dofus(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search dofus\n"); - /* Dofus v 1.x.x */ - if (packet->payload_packet_len == 13 && get_u_int16_t(packet->payload, 1) == ntohs(0x0508) - && get_u_int16_t(packet->payload, 5) == ntohs(0x04a0) - && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) == ntohs(0x0194)) { - ndpi_dofus_add_connection(ndpi_struct, flow); - return; - } - if (flow->l4.tcp.dofus_stage == 0) { - if (packet->payload_packet_len == 3 && memcmp(packet->payload, "HG", 2) == 0 - && packet->payload[packet->payload_packet_len - 1] == 0) - goto maybe_dofus; - - if (packet->payload_packet_len == 12 && memcmp(packet->payload, "Af", 2) == 0 - && packet->payload[packet->payload_packet_len - 1] == 0) - goto maybe_dofus; - - if (packet->payload_packet_len == 35 && memcmp(packet->payload, "HC", 2) == 0 - && packet->payload[packet->payload_packet_len - 1] == 0) - goto maybe_dofus; - - if (packet->payload_packet_len > 2 && packet->payload[0] == 'A' - && (packet->payload[1] == 'x' || packet->payload[1] == 'X') - && packet->payload[packet->payload_packet_len - 1] == 0) - goto maybe_dofus; - - if (packet->payload_packet_len > 2 && memcmp(packet->payload, "Ad", 2) - && packet->payload[packet->payload_packet_len - 1] == 0) - goto maybe_dofus; - - } - if (flow->l4.tcp.dofus_stage == 1) { - if (packet->payload_packet_len == 11 && memcmp(packet->payload, "AT", 2) == 0 - && packet->payload[10] == 0x00) { - ndpi_dofus_add_connection(ndpi_struct, flow); - return; - } - if (packet->payload_packet_len == 5 - && packet->payload[0] == 'A' && packet->payload[4] == 0x00 - && (packet->payload[1] == 'T' || packet->payload[1] == 'k')) { - ndpi_dofus_add_connection(ndpi_struct, flow); - return; - } - } - /* end Dofus 1.x.x */ - - - /* Dofus 2.0 */ - if ((packet->payload_packet_len == 11 || packet->payload_packet_len == 13 || packet->payload_packet_len == 49) - && get_u_int32_t(packet->payload, 0) == ntohl(0x00050800) - && get_u_int16_t(packet->payload, 4) == ntohs(0x0005) - && get_u_int16_t(packet->payload, 8) == ntohs(0x0005) - && packet->payload[10] == 0x18) { - if (packet->payload_packet_len == 13 - && get_u_int16_t(packet->payload, packet->payload_packet_len - 2) != ntohs(0x0194)) { - goto exclude; - } - if (packet->payload_packet_len == 49 && ntohs(get_u_int16_t(packet->payload, 15)) + 17 != packet->payload_packet_len) { - goto exclude; - } - ndpi_dofus_add_connection(ndpi_struct, flow); - return; - } - if (packet->payload_packet_len >= 41 && get_u_int16_t(packet->payload, 0) == ntohs(0x01b9) && packet->payload[2] == 0x26) { - u_int16_t len, len2; - len = ntohs(get_u_int16_t(packet->payload, 3)); - if ((len + 5 + 2) > packet->payload_packet_len) - goto exclude; - len2 = ntohs(get_u_int16_t(packet->payload, 5 + len)); - if (5 + len + 2 + len2 == packet->payload_packet_len) { + /* Dofus 3 */ + if(ntohs(flow->c_port) == 5555 || ntohs(flow->s_port) == 5555) { + if(packet->payload_packet_len > 3 && + packet->payload[0] + 1 == packet->payload_packet_len && + packet->payload[1] == 0x0a && + packet->payload[2] + 2 == packet->payload[0]) { ndpi_dofus_add_connection(ndpi_struct, flow); - return; } } - if (packet->payload_packet_len == 56 - && memcmp(packet->payload, "\x00\x11\x35\x02\x03\x00\x93\x96\x01\x00", 10) == 0) { - u_int16_t len, len2; - len = ntohs(get_u_int16_t(packet->payload, 10)); - if ((len + 12 + 2) > packet->payload_packet_len) - goto exclude; - len2 = ntohs(get_u_int16_t(packet->payload, 12 + len)); - if ((12 + len + 2 + len2 + 1) > packet->payload_packet_len) - goto exclude; - if (12 + len + 2 + len2 + 1 == packet->payload_packet_len && packet->payload[12 + len + 2 + len2] == 0x01) { - ndpi_dofus_add_connection(ndpi_struct, flow); - return; - } - } -exclude: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; - -maybe_dofus: - flow->l4.tcp.dofus_stage = 1; - NDPI_LOG_DBG2(ndpi_struct, "maybe dofus\n"); - return; + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_dofus_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dofus_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Dofus", ndpi_struct, *id, - NDPI_PROTOCOL_DOFUS, - ndpi_search_dofus, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Dofus", ndpi_struct, + ndpi_search_dofus, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DOFUS); } diff --git a/src/lib/protocols/drda.c b/src/lib/protocols/drda.c index a3b1a4143..24a09c31c 100644 --- a/src/lib/protocols/drda.c +++ b/src/lib/protocols/drda.c @@ -83,21 +83,17 @@ static void ndpi_search_drda(struct ndpi_detection_module_struct *ndpi_struct, } no_drda: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************************** */ -void init_drda_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_drda_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DRDA", ndpi_struct, *id, - NDPI_PROTOCOL_DRDA, - ndpi_search_drda, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("DRDA", ndpi_struct, + ndpi_search_drda, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_DRDA); } diff --git a/src/lib/protocols/dropbox.c b/src/lib/protocols/dropbox.c index 2ac2f7d8a..d9afa1ef3 100644 --- a/src/lib/protocols/dropbox.c +++ b/src/lib/protocols/dropbox.c @@ -63,7 +63,7 @@ static void ndpi_check_dropbox(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_dropbox(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -74,13 +74,10 @@ static void ndpi_search_dropbox(struct ndpi_detection_module_struct *ndpi_struct } -void init_dropbox_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_dropbox_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("DROPBOX", ndpi_struct, *id, - NDPI_PROTOCOL_DROPBOX, - ndpi_search_dropbox, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("DROPBOX", ndpi_struct, + ndpi_search_dropbox, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_DROPBOX); } diff --git a/src/lib/protocols/eaq.c b/src/lib/protocols/eaq.c index b0c191fe8..ed03097ca 100644 --- a/src/lib/protocols/eaq.c +++ b/src/lib/protocols/eaq.c @@ -74,19 +74,15 @@ static void ndpi_search_eaq(struct ndpi_detection_module_struct *ndpi_struct, st } while(0); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_eaq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_eaq_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("EAQ", ndpi_struct, *id, - NDPI_PROTOCOL_EAQ, - ndpi_search_eaq, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("EAQ", ndpi_struct, + ndpi_search_eaq, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_EAQ); } diff --git a/src/lib/protocols/edonkey.c b/src/lib/protocols/edonkey.c index 96561a95b..f300a12b3 100644 --- a/src/lib/protocols/edonkey.c +++ b/src/lib/protocols/edonkey.c @@ -44,7 +44,7 @@ static void ndpi_search_edonkey(struct ndpi_detection_module_struct *ndpi_struct protocol = packet->payload[0]; /* 0xE3: Edonkey, 0xC5: eMule extensions, 0xD4: eMule compressed */ if(protocol != 0xE3 && protocol != 0xC5 && protocol != 0xD4) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } message_length = packet->payload_packet_len - 5; @@ -54,19 +54,15 @@ static void ndpi_search_edonkey(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_edonkey_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_edonkey_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("eDonkey", ndpi_struct, *id, - NDPI_PROTOCOL_EDONKEY, - ndpi_search_edonkey, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("eDonkey", ndpi_struct, + ndpi_search_edonkey, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_EDONKEY); } diff --git a/src/lib/protocols/egd.c b/src/lib/protocols/egd.c index e91ac4792..bd66dbc2e 100644 --- a/src/lib/protocols/egd.c +++ b/src/lib/protocols/egd.c @@ -49,17 +49,13 @@ static void ndpi_search_egd(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_egd_dissector(struct ndpi_detection_module_struct *ndpi_struct,u_int32_t *id) +void init_egd_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("EthernetGlobalData", ndpi_struct, *id, - NDPI_PROTOCOL_EGD, - ndpi_search_egd, - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("EthernetGlobalData", ndpi_struct, + ndpi_search_egd, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_EGD); } diff --git a/src/lib/protocols/elastic_search.c b/src/lib/protocols/elastic_search.c index c1de3c86b..182a130f7 100644 --- a/src/lib/protocols/elastic_search.c +++ b/src/lib/protocols/elastic_search.c @@ -49,20 +49,20 @@ static void ndpi_search_elasticsearch(struct ndpi_detection_module_struct *ndpi_ if (packet->payload_packet_len < 6) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (ntohs(get_u_int16_t(packet->payload, 0)) != 0x4553 /* "ES" */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } message_length = ntohl(get_u_int32_t(packet->payload, 2)); if (packet->payload_packet_len < message_length + 6) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -71,16 +71,10 @@ static void ndpi_search_elasticsearch(struct ndpi_detection_module_struct *ndpi_ /* ***************************************************** */ -void init_elasticsearch_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_elasticsearch_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Elasticsearch", ndpi_struct, *id, - NDPI_PROTOCOL_ELASTICSEARCH, - ndpi_search_elasticsearch, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Elasticsearch", ndpi_struct, + ndpi_search_elasticsearch, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ELASTICSEARCH); } diff --git a/src/lib/protocols/epicgames.c b/src/lib/protocols/epicgames.c index 040806740..b5a064c1d 100644 --- a/src/lib/protocols/epicgames.c +++ b/src/lib/protocols/epicgames.c @@ -54,7 +54,7 @@ static void ndpi_search_epicgames(struct ndpi_detection_module_struct *ndpi_stru flow->l4.udp.epicgames_word = ntohl(get_u_int32_t(packet->payload, 0)); return; } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } else if(flow->l4.udp.epicgames_stage == 2 - packet->packet_direction) { @@ -63,26 +63,21 @@ static void ndpi_search_epicgames(struct ndpi_detection_module_struct *ndpi_stru ndpi_int_epicgames_add_connection(ndpi_struct, flow); return; } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } if(flow->packet_counter >= 4) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } -void init_epicgames_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_epicgames_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("EpicGames", ndpi_struct, *id, - NDPI_PROTOCOL_EPICGAMES, - ndpi_search_epicgames, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("EpicGames", ndpi_struct, + ndpi_search_epicgames, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_EPICGAMES); } diff --git a/src/lib/protocols/ethereum.c b/src/lib/protocols/ethereum.c index 3f2531597..37eb802da 100644 --- a/src/lib/protocols/ethereum.c +++ b/src/lib/protocols/ethereum.c @@ -86,7 +86,7 @@ static void ndpi_search_ethereum_udp(struct ndpi_detection_module_struct *ndpi_s return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************************** */ @@ -132,7 +132,7 @@ static void ndpi_search_ethereum_tcp(struct ndpi_detection_module_struct *ndpi_s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************************** */ @@ -149,16 +149,11 @@ static void ndpi_search_ethereum(struct ndpi_detection_module_struct *ndpi_struc /* ************************************************************************** */ -void init_ethereum_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ethereum_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Ethereum", ndpi_struct, *id, - NDPI_PROTOCOL_ETHEREUM, - ndpi_search_ethereum, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Ethereum", ndpi_struct, + ndpi_search_ethereum, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ETHEREUM); } diff --git a/src/lib/protocols/ethernet_ip.c b/src/lib/protocols/ethernet_ip.c index 125f48998..87e10898b 100644 --- a/src/lib/protocols/ethernet_ip.c +++ b/src/lib/protocols/ethernet_ip.c @@ -56,17 +56,13 @@ static void ndpi_search_ethernet_ip(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); /* No luck this time */ + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); /* No luck this time */ } -void init_ethernet_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("EthernetIP", ndpi_struct, *id, - NDPI_PROTOCOL_ETHERNET_IP, - ndpi_search_ethernet_ip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_ethernet_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("EthernetIP", ndpi_struct, + ndpi_search_ethernet_ip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ETHERNET_IP); } diff --git a/src/lib/protocols/ethersbus.c b/src/lib/protocols/ethersbus.c index 1e1973292..0ae748cdd 100644 --- a/src/lib/protocols/ethersbus.c +++ b/src/lib/protocols/ethersbus.c @@ -57,18 +57,13 @@ static void ndpi_search_ethersbus(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ethersbus_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ethersbus_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Ether-S-Bus", ndpi_struct, *id, - NDPI_PROTOCOL_ETHERSBUS, - ndpi_search_ethersbus, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Ether-S-Bus", ndpi_struct, + ndpi_search_ethersbus, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ETHERSBUS); } diff --git a/src/lib/protocols/ethersio.c b/src/lib/protocols/ethersio.c index add804553..5350e045c 100644 --- a/src/lib/protocols/ethersio.c +++ b/src/lib/protocols/ethersio.c @@ -29,14 +29,6 @@ #include "ndpi_api.h" #include "ndpi_private.h" -static void ndpi_int_ethersio_add_connection(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) -{ - NDPI_LOG_INFO(ndpi_struct, "found EtherSIO\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ETHERSIO, - NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - static void ndpi_search_ethersio(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { @@ -47,24 +39,22 @@ static void ndpi_search_ethersio(struct ndpi_detection_module_struct *ndpi_struc if (packet->payload_packet_len >= 20) { if ((memcmp(packet->payload, "ESIO", 4) == 0) && (packet->payload[4] == 0) && (packet->payload[5] <= 0x2) && - (packet->payload[6] == 0)) - { - ndpi_int_ethersio_add_connection(ndpi_struct, flow); + (packet->payload[6] == 0)) { + NDPI_LOG_INFO(ndpi_struct, "found EtherSIO\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ETHERSIO, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; - } + } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ethersio_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("EtherSIO", ndpi_struct, *id, - NDPI_PROTOCOL_ETHERSIO, - ndpi_search_ethersio, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_ethersio_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("EtherSIO", ndpi_struct, + ndpi_search_ethersio, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ETHERSIO); } diff --git a/src/lib/protocols/fastcgi.c b/src/lib/protocols/fastcgi.c index 52518b0c9..229a14563 100644 --- a/src/lib/protocols/fastcgi.c +++ b/src/lib/protocols/fastcgi.c @@ -136,20 +136,13 @@ static int fcgi_parse_params(struct ndpi_flow_struct * const flow, return 1; } - flow->http.method = ndpi_http_str2method((const char*)packet->http_method.ptr, - (u_int16_t)packet->http_method.len); + flow->protos.fast_cgi.method = ndpi_http_str2method((const char*)packet->http_method.ptr, + (u_int16_t)packet->http_method.len); ndpi_hostname_sni_set(flow, packet->host_line.ptr, packet->host_line.len, NDPI_HOSTNAME_NORM_ALL); - ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len); - - if (flow->http.url == NULL && packet->http_url_name.len > 0) - { - flow->http.url = ndpi_malloc(packet->http_url_name.len + 1); - if (flow->http.url != NULL) - { - strncpy(flow->http.url, (char const *)packet->http_url_name.ptr, packet->http_url_name.len); - flow->http.url[packet->http_url_name.len] = '\0'; - } - } + strncpy(flow->protos.fast_cgi.user_agent, (char *)packet->user_agent_line.ptr, + ndpi_min(sizeof(flow->protos.fast_cgi.user_agent) - 1, packet->user_agent_line.len)); + strncpy(flow->protos.fast_cgi.url, (char *)packet->http_url_name.ptr, + ndpi_min(sizeof(flow->protos.fast_cgi.url) - 1, packet->http_url_name.len)); return 0; } @@ -167,7 +160,7 @@ static void ndpi_search_fastcgi(struct ndpi_detection_module_struct *ndpi_struct if (packet->payload_packet_len < sizeof(struct FCGI_Header)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -175,21 +168,21 @@ static void ndpi_search_fastcgi(struct ndpi_detection_module_struct *ndpi_struct if (fcgi_hdr->version != 0x01) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } fcgi_type = (enum FCGI_Type)fcgi_hdr->type; if (fcgi_type < FCGI_MIN || fcgi_type > FCGI_MAX) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } content_len = ntohs(fcgi_hdr->contentLength); if (packet->payload_packet_len != sizeof(*fcgi_hdr) + content_len + fcgi_hdr->paddingLength) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -210,9 +203,9 @@ static void ndpi_search_fastcgi(struct ndpi_detection_module_struct *ndpi_struct ndpi_match_host_subprotocol(ndpi_struct, flow, flow->host_server_name, strlen(flow->host_server_name), - &ret_match, NDPI_PROTOCOL_FASTCGI); + &ret_match, NDPI_PROTOCOL_FASTCGI, 1); ndpi_check_dga_name(ndpi_struct, flow, - flow->host_server_name, 1, 0); + flow->host_server_name, 1, 0, 0); if(ndpi_is_valid_hostname((char *)packet->host_line.ptr, packet->host_line.len) == 0) { char str[128]; @@ -242,16 +235,10 @@ static int ndpi_search_fastcgi_extra(struct ndpi_detection_module_struct * ndpi_ return flow->extra_packets_func != NULL; } -void init_fastcgi_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_fastcgi_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("FastCGI", ndpi_struct, *id, - NDPI_PROTOCOL_FASTCGI, - ndpi_search_fastcgi, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("FastCGI", ndpi_struct, + ndpi_search_fastcgi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_FASTCGI); } diff --git a/src/lib/protocols/fins.c b/src/lib/protocols/fins.c index 797b6662e..a966566b3 100644 --- a/src/lib/protocols/fins.c +++ b/src/lib/protocols/fins.c @@ -106,19 +106,13 @@ static void ndpi_search_fins(struct ndpi_detection_module_struct *ndpi_struct, } not_fins: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_fins_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_fins_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("FINS", ndpi_struct, *id, - NDPI_PROTOCOL_FINS, - ndpi_search_fins, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("FINS", ndpi_struct, + ndpi_search_fins, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_FINS); } diff --git a/src/lib/protocols/fix.c b/src/lib/protocols/fix.c index f0fed3360..145ad6b8d 100644 --- a/src/lib/protocols/fix.c +++ b/src/lib/protocols/fix.c @@ -59,17 +59,14 @@ static void ndpi_search_fix(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_fix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_fix_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("FIX", ndpi_struct, *id, - NDPI_PROTOCOL_FIX, - ndpi_search_fix, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("FIX", ndpi_struct, + ndpi_search_fix, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_FIX); } diff --git a/src/lib/protocols/flute.c b/src/lib/protocols/flute.c index 20fd4cec6..af3884423 100644 --- a/src/lib/protocols/flute.c +++ b/src/lib/protocols/flute.c @@ -44,7 +44,7 @@ static void ndpi_search_flute(struct ndpi_detection_module_struct *ndpi_struct, } u_int16_t lct_hdr_len = packet->payload[2] * 4; - if (packet->payload_packet_len <= lct_hdr_len + 43) { + if (packet->payload_packet_len <= lct_hdr_len + 43 + NDPI_STATICSTRING_LEN("<FDT")) { goto not_flute; } @@ -59,18 +59,13 @@ static void ndpi_search_flute(struct ndpi_detection_module_struct *ndpi_struct, } not_flute: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_flute_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_flute_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("FLUTE", ndpi_struct, *id, - NDPI_PROTOCOL_FLUTE, - ndpi_search_flute, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("FLUTE", ndpi_struct, + ndpi_search_flute, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_FLUTE); } diff --git a/src/lib/protocols/ftp_control.c b/src/lib/protocols/ftp_control.c index 266fc414a..03d41d389 100644 --- a/src/lib/protocols/ftp_control.c +++ b/src/lib/protocols/ftp_control.c @@ -589,18 +589,18 @@ static void ndpi_check_ftp_control(struct ndpi_detection_module_struct *ndpi_str /* Exclude SMTP, which uses similar commands. */ if(packet->tcp->dest == twentyfive || packet->tcp->source == twentyfive) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* Break after 8 packets. */ if(flow->packet_counter > 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* Check if we so far detected the protocol in the request or not. */ - if(flow->ftp_control_stage == 0) { + if(flow->l4.tcp.ftp_control_stage == 0) { NDPI_LOG_DBG2(ndpi_struct, "FTP_CONTROL stage 0: \n"); if((payload_len > 0) && ndpi_ftp_control_check_request(ndpi_struct, flow, @@ -612,16 +612,16 @@ static void ndpi_check_ftp_control(struct ndpi_detection_module_struct *ndpi_str Encode the direction of the packet in the stage, so we will know when we need to look for the response packet. */ - flow->ftp_control_stage = packet->packet_direction + 1; + flow->l4.tcp.ftp_control_stage = packet->packet_direction + 1; } } else { - NDPI_LOG_DBG2(ndpi_struct, "FTP_CONTROL stage %u: \n", flow->ftp_control_stage); + NDPI_LOG_DBG2(ndpi_struct, "FTP_CONTROL stage %u: \n", flow->l4.tcp.ftp_control_stage); /* At first check, if this is for sure a response packet (in another direction. If not, do nothing now and return. */ - if((flow->ftp_control_stage - packet->packet_direction) == 1) { + if((flow->l4.tcp.ftp_control_stage - packet->packet_direction) == 1) { return; } @@ -637,7 +637,7 @@ static void ndpi_check_ftp_control(struct ndpi_detection_module_struct *ndpi_str if(flow->l4.tcp.ftp_imap_pop_smtp.password[0] == '\0' && flow->l4.tcp.ftp_imap_pop_smtp.auth_done == 0 && flow->l4.tcp.ftp_imap_pop_smtp.auth_tls == 0) { - flow->ftp_control_stage = 0; + flow->l4.tcp.ftp_control_stage = 0; } else if (flow->l4.tcp.ftp_imap_pop_smtp.auth_tls == 1 && ndpi_struct->cfg.ftp_opportunistic_tls_enabled) { flow->host_server_name[0] = '\0'; /* Remove any data set by other dissectors (eg. SMTP) */ @@ -654,7 +654,7 @@ static void ndpi_check_ftp_control(struct ndpi_detection_module_struct *ndpi_str } else { NDPI_LOG_DBG2(ndpi_struct, "The reply did not seem to belong to FTP_CONTROL, " "resetting the stage to 0\n"); - flow->ftp_control_stage = 0; + flow->l4.tcp.ftp_control_stage = 0; } } } @@ -670,14 +670,9 @@ static void ndpi_search_ftp_control(struct ndpi_detection_module_struct *ndpi_st /* *************************************************************** */ -void init_ftp_control_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("FTP_CONTROL", ndpi_struct, *id, - NDPI_PROTOCOL_FTP_CONTROL, - ndpi_search_ftp_control, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_ftp_control_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("FTP_CONTROL", ndpi_struct, + ndpi_search_ftp_control, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_FTP_CONTROL); } diff --git a/src/lib/protocols/ftp_data.c b/src/lib/protocols/ftp_data.c index 1b5d42ffd..29a0ac33b 100644 --- a/src/lib/protocols/ftp_data.c +++ b/src/lib/protocols/ftp_data.c @@ -238,7 +238,7 @@ static void ndpi_check_ftp_data(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_ftp_data(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { @@ -248,14 +248,10 @@ static void ndpi_search_ftp_data(struct ndpi_detection_module_struct *ndpi_struc } -void init_ftp_data_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ftp_data_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("FTP_DATA", ndpi_struct, *id, - NDPI_PROTOCOL_FTP_DATA, - ndpi_search_ftp_data, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("FTP_DATA", ndpi_struct, + ndpi_search_ftp_data, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_FTP_DATA); } diff --git a/src/lib/protocols/gaijin_entertainment.c b/src/lib/protocols/gaijin_entertainment.c index 7f089ab5d..7da0658d4 100644 --- a/src/lib/protocols/gaijin_entertainment.c +++ b/src/lib/protocols/gaijin_entertainment.c @@ -63,18 +63,13 @@ static void ndpi_search_gaijin(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_gaijin_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_gaijin_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("GaijinEntertainment", ndpi_struct, *id, - NDPI_PROTOCOL_GAIJIN, - ndpi_search_gaijin, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("GaijinEntertainment", ndpi_struct, + ndpi_search_gaijin, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_GAIJIN); } diff --git a/src/lib/protocols/gearman.c b/src/lib/protocols/gearman.c index 5cfb6b425..20b30683c 100644 --- a/src/lib/protocols/gearman.c +++ b/src/lib/protocols/gearman.c @@ -47,16 +47,13 @@ static void ndpi_search_gearman(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_gearman_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_gearman_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Gearman", ndpi_struct, *id, - NDPI_PROTOCOL_GEARMAN, - ndpi_search_gearman, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Gearman", ndpi_struct, + ndpi_search_gearman, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_GEARMAN); } diff --git a/src/lib/protocols/gearup_booster.c b/src/lib/protocols/gearup_booster.c new file mode 100644 index 000000000..6cdd1284f --- /dev/null +++ b/src/lib/protocols/gearup_booster.c @@ -0,0 +1,92 @@ +/* + * gearup_booster.c + * + * Copyright (C) 2011-25 - 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_GEARUP_BOOSTER + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_int_gearup_booster_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found GearUP Booster\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_GEARUP_BOOSTER, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_gearup_booster(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search GearUP Booster\n"); + + if (packet->udp->source != htons(9999) && packet->udp->dest != htons(9999)) + { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + if (flow->packet_counter == 1) + { + if (packet->packet_direction != 0 || packet->udp->dest != htons(9999)) + { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + } + + if (packet->payload_packet_len == 4) + { + // mobile version + if (ntohl(get_u_int32_t(packet->payload, 0)) == 0x00000000) + { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + } else if (packet->payload_packet_len == 8) + { + // desktop version + if (ntohl(get_u_int32_t(packet->payload, 0)) == 0x00000000 || + packet->payload[7] != 0x00 || packet->payload[6] != 0x00 || packet->payload[5] != 0x00) + { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + } else { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + ndpi_int_gearup_booster_add_connection(ndpi_struct, flow); +} + +void init_gearup_booster_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("GeaUP_Booster", ndpi_struct, + ndpi_search_gearup_booster, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_GEARUP_BOOSTER); +} + diff --git a/src/lib/protocols/genshin_impact.c b/src/lib/protocols/genshin_impact.c index abe15afb5..3be67524a 100644 --- a/src/lib/protocols/genshin_impact.c +++ b/src/lib/protocols/genshin_impact.c @@ -67,21 +67,16 @@ static void ndpi_search_genshin_impact(struct ndpi_detection_module_struct *ndpi } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************************** */ -void init_genshin_impact_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_genshin_impact_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("GenshinImpact", - ndpi_struct, *id, - NDPI_PROTOCOL_GENSHIN_IMPACT, - ndpi_search_genshin_impact, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("GenshinImpact", ndpi_struct, + ndpi_search_genshin_impact, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_GENSHIN_IMPACT); } diff --git a/src/lib/protocols/git.c b/src/lib/protocols/git.c index a4db11363..6679bf03e 100644 --- a/src/lib/protocols/git.c +++ b/src/lib/protocols/git.c @@ -68,20 +68,16 @@ static void ndpi_search_git(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************************** */ -void init_git_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_git_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Git", ndpi_struct, *id, - NDPI_PROTOCOL_GIT, - ndpi_search_git, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Git", ndpi_struct, + ndpi_search_git, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_GIT); } diff --git a/src/lib/protocols/glbp.c b/src/lib/protocols/glbp.c new file mode 100644 index 000000000..b5be147d8 --- /dev/null +++ b/src/lib/protocols/glbp.c @@ -0,0 +1,81 @@ +/* + * glbp.c + * + * Gateway Load Balancing Protocol + * + * Copyright (C) 2025 - ntop.org + * Copyright (C) 2025 - V.G <v.gavrilov@securitycode.ru> + * + * 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_GLBP + +#include "ndpi_api.h" +#include "ndpi_private.h" + +#define GLBP_PORT 3222 /* IANA registered */ + +static void ndpi_int_glbp_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found GLBP\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_GLBP, NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_glbp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search GLBP\n"); + + if (packet->payload_packet_len < 12) { + goto exclude; + } + + if ((packet->udp->source != htons(GLBP_PORT)) || + (packet->udp->dest != htons(GLBP_PORT))) + { + goto exclude; + } + + if ((packet->payload[0] > 1) || + (ntohs(get_u_int16_t(packet->payload, 2)) > 1023)) + { + goto exclude; + } + + ndpi_int_glbp_add_connection(ndpi_struct, flow); + return; + +exclude: + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +void init_glbp_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("GLBP", ndpi_struct, + ndpi_search_glbp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_GLBP); +} diff --git a/src/lib/protocols/gnutella.c b/src/lib/protocols/gnutella.c index 1e0f307eb..0acfc1740 100644 --- a/src/lib/protocols/gnutella.c +++ b/src/lib/protocols/gnutella.c @@ -2,7 +2,7 @@ * gnutella.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -42,22 +42,10 @@ static void ndpi_int_gnutella_add_connection(struct ndpi_detection_module_struct static void ndpi_search_gnutella(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - u_int16_t c; NDPI_LOG_DBG(ndpi_struct, "search GNUTELLA\n"); - /* skip packets without payload */ - if (packet->payload_packet_len < 2) { - return; - } if (packet->tcp != NULL) { - /* this case works asymmetrically */ - if (packet->payload_packet_len > 10 && memcmp(packet->payload, "GNUTELLA/", 9) == 0) { - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - /* this case works asymmetrically */ if (packet->payload_packet_len > 17 && memcmp(packet->payload, "GNUTELLA CONNECT/", 17) == 0) { ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); /* Extract some metadata HTTP-like */ @@ -66,281 +54,37 @@ static void ndpi_search_gnutella(struct ndpi_detection_module_struct *ndpi_struc ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len); return; } - - if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET /get/", 9) == 0) - || (memcmp(packet->payload, "GET /uri-res/", 13) == 0) - )) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - for (c = 0; c < packet->parsed_lines; c++) { - if ((packet->line[c].len > 19 && memcmp(packet->line[c].ptr, "User-Agent: Gnutella", 20) == 0) - || (packet->line[c].len > 10 && memcmp(packet->line[c].ptr, "X-Gnutella-", 11) == 0) - || (packet->line[c].len > 7 && memcmp(packet->line[c].ptr, "X-Queue:", 8) == 0) - || (packet->line[c].len > 36 && memcmp(packet->line[c].ptr, - "Content-Type: application/x-gnutella-", 37) == 0)) { - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - /* Extract some metadata HTTP-like */ - if(packet->user_agent_line.ptr != NULL) - ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len); - return; - } - } - } - if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET / HTTP", 10) == 0))) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - if ((packet->user_agent_line.ptr != NULL && packet->user_agent_line.len > 15 - && memcmp(packet->user_agent_line.ptr, "BearShare Lite ", 15) == 0) - || (packet->accept_line.ptr != NULL && packet->accept_line.len > 24 - && memcmp(packet->accept_line.ptr, "application n/x-gnutella", 24) == 0)) { - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - /* Extract some metadata HTTP-like */ - if(packet->user_agent_line.ptr != NULL) - ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len); - } - - } - /* haven't found this pattern in any trace. */ - if (packet->payload_packet_len > 50 && ((memcmp(packet->payload, "GET /get/", 9) == 0) - || (memcmp(packet->payload, "GET /uri-res/", 13) == 0))) { - c = 8; - while (c < (packet->payload_packet_len - 9)) { - if (packet->payload[c] == '?') { - c++; - break; - } - c++; - } - - if (c < (packet->payload_packet_len - 9) && memcmp(&packet->payload[c], "urn:sha1:", 9) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected GET /get/ or GET /uri-res/\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - } - - } - - /* answer to this packet is HTTP/1.1 ..... Content-Type: application/x-gnutella-packets, - * it is searched in the upper paragraph. */ - if (packet->payload_packet_len > 30 && memcmp(packet->payload, "HEAD /gnutella/push-proxy?", 26) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected HEAD /gnutella/push-proxy?\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - /* haven't found any trace with this pattern */ - if (packet->payload_packet_len == 46 - && memcmp(packet->payload, "\x50\x55\x53\x48\x20\x67\x75\x69\x64\x3a", 10) == 0) { - NDPI_LOG_DBG2(ndpi_struct, - "detected \x50\x55\x53\x48\x20\x67\x75\x69\x64\x3a\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - /* haven't found any trace with this pattern */ - if (packet->payload_packet_len > 250 && memcmp(packet->payload, "GET /gnutella/", 14) == 0) - //PATTERN IS :: GET /gnutella/tigertree/v3?urn:tree:tiger/: - { - const u_int16_t end = packet->payload_packet_len - 3; - - c = 13; - while (c < end) { - if ((memcmp(&packet->payload[14], "tigertree/", 10) == 0) - || (end - c > 18 && memcmp(&packet->payload[c], "\r\nUser-Agent: Foxy", 18) == 0) - || (end - c > 44 - && memcmp(&packet->payload[c], - "\r\nAccept: application/tigertree-breadthfirst", - 44) == 0) || (end - c > 10 && memcmp(&packet->payload[c], "\r\nX-Queue:", 10) == 0) - || (end - c > 13 && memcmp(&packet->payload[c], "\r\nX-Features:", 13) == 0)) { - - NDPI_LOG_DBG2(ndpi_struct, "FOXY :: GNUTELLA GET 2 DETECTED\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - - c++; - } - } - /* haven't found any trace with this pattern */ - if (packet->payload_packet_len > 1 && packet->payload[packet->payload_packet_len - 1] == 0x0a - && packet->payload[packet->payload_packet_len - 2] == 0x0a) { - if (packet->payload_packet_len > 3 && memcmp(packet->payload, "GIV", 3) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "MORPHEUS GIV DETECTED\n"); - /* Not Excluding the flow now.. We shall Check the next Packet too for Gnutella Patterns */ - return; - } - } - /* might be super tricky new ssl gnutella transmission, but the certificate is strange... */ - if (packet->payload_packet_len == 46 && get_u_int32_t(packet->payload, 0) == htonl(0x802c0103) && - get_u_int32_t(packet->payload, 4) == htonl(0x01000300) && get_u_int32_t(packet->payload, 8) == htonl(0x00002000) && - get_u_int16_t(packet->payload, 12) == htons(0x0034)) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella len == 46\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if (packet->payload_packet_len == 49 && - memcmp(packet->payload, "\x80\x2f\x01\x03\x01\x00\x06\x00\x00\x00\x20\x00\x00\x34\x00\x00\xff\x4d\x6c", - 19) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella len == 49\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if (packet->payload_packet_len == 89 && memcmp(&packet->payload[43], "\x20\x4d\x6c", 3) == 0 && - memcmp(packet->payload, "\x16\x03\x01\x00\x54\x01\x00\x00\x50\x03\x01\x4d\x6c", 13) == 0 && - memcmp(&packet->payload[76], "\x00\x02\x00\x34\x01\x00\x00\x05", 8) == 0) { - NDPI_LOG_DBG2(ndpi_struct, - "detected gnutella asymmetrically len == 388.\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } else if (packet->payload_packet_len == 82) { - if (get_u_int32_t(packet->payload, 0) == htonl(0x16030100) - && get_u_int32_t(packet->payload, 4) == htonl(0x4d010000) - && get_u_int16_t(packet->payload, 8) == htons(0x4903) - && get_u_int16_t(packet->payload, 76) == htons(0x0002) - && get_u_int32_t(packet->payload, 78) == htonl(0x00340100)) { - NDPI_LOG_DBG2(ndpi_struct, "detected len == 82\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - } } else if (packet->udp != NULL) { /* Check for Mojito-DHT encapsulated gnutella (gtk-gnutella). */ - if (packet->payload_packet_len >= 28 && - ntohl(get_u_int32_t(packet->payload, 24)) == 0x47544b47 /* GTKG */) - { - u_int32_t gnutella_payload_len = le32toh(get_u_int32_t(packet->payload, 19)); - - if (gnutella_payload_len == (u_int32_t)packet->payload_packet_len - 23) - { - NDPI_LOG_DBG2(ndpi_struct, "detected mojito-dht/gnutella udp\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - } - - /* observations: - * all the following patterns send out many packets which are the only ones of their flows, - * often on the very beginning of the traces, or flows with many packets in one direction only. - * but then suddenly, one gets an answer as you can see in netpeker-gnutella-rpc.pcap packet 11483. - * Maybe gnutella tries to send out keys? - */ - if (packet->payload_packet_len == 23 && packet->payload[15] == 0x00 - && packet->payload[16] == 0x41 && packet->payload[17] == 0x01 - && packet->payload[18] == 0x00 && packet->payload[19] == 0x00 - && packet->payload[20] == 0x00 && packet->payload[21] == 0x00 && packet->payload[22] == 0x00) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 23\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - - return; - } - if (packet->payload_packet_len == 35 && packet->payload[25] == 0x49 - && packet->payload[26] == 0x50 && packet->payload[27] == 0x40 - && packet->payload[28] == 0x83 && packet->payload[29] == 0x53 - && packet->payload[30] == 0x43 && packet->payload[31] == 0x50 && packet->payload[32] == 0x41) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 35\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if (packet->payload_packet_len == 32 - && (memcmp(&packet->payload[16], "\x31\x01\x00\x09\x00\x00\x00\x4c\x49\x4d\x45", 11) == 0)) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 32\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if (packet->payload_packet_len == 34 && (memcmp(&packet->payload[25], "SCP@", 4) == 0) - && (memcmp(&packet->payload[30], "DNA@", 4) == 0)) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 34\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if ((packet->payload_packet_len == 73 || packet->payload_packet_len == 96) - && memcmp(&packet->payload[32], "urn:sha1:", 9) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 73,96\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - - if (packet->payload_packet_len >= 3 && memcmp(packet->payload, "GND", 3) == 0) { - if ((packet->payload_packet_len == 8 && (memcmp(&packet->payload[6], "\x01\x00", 2) == 0)) - || (packet->payload_packet_len == 11 && (memcmp(&packet->payload[6], "\x01\x01\x08\x50\x49", 5) - == 0)) || (packet->payload_packet_len == 17 - && - (memcmp - (&packet->payload[6], "\x01\x01\x4c\x05\x50", - 5) == 0)) - || (packet->payload_packet_len == 28 - && (memcmp(&packet->payload[6], "\x01\x01\x54\x0f\x51\x4b\x52\x50\x06\x52", 10) == 0)) - || (packet->payload_packet_len == 41 - && (memcmp(&packet->payload[6], "\x01\x01\x5c\x1b\x50\x55\x53\x48\x48\x10", 10) == 0)) - || (packet->payload_packet_len > 200 && packet->payload_packet_len < 300 && packet->payload[3] == 0x03) - || (packet->payload_packet_len > 300 && (packet->payload[3] == 0x01 || packet->payload[3] == 0x03))) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, GND\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; + if (packet->payload_packet_len > 23) { + u_int32_t gnutella_payload_len = le32toh(get_u_int32_t(packet->payload, 19)); + + if (gnutella_payload_len == (u_int32_t)packet->payload_packet_len - 23 && + ((packet->payload_packet_len > 27 && + ntohl(get_u_int32_t(packet->payload, 24)) == 0x47544b47 /* GTKG */) || + ntohl(get_u_int32_t(packet->payload, packet->payload_packet_len - 4)) == 0x82514b40)) { + NDPI_LOG_DBG2(ndpi_struct, "detected mojito-dht/gnutella udp\n"); + ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); + return; } } + if (packet->payload_packet_len >= 4 && memcmp(packet->payload, "GND\x10", 4) == 0) { NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, GND (2)\n"); ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); return; } - - if ((packet->payload_packet_len == 32) - && memcmp(&packet->payload[16], "\x31\x01\x00\x09\x00\x00\x00", 7) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 32 ii\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - if ((packet->payload_packet_len == 23) - && memcmp(&packet->payload[16], "\x00\x01\x00\x00\x00\x00\x00", 7) == 0) { - NDPI_LOG_DBG2(ndpi_struct, "detected gnutella udp, len = 23 ii\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } } - //neonet detection follows - /* haven't found any trace with this pattern */ - if (packet->tcp != NULL && ntohs(packet->tcp->source) >= 1024 && ntohs(packet->tcp->dest) >= 1024) { - if (flow->l4.tcp.gnutella_stage == 0) { - if (flow->packet_counter == 1 - && (packet->payload_packet_len == 11 - || packet->payload_packet_len == 33 || packet->payload_packet_len == 37)) { - flow->l4.tcp.gnutella_msg_id[0] = packet->payload[4]; - flow->l4.tcp.gnutella_msg_id[1] = packet->payload[6]; - flow->l4.tcp.gnutella_msg_id[2] = packet->payload[8]; - flow->l4.tcp.gnutella_stage = 1 + packet->packet_direction; - return; - } - } else if (flow->l4.tcp.gnutella_stage == 1 + packet->packet_direction) { - if (flow->packet_counter == 2 && (packet->payload_packet_len == 33 || packet->payload_packet_len == 22) - && flow->l4.tcp.gnutella_msg_id[0] == packet->payload[0] - && flow->l4.tcp.gnutella_msg_id[1] == packet->payload[2] - && flow->l4.tcp.gnutella_msg_id[2] == packet->payload[4]) { - NDPI_LOG_DBG2(ndpi_struct, "GNUTELLA DETECTED due to message ID match (NEONet protocol)\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - } else if (flow->l4.tcp.gnutella_stage == 2 - packet->packet_direction) { - if (flow->packet_counter == 2 && (packet->payload_packet_len == 10 || packet->payload_packet_len == 75) - && flow->l4.tcp.gnutella_msg_id[0] == packet->payload[0] - && flow->l4.tcp.gnutella_msg_id[1] == packet->payload[2] - && flow->l4.tcp.gnutella_msg_id[2] == packet->payload[4]) { - NDPI_LOG_DBG2(ndpi_struct, "GNUTELLA DETECTED due to message ID match (NEONet protocol)\n"); - ndpi_int_gnutella_add_connection(ndpi_struct, flow, NDPI_CONFIDENCE_DPI); - return; - } - } - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_gnutella_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_gnutella_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Gnutella", ndpi_struct, *id, - NDPI_PROTOCOL_GNUTELLA, - ndpi_search_gnutella, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Gnutella", ndpi_struct, + ndpi_search_gnutella, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_GNUTELLA); } diff --git a/src/lib/protocols/gtp.c b/src/lib/protocols/gtp.c index b26247a9c..1a25a6315 100644 --- a/src/lib/protocols/gtp.c +++ b/src/lib/protocols/gtp.c @@ -1,7 +1,7 @@ /* * gtp.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -115,7 +115,7 @@ static void ndpi_check_gtp(struct ndpi_detection_module_struct *ndpi_struct, str } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -127,14 +127,10 @@ static void ndpi_search_gtp(struct ndpi_detection_module_struct *ndpi_struct, st } -void init_gtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_gtp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("GTP", ndpi_struct, *id, - NDPI_PROTOCOL_GTP, - ndpi_search_gtp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("GTP", ndpi_struct, + ndpi_search_gtp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_GTP); } diff --git a/src/lib/protocols/guildwars.c b/src/lib/protocols/guildwars.c deleted file mode 100644 index 202c425bd..000000000 --- a/src/lib/protocols/guildwars.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * guildwars.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GUILDWARS - -#include "ndpi_api.h" -#include "ndpi_private.h" - - -static void ndpi_int_guildwars_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GUILDWARS, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - -static void ndpi_search_guildwars_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search guildwars\n"); - - if (packet->payload_packet_len == 64 && get_u_int16_t(packet->payload, 1) == ntohs(0x050c) - && memcmp(&packet->payload[50], "@2&P", 4) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 29.350\n"); - ndpi_int_guildwars_add_connection(ndpi_struct, flow); - return; - } - if (packet->payload_packet_len == 16 && get_u_int16_t(packet->payload, 1) == ntohs(0x040c) - && get_u_int16_t(packet->payload, 4) == ntohs(0xa672) - && packet->payload[8] == 0x01 && packet->payload[12] == 0x04) { - NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 29.350\n"); - ndpi_int_guildwars_add_connection(ndpi_struct, flow); - return; - } - if (packet->payload_packet_len == 21 && get_u_int16_t(packet->payload, 0) == ntohs(0x0100) - && get_u_int32_t(packet->payload, 5) == ntohl(0xf1001000) - && packet->payload[9] == 0x01) { - NDPI_LOG_INFO(ndpi_struct, "found GuildWars version 216.107.245.50\n"); - ndpi_int_guildwars_add_connection(ndpi_struct, flow); - return; - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - - -void init_guildwars_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("Guildwars", ndpi_struct, *id, - NDPI_PROTOCOL_GUILDWARS, - ndpi_search_guildwars_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/guildwars2.c b/src/lib/protocols/guildwars2.c new file mode 100644 index 000000000..be8740a94 --- /dev/null +++ b/src/lib/protocols/guildwars2.c @@ -0,0 +1,62 @@ +/* + * guildwars2.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-25 - 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" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_GUILDWARS2 + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_search_guildwars2_tcp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Guild Wars 2\n"); + + if (packet->payload_packet_len > 50) + { + /* The connection starts with this preamble containing client info. + * The TLS handshake begins around packet 12. */ + if ((memcmp(packet->payload, "P /Sts/Connect STS/1.0", 22) == 0) || + (memcmp(packet->payload, "P /Auth/StartTls STS/1.0", 24) == 0) || + (memcmp(packet->payload, "STS/1.0 400 Success", 19) == 0)) + { + NDPI_LOG_INFO(ndpi_struct, "found Guild Wars 2\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GUILDWARS2, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + return; + } + } + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + + +void init_guildwars2_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("GuildWars2", ndpi_struct, + ndpi_search_guildwars2_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_GUILDWARS2); +} diff --git a/src/lib/protocols/h323.c b/src/lib/protocols/h323.c index 4a792a659..db6eb0b69 100644 --- a/src/lib/protocols/h323.c +++ b/src/lib/protocols/h323.c @@ -68,18 +68,13 @@ static void ndpi_search_h323(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_h323_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_h323_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("H323", ndpi_struct, *id, - NDPI_PROTOCOL_H323, - ndpi_search_h323, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("H323", ndpi_struct, + ndpi_search_h323, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_H323); } diff --git a/src/lib/protocols/halflife2_and_mods.c b/src/lib/protocols/halflife2_and_mods.c deleted file mode 100644 index e18434a95..000000000 --- a/src/lib/protocols/halflife2_and_mods.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * halflife2_and_mods.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_HALFLIFE2 - -#include "ndpi_api.h" -#include "ndpi_private.h" - - -static void ndpi_int_halflife2_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HALFLIFE2, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - -static void ndpi_search_halflife2(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search halflife2\n"); - - if (flow->l4.udp.halflife2_stage == 0) { - if (packet->payload_packet_len >= 20 - && get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF - && get_u_int32_t(packet->payload, packet->payload_packet_len - 4) == htonl(0x30303000)) { - flow->l4.udp.halflife2_stage = 1 + packet->packet_direction; - NDPI_LOG_DBG2(ndpi_struct, - "halflife2 client req detected, waiting for server reply\n"); - return; - } - } else if (flow->l4.udp.halflife2_stage == 2 - packet->packet_direction) { - if (packet->payload_packet_len >= 20 - && get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF - && get_u_int32_t(packet->payload, packet->payload_packet_len - 4) == htonl(0x30303000)) { - ndpi_int_halflife2_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "found halflife2\n"); - return; - } - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - - -void init_halflife2_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("HalfLife2", ndpi_struct, *id, - NDPI_PROTOCOL_HALFLIFE2, - ndpi_search_halflife2, - 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/hamachi.c b/src/lib/protocols/hamachi.c new file mode 100644 index 000000000..b30f0935b --- /dev/null +++ b/src/lib/protocols/hamachi.c @@ -0,0 +1,173 @@ +/* + * hamachi.c + * + * LogMeIn Hamachi + * + * Copyright (C) 2025 - ntop.org + * Copyright (C) 2025 - V.G <v.gavrilov@securitycode.ru> + * + * 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_HAMACHI + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_int_hamachi_add_connection(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found Hamachi\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HAMACHI, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + +static void search_hamachi_tcp(struct ndpi_detection_module_struct* ndpi_struct, + struct ndpi_flow_struct* flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Hamachi over TCP\n"); + + if (packet->payload_packet_len > 300 && + ntohl(get_u_int32_t(packet->payload, 0)) == (u_int32_t)(packet->payload_packet_len-4) && + ntohl(get_u_int32_t(packet->payload, 12)) == 0x7B7A0DAD) + { + ndpi_int_hamachi_add_connection(ndpi_struct, flow); + return; + } + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +static void search_hamachi_udp(struct ndpi_detection_module_struct* ndpi_struct, + struct ndpi_flow_struct* flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Hamachi over UDP\n"); + + /* Skip initial 76-byte handshake (relay mode only) */ + if (flow->packet_counter <= 2 && packet->payload_packet_len == 76) + { + if (get_u_int64_t(packet->payload, 0) != 0 || + get_u_int64_t(packet->payload, 68) != 0) + { + goto exclude_hamachi; + } + return; /* Likely Hamachi handshake */ + } + + /* Empirically observed minimum */ + if (packet->payload_packet_len < 46) { + goto exclude_hamachi; + } + + /* Reasonable value for heuristics */ + u_int32_t seq = ntohl(get_u_int32_t(packet->payload, 4)); + if (seq == 0 || seq > 0xFFFF) { + goto exclude_hamachi; + } + + u_int32_t hamachi_l = ntohl(get_u_int32_t(packet->payload, 0)); + u_int16_t hamachi_s = ntohs(get_u_int16_t(packet->payload, 8)); + + if (hamachi_l == 0xFFFFFFFF || hamachi_l == 0) + { + goto exclude_hamachi; + } + + u_int8_t dir = packet->packet_direction; + + /* + * Hamachi detection logic using 4-stage state machine: + * Stage 0: Initial state, waiting for first packet + * Stage 1: Got packet from dir=0, waiting for dir=1 to complete verification + * Stage 2: Got packet from dir=1, waiting for dir=0 to complete verification + * Stage 3: Both directions verified, protocol identified + * + * Each direction has constant values in bytes 0-3 and 8-9 throughout the session. + * We need to verify consistency within each direction and collect samples from both. + */ + + if (flow->l4.udp.hamachi_stage == 0) { + /* Store signature values from first packet and set stage based on direction */ + flow->l4.udp.hamachi_long[dir] = hamachi_l; + flow->l4.udp.hamachi_short[dir] = hamachi_s; + flow->l4.udp.hamachi_stage = dir ? 2 : 1; /* Stage 1 for dir=0, stage 2 for dir=1 */ + return; + } + + if (flow->l4.udp.hamachi_stage == 1 || flow->l4.udp.hamachi_stage == 2) { + u_int8_t stored_dir = flow->l4.udp.hamachi_stage - 1; + /* Current packet is same direction - verify */ + if (dir == stored_dir) { + if (hamachi_l != flow->l4.udp.hamachi_long[dir] || + hamachi_s != flow->l4.udp.hamachi_short[dir]) + { + goto exclude_hamachi; + } + return; /* Still waiting for opposite direction */ + } + + /* Opposite direction - verify signatures differ */ + if (hamachi_l == flow->l4.udp.hamachi_long[stored_dir] || + hamachi_s == flow->l4.udp.hamachi_short[stored_dir]) + { + goto exclude_hamachi; + } + + flow->l4.udp.hamachi_long[dir] = hamachi_l; + flow->l4.udp.hamachi_short[dir] = hamachi_s; + flow->l4.udp.hamachi_stage = 3; + return; + } + + if (flow->l4.udp.hamachi_stage == 3) { + /* Final consistency check */ + if (hamachi_l != flow->l4.udp.hamachi_long[dir] || + hamachi_s != flow->l4.udp.hamachi_short[dir]) + { + goto exclude_hamachi; + } + + ndpi_int_hamachi_add_connection(ndpi_struct, flow); + return; + } + +exclude_hamachi: + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +static void ndpi_search_hamachi(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) +{ + if(flow->l4_proto == IPPROTO_TCP) + search_hamachi_tcp(ndpi_struct, flow); + else + search_hamachi_udp(ndpi_struct, flow); +} + +void init_hamachi_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("Hamachi", ndpi_struct, + ndpi_search_hamachi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HAMACHI); +} diff --git a/src/lib/protocols/haproxy.c b/src/lib/protocols/haproxy.c index b932d99fa..63d1d63b0 100644 --- a/src/lib/protocols/haproxy.c +++ b/src/lib/protocols/haproxy.c @@ -39,13 +39,13 @@ static void ndpi_search_haproxy(struct ndpi_detection_module_struct *ndpi_struct if (packet->payload_packet_len < NDPI_STATICSTRING_LEN("PROXY TCP")) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (strncmp((char *)packet->payload, "PROXY TCP", NDPI_STATICSTRING_LEN("PROXY TCP")) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -53,27 +53,23 @@ static void ndpi_search_haproxy(struct ndpi_detection_module_struct *ndpi_struct haproxy_end = (uint8_t *)ndpi_strnstr((char *)packet->payload, "\r\n", packet->payload_packet_len); if (haproxy_end == NULL) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } haproxy_end += 2; if (packet->payload_packet_len - (haproxy_end - packet->payload) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ndpi_int_haproxy_add_connection(ndpi_struct, flow); } -void init_haproxy_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_haproxy_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HAProxy", ndpi_struct, *id, - NDPI_PROTOCOL_HAPROXY, - ndpi_search_haproxy, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("HAProxy", ndpi_struct, + ndpi_search_haproxy, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HAPROXY); } diff --git a/src/lib/protocols/hart-ip.c b/src/lib/protocols/hart-ip.c index 600470dd4..bd3c0fad9 100644 --- a/src/lib/protocols/hart-ip.c +++ b/src/lib/protocols/hart-ip.c @@ -97,17 +97,13 @@ static void ndpi_search_hart_ip(struct ndpi_detection_module_struct *ndpi_struct } not_hart_ip: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_hart_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_hart_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HART-IP", ndpi_struct, *id, - NDPI_PROTOCOL_HART_IP, - ndpi_search_hart_ip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("HART-IP", ndpi_struct, + ndpi_search_hart_ip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HART_IP); } diff --git a/src/lib/protocols/hcl_notes.c b/src/lib/protocols/hcl_notes.c new file mode 100644 index 000000000..aa75744e5 --- /dev/null +++ b/src/lib/protocols/hcl_notes.c @@ -0,0 +1,70 @@ +/* + * hcl_notes.c + * + * Copyright (C) 2012-22 - 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_HCL_NOTES + +#include "ndpi_api.h" +#include "ndpi_private.h" + +/* ************************************ */ + +static void ndpi_check_hcl_notes(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int32_t payload_len = packet->payload_packet_len; + + flow->l4.tcp.hcl_notes_packet_id++; + + if((flow->l4.tcp.hcl_notes_packet_id == 1) && + ndpi_seen_flow_beginning(flow)) { + if(payload_len > 16) { + char hcl_notes_header[] = { 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x02, 0x0F }; + + if(memcmp(&packet->payload[6], hcl_notes_header, sizeof(hcl_notes_header)) == 0) { + NDPI_LOG_INFO(ndpi_struct, "found HCL Notes\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_HCL_NOTES, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + return; + } + + } else if(flow->l4.tcp.hcl_notes_packet_id <= 3) return; + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + +static void ndpi_search_hcl_notes(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + NDPI_LOG_DBG(ndpi_struct, "search hcl_notes\n"); + + ndpi_check_hcl_notes(ndpi_struct, flow); +} + + +void init_hcl_notes_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("HCL_Notes", ndpi_struct, + ndpi_search_hcl_notes, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HCL_NOTES); +} + diff --git a/src/lib/protocols/hislip.c b/src/lib/protocols/hislip.c index 98eea373a..78d3a9928 100644 --- a/src/lib/protocols/hislip.c +++ b/src/lib/protocols/hislip.c @@ -56,17 +56,13 @@ static void ndpi_search_hislip(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_hislip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_hislip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HiSLIP", ndpi_struct, *id, - NDPI_PROTOCOL_HISLIP, - ndpi_search_hislip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("HiSLIP", ndpi_struct, + ndpi_search_hislip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HISLIP); } diff --git a/src/lib/protocols/hl7.c b/src/lib/protocols/hl7.c index baeaf69d7..2b086ebe2 100644 --- a/src/lib/protocols/hl7.c +++ b/src/lib/protocols/hl7.c @@ -66,17 +66,13 @@ static void ndpi_search_hl7(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_hl7_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_hl7_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HL7", ndpi_struct, *id, - NDPI_PROTOCOL_HL7, - ndpi_search_hl7, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("HL7", ndpi_struct, + ndpi_search_hl7, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HL7); } diff --git a/src/lib/protocols/hots.c b/src/lib/protocols/hots.c index 38420ce3a..5e91acfb6 100644 --- a/src/lib/protocols/hots.c +++ b/src/lib/protocols/hots.c @@ -60,17 +60,14 @@ void ndpi_search_hots(struct ndpi_detection_module_struct *ndpi_struct, struct n break; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_hots_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_hots_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HOTS", ndpi_struct, *id, - NDPI_PROTOCOL_HOTS, - ndpi_search_hots, - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* Only IPv4 UDP traffic is expected. */ - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("HOTS", ndpi_struct, + ndpi_search_hots, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* Only IPv4 UDP traffic is expected. */ + 1, NDPI_PROTOCOL_HOTS); } diff --git a/src/lib/protocols/hpvirtgrp.c b/src/lib/protocols/hpvirtgrp.c index 3e8e03ccc..37d38d501 100644 --- a/src/lib/protocols/hpvirtgrp.c +++ b/src/lib/protocols/hpvirtgrp.c @@ -51,21 +51,16 @@ static void ndpi_search_hpvirtgrp(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************************** */ -void init_hpvirtgrp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_hpvirtgrp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HP Virtual Machine Group Management", - ndpi_struct, *id, - NDPI_PROTOCOL_HPVIRTGRP, - ndpi_search_hpvirtgrp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("HP Virtual Machine Group Management", ndpi_struct, + ndpi_search_hpvirtgrp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HPVIRTGRP); } diff --git a/src/lib/protocols/hsrp.c b/src/lib/protocols/hsrp.c index de980344c..d6bf51dba 100644 --- a/src/lib/protocols/hsrp.c +++ b/src/lib/protocols/hsrp.c @@ -1,7 +1,7 @@ /* * ayiya.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -77,18 +77,13 @@ static void ndpi_search_hsrp(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_hsrp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("HSRP", ndpi_struct, *id, - NDPI_PROTOCOL_HSRP, - ndpi_search_hsrp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_hsrp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("HSRP", ndpi_struct, + ndpi_search_hsrp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_HSRP); } diff --git a/src/lib/protocols/http.c b/src/lib/protocols/http.c index 9064f7282..26375fc64 100644 --- a/src/lib/protocols/http.c +++ b/src/lib/protocols/http.c @@ -1,7 +1,7 @@ /* * http.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -199,11 +199,15 @@ static void ndpi_http_check_human_redeable_content(struct ndpi_detection_module_ && (content[3] == 0x00)) { /* Looks like compressed data */ } else { - char str[32]; - - snprintf(str, sizeof(str), "Susp content %02X%02X%02X%02X", - content[0], content[1], content[2], content[3]); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_CONTENT, str); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_CONTENT)) { + char str[32]; + + snprintf(str, sizeof(str), "Susp content %02X%02X%02X%02X", + content[0], content[1], content[2], content[3]); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_CONTENT, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_CONTENT, NULL); + } } } } @@ -281,7 +285,7 @@ static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_mo u_int app_len_avail = packet->content_line.len-app_len; if(strncasecmp(app, "mpeg", app_len_avail) == 0) { - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_STREAMING; + flow->category = NDPI_PROTOCOL_CATEGORY_STREAMING; return(flow->category); } else { if(app_len_avail > 3) { @@ -301,7 +305,7 @@ static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_mo if(strncasecmp(app, cmp_mimes[i], app_len_avail) == 0) { char str[64]; - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; NDPI_LOG_INFO(ndpi_struct, "found HTTP file transfer"); snprintf(str, sizeof(str), "Found binary mime %s", cmp_mimes[i]); @@ -330,7 +334,7 @@ static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_mo char str[64]; snprintf(str, sizeof(str), "Found mime exe %s", cmp_mimes[i]); - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; ndpi_set_binary_application_transfer(ndpi_struct, flow, str); NDPI_LOG_INFO(ndpi_struct, "Found executable HTTP transfer"); } @@ -393,7 +397,7 @@ static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_mo binary_exec_file_ext[i], ATTACHMENT_LEN) == 0) { snprintf(str, sizeof(str), "Found file extn %s", binary_exec_file_ext[i]); - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; + flow->category = NDPI_PROTOCOL_CATEGORY_DOWNLOAD_FT; ndpi_set_binary_application_transfer(ndpi_struct, flow, str); NDPI_LOG_INFO(ndpi_struct, "found executable HTTP transfer"); return(flow->category); @@ -413,13 +417,13 @@ static ndpi_protocol_category_t ndpi_http_check_content(struct ndpi_detection_mo case 'a': if(strncasecmp((const char *)packet->content_line.ptr, "audio", ndpi_min(packet->content_line.len, 5)) == 0) - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; + flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; break; case 'v': if(strncasecmp((const char *)packet->content_line.ptr, "video", ndpi_min(packet->content_line.len, 5)) == 0) - flow->guessed_category = flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; + flow->category = NDPI_PROTOCOL_CATEGORY_MEDIA; break; } } @@ -493,7 +497,7 @@ static void ndpi_http_parse_subprotocol(struct ndpi_detection_module_struct *ndp if(packet->server_line.len > 7 && strncmp((const char *)packet->server_line.ptr, "ntopng ", 7) == 0) { ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_NTOP, NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); - ndpi_unset_risk(flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); } /* Matching on Content-Type. @@ -571,7 +575,7 @@ static void ndpi_http_parse_subprotocol(struct ndpi_detection_module_struct *ndp origin_hostname, origin_hostname_len, &ret_match, - master_protocol); + master_protocol, 1); } } } @@ -642,12 +646,22 @@ static void ndpi_http_parse_subprotocol(struct ndpi_detection_module_struct *ndp ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STEAM, master_protocol, NDPI_CONFIDENCE_DPI); } + if ((flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN) && + flow->http.user_agent && strstr(flow->http.user_agent, "AirControl Agent v1.0")) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_UBNTAC2, master_protocol, NDPI_CONFIDENCE_DPI); + } + + if ((flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN) && + flow->http.user_agent && strstr(flow->http.user_agent, "gtk-gnutella")) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_GNUTELLA, master_protocol, NDPI_CONFIDENCE_DPI); + } if(flow->http.request_header_observed) { if(flow->http.first_payload_after_header_observed == 0) { /* Skip the last part of the HTTP request */ flow->http.first_payload_after_header_observed = 1; - } else if(flow->http.is_form && (packet->payload_packet_len > 0)) { + } else if(flow->http.is_form && (packet->payload_packet_len > 0) && + (ndpi_struct->cfg.http_username_enabled || ndpi_struct->cfg.http_password_enabled)) { /* Response payload */ char *dup = ndpi_strndup((const char *)packet->payload, packet->payload_packet_len); @@ -664,9 +678,9 @@ static void ndpi_http_parse_subprotocol(struct ndpi_detection_module_struct *ndp break; if((strcmp(key, "user") == 0) || (strcmp(key, "username") == 0)) { - if(!flow->http.username) flow->http.username = ndpi_strdup(value); + if(!flow->http.username && ndpi_struct->cfg.http_username_enabled) flow->http.username = ndpi_strdup(value); } else if((strcmp(key, "pwd") == 0) || (strcmp(key, "password") == 0)) { - if(!flow->http.password) flow->http.password = ndpi_strdup(value); + if(!flow->http.password && ndpi_struct->cfg.http_password_enabled) flow->http.password = ndpi_strdup(value); ndpi_set_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS, "Found password"); } @@ -713,10 +727,14 @@ static void ndpi_check_user_agent(struct ndpi_detection_module_struct *ndpi_stru float upper_case_ratio = (float)upper_case_count / (float)ua_len; if (upper_case_ratio >= 0.2f) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_USER_AGENT)) { + char str[64]; - snprintf(str, sizeof(str), "UA %s", ua); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + snprintf(str, sizeof(str), "UA %s", ua); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, NULL); + } } } } @@ -724,20 +742,28 @@ static void ndpi_check_user_agent(struct ndpi_detection_module_struct *ndpi_stru if((!strncmp(ua, "<?", 2)) || strchr(ua, '$') ) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_USER_AGENT)) { + char str[64]; - snprintf(str, sizeof(str), "UA %s", ua); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + snprintf(str, sizeof(str), "UA %s", ua); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, NULL); + } } if((double_slash = strstr(ua, "://")) != NULL) { if(double_slash != ua) /* We're not at the beginning of the user agent */{ if((double_slash[-1] != 'p') /* http:// */ && (double_slash[-1] != 's') /* https:// */) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_USER_AGENT)) { + char str[64]; - snprintf(str, sizeof(str), "UA %s", ua); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + snprintf(str, sizeof(str), "UA %s", ua); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT, NULL); + } } } } @@ -765,11 +791,15 @@ static void ndpi_check_user_agent(struct ndpi_detection_module_struct *ndpi_stru || ndpi_strncasestr(ua, "Crawler", ua_len) || ndpi_strncasestr(ua, "Bot", ua_len) /* bot/robot */ ) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_CRAWLER_BOT)) { + char str[64]; - snprintf(str, sizeof(str), "UA %s", ua); + snprintf(str, sizeof(str), "UA %s", ua); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_CRAWLER_BOT, str); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_CRAWLER_BOT, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_CRAWLER_BOT, NULL); + } } } @@ -838,7 +868,7 @@ static void http_process_user_agent(struct ndpi_detection_module_struct *ndpi_st } if(ndpi_user_agent_set(flow, ua_ptr, ua_ptr_len) != NULL) { - ndpi_unset_risk(flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT); ndpi_check_user_agent(ndpi_struct, flow, flow->http.user_agent, ua_ptr_len); } else { NDPI_LOG_DBG2(ndpi_struct, "Could not set HTTP user agent (already set?)\n"); @@ -864,10 +894,14 @@ static void ndpi_check_numeric_ip(struct ndpi_detection_module_struct *ndpi_stru ip_addr.s_addr = inet_addr(buf); if(strcmp(inet_ntoa(ip_addr), buf) == 0) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_NUMERIC_IP_HOST)) { + char str[64]; - snprintf(str, sizeof(str), "Found host %s", buf); - ndpi_set_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST, str); + snprintf(str, sizeof(str), "Found host %s", buf); + ndpi_set_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST, NULL); + } } } @@ -876,12 +910,24 @@ static void ndpi_check_numeric_ip(struct ndpi_detection_module_struct *ndpi_stru static void ndpi_check_http_url(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, char *url) { - if(strstr(url, "<php>") != NULL /* PHP code in the URL */) - ndpi_set_risk(ndpi_struct, flow, NDPI_URL_POSSIBLE_RCE_INJECTION, "PHP code in URL"); - else if(strncmp(url, "/shell?", 7) == 0) - ndpi_set_risk(ndpi_struct, flow, NDPI_URL_POSSIBLE_RCE_INJECTION, "Possible WebShell detected"); - else if(strncmp(url, "/.", 2) == 0) - ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "URL starting with dot"); + char msg[512]; + ndpi_risk_enum r; + + if(strstr(url, "<php>") != NULL /* PHP code in the URL */) { + r = NDPI_URL_POSSIBLE_RCE_INJECTION; + snprintf(msg, sizeof(msg), "PHP code in URL [%s]", url); + } else if(strncmp(url, "/shell?", 7) == 0) { + r = NDPI_URL_POSSIBLE_RCE_INJECTION; + snprintf(msg, sizeof(msg), "Possible WebShell detected [%s]", url); + } else if(strncmp(url, "/.", 2) == 0) { + r = NDPI_POSSIBLE_EXPLOIT; + snprintf(msg, sizeof(msg), "URL starting with dot [%s]", url); + } else { + r = ndpi_validate_url(ndpi_struct, flow, url); + return; + } + + ndpi_set_risk(ndpi_struct, flow, r, msg); } /* ************************************************************* */ @@ -910,11 +956,19 @@ static void ndpi_check_http_server(struct ndpi_detection_module_struct *ndpi_str char msg[64]; if((off == 7) && (version < MIN_APACHE_VERSION)) { - snprintf(msg, sizeof(msg), "Obsolete Apache server %s", buf); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, msg); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_OBSOLETE_SERVER)) { + snprintf(msg, sizeof(msg), "Obsolete Apache server %s", buf); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, msg); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, NULL); + } } else if((off == 6) && (version < MIN_NGINX_VERSION)) { - snprintf(msg, sizeof(msg), "Obsolete nginx server %s", buf); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, msg); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_OBSOLETE_SERVER)) { + snprintf(msg, sizeof(msg), "Obsolete nginx server %s", buf); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, msg); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER, NULL); + } } } } @@ -922,7 +976,11 @@ static void ndpi_check_http_server(struct ndpi_detection_module_struct *ndpi_str /* Check server content */ for(i=0; i<server_len; i++) { if(!ndpi_isprint(server[i])) { - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, "Suspicious Agent"); + char msg[64]; + + snprintf(msg, sizeof(msg), "Suspicious Agent [%.*s]", server_len, server); + + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, msg); break; } } @@ -1025,7 +1083,8 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ } } - if(packet->authorization_line.ptr != NULL) { + if(packet->authorization_line.ptr != NULL && + (ndpi_struct->cfg.http_username_enabled || ndpi_struct->cfg.http_password_enabled)) { const char *a = NULL, *b = NULL; NDPI_LOG_DBG2(ndpi_struct, "Authorization line found %.*s\n", @@ -1048,8 +1107,10 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ if(double_dot) { double_dot[0] = '\0'; - flow->http.username = ndpi_strdup((char*)content); - flow->http.password = ndpi_strdup(&double_dot[1]); + if(ndpi_struct->cfg.http_username_enabled) + flow->http.username = ndpi_strdup((char*)content); + if(ndpi_struct->cfg.http_password_enabled) + flow->http.password = ndpi_strdup(&double_dot[1]); } ndpi_free(content); @@ -1063,10 +1124,12 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ } if((packet->referer_line.ptr != NULL) && (flow->http.referer == NULL)) - flow->http.referer = ndpi_strndup(packet->referer_line.ptr, packet->referer_line.len); + if(ndpi_struct->cfg.http_referer_enabled) + flow->http.referer = ndpi_strndup((const char *)packet->referer_line.ptr, packet->referer_line.len); if((packet->host_line.ptr != NULL) && (flow->http.host == NULL)) - flow->http.host = ndpi_strndup(packet->host_line.ptr, packet->host_line.len); + if(ndpi_struct->cfg.http_host_enabled) + flow->http.host = ndpi_strndup((const char *)packet->host_line.ptr, packet->host_line.len); if(packet->content_line.ptr != NULL) { NDPI_LOG_DBG2(ndpi_struct, "Content Type line found %.*s\n", @@ -1075,16 +1138,18 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ if(flow->http.response_status_code == 0) { /* Request */ if((flow->http.request_content_type == NULL) && (packet->content_line.len > 0)) { - int len = packet->content_line.len + 1; - - flow->http.request_content_type = ndpi_malloc(len); - if(flow->http.request_content_type) { - strncpy(flow->http.request_content_type, (char*)packet->content_line.ptr, - packet->content_line.len); - flow->http.request_content_type[packet->content_line.len] = '\0'; + if(ndpi_struct->cfg.http_request_content_type_enabled) { + int len = packet->content_line.len + 1; + + flow->http.request_content_type = ndpi_malloc(len); + if(flow->http.request_content_type) { + strncpy(flow->http.request_content_type, (char*)packet->content_line.ptr, + packet->content_line.len); + flow->http.request_content_type[packet->content_line.len] = '\0'; + } } - if(ndpi_strnstr(flow->http.request_content_type, "x-www-form-urlencoded", packet->content_line.len)) + if(ndpi_strnstr((char*)packet->content_line.ptr, "x-www-form-urlencoded", packet->content_line.len)) flow->http.is_form = 1; } } else { @@ -1098,7 +1163,7 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ packet->content_line.len); flow->http.content_type[packet->content_line.len] = '\0'; - flow->guessed_category = flow->category = ndpi_http_check_content(ndpi_struct, flow); + flow->category = ndpi_http_check_content(ndpi_struct, flow); } } } @@ -1122,12 +1187,18 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ if(ndpi_is_valid_hostname((char *)packet->host_line.ptr, packet->host_line.len) == 0) { char str[128]; - - snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); - ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_INVALID_CHARACTERS)) { + snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, NULL); + } /* This looks like an attack */ - ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "Suspicious hostname: attack ?"); + + snprintf(str, sizeof(str), "Suspicious hostname [%.*s]: attack ?", packet->host_line.len, (char *)packet->host_line.ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, str); } double_col = strchr((char*)flow->host_server_name, ':'); @@ -1137,11 +1208,15 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ /* IPv4 */ if(ndpi_struct->packet.iph->daddr != inet_addr(flow->host_server_name)) { - char buf[64], msg[128]; - - snprintf(msg, sizeof(msg), "Expected %s, found %s", - ndpi_intoav4(ntohl(ndpi_struct->packet.iph->daddr), buf, sizeof(buf)), flow->host_server_name); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, msg); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char buf[64], msg[128]; + + snprintf(msg, sizeof(msg), "Expected %s, found %s", + ndpi_intoav4(ntohl(ndpi_struct->packet.iph->daddr), buf, sizeof(buf)), flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, msg); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } } } } @@ -1151,7 +1226,7 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ ndpi_http_parse_subprotocol(ndpi_struct, flow, hostname_just_set); if(hostname_just_set && strlen(flow->host_server_name) > 0) { - ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0); + ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 0, 0); } ndpi_check_http_header(ndpi_struct, flow); @@ -1278,82 +1353,118 @@ static void ndpi_check_http_header(struct ndpi_detection_module_struct *ndpi_str switch(packet->line[i].ptr[0]) { case 'A': if(is_a_suspicious_header(suspicious_http_header_keys_A, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'C': if(is_a_suspicious_header(suspicious_http_header_keys_C, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'M': if(is_a_suspicious_header(suspicious_http_header_keys_M, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'O': if(is_a_suspicious_header(suspicious_http_header_keys_O, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'R': if(is_a_suspicious_header(suspicious_http_header_keys_R, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'S': if(is_a_suspicious_header(suspicious_http_header_keys_S, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'T': if(is_a_suspicious_header(suspicious_http_header_keys_T, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'U': if(is_a_suspicious_header(suspicious_http_header_keys_U, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } break; case 'X': if(is_a_suspicious_header(suspicious_http_header_keys_X, packet->line[i])) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_HTTP_SUSPICIOUS_HEADER)) { + char str[64]; - snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); - ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + snprintf(str, sizeof(str), "Found %.*s", packet->line[i].len, packet->line[i].ptr); + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER, NULL); + } return; } @@ -1394,7 +1505,10 @@ static void parse_response_code(struct ndpi_detection_module_struct *ndpi_struct || ((flow->http.method == NDPI_HTTP_METHOD_GET) && (strncmp(slash, "/wp-content/uploads/", 20) == 0)) )) { /* Example of popular exploits https://www.wordfence.com/blog/2022/05/millions-of-attacks-target-tatsu-builder-plugin/ */ - ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "Possible Wordpress Exploit"); + char str[128]; + + snprintf(str, sizeof(str), "Possible Wordpress Exploit [%s]", slash); + ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, str); } } } @@ -1490,7 +1604,7 @@ static void reset(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct, "Reset status and risks\n"); - /* Reset everthing in flow->http. + /* Reset everything in flow->http. TODO: Could we be smarter? Probably some info don't change across different req-res transactions... */ @@ -1517,6 +1631,14 @@ static void reset(struct ndpi_detection_module_struct *ndpi_struct, ndpi_free(flow->http.server); flow->http.server = NULL; } + if(flow->http.referer) { + ndpi_free(flow->http.referer); + flow->http.referer = NULL; + } + if(flow->http.host) { + ndpi_free(flow->http.host); + flow->http.host = NULL; + } if(flow->http.detected_os) { ndpi_free(flow->http.detected_os); flow->http.detected_os = NULL; @@ -1529,23 +1651,31 @@ static void reset(struct ndpi_detection_module_struct *ndpi_struct, ndpi_free(flow->http.filename); flow->http.filename = NULL; } + if(flow->http.username) { + ndpi_free(flow->http.username); + flow->http.username = NULL; + } + if(flow->http.password) { + ndpi_free(flow->http.password); + flow->http.password = NULL; + } /* Reset flow risks. We should reset only those risks triggered by the previous HTTP response... */ /* TODO */ - ndpi_unset_risk(flow, NDPI_BINARY_APPLICATION_TRANSFER); - ndpi_unset_risk(flow, NDPI_HTTP_SUSPICIOUS_CONTENT); - ndpi_unset_risk(flow, NDPI_POSSIBLE_EXPLOIT); - ndpi_unset_risk(flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT); - ndpi_unset_risk(flow, NDPI_HTTP_CRAWLER_BOT); - ndpi_unset_risk(flow, NDPI_NUMERIC_IP_HOST); - ndpi_unset_risk(flow, NDPI_URL_POSSIBLE_RCE_INJECTION); - ndpi_unset_risk(flow, NDPI_HTTP_OBSOLETE_SERVER); - ndpi_unset_risk(flow, NDPI_CLEAR_TEXT_CREDENTIALS); - ndpi_unset_risk(flow, NDPI_INVALID_CHARACTERS); - ndpi_unset_risk(flow, NDPI_HTTP_SUSPICIOUS_HEADER); - ndpi_unset_risk(flow, NDPI_ERROR_CODE_DETECTED); - ndpi_unset_risk(flow, NDPI_MALFORMED_PACKET); + ndpi_unset_risk(ndpi_struct, flow, NDPI_BINARY_APPLICATION_TRANSFER); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_CONTENT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_USER_AGENT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_CRAWLER_BOT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST); + ndpi_unset_risk(ndpi_struct, flow, NDPI_URL_POSSIBLE_RCE_INJECTION); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_OBSOLETE_SERVER); + ndpi_unset_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS); + ndpi_unset_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS); + ndpi_unset_risk(ndpi_struct, flow, NDPI_HTTP_SUSPICIOUS_HEADER); + ndpi_unset_risk(ndpi_struct, flow, NDPI_ERROR_CODE_DETECTED); + ndpi_unset_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET); } static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct, @@ -1580,7 +1710,7 @@ static void ndpi_check_http_tcp(struct ndpi_detection_module_struct *ndpi_struct } /* The first pkt is neither a request nor a response -> no http */ NDPI_LOG_DBG2(ndpi_struct, "Neither req nor response -> exclude\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } NDPI_LOG_DBG2(ndpi_struct, "Request where expected\n"); @@ -1658,7 +1788,7 @@ static void ndpi_search_http_tcp(struct ndpi_detection_module_struct *ndpi_struc struct ndpi_flow_struct *flow) { /* Break after 20 packets. */ if(flow->packet_counter > 20) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -1685,40 +1815,9 @@ static void ndpi_search_http_tcp(struct ndpi_detection_module_struct *ndpi_struc } } -/* ********************************* */ - -ndpi_http_method ndpi_get_http_method(struct ndpi_flow_struct *flow) { - if(!flow) { - return(NDPI_HTTP_METHOD_UNKNOWN); - } else - return(flow->http.method); -} - -/* ********************************* */ - -char* ndpi_get_http_url(struct ndpi_flow_struct *flow) { - if((!flow) || (!flow->http.url)) - return(""); - else - return(flow->http.url); -} - -/* ********************************* */ - -char* ndpi_get_http_content_type(struct ndpi_flow_struct *flow) { - if((!flow) || (!flow->http.content_type)) - return(""); - else - return(flow->http.content_type); -} - - -void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("HTTP",ndpi_struct, *id, - NDPI_PROTOCOL_HTTP, - ndpi_search_http_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_http_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("HTTP", ndpi_struct, + ndpi_search_http_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HTTP); } diff --git a/src/lib/protocols/http2.c b/src/lib/protocols/http2.c index cde354a1e..c14585e80 100644 --- a/src/lib/protocols/http2.c +++ b/src/lib/protocols/http2.c @@ -43,7 +43,7 @@ void ndpi_search_http2(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search http2\n"); if(packet->payload_packet_len < NDPI_STATICSTRING_LEN(magic)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -52,17 +52,13 @@ void ndpi_search_http2(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_http2_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_http2_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("HTTP2", ndpi_struct, *id, - NDPI_PROTOCOL_HTTP2, - ndpi_search_http2, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("HTTP2", ndpi_struct, + ndpi_search_http2, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_HTTP2); } diff --git a/src/lib/protocols/i3d.c b/src/lib/protocols/i3d.c index c0cd8e447..2d579a239 100644 --- a/src/lib/protocols/i3d.c +++ b/src/lib/protocols/i3d.c @@ -50,7 +50,7 @@ static void ndpi_search_i3d(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 74) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -71,20 +71,14 @@ static void ndpi_search_i3d(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_i3d_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_i3d_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("i3D", ndpi_struct, *id, - NDPI_PROTOCOL_I3D, - ndpi_search_i3d, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("i3D", ndpi_struct, + ndpi_search_i3d, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_I3D); } diff --git a/src/lib/protocols/iax.c b/src/lib/protocols/iax.c index 45204229c..0482ffd19 100644 --- a/src/lib/protocols/iax.c +++ b/src/lib/protocols/iax.c @@ -2,7 +2,7 @@ * iax.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -82,7 +82,7 @@ static void ndpi_search_setup_iax(struct ndpi_detection_module_struct *ndpi_stru } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } @@ -96,14 +96,10 @@ static void ndpi_search_iax(struct ndpi_detection_module_struct *ndpi_struct, st } -void init_iax_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_iax_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IAX", ndpi_struct, *id, - NDPI_PROTOCOL_IAX, - ndpi_search_iax, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IAX", ndpi_struct, + ndpi_search_iax, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_IAX); } diff --git a/src/lib/protocols/icecast.c b/src/lib/protocols/icecast.c index 38967a781..04ea79d17 100644 --- a/src/lib/protocols/icecast.c +++ b/src/lib/protocols/icecast.c @@ -2,7 +2,7 @@ * icecast.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -84,18 +84,14 @@ static void ndpi_search_icecast_tcp(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_icecast_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_icecast_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IceCast", ndpi_struct, *id, - NDPI_PROTOCOL_ICECAST, - ndpi_search_icecast_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IceCast", ndpi_struct, + ndpi_search_icecast_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ICECAST); } diff --git a/src/lib/protocols/iec60870-5-104.c b/src/lib/protocols/iec60870-5-104.c index ed28313b2..dead4fba1 100644 --- a/src/lib/protocols/iec60870-5-104.c +++ b/src/lib/protocols/iec60870-5-104.c @@ -68,17 +68,13 @@ static void ndpi_search_iec60870_tcp(struct ndpi_detection_module_struct *ndpi_s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_104_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("IEC60870", ndpi_struct, *id, - NDPI_PROTOCOL_IEC60870, - ndpi_search_iec60870_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_104_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("IEC60870", ndpi_struct, + ndpi_search_iec60870_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_IEC60870); } diff --git a/src/lib/protocols/iec62056.c b/src/lib/protocols/iec62056.c index 14ede3d76..8793a8fc5 100644 --- a/src/lib/protocols/iec62056.c +++ b/src/lib/protocols/iec62056.c @@ -58,17 +58,13 @@ static void ndpi_search_iec62056(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_iec62056_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_iec62056_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IEC62056", ndpi_struct, *id, - NDPI_PROTOCOL_IEC62056, - ndpi_search_iec62056, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IEC62056", ndpi_struct, + ndpi_search_iec62056, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_IEC62056); } diff --git a/src/lib/protocols/ieee-c37118.c b/src/lib/protocols/ieee-c37118.c index dbfdbaea2..7847fe97a 100644 --- a/src/lib/protocols/ieee-c37118.c +++ b/src/lib/protocols/ieee-c37118.c @@ -63,17 +63,13 @@ static void ndpi_search_ieee_c37118(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ieee_c37118_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ieee_c37118_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IEEE-C37118", ndpi_struct, *id, - NDPI_PROTOCOL_IEEE_C37118, - ndpi_search_ieee_c37118, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IEEE-C37118", ndpi_struct, + ndpi_search_ieee_c37118, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_IEEE_C37118); } diff --git a/src/lib/protocols/imo.c b/src/lib/protocols/imo.c index 3807e5010..9b60e251f 100644 --- a/src/lib/protocols/imo.c +++ b/src/lib/protocols/imo.c @@ -61,21 +61,17 @@ static void ndpi_search_imo(struct ndpi_detection_module_struct *ndpi_struct, st ndpi_int_imo_add_connection(ndpi_struct, flow); } else { if(flow->num_processed_pkts > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); else flow->l4.udp.imo_last_one_byte_pkt = 0; } } -void init_imo_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("IMO", ndpi_struct, *id, - NDPI_PROTOCOL_IMO, - ndpi_search_imo, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_imo_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("IMO", ndpi_struct, + ndpi_search_imo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_IMO); } diff --git a/src/lib/protocols/ipp.c b/src/lib/protocols/ipp.c index 13d10bed2..86be5040e 100644 --- a/src/lib/protocols/ipp.c +++ b/src/lib/protocols/ipp.c @@ -2,7 +2,7 @@ * ipp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -52,18 +52,14 @@ static void ndpi_search_ipp(struct ndpi_detection_module_struct *ndpi_struct, st return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ipp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ipp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IPP", ndpi_struct, *id, - NDPI_PROTOCOL_IPP, - ndpi_search_ipp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IPP", ndpi_struct, + ndpi_search_ipp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_IPP); } diff --git a/src/lib/protocols/ipsec.c b/src/lib/protocols/ipsec.c index fdd08cb6f..ba6b5441c 100644 --- a/src/lib/protocols/ipsec.c +++ b/src/lib/protocols/ipsec.c @@ -39,7 +39,7 @@ static void ndpi_int_ipsec_add_connection(struct ndpi_detection_module_struct * switch (isakmp_type) { case ISAKMP_INVALID: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; case ISAKMP_MALFORMED: NDPI_LOG_INFO(ndpi_struct, "found malformed ISAKMP (UDP)\n"); @@ -138,7 +138,7 @@ static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 28) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -148,7 +148,7 @@ static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, isakmp_offset = 4; if (packet->payload_packet_len < 32) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -157,7 +157,7 @@ static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, { if (packet->payload[isakmp_offset + 17] != 0x10 /* Major Version 1 */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { /* Version 1 is obsolete, but still used by some embedded devices. */ @@ -169,7 +169,7 @@ static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, if (ntohl(get_u_int32_t(packet->payload, isakmp_offset + 24)) != (u_int32_t)packet->payload_packet_len - isakmp_offset) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -183,17 +183,11 @@ static void ndpi_search_ipsec(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_ipsec_add_connection(ndpi_struct, flow, isakmp_type); } -void init_ipsec_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ipsec_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IPSec", ndpi_struct, *id, - NDPI_PROTOCOL_IPSEC, - ndpi_search_ipsec, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("IPSec", ndpi_struct, + ndpi_search_ipsec, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_IPSEC); } diff --git a/src/lib/protocols/iqiyi.c b/src/lib/protocols/iqiyi.c index 28600a4fc..d9acc2601 100644 --- a/src/lib/protocols/iqiyi.c +++ b/src/lib/protocols/iqiyi.c @@ -52,18 +52,13 @@ static void ndpi_search_iqiyi(struct ndpi_detection_module_struct *ndpi_struct, /* Add more iQiyi signatures */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_iqiyi_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_iqiyi_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("iQIYI", ndpi_struct, *id, - NDPI_PROTOCOL_IQIYI, - ndpi_search_iqiyi, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("iQIYI", ndpi_struct, + ndpi_search_iqiyi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_IQIYI); } diff --git a/src/lib/protocols/irc.c b/src/lib/protocols/irc.c index 2ef11edb5..033aed9e6 100644 --- a/src/lib/protocols/irc.c +++ b/src/lib/protocols/irc.c @@ -2,7 +2,7 @@ * irc.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -99,8 +99,7 @@ static void ndpi_search_irc_tcp(struct ndpi_detection_module_struct *ndpi_struct NDPI_LOG_DBG(ndpi_struct, "search irc\n"); if((flow->detected_protocol_stack[0] != NDPI_PROTOCOL_IRC && (flow->packet_counter > 10)) || (flow->packet_counter >= 10)) { - NDPI_LOG_DBG(ndpi_struct, "exclude irc, packet_counter too high0\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_IRC); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -225,16 +224,11 @@ static void ndpi_search_irc_tcp(struct ndpi_detection_module_struct *ndpi_struct } } -void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_irc_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("IRC", ndpi_struct, *id, - NDPI_PROTOCOL_IRC, - ndpi_search_irc_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("IRC", ndpi_struct, + ndpi_search_irc_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_IRC); } diff --git a/src/lib/protocols/iso9506-1-mms.c b/src/lib/protocols/iso9506-1-mms.c index 970f49e73..9f44b4d31 100644 --- a/src/lib/protocols/iso9506-1-mms.c +++ b/src/lib/protocols/iso9506-1-mms.c @@ -68,18 +68,14 @@ static void ndpi_search_iso9506_1_mms(struct ndpi_detection_module_struct *ndpi_ } if (flow->packet_direction_counter[packet->packet_direction] > 2) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_iso9506_1_mms_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_iso9506_1_mms_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("ISO9506-1-MMS", ndpi_struct, *id, - NDPI_PROTOCOL_ISO9506_1_MMS, - ndpi_search_iso9506_1_mms, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("ISO9506-1-MMS", ndpi_struct, + ndpi_search_iso9506_1_mms, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ISO9506_1_MMS); } diff --git a/src/lib/protocols/jabber.c b/src/lib/protocols/jabber.c index 53ec251c5..864d2d57a 100644 --- a/src/lib/protocols/jabber.c +++ b/src/lib/protocols/jabber.c @@ -2,7 +2,7 @@ * jabber.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -42,9 +42,10 @@ static struct jabber_string jabber_strings[] = { static void ndpi_int_jabber_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, + u_int32_t master, u_int32_t protocol, ndpi_confidence_t confidence) { - ndpi_set_detected_protocol(ndpi_struct, flow, protocol, NDPI_PROTOCOL_UNKNOWN, confidence); + ndpi_set_detected_protocol(ndpi_struct, flow, protocol, master, confidence); } static void check_content_type_and_change_protocol(struct ndpi_detection_module_struct *ndpi_struct, @@ -55,7 +56,7 @@ static void check_content_type_and_change_protocol(struct ndpi_detection_module_ for(i=0; jabber_strings[i].string != NULL; i++) { if(ndpi_strnstr((const char*)&packet->payload[x], jabber_strings[i].string, left) != NULL) { - ndpi_int_jabber_add_connection(ndpi_struct, flow, jabber_strings[i].ndpi_protocol, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, jabber_strings[i].ndpi_protocol, NDPI_CONFIDENCE_DPI); return; } } @@ -76,7 +77,7 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str /* Old style Jabber/XMPP SSL. */ if (flow->packet_counter > max_packets - 1) { - ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); return; } for (i = 0; i < NDPI_ARRAY_LENGTH(valid_patterns); ++i) @@ -86,7 +87,7 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -97,7 +98,7 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str ndpi_strnstr((const char *)&packet->payload[0], "xmlns='http://jabber.org/protocol/", packet->payload_packet_len) != NULL) { - ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); return; } @@ -106,14 +107,14 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str ndpi_strnstr((const char *)&packet->payload[0], "xmlns='http://jabber.org/protocol/commands'", packet->payload_packet_len) != NULL) { - ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); return; } if (packet->payload_packet_len == NDPI_STATICSTRING_LEN("</stream:stream>") && memcmp(packet->payload, "</stream:stream>", NDPI_STATICSTRING_LEN("</stream:stream>")) == 0) { - ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); return; } @@ -126,7 +127,7 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str || ndpi_strnstr((const char *)&packet->payload[13], "xmlns:stream=\"http://etherx.jabber.org/streams\"", start)) { /* Protocol family */ - ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); + ndpi_int_jabber_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN, NDPI_PROTOCOL_JABBER, NDPI_CONFIDENCE_DPI); /* search for subprotocols */ check_content_type_and_change_protocol(ndpi_struct, flow, 13); @@ -134,20 +135,16 @@ static void ndpi_search_jabber_tcp(struct ndpi_detection_module_struct *ndpi_str return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_jabber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_jabber_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Jabber", ndpi_struct, *id, - NDPI_PROTOCOL_JABBER, - ndpi_search_jabber_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Jabber", ndpi_struct, + ndpi_search_jabber_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_JABBER); } diff --git a/src/lib/protocols/jrmi.c b/src/lib/protocols/jrmi.c index e5d9848dc..30c685a5b 100644 --- a/src/lib/protocols/jrmi.c +++ b/src/lib/protocols/jrmi.c @@ -49,18 +49,14 @@ static void ndpi_search_jrmi(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_jrmi_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("JRMI", ndpi_struct, *id, - NDPI_PROTOCOL_JRMI, - ndpi_search_jrmi, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_jrmi_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("JRMI", ndpi_struct, + ndpi_search_jrmi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_JRMI); } diff --git a/src/lib/protocols/json-rpc.c b/src/lib/protocols/json-rpc.c index c29be2ef2..6a26ccccd 100644 --- a/src/lib/protocols/json-rpc.c +++ b/src/lib/protocols/json-rpc.c @@ -58,16 +58,13 @@ static void ndpi_search_json_rpc(struct ndpi_detection_module_struct *ndpi_struc return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_json_rpc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_json_rpc_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("JSON-RPC", ndpi_struct, *id, - NDPI_PROTOCOL_JSON_RPC, - ndpi_search_json_rpc, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("JSON-RPC", ndpi_struct, + ndpi_search_json_rpc, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_JSON_RPC); } diff --git a/src/lib/protocols/kafka.c b/src/lib/protocols/kafka.c index abf0ae3ca..a50332721 100644 --- a/src/lib/protocols/kafka.c +++ b/src/lib/protocols/kafka.c @@ -52,7 +52,7 @@ static void ndpi_search_kafka(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 8 /* min. required packet length */ || ntohl(get_u_int32_t(packet->payload, 0)) != (uint32_t)(packet->payload_packet_len - 4)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -62,19 +62,19 @@ static void ndpi_search_kafka(struct ndpi_detection_module_struct *ndpi_struct, { if (packet->payload_packet_len < 14) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } const uint16_t client_id_len = ntohs(get_u_int16_t(packet->payload, 12)); if (client_id_len + 12 + 2 > packet->payload_packet_len) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (ndpi_is_printable_buffer(&packet->payload[14], client_id_len) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -82,16 +82,13 @@ static void ndpi_search_kafka(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_kafka_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_kafka_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Kafka", ndpi_struct, *id, - NDPI_PROTOCOL_APACHE_KAFKA, - ndpi_search_kafka, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Kafka", ndpi_struct, + ndpi_search_kafka, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_APACHE_KAFKA); } diff --git a/src/lib/protocols/kakaotalk_voice.c b/src/lib/protocols/kakaotalk_voice.c index 1913fe156..ead616012 100644 --- a/src/lib/protocols/kakaotalk_voice.c +++ b/src/lib/protocols/kakaotalk_voice.c @@ -61,19 +61,15 @@ static void ndpi_search_kakaotalk_voice(struct ndpi_detection_module_struct *ndp } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_kakaotalk_voice_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("KakaoTalk_Voice", ndpi_struct, *id, - NDPI_PROTOCOL_KAKAOTALK_VOICE, - ndpi_search_kakaotalk_voice, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("KakaoTalk_Voice", ndpi_struct, + ndpi_search_kakaotalk_voice, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_KAKAOTALK_VOICE); } diff --git a/src/lib/protocols/kcp.c b/src/lib/protocols/kcp.c index 906737179..0e01eaa2b 100644 --- a/src/lib/protocols/kcp.c +++ b/src/lib/protocols/kcp.c @@ -66,7 +66,7 @@ static void ndpi_search_kcp(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < sizeof(*kcp_header)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -78,30 +78,24 @@ static void ndpi_search_kcp(struct ndpi_detection_module_struct *ndpi_struct, case IKCP_CMD_WINS: break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } uint32_t const kcp_pdu_length = le32toh(kcp_header->length); if (kcp_pdu_length + sizeof(*kcp_header) != packet->payload_packet_len) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ndpi_int_kcp_add_connection(ndpi_struct, flow); } -void init_kcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_kcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("KCP", ndpi_struct, *id, - NDPI_PROTOCOL_KCP, - ndpi_search_kcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("KCP", ndpi_struct, + ndpi_search_kcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_KCP); } diff --git a/src/lib/protocols/kerberos.c b/src/lib/protocols/kerberos.c index 7ff120982..bfae1e2ef 100644 --- a/src/lib/protocols/kerberos.c +++ b/src/lib/protocols/kerberos.c @@ -1,7 +1,7 @@ /* * kerberos.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -314,7 +314,7 @@ static void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struc u_int16_t original_payload_packet_len = 0; if((sport != KERBEROS_PORT) && (dport != KERBEROS_PORT)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -672,7 +672,7 @@ static void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static int ndpi_search_kerberos_extra(struct ndpi_detection_module_struct *ndpi_struct, @@ -697,14 +697,9 @@ static int ndpi_search_kerberos_extra(struct ndpi_detection_module_struct *ndpi_ return flow->extra_packets_func != NULL; } -void init_kerberos_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Kerberos", ndpi_struct, *id, - NDPI_PROTOCOL_KERBEROS, - ndpi_search_kerberos, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_kerberos_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Kerberos", ndpi_struct, + ndpi_search_kerberos, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_KERBEROS); } diff --git a/src/lib/protocols/kismet.c b/src/lib/protocols/kismet.c index 9c292de54..951906ff1 100644 --- a/src/lib/protocols/kismet.c +++ b/src/lib/protocols/kismet.c @@ -45,7 +45,7 @@ static void ndpi_search_kismet(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < NDPI_STATICSTRING_LEN("*KISMET: ")) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -55,19 +55,13 @@ static void ndpi_search_kismet(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_kismet_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_kismet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("kismet", ndpi_struct, *id, - NDPI_PROTOCOL_KISMET, - ndpi_search_kismet, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("kismet", ndpi_struct, + ndpi_search_kismet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_KISMET); } diff --git a/src/lib/protocols/knxnet_ip.c b/src/lib/protocols/knxnet_ip.c index acab2e3df..99021bccb 100644 --- a/src/lib/protocols/knxnet_ip.c +++ b/src/lib/protocols/knxnet_ip.c @@ -115,17 +115,13 @@ static void ndpi_search_knxnet_ip(struct ndpi_detection_module_struct *ndpi_stru } not_knxnet_ip: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_knxnet_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_knxnet_ip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("KNXnet_IP", ndpi_struct, *id, - NDPI_PROTOCOL_KNXNET_IP, - ndpi_search_knxnet_ip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("KNXnet_IP", ndpi_struct, + ndpi_search_knxnet_ip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_KNXNET_IP); } diff --git a/src/lib/protocols/lagofast.c b/src/lib/protocols/lagofast.c new file mode 100644 index 000000000..c0f6d41c2 --- /dev/null +++ b/src/lib/protocols/lagofast.c @@ -0,0 +1,72 @@ +/* + * lagofast.c + * + * Copyright (C) 2011-25 - 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_LAGOFAST + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_int_lagofast_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found LagoFast\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_LAGOFAST, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_lagofast(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search LagoFast\n"); + if (packet->payload_packet_len < 6) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + // LagoFast identifier + if (get_u_int32_t(packet->payload, 0) != htonl(0x006e5d03)) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + // Check encoded length + const uint16_t encoded_length = ntohs(get_u_int16_t(packet->payload, 4)); + if (packet->payload_packet_len != encoded_length + 6 /* identifier + length */) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + + ndpi_int_lagofast_add_connection(ndpi_struct, flow); +} + +void init_lagofast_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("LagoFast", ndpi_struct, + ndpi_search_lagofast, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_LAGOFAST); +} + diff --git a/src/lib/protocols/ldap.c b/src/lib/protocols/ldap.c index b4df469f9..4343c0321 100644 --- a/src/lib/protocols/ldap.c +++ b/src/lib/protocols/ldap.c @@ -2,7 +2,7 @@ * ldap.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -66,19 +66,15 @@ static void ndpi_search_ldap(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ldap_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ldap_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("LDAP", ndpi_struct, *id, - NDPI_PROTOCOL_LDAP, - ndpi_search_ldap, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("LDAP", ndpi_struct, + ndpi_search_ldap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_LDAP); } diff --git a/src/lib/protocols/ldp.c b/src/lib/protocols/ldp.c index 7d059b6f0..6a41310f9 100644 --- a/src/lib/protocols/ldp.c +++ b/src/lib/protocols/ldp.c @@ -111,17 +111,13 @@ static void ndpi_search_ldp(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ldp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ldp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("LDP", ndpi_struct, *id, - NDPI_PROTOCOL_LDP, - ndpi_search_ldp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("LDP", ndpi_struct, + ndpi_search_ldp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_LDP); } diff --git a/src/lib/protocols/line.c b/src/lib/protocols/line.c index 933693ed9..232d629e0 100644 --- a/src/lib/protocols/line.c +++ b/src/lib/protocols/line.c @@ -98,7 +98,7 @@ static void ndpi_search_line(struct ndpi_detection_module_struct *ndpi_struct, if(flow->l4.udp.line_base_cnt[0] != flow->l4.udp.line_base_cnt[1]) ndpi_int_line_add_connection(ndpi_struct, flow); else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; } @@ -106,19 +106,14 @@ static void ndpi_search_line(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_line_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_line_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("LineCall", ndpi_struct, *id, - NDPI_PROTOCOL_LINE_CALL, - ndpi_search_line, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("LineCall", ndpi_struct, + ndpi_search_line, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_LINE_CALL); } diff --git a/src/lib/protocols/lisp.c b/src/lib/protocols/lisp.c index b66a2e52d..bfec1ca5e 100644 --- a/src/lib/protocols/lisp.c +++ b/src/lib/protocols/lisp.c @@ -69,7 +69,7 @@ static void ndpi_check_lisp(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_lisp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -80,14 +80,11 @@ static void ndpi_search_lisp(struct ndpi_detection_module_struct *ndpi_struct, s } -void init_lisp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_lisp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("LISP", ndpi_struct, *id, - NDPI_PROTOCOL_LISP, - ndpi_search_lisp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("LISP", ndpi_struct, + ndpi_search_lisp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_LISP); } diff --git a/src/lib/protocols/lol_wild_rift.c b/src/lib/protocols/lol_wild_rift.c index 84b91a9b5..d0a5afa6c 100644 --- a/src/lib/protocols/lol_wild_rift.c +++ b/src/lib/protocols/lol_wild_rift.c @@ -69,18 +69,13 @@ static void ndpi_search_lolwildrift(struct ndpi_detection_module_struct *ndpi_st return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_lolwildrift_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_lolwildrift_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("LoLWildRift", ndpi_struct, *id, - NDPI_PROTOCOL_LOLWILDRIFT, - ndpi_search_lolwildrift, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("LoLWildRift", ndpi_struct, + ndpi_search_lolwildrift, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_LOLWILDRIFT); } diff --git a/src/lib/protocols/lotus_notes.c b/src/lib/protocols/lotus_notes.c deleted file mode 100644 index bb2ca18ad..000000000 --- a/src/lib/protocols/lotus_notes.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * lotus_notes.c - * - * Copyright (C) 2012-22 - 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_LOTUS_NOTES - -#include "ndpi_api.h" -#include "ndpi_private.h" - -/* ************************************ */ - -static void ndpi_check_lotus_notes(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - u_int32_t payload_len = packet->payload_packet_len; - - flow->l4.tcp.lotus_notes_packet_id++; - - if((flow->l4.tcp.lotus_notes_packet_id == 1) && - ndpi_seen_flow_beginning(flow)) { - if(payload_len > 16) { - char lotus_notes_header[] = { 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x02, 0x0F }; - - if(memcmp(&packet->payload[6], lotus_notes_header, sizeof(lotus_notes_header)) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found lotus_notes\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_LOTUS_NOTES, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - } - return; - } - - } else if(flow->l4.tcp.lotus_notes_packet_id <= 3) return; - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - -static void ndpi_search_lotus_notes(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - NDPI_LOG_DBG(ndpi_struct, "search lotus_notes\n"); - - ndpi_check_lotus_notes(ndpi_struct, flow); -} - - -void init_lotus_notes_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("LotusNotes", ndpi_struct, *id, - NDPI_PROTOCOL_LOTUS_NOTES, - ndpi_search_lotus_notes, - 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/lustre.c b/src/lib/protocols/lustre.c index 6965fe51a..dd4997ca1 100644 --- a/src/lib/protocols/lustre.c +++ b/src/lib/protocols/lustre.c @@ -74,16 +74,13 @@ static void ndpi_search_lustre(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_lustre_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_lustre_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Lustre", ndpi_struct, *id, - NDPI_PROTOCOL_LUSTRE, - ndpi_search_lustre, - NDPI_SELECTION_BITMASK_PROTOCOL_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION /* Ipv4 only; Lustre doesn't support IPv6 */, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Lustre", ndpi_struct, + ndpi_search_lustre, + NDPI_SELECTION_BITMASK_PROTOCOL_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, /* Ipv4 only; Lustre doesn't support IPv6 */ + 1, NDPI_PROTOCOL_LUSTRE); } diff --git a/src/lib/protocols/mail_imap.c b/src/lib/protocols/mail_imap.c index 2c7095942..3bb858f9c 100644 --- a/src/lib/protocols/mail_imap.c +++ b/src/lib/protocols/mail_imap.c @@ -29,6 +29,15 @@ #include "ndpi_api.h" #include "ndpi_private.h" +/* Safely increments IMAP stage counter preventing 3-bit mail_imap_stage overflow. + * Even though current tests don't trigger overflow, better safe than sorry. */ +#define SAFE_INC_IMAP_STAGE(flow) \ + do { \ + if ((flow)->l4.tcp.mail_imap_stage < 7) { \ + (flow)->l4.tcp.mail_imap_stage += 1; \ + } \ + } while(0) + /* #define IMAP_DEBUG 1*/ static void ndpi_int_mail_imap_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, @@ -53,11 +62,8 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ if(packet->payload_packet_len >= 4 && ntohs(get_u_int16_t(packet->payload, packet->payload_packet_len - 2)) == 0x0d0a) { // the DONE command appears without a tag - if(packet->payload_packet_len == 6 && ((packet->payload[0] == 'D' || packet->payload[0] == 'd') - && (packet->payload[1] == 'O' || packet->payload[1] == 'o') - && (packet->payload[2] == 'N' || packet->payload[2] == 'n') - && (packet->payload[3] == 'E' || packet->payload[3] == 'e'))) { - flow->l4.tcp.mail_imap_stage += 1; + if(packet->payload_packet_len == 6 && ndpi_memcasecmp(packet->payload, "DONE", 4) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } else { if(flow->l4.tcp.mail_imap_stage < 5) { @@ -102,10 +108,8 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ } if((command_start + 3) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'O' || packet->payload[command_start] == 'o') - && (packet->payload[command_start + 1] == 'K' || packet->payload[command_start + 1] == 'k') - && packet->payload[command_start + 2] == ' ') { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "OK ", 3) == 0) { + SAFE_INC_IMAP_STAGE(flow); if(flow->l4.tcp.mail_imap_starttls == 1) { NDPI_LOG_DBG2(ndpi_struct, "starttls detected\n"); ndpi_int_mail_imap_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_MAIL_IMAPS); @@ -118,62 +122,37 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ } } saw_command = 1; - } else if((packet->payload[command_start] == 'U' || packet->payload[command_start] == 'u') - && (packet->payload[command_start + 1] == 'I' || packet->payload[command_start + 1] == 'i') - && (packet->payload[command_start + 2] == 'D' || packet->payload[command_start + 2] == 'd')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "UID", 3) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'N' || packet->payload[command_start] == 'n') - && (packet->payload[command_start + 1] == 'O' || packet->payload[command_start + 1] == 'o') - && packet->payload[command_start + 2] == ' ') { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "NO ", 3) == 0) { + SAFE_INC_IMAP_STAGE(flow); if(flow->l4.tcp.mail_imap_starttls == 1) flow->l4.tcp.mail_imap_starttls = 0; saw_command = 1; } } if((command_start + 10) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'C' || packet->payload[command_start] == 'c') - && (packet->payload[command_start + 1] == 'A' || packet->payload[command_start + 1] == 'a') - && (packet->payload[command_start + 2] == 'P' || packet->payload[command_start + 2] == 'p') - && (packet->payload[command_start + 3] == 'A' || packet->payload[command_start + 3] == 'a') - && (packet->payload[command_start + 4] == 'B' || packet->payload[command_start + 4] == 'b') - && (packet->payload[command_start + 5] == 'I' || packet->payload[command_start + 5] == 'i') - && (packet->payload[command_start + 6] == 'L' || packet->payload[command_start + 6] == 'l') - && (packet->payload[command_start + 7] == 'I' || packet->payload[command_start + 7] == 'i') - && (packet->payload[command_start + 8] == 'T' || packet->payload[command_start + 8] == 't') - && (packet->payload[command_start + 9] == 'Y' || packet->payload[command_start + 9] == 'y')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "CAPABILITY", 10) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } } if((command_start + 8) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'S' || packet->payload[command_start] == 's') - && (packet->payload[command_start + 1] == 'T' || packet->payload[command_start + 1] == 't') - && (packet->payload[command_start + 2] == 'A' || packet->payload[command_start + 2] == 'a') - && (packet->payload[command_start + 3] == 'R' || packet->payload[command_start + 3] == 'r') - && (packet->payload[command_start + 4] == 'T' || packet->payload[command_start + 4] == 't') - && (packet->payload[command_start + 5] == 'T' || packet->payload[command_start + 5] == 't') - && (packet->payload[command_start + 6] == 'L' || packet->payload[command_start + 6] == 'l') - && (packet->payload[command_start + 7] == 'S' || packet->payload[command_start + 7] == 's')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "STARTTLS", 8) == 0) { + SAFE_INC_IMAP_STAGE(flow); flow->l4.tcp.mail_imap_starttls = 1; saw_command = 1; } } if((command_start + 5) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'L' || packet->payload[command_start] == 'l') - && (packet->payload[command_start + 1] == 'O' || packet->payload[command_start + 1] == 'o') - && (packet->payload[command_start + 2] == 'G' || packet->payload[command_start + 2] == 'g') - && (packet->payload[command_start + 3] == 'I' || packet->payload[command_start + 3] == 'i') - && (packet->payload[command_start + 4] == 'N' || packet->payload[command_start + 4] == 'n')) { + if(ndpi_memcasecmp(packet->payload + command_start, "LOGIN", 5) == 0) { /* xxxx LOGIN "username" "password" xxxx LOGIN username password */ char str[256], *user, *saveptr; u_int len = ndpi_min(packet->payload_packet_len - (command_start + 5), (int)sizeof(str) - 1); - strncpy(str, (const char*)packet->payload + command_start + 5, len); - str[len] = '\0'; + ndpi_strlcpy(str, (const char*)packet->payload + command_start + 5, sizeof(str), len); user = strtok_r(str, " \"\r\n", &saveptr); if(user) { @@ -195,52 +174,25 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ } } - flow->l4.tcp.mail_imap_stage += 1; + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'F' || packet->payload[command_start] == 'f') - && (packet->payload[command_start + 1] == 'E' || packet->payload[command_start + 1] == 'e') - && (packet->payload[command_start + 2] == 'T' || packet->payload[command_start + 2] == 't') - && (packet->payload[command_start + 3] == 'C' || packet->payload[command_start + 3] == 'c') - && (packet->payload[command_start + 4] == 'H' || packet->payload[command_start + 4] == 'h')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "FETCH", 5) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'F' || packet->payload[command_start] == 'f') - && (packet->payload[command_start + 1] == 'L' || packet->payload[command_start + 1] == 'l') - && (packet->payload[command_start + 2] == 'A' || packet->payload[command_start + 2] == 'a') - && (packet->payload[command_start + 3] == 'G' || packet->payload[command_start + 3] == 'g') - && (packet->payload[command_start + 4] == 'S' || packet->payload[command_start + 4] == 's')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "FLAGS", 5) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'C' || packet->payload[command_start] == 'c') - && (packet->payload[command_start + 1] == 'H' || packet->payload[command_start + 1] == 'h') - && (packet->payload[command_start + 2] == 'E' || packet->payload[command_start + 2] == 'e') - && (packet->payload[command_start + 3] == 'C' || packet->payload[command_start + 3] == 'c') - && (packet->payload[command_start + 4] == 'K' || packet->payload[command_start + 4] == 'k')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "CHECK", 5) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'S' || packet->payload[command_start] == 's') - && (packet->payload[command_start + 1] == 'T' || packet->payload[command_start + 1] == 't') - && (packet->payload[command_start + 2] == 'O' || packet->payload[command_start + 2] == 'o') - && (packet->payload[command_start + 3] == 'R' || packet->payload[command_start + 3] == 'r') - && (packet->payload[command_start + 4] == 'E' || packet->payload[command_start + 4] == 'e')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "STORE", 5) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } } if((command_start + 12) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'A' || packet->payload[command_start] == 'a') - && (packet->payload[command_start + 1] == 'U' || packet->payload[command_start + 1] == 'u') - && (packet->payload[command_start + 2] == 'T' || packet->payload[command_start + 2] == 't') - && (packet->payload[command_start + 3] == 'H' || packet->payload[command_start + 3] == 'h') - && (packet->payload[command_start + 4] == 'E' || packet->payload[command_start + 4] == 'e') - && (packet->payload[command_start + 5] == 'N' || packet->payload[command_start + 5] == 'n') - && (packet->payload[command_start + 6] == 'T' || packet->payload[command_start + 6] == 't') - && (packet->payload[command_start + 7] == 'I' || packet->payload[command_start + 7] == 'i') - && (packet->payload[command_start + 8] == 'C' || packet->payload[command_start + 8] == 'c') - && (packet->payload[command_start + 9] == 'A' || packet->payload[command_start + 9] == 'a') - && (packet->payload[command_start + 10] == 'T' || packet->payload[command_start + 10] == 't') - && (packet->payload[command_start + 11] == 'E' || packet->payload[command_start + 11] == 'e')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "AUTHENTICATE", 12) == 0) { + SAFE_INC_IMAP_STAGE(flow); /* Authenticate phase may have multiple messages. Ignore them since they are somehow encrypted anyway. */ ndpi_int_mail_imap_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_MAIL_IMAPS); @@ -248,70 +200,35 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ } } if((command_start + 9) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'N' || packet->payload[command_start] == 'n') - && (packet->payload[command_start + 1] == 'A' || packet->payload[command_start + 1] == 'a') - && (packet->payload[command_start + 2] == 'M' || packet->payload[command_start + 2] == 'm') - && (packet->payload[command_start + 3] == 'E' || packet->payload[command_start + 3] == 'e') - && (packet->payload[command_start + 4] == 'S' || packet->payload[command_start + 4] == 's') - && (packet->payload[command_start + 5] == 'P' || packet->payload[command_start + 5] == 'p') - && (packet->payload[command_start + 6] == 'A' || packet->payload[command_start + 6] == 'a') - && (packet->payload[command_start + 7] == 'C' || packet->payload[command_start + 7] == 'c') - && (packet->payload[command_start + 8] == 'E' || packet->payload[command_start + 8] == 'e')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "NAMESPACE", 9) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } } if((command_start + 4) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'L' || packet->payload[command_start] == 'l') - && (packet->payload[command_start + 1] == 'S' || packet->payload[command_start + 1] == 's') - && (packet->payload[command_start + 2] == 'U' || packet->payload[command_start + 2] == 'u') - && (packet->payload[command_start + 3] == 'B' || packet->payload[command_start + 3] == 'b')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "LSUB", 4) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'L' || packet->payload[command_start] == 'l') - && (packet->payload[command_start + 1] == 'I' || packet->payload[command_start + 1] == 'i') - && (packet->payload[command_start + 2] == 'S' || packet->payload[command_start + 2] == 's') - && (packet->payload[command_start + 3] == 'T' || packet->payload[command_start + 3] == 't')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "LIST", 4) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'N' || packet->payload[command_start] == 'n') - && (packet->payload[command_start + 1] == 'O' || packet->payload[command_start + 1] == 'o') - && (packet->payload[command_start + 2] == 'O' || packet->payload[command_start + 2] == 'o') - && (packet->payload[command_start + 3] == 'P' || packet->payload[command_start + 3] == 'p')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "NOOP", 4) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'I' || packet->payload[command_start] == 'i') - && (packet->payload[command_start + 1] == 'D' || packet->payload[command_start + 1] == 'd') - && (packet->payload[command_start + 2] == 'L' || packet->payload[command_start + 2] == 'l') - && (packet->payload[command_start + 3] == 'E' || packet->payload[command_start + 3] == 'e')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "IDLE", 4) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } } if((command_start + 6) < packet->payload_packet_len) { - if((packet->payload[command_start] == 'S' || packet->payload[command_start] == 's') - && (packet->payload[command_start + 1] == 'E' || packet->payload[command_start + 1] == 'e') - && (packet->payload[command_start + 2] == 'L' || packet->payload[command_start + 2] == 'l') - && (packet->payload[command_start + 3] == 'E' || packet->payload[command_start + 3] == 'e') - && (packet->payload[command_start + 4] == 'C' || packet->payload[command_start + 4] == 'c') - && (packet->payload[command_start + 5] == 'T' || packet->payload[command_start + 5] == 't')) { - flow->l4.tcp.mail_imap_stage += 1; + if(ndpi_memcasecmp(packet->payload + command_start, "SELECT", 6) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'E' || packet->payload[command_start] == 'e') - && (packet->payload[command_start + 1] == 'X' || packet->payload[command_start + 1] == 'x') - && (packet->payload[command_start + 2] == 'I' || packet->payload[command_start + 2] == 'i') - && (packet->payload[command_start + 3] == 'S' || packet->payload[command_start + 3] == 's') - && (packet->payload[command_start + 4] == 'T' || packet->payload[command_start + 4] == 't') - && (packet->payload[command_start + 5] == 'S' || packet->payload[command_start + 5] == 's')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "EXISTS", 6) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; - } else if((packet->payload[command_start] == 'A' || packet->payload[command_start] == 'a') - && (packet->payload[command_start + 1] == 'P' || packet->payload[command_start + 1] == 'p') - && (packet->payload[command_start + 2] == 'P' || packet->payload[command_start + 2] == 'p') - && (packet->payload[command_start + 3] == 'E' || packet->payload[command_start + 3] == 'e') - && (packet->payload[command_start + 4] == 'N' || packet->payload[command_start + 4] == 'n') - && (packet->payload[command_start + 5] == 'D' || packet->payload[command_start + 5] == 'd')) { - flow->l4.tcp.mail_imap_stage += 1; + } else if(ndpi_memcasecmp(packet->payload + command_start, "APPEND", 6) == 0) { + SAFE_INC_IMAP_STAGE(flow); saw_command = 1; } } @@ -352,18 +269,14 @@ static void ndpi_search_mail_imap_tcp(struct ndpi_detection_module_struct *ndpi_ return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mail_imap_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_mail_imap_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MAIL_IMAP", ndpi_struct, *id, - NDPI_PROTOCOL_MAIL_IMAP, - ndpi_search_mail_imap_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MAIL_IMAP", ndpi_struct, + ndpi_search_mail_imap_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MAIL_IMAP); } diff --git a/src/lib/protocols/mail_pop.c b/src/lib/protocols/mail_pop.c index b51ad629c..2ba8b8d5e 100644 --- a/src/lib/protocols/mail_pop.c +++ b/src/lib/protocols/mail_pop.c @@ -1,7 +1,7 @@ /* * mail_pop.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -63,22 +63,13 @@ static int ndpi_int_mail_pop_check_for_client_commands(struct ndpi_detection_mod struct ndpi_packet_struct *packet = &ndpi_struct->packet; if(packet->payload_packet_len > 4) { - if((packet->payload[0] == 'A' || packet->payload[0] == 'a') - && (packet->payload[1] == 'U' || packet->payload[1] == 'u') - && (packet->payload[2] == 'T' || packet->payload[2] == 't') - && (packet->payload[3] == 'H' || packet->payload[3] == 'h')) { + if(ndpi_memcasecmp(packet->payload, "AUTH", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_AUTH; return 1; - } else if((packet->payload[0] == 'A' || packet->payload[0] == 'a') - && (packet->payload[1] == 'P' || packet->payload[1] == 'p') - && (packet->payload[2] == 'O' || packet->payload[2] == 'o') - && (packet->payload[3] == 'P' || packet->payload[3] == 'p')) { + } else if(ndpi_memcasecmp(packet->payload, "APOP", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_APOP; return 1; - } else if((packet->payload[0] == 'U' || packet->payload[0] == 'u') - && (packet->payload[1] == 'S' || packet->payload[1] == 's') - && (packet->payload[2] == 'E' || packet->payload[2] == 'e') - && (packet->payload[3] == 'R' || packet->payload[3] == 'r')) { + } else if(ndpi_memcasecmp(packet->payload, "USER", 4) == 0) { char buf[64]; ndpi_user_pwd_payload_copy((u_int8_t*)flow->l4.tcp.ftp_imap_pop_smtp.username, @@ -91,10 +82,7 @@ static int ndpi_int_mail_pop_check_for_client_commands(struct ndpi_detection_mod flow->l4.tcp.pop_command_bitmask |= POP_BIT_USER; return 1; - } else if((packet->payload[0] == 'P' || packet->payload[0] == 'p') - && (packet->payload[1] == 'A' || packet->payload[1] == 'a') - && (packet->payload[2] == 'S' || packet->payload[2] == 's') - && (packet->payload[3] == 'S' || packet->payload[3] == 's')) { + } else if(ndpi_memcasecmp(packet->payload, "PASS", 4) == 0) { ndpi_user_pwd_payload_copy((u_int8_t*)flow->l4.tcp.ftp_imap_pop_smtp.password, sizeof(flow->l4.tcp.ftp_imap_pop_smtp.password), 5, packet->payload, packet->payload_packet_len); @@ -102,46 +90,25 @@ static int ndpi_int_mail_pop_check_for_client_commands(struct ndpi_detection_mod ndpi_set_risk(ndpi_struct, flow, NDPI_CLEAR_TEXT_CREDENTIALS, "Found password"); flow->l4.tcp.pop_command_bitmask |= POP_BIT_PASS; return 1; - } else if((packet->payload[0] == 'C' || packet->payload[0] == 'c') - && (packet->payload[1] == 'A' || packet->payload[1] == 'a') - && (packet->payload[2] == 'P' || packet->payload[2] == 'p') - && (packet->payload[3] == 'A' || packet->payload[3] == 'a')) { + } else if(ndpi_memcasecmp(packet->payload, "CAPA", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_CAPA; return 1; - } else if((packet->payload[0] == 'L' || packet->payload[0] == 'l') - && (packet->payload[1] == 'I' || packet->payload[1] == 'i') - && (packet->payload[2] == 'S' || packet->payload[2] == 's') - && (packet->payload[3] == 'T' || packet->payload[3] == 't')) { + } else if(ndpi_memcasecmp(packet->payload, "LIST", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_LIST; return 1; - } else if((packet->payload[0] == 'S' || packet->payload[0] == 's') - && (packet->payload[1] == 'T' || packet->payload[1] == 't') - && (packet->payload[2] == 'A' || packet->payload[2] == 'a') - && (packet->payload[3] == 'T' || packet->payload[3] == 't')) { + } else if(ndpi_memcasecmp(packet->payload, "STAT", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_STAT; return 1; - } else if((packet->payload[0] == 'U' || packet->payload[0] == 'u') - && (packet->payload[1] == 'I' || packet->payload[1] == 'i') - && (packet->payload[2] == 'D' || packet->payload[2] == 'd') - && (packet->payload[3] == 'L' || packet->payload[3] == 'l')) { + } else if(ndpi_memcasecmp(packet->payload, "UIDL", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_UIDL; return 1; - } else if((packet->payload[0] == 'R' || packet->payload[0] == 'r') - && (packet->payload[1] == 'E' || packet->payload[1] == 'e') - && (packet->payload[2] == 'T' || packet->payload[2] == 't') - && (packet->payload[3] == 'R' || packet->payload[3] == 'r')) { + } else if(ndpi_memcasecmp(packet->payload, "RETR", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_RETR; return 1; - } else if((packet->payload[0] == 'D' || packet->payload[0] == 'd') - && (packet->payload[1] == 'E' || packet->payload[1] == 'e') - && (packet->payload[2] == 'L' || packet->payload[2] == 'l') - && (packet->payload[3] == 'E' || packet->payload[3] == 'e')) { + } else if(ndpi_memcasecmp(packet->payload, "DELE", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_DELE; return 1; - } else if((packet->payload[0] == 'S' || packet->payload[0] == 's') - && (packet->payload[1] == 'T' || packet->payload[1] == 't') - && (packet->payload[2] == 'L' || packet->payload[2] == 'l') - && (packet->payload[3] == 'S' || packet->payload[3] == 's')) { + } else if(ndpi_memcasecmp(packet->payload, "STLS", 4) == 0) { flow->l4.tcp.pop_command_bitmask |= POP_BIT_STLS; flow->l4.tcp.mail_imap_starttls = 1; return 1; @@ -162,12 +129,9 @@ static void ndpi_search_mail_pop_tcp(struct ndpi_detection_module_struct NDPI_LOG_DBG(ndpi_struct, "search mail_pop\n"); if((packet->payload_packet_len > 3 - && (packet->payload[0] == '+' && (packet->payload[1] == 'O' || packet->payload[1] == 'o') - && (packet->payload[2] == 'K' || packet->payload[2] == 'k'))) + && ndpi_memcasecmp(packet->payload, "+OK", 3) == 0) || (packet->payload_packet_len > 4 - && (packet->payload[0] == '-' && (packet->payload[1] == 'E' || packet->payload[1] == 'e') - && (packet->payload[2] == 'R' || packet->payload[2] == 'r') - && (packet->payload[3] == 'R' || packet->payload[3] == 'r')))) { + && ndpi_memcasecmp(packet->payload, "-ERR", 4) == 0)) { // +OK or -ERR seen flow->l4.tcp.mail_pop_stage += 1; if(packet->payload[0] == '+' && flow->l4.tcp.mail_imap_starttls == 1) { @@ -231,7 +195,7 @@ static void ndpi_search_mail_pop_tcp(struct ndpi_detection_module_struct return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } @@ -266,14 +230,9 @@ static void popInitExtraPacketProcessing(struct ndpi_flow_struct *flow) { /* **************************************** */ -void init_mail_pop_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("MAIL_POP", ndpi_struct, *id, - NDPI_PROTOCOL_MAIL_POP, - ndpi_search_mail_pop_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_mail_pop_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("MAIL_POP", ndpi_struct, + ndpi_search_mail_pop_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MAIL_POP); } diff --git a/src/lib/protocols/mail_smtp.c b/src/lib/protocols/mail_smtp.c index 6e4629ac9..9a968f622 100644 --- a/src/lib/protocols/mail_smtp.c +++ b/src/lib/protocols/mail_smtp.c @@ -1,7 +1,7 @@ /* * mail_smtp.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -179,38 +179,21 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ // expected client requests if(packet->line[a].len >= 5) { - if((((packet->line[a].ptr[0] == 'H' || packet->line[a].ptr[0] == 'h') - && (packet->line[a].ptr[1] == 'E' || packet->line[a].ptr[1] == 'e')) - || ((packet->line[a].ptr[0] == 'E' || packet->line[a].ptr[0] == 'e') - && (packet->line[a].ptr[1] == 'H' || packet->line[a].ptr[1] == 'h'))) - && (packet->line[a].ptr[2] == 'L' || packet->line[a].ptr[2] == 'l') - && (packet->line[a].ptr[3] == 'O' || packet->line[a].ptr[3] == 'o') - && packet->line[a].ptr[4] == ' ') { + if(ndpi_memcasecmp(packet->line[a].ptr, "HELO ", 5) == 0 || + ndpi_memcasecmp(packet->line[a].ptr, "EHLO ", 5) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_HELO_EHLO; flow->l4.tcp.ftp_imap_pop_smtp.auth_found = 0; - } else if((packet->line[a].ptr[0] == 'M' || packet->line[a].ptr[0] == 'm') - && (packet->line[a].ptr[1] == 'A' || packet->line[a].ptr[1] == 'a') - && (packet->line[a].ptr[2] == 'I' || packet->line[a].ptr[2] == 'i') - && (packet->line[a].ptr[3] == 'L' || packet->line[a].ptr[3] == 'l') - && packet->line[a].ptr[4] == ' ') { + } else if(ndpi_memcasecmp(packet->line[a].ptr, "MAIL ", 5) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_MAIL; flow->l4.tcp.ftp_imap_pop_smtp.auth_found = 0; /* We shouldn't be here if there are credentials */ flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 1; - } else if((packet->line[a].ptr[0] == 'R' || packet->line[a].ptr[0] == 'r') - && (packet->line[a].ptr[1] == 'C' || packet->line[a].ptr[1] == 'c') - && (packet->line[a].ptr[2] == 'P' || packet->line[a].ptr[2] == 'p') - && (packet->line[a].ptr[3] == 'T' || packet->line[a].ptr[3] == 't') - && packet->line[a].ptr[4] == ' ') { + } else if(ndpi_memcasecmp(packet->line[a].ptr, "RCPT ", 5) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_RCPT; flow->l4.tcp.ftp_imap_pop_smtp.auth_found = 0; /* We shouldn't be here if there are credentials */ flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 1; - } else if((packet->line[a].ptr[0] == 'A' || packet->line[a].ptr[0] == 'a') - && (packet->line[a].ptr[1] == 'U' || packet->line[a].ptr[1] == 'u') - && (packet->line[a].ptr[2] == 'T' || packet->line[a].ptr[2] == 't') - && (packet->line[a].ptr[3] == 'H' || packet->line[a].ptr[3] == 'h') - && packet->line[a].ptr[4] == ' ') { + } else if(ndpi_memcasecmp(packet->line[a].ptr, "AUTH ", 5) == 0) { #ifdef SMTP_DEBUG printf("%s() AUTH [%.*s]\n", __FUNCTION__, packet->line[a].len, packet->line[a].ptr); #endif @@ -292,7 +275,7 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 1; } else { flow->host_server_name[0] = '\0'; - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -301,14 +284,7 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ } if(packet->line[a].len >= 8) { - if((packet->line[a].ptr[0] == 'S' || packet->line[a].ptr[0] == 's') - && (packet->line[a].ptr[1] == 'T' || packet->line[a].ptr[1] == 't') - && (packet->line[a].ptr[2] == 'A' || packet->line[a].ptr[2] == 'a') - && (packet->line[a].ptr[3] == 'R' || packet->line[a].ptr[3] == 'r') - && (packet->line[a].ptr[4] == 'T' || packet->line[a].ptr[4] == 't') - && (packet->line[a].ptr[5] == 'T' || packet->line[a].ptr[5] == 't') - && (packet->line[a].ptr[6] == 'L' || packet->line[a].ptr[6] == 'l') - && (packet->line[a].ptr[7] == 'S' || packet->line[a].ptr[7] == 's')) { + if(ndpi_memcasecmp(packet->line[a].ptr, "STARTTLS", 8) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_STARTTLS; flow->l4.tcp.ftp_imap_pop_smtp.auth_tls = 1; flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 0; @@ -316,20 +292,7 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ } if(packet->line[a].len >= 14) { - if((packet->line[a].ptr[0] == 'X' || packet->line[a].ptr[0] == 'x') - && (packet->line[a].ptr[1] == '-' || packet->line[a].ptr[1] == '-') - && (packet->line[a].ptr[2] == 'A' || packet->line[a].ptr[2] == 'a') - && (packet->line[a].ptr[3] == 'N' || packet->line[a].ptr[3] == 'n') - && (packet->line[a].ptr[4] == 'O' || packet->line[a].ptr[4] == 'o') - && (packet->line[a].ptr[5] == 'N' || packet->line[a].ptr[5] == 'n') - && (packet->line[a].ptr[6] == 'Y' || packet->line[a].ptr[6] == 'y') - && (packet->line[a].ptr[7] == 'M' || packet->line[a].ptr[6] == 'm') - && (packet->line[a].ptr[8] == 'O' || packet->line[a].ptr[6] == 'o') - && (packet->line[a].ptr[9] == 'U' || packet->line[a].ptr[6] == 'u') - && (packet->line[a].ptr[10] == 'S' || packet->line[a].ptr[6] == 's') - && (packet->line[a].ptr[11] == 'T' || packet->line[a].ptr[6] == 't') - && (packet->line[a].ptr[12] == 'L' || packet->line[a].ptr[6] == 'l') - && (packet->line[a].ptr[13] == 'S' || packet->line[a].ptr[7] == 's')) { + if(ndpi_memcasecmp(packet->line[a].ptr, "X-AnonymousTLS", 14) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_STARTTLS; flow->l4.tcp.ftp_imap_pop_smtp.auth_tls = 1; flow->l4.tcp.ftp_imap_pop_smtp.auth_done = 0; @@ -337,20 +300,11 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ } if(packet->line[a].len >= 4) { - if((packet->line[a].ptr[0] == 'D' || packet->line[a].ptr[0] == 'd') - && (packet->line[a].ptr[1] == 'A' || packet->line[a].ptr[1] == 'a') - && (packet->line[a].ptr[2] == 'T' || packet->line[a].ptr[2] == 't') - && (packet->line[a].ptr[3] == 'A' || packet->line[a].ptr[3] == 'a')) { + if(ndpi_memcasecmp(packet->line[a].ptr, "DATA", 4) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_DATA; - } else if((packet->line[a].ptr[0] == 'N' || packet->line[a].ptr[0] == 'n') - && (packet->line[a].ptr[1] == 'O' || packet->line[a].ptr[1] == 'o') - && (packet->line[a].ptr[2] == 'O' || packet->line[a].ptr[2] == 'o') - && (packet->line[a].ptr[3] == 'P' || packet->line[a].ptr[3] == 'p')) { + } else if(ndpi_memcasecmp(packet->line[a].ptr, "NOOP", 4) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_NOOP; - } else if((packet->line[a].ptr[0] == 'R' || packet->line[a].ptr[0] == 'r') - && (packet->line[a].ptr[1] == 'S' || packet->line[a].ptr[1] == 's') - && (packet->line[a].ptr[2] == 'E' || packet->line[a].ptr[2] == 'e') - && (packet->line[a].ptr[3] == 'T' || packet->line[a].ptr[3] == 't')) { + } else if(ndpi_memcasecmp(packet->line[a].ptr, "RSET", 4) == 0) { flow->l4.tcp.smtp_command_bitmask |= SMTP_BIT_RSET; } } @@ -397,7 +351,7 @@ static void ndpi_search_mail_smtp_tcp(struct ndpi_detection_module_struct *ndpi_ } if((!flow->extra_packets_func) || (flow->packet_counter > 12)) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* **************************************** */ @@ -470,14 +424,9 @@ static void smtpInitExtraPacketProcessing(struct ndpi_flow_struct *flow) { /* **************************************** */ -void init_mail_smtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("MAIL_SMTP", ndpi_struct, *id, - NDPI_PROTOCOL_MAIL_SMTP, - ndpi_search_mail_smtp_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_mail_smtp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("MAIL_SMTP", ndpi_struct, + ndpi_search_mail_smtp_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MAIL_SMTP); } diff --git a/src/lib/protocols/maplestory.c b/src/lib/protocols/maplestory.c deleted file mode 100644 index aa5370082..000000000 --- a/src/lib/protocols/maplestory.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * maplestory.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_MAPLESTORY - -#include "ndpi_api.h" -#include "ndpi_private.h" - -static void ndpi_int_maplestory_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MAPLESTORY, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - - -static void ndpi_search_maplestory(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search maplestory\n"); - - if (packet->payload_packet_len == 16 - && (ntohl(get_u_int32_t(packet->payload, 0)) == 0x0e003a00 || ntohl(get_u_int32_t(packet->payload, 0)) == 0x0e003b00 - || ntohl(get_u_int32_t(packet->payload, 0)) == 0x0e004200) - && ntohs(get_u_int16_t(packet->payload, 4)) == 0x0100 && (packet->payload[6] == 0x32 || packet->payload[6] == 0x33)) { - NDPI_LOG_INFO(ndpi_struct, "found maplestory\n"); - ndpi_int_maplestory_add_connection(ndpi_struct, flow); - return; - } - - if (packet->payload_packet_len > NDPI_STATICSTRING_LEN("GET /maple") - && memcmp(packet->payload, "GET /maple", NDPI_STATICSTRING_LEN("GET /maple")) == 0) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - /* Maplestory update */ - if (packet->payload_packet_len > NDPI_STATICSTRING_LEN("GET /maple/patch") - && packet->payload[NDPI_STATICSTRING_LEN("GET /maple")] == '/') { - if (packet->user_agent_line.ptr != NULL && packet->host_line.ptr != NULL - && packet->user_agent_line.len == NDPI_STATICSTRING_LEN("Patcher") - && packet->host_line.len > NDPI_STATICSTRING_LEN("patch.") - && memcmp(&packet->payload[NDPI_STATICSTRING_LEN("GET /maple/")], "patch", - NDPI_STATICSTRING_LEN("patch")) == 0 - && memcmp(packet->user_agent_line.ptr, "Patcher", NDPI_STATICSTRING_LEN("Patcher")) == 0 - && memcmp(packet->host_line.ptr, "patch.", NDPI_STATICSTRING_LEN("patch.")) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found maplestory update\n"); - ndpi_int_maplestory_add_connection(ndpi_struct, flow); - return; - } - } else if (packet->user_agent_line.ptr != NULL && packet->user_agent_line.len == NDPI_STATICSTRING_LEN("AspINet") - && memcmp(&packet->payload[NDPI_STATICSTRING_LEN("GET /maple")], "story/", - NDPI_STATICSTRING_LEN("story/")) == 0 - && memcmp(packet->user_agent_line.ptr, "AspINet", NDPI_STATICSTRING_LEN("AspINet")) == 0) { - NDPI_LOG_INFO(ndpi_struct, "found maplestory update\n"); - ndpi_int_maplestory_add_connection(ndpi_struct, flow); - return; - } - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - -} - - -void init_maplestory_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("MapleStory", ndpi_struct, *id, - NDPI_PROTOCOL_MAPLESTORY, - ndpi_search_maplestory, - 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/megaco.c b/src/lib/protocols/megaco.c index 98d2d8e97..98cb86046 100644 --- a/src/lib/protocols/megaco.c +++ b/src/lib/protocols/megaco.c @@ -47,18 +47,14 @@ static void ndpi_search_megaco(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_megaco_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_megaco_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Megaco", ndpi_struct, *id, - NDPI_PROTOCOL_MEGACO, - ndpi_search_megaco, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Megaco", ndpi_struct, + ndpi_search_megaco, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MEGACO); } diff --git a/src/lib/protocols/melsec.c b/src/lib/protocols/melsec.c new file mode 100644 index 000000000..f12d6ea71 --- /dev/null +++ b/src/lib/protocols/melsec.c @@ -0,0 +1,63 @@ +/* + * melsec.c + * + * MELSEC Communication Protocol + * + * Copyright (C) 2025 - ntop.org + * Copyright (C) 2025 - V.G <v.gavrilov@securitycode.ru> + * + * 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_MELSEC + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_search_melsec(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search MELSEC\n"); + + if (packet->payload_packet_len > 40 && + (packet->payload[0] == 0x57 || packet->payload[0] == 0xD7)) + { + u_int16_t melsec_payload_len = packet->payload_packet_len - 21; + if (le16toh(get_u_int16_t(packet->payload, 19)) == melsec_payload_len && + ntohl(get_u_int32_t(packet->payload, 3)) == 0x00001111) + { + NDPI_LOG_INFO(ndpi_struct, "found MELSEC\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_MELSEC, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + } + } + + if (flow->packet_counter > 2) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + } +} + +void init_melsec_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("MELSEC", ndpi_struct, + ndpi_search_melsec, + NDPI_SELECTION_BITMASK_PROTOCOL_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MELSEC); +} diff --git a/src/lib/protocols/memcached.c b/src/lib/protocols/memcached.c index 0210a028a..9fc477bae 100644 --- a/src/lib/protocols/memcached.c +++ b/src/lib/protocols/memcached.c @@ -2,7 +2,7 @@ * memcached.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2018 - eGloo Incorporated * * This file is part of nDPI, an open source deep packet inspection @@ -112,21 +112,21 @@ static void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_stru if (packet->tcp != NULL) { if (packet->payload_packet_len < MEMCACHED_MIN_LEN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } matches = &flow->l4.tcp.memcached_matches; } - else if (packet->udp != NULL) { + else { if (packet->payload_packet_len < MEMCACHED_MIN_UDP_LEN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if ((offset[4] == 0x00 && offset[5] == 0x00) || offset[6] != 0x00 || offset[7] != 0x00) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -170,20 +170,13 @@ static void ndpi_search_memcached(struct ndpi_detection_module_struct *ndpi_stru if (*matches >= MEMCACHED_MIN_MATCH) ndpi_int_memcached_add_connection(ndpi_struct, flow); else if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_memcached_dissector( - struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_memcached_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MEMCACHED", - ndpi_struct, *id, - NDPI_PROTOCOL_MEMCACHED, - ndpi_search_memcached, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MEMCACHED", ndpi_struct, + ndpi_search_memcached, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MEMCACHED); } diff --git a/src/lib/protocols/merakicloud.c b/src/lib/protocols/merakicloud.c index 5a0f0991f..c3b7c7a73 100644 --- a/src/lib/protocols/merakicloud.c +++ b/src/lib/protocols/merakicloud.c @@ -1,7 +1,7 @@ /* * merakicloud.c * - * Copyright (C) 2011-23 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -46,18 +46,13 @@ static void ndpi_search_merakicloud(struct ndpi_detection_module_struct *ndpi_st ndpi_int_merakicloud_add_connection(ndpi_struct, flow); return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_merakicloud_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_merakicloud_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MerakiCloud", ndpi_struct, *id, - NDPI_PROTOCOL_MERAKI_CLOUD, - ndpi_search_merakicloud, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MerakiCloud", ndpi_struct, + ndpi_search_merakicloud, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MERAKI_CLOUD); } diff --git a/src/lib/protocols/mgcp.c b/src/lib/protocols/mgcp.c index f48001ddc..7ae291ff3 100644 --- a/src/lib/protocols/mgcp.c +++ b/src/lib/protocols/mgcp.c @@ -97,19 +97,15 @@ static void ndpi_search_mgcp(struct ndpi_detection_module_struct *ndpi_struct, s } } while(0); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mgcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_mgcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MGCP", ndpi_struct, *id, - NDPI_PROTOCOL_MGCP, - ndpi_search_mgcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MGCP", ndpi_struct, + ndpi_search_mgcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MGCP); } diff --git a/src/lib/protocols/mikrotik.c b/src/lib/protocols/mikrotik.c index 83556bcbe..506bbc056 100644 --- a/src/lib/protocols/mikrotik.c +++ b/src/lib/protocols/mikrotik.c @@ -40,7 +40,7 @@ static void ndpi_search_mikrotik(struct ndpi_detection_module_struct *ndpi_struc u_int16_t offset; if (packet->payload_packet_len < 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { offset = 4; @@ -103,18 +103,14 @@ static void ndpi_search_mikrotik(struct ndpi_detection_module_struct *ndpi_struc NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ********************************* */ -void init_mikrotik_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("MIKROTIK", ndpi_struct, - *id, NDPI_PROTOCOL_MIKROTIK, ndpi_search_mikrotik, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_mikrotik_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("MIKROTIK", ndpi_struct, + ndpi_search_mikrotik, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MIKROTIK); } diff --git a/src/lib/protocols/mining.c b/src/lib/protocols/mining.c index 22d215927..aecad9951 100644 --- a/src/lib/protocols/mining.c +++ b/src/lib/protocols/mining.c @@ -58,7 +58,7 @@ static void ndpi_search_mining(struct ndpi_detection_module_struct *ndpi_struct, /* Quick test: we are looking for only Json format */ if(packet->payload[0] != '{') { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -89,21 +89,16 @@ static void ndpi_search_mining(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************************** */ -void init_mining_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_mining_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Mining", ndpi_struct, *id, - NDPI_PROTOCOL_MINING, - ndpi_search_mining, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Mining", ndpi_struct, + ndpi_search_mining, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MINING); } diff --git a/src/lib/protocols/modbus.c b/src/lib/protocols/modbus.c index d0b6bd593..e86fdf43c 100644 --- a/src/lib/protocols/modbus.c +++ b/src/lib/protocols/modbus.c @@ -61,20 +61,16 @@ static void ndpi_search_modbus_tcp(struct ndpi_detection_module_struct *ndpi_str } } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_modbus_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - - ndpi_set_bitmask_protocol_detection("Modbus", ndpi_struct, *id, - NDPI_PROTOCOL_MODBUS, - ndpi_search_modbus_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_modbus_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + + register_dissector("Modbus", ndpi_struct, + ndpi_search_modbus_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MODBUS); } diff --git a/src/lib/protocols/monero.c b/src/lib/protocols/monero.c index ef36dabd5..eb2583b7b 100644 --- a/src/lib/protocols/monero.c +++ b/src/lib/protocols/monero.c @@ -55,7 +55,7 @@ static void ndpi_search_monero(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -65,18 +65,13 @@ static void ndpi_search_monero(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_monero_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_monero_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Monero", ndpi_struct, *id, - NDPI_PROTOCOL_MONERO, - ndpi_search_monero, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Monero", ndpi_struct, + ndpi_search_monero, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MONERO); } diff --git a/src/lib/protocols/mongodb.c b/src/lib/protocols/mongodb.c index 38cac1622..12e1fcc4b 100644 --- a/src/lib/protocols/mongodb.c +++ b/src/lib/protocols/mongodb.c @@ -68,7 +68,7 @@ static void ndpi_check_mongodb(struct ndpi_detection_module_struct *ndpi_struct, uint32_t responseFlags; if (packet->payload_packet_len <= sizeof(mongodb_hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -81,7 +81,7 @@ static void ndpi_check_mongodb(struct ndpi_detection_module_struct *ndpi_struct, || (le32toh(mongodb_hdr.message_length) > 1000000) /* Used to avoid false positives */ ) { NDPI_LOG_DBG(ndpi_struct, "Invalid MONGODB length"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -115,7 +115,7 @@ static void ndpi_check_mongodb(struct ndpi_detection_module_struct *ndpi_struct, default: NDPI_LOG_DBG(ndpi_struct, "Invalid MONGODB length"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); break; } } @@ -125,7 +125,7 @@ static void ndpi_search_mongodb(struct ndpi_detection_module_struct *ndpi_struct { // Break after 6 packets. if(flow->packet_counter > 6) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -138,13 +138,9 @@ static void ndpi_search_mongodb(struct ndpi_detection_module_struct *ndpi_struct /* ********************************* */ -void init_mongodb_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("MongoDB", ndpi_struct, - *id, NDPI_PROTOCOL_MONGODB, ndpi_search_mongodb, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_mongodb_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("MongoDB", ndpi_struct, + ndpi_search_mongodb, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MONGODB); } diff --git a/src/lib/protocols/mpegdash.c b/src/lib/protocols/mpegdash.c index ee09dfefc..18e0510f8 100644 --- a/src/lib/protocols/mpegdash.c +++ b/src/lib/protocols/mpegdash.c @@ -49,7 +49,7 @@ static void ndpi_search_mpegdash_http(struct ndpi_detection_module_struct *ndpi_ { if (flow->packet_counter > 2) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; } @@ -83,18 +83,14 @@ static void ndpi_search_mpegdash_http(struct ndpi_detection_module_struct *ndpi_ } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_mpegdash_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_mpegdash_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MpegDash", ndpi_struct, *id, - NDPI_PROTOCOL_MPEGDASH, - ndpi_search_mpegdash_http, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("MpegDash", ndpi_struct, + ndpi_search_mpegdash_http, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MPEGDASH); } diff --git a/src/lib/protocols/mpegts.c b/src/lib/protocols/mpegts.c index 27aa6d63d..3388d2af5 100644 --- a/src/lib/protocols/mpegts.c +++ b/src/lib/protocols/mpegts.c @@ -48,19 +48,15 @@ static void ndpi_search_mpegts(struct ndpi_detection_module_struct *ndpi_struct, } no_mpegts: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mpegts_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_mpegts_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MPEG_TS", ndpi_struct, *id, - NDPI_PROTOCOL_MPEGTS, - ndpi_search_mpegts, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MPEG_TS", ndpi_struct, + ndpi_search_mpegts, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MPEGTS); } diff --git a/src/lib/protocols/mqtt.c b/src/lib/protocols/mqtt.c index 535cd02b1..6846501ce 100644 --- a/src/lib/protocols/mqtt.c +++ b/src/lib/protocols/mqtt.c @@ -93,7 +93,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_packet_struct *packet = &ndpi_struct->packet; if (flow->packet_counter > 10) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt .. mandatory header not found!\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -105,20 +105,20 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, packet->payload_packet_len); if (packet->payload_packet_len < 2) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt .. mandatory header not found!\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // we extract the remaining length rl = get_var_int(&packet->payload[1], packet->payload_packet_len - 1, &rl_len); if (rl < 0) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt .. invalid length!\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } NDPI_LOG_DBG(ndpi_struct, "Mqtt: msg_len %d\n", (unsigned long long)rl); if (packet->payload_packet_len != rl + 1 + rl_len) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt .. maximum packet size exceeded!\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // we extract the packet type @@ -126,7 +126,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct,"====>>>> Mqtt packet type: [%d]\n",pt); if ((pt == 0) || (pt == 15)) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt .. invalid packet type!\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // we extract the flags @@ -137,12 +137,12 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, (pt == PUBCOMP) || (pt == SUBACK) || (pt == UNSUBACK) || (pt == PINGREQ) || (pt == PINGRESP) || (pt == DISCONNECT)) && (flags > 0)) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid Packet-Flag combination flag!=0\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (((pt == PUBREL) || (pt == SUBSCRIBE) || (pt == UNSUBSCRIBE)) && (flags != 2)) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid Packet-Flag combination flag!=2\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } NDPI_LOG_DBG2(ndpi_struct,"====>>>> Passed first stage of identification\n"); @@ -151,7 +151,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, (pt == PUBREC) || (pt == PUBCOMP) || (pt == UNSUBACK)) { if (packet->payload_packet_len != 4) { // these packets are always 4 bytes long NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid Packet-Length < 4 \n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_INFO(ndpi_struct, "found Mqtt CONNACK/PUBACK/PUBREL/PUBREC/PUBCOMP/UNSUBACK\n"); @@ -162,7 +162,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, if ((pt == PINGREQ) || (pt == PINGRESP) || (pt == DISCONNECT)) { if (packet->payload_packet_len != 2) { // these packets are always 2 bytes long NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid Packet-Length <2 \n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_INFO(ndpi_struct, "found Mqtt PING/PINGRESP/DISCONNECT\n"); @@ -183,25 +183,25 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, u_int8_t dup = (u_int8_t) (flags & 0x08) >> 3; if (qos > 2) { // qos values possible are 0,1,2 NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid PUBLISH qos\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (qos == 0) { if (dup != 0) { NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid PUBLISH qos0 and dup combination\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (packet->payload_packet_len < 5) { // at least topic (3Bytes + 2Bytes fixed header) NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid PUBLISH qos0 size\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } if ((qos == 1) || (qos == 2)) { if (packet->payload_packet_len < 7 ) { // at least topic + pkt identifier (3Bytes + 2Bytes + 2Bytes fixed header) NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid PUBLISH qos1&2\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -212,7 +212,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, if (pt == SUBSCRIBE) { if (packet->payload_packet_len < 8) { // at least one topic+filter is required in the payload NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid SUBSCRIBE\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_INFO(ndpi_struct, "found Mqtt SUBSCRIBE\n"); @@ -223,7 +223,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, if (pt == SUBACK ) { if (packet->payload_packet_len <5 ) { // must have at least a response code NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid SUBACK\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_INFO(ndpi_struct, "found Mqtt SUBACK\n"); @@ -234,7 +234,7 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, if (pt == UNSUBSCRIBE) { if (packet->payload_packet_len < 7) { // at least a topic NDPI_LOG_DBG(ndpi_struct, "Excluding Mqtt invalid UNSUBSCRIBE\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_INFO(ndpi_struct, "found Mqtt UNSUBSCRIBE\n"); @@ -247,15 +247,12 @@ static void ndpi_search_mqtt(struct ndpi_detection_module_struct *ndpi_struct, /** * Entry point for the ndpi library */ -void init_mqtt_dissector (struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_mqtt_dissector (struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection ("MQTT", ndpi_struct, *id, - NDPI_PROTOCOL_MQTT, - ndpi_search_mqtt, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id +=1; + register_dissector("MQTT", ndpi_struct, + ndpi_search_mqtt, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MQTT); } diff --git a/src/lib/protocols/msdo.c b/src/lib/protocols/msdo.c new file mode 100644 index 000000000..1c072f1bd --- /dev/null +++ b/src/lib/protocols/msdo.c @@ -0,0 +1,73 @@ +/* + * msdo.c + * + * Microsoft Delivery Optimization + * + * Copyright (C) 2025 - ntop.org + * Copyright (C) 2025 - V.G <v.gavrilov@securitycode.ru> + * + * 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_MSDO + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_int_msdo_add_connection(struct ndpi_detection_module_struct * const ndpi_struct, + struct ndpi_flow_struct * const flow) +{ + NDPI_LOG_INFO(ndpi_struct, "found Microsoft Delivery Optimization protocol\n"); + ndpi_set_detected_protocol(ndpi_struct, flow, + NDPI_PROTOCOL_MSDO, + NDPI_PROTOCOL_UNKNOWN, + NDPI_CONFIDENCE_DPI); +} + +static void ndpi_search_msdo(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search Microsoft Delivery Optimization protocol\n"); + + /* + * Usually the handshake starts with 0x0E and the string "Swarm protocol" at the start of the payload, + * but this may vary. + */ + if (packet->payload_packet_len > 16 && packet->payload[0] == 0x0E) + { + if (memcmp(&packet->payload[1], "Swarm protocol", NDPI_STATICSTRING_LEN("Swarm protocol")) == 0) + { + ndpi_int_msdo_add_connection(ndpi_struct, flow); + return; + } + } + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); +} + + +void init_msdo_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("MSDO", ndpi_struct, + ndpi_search_msdo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MSDO); +} diff --git a/src/lib/protocols/mssql_tds.c b/src/lib/protocols/mssql_tds.c index 38efe578d..835602015 100644 --- a/src/lib/protocols/mssql_tds.c +++ b/src/lib/protocols/mssql_tds.c @@ -58,7 +58,7 @@ static void ndpi_search_mssql_tds(struct ndpi_detection_module_struct *ndpi_stru to this potocol and it can cause false positives */ || (packet->tcp->dest == ntohs(102))) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -72,18 +72,14 @@ static void ndpi_search_mssql_tds(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mssql_tds_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_mssql_tds_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MsSQL_TDS", ndpi_struct, *id, - NDPI_PROTOCOL_MSSQL_TDS, - ndpi_search_mssql_tds, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MsSQL_TDS", ndpi_struct, + ndpi_search_mssql_tds, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MSSQL_TDS); } diff --git a/src/lib/protocols/mumble.c b/src/lib/protocols/mumble.c index 588ac48dd..ed1ddfc53 100644 --- a/src/lib/protocols/mumble.c +++ b/src/lib/protocols/mumble.c @@ -58,18 +58,13 @@ static void ndpi_search_mumble(struct ndpi_detection_module_struct *ndpi_struct, } not_mumble: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mumble_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_mumble_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Mumble", ndpi_struct, *id, - NDPI_PROTOCOL_MUMBLE, - ndpi_search_mumble, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Mumble", ndpi_struct, + ndpi_search_mumble, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_MUMBLE); } diff --git a/src/lib/protocols/munin.c b/src/lib/protocols/munin.c index 06e50d3a6..5e40adbb2 100644 --- a/src/lib/protocols/munin.c +++ b/src/lib/protocols/munin.c @@ -50,13 +50,13 @@ static void ndpi_search_munin(struct ndpi_detection_module_struct *ndpi_struct, // "# munin node at " if (packet->payload_packet_len < NDPI_STATICSTRING_LEN(munin_prefix)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (memcmp(packet->payload, munin_prefix, NDPI_STATICSTRING_LEN(munin_prefix)) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -79,16 +79,10 @@ static void ndpi_search_munin(struct ndpi_detection_module_struct *ndpi_struct, /* ***************************************************** */ -void init_munin_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_munin_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Munin", ndpi_struct, *id, - NDPI_PROTOCOL_MUNIN, - ndpi_search_munin, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Munin", ndpi_struct, + ndpi_search_munin, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MUNIN); } diff --git a/src/lib/protocols/mysql.c b/src/lib/protocols/mysql.c index dbe75eb14..20df5df00 100644 --- a/src/lib/protocols/mysql.c +++ b/src/lib/protocols/mysql.c @@ -2,7 +2,7 @@ * mysql.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-24 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2024 - V.G <v.gavrilov@securitycode.ru> * * This file is part of nDPI, an open source deep packet inspection @@ -58,18 +58,14 @@ static void ndpi_search_mysql_tcp(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_mysql_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_mysql_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("MySQL", ndpi_struct, *id, - NDPI_PROTOCOL_MYSQL, - ndpi_search_mysql_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("MySQL", ndpi_struct, + ndpi_search_mysql_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_MYSQL); } diff --git a/src/lib/protocols/nano.c b/src/lib/protocols/nano.c index 861614b82..ff9abf125 100644 --- a/src/lib/protocols/nano.c +++ b/src/lib/protocols/nano.c @@ -76,17 +76,13 @@ static void ndpi_search_nano(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_nano_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_nano_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Nano", ndpi_struct, *id, - NDPI_PROTOCOL_NANO, - ndpi_search_nano, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Nano", ndpi_struct, + ndpi_search_nano, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NANO); } diff --git a/src/lib/protocols/natpmp.c b/src/lib/protocols/natpmp.c index 4c259c91c..bdd5b308d 100644 --- a/src/lib/protocols/natpmp.c +++ b/src/lib/protocols/natpmp.c @@ -173,7 +173,7 @@ static void ndpi_search_natpmp(struct ndpi_detection_module_struct *ndpi_struct, if (natpmp_is_valid(packet, &natpmp_type) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -188,16 +188,10 @@ static void ndpi_search_natpmp(struct ndpi_detection_module_struct *ndpi_struct, } } -void init_natpmp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_natpmp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NAT-PMP", ndpi_struct, *id, - NDPI_PROTOCOL_NATPMP, - ndpi_search_natpmp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("NAT-PMP", ndpi_struct, + ndpi_search_natpmp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NATPMP); } diff --git a/src/lib/protocols/nats.c b/src/lib/protocols/nats.c index d7bb79bef..a6a56754a 100644 --- a/src/lib/protocols/nats.c +++ b/src/lib/protocols/nats.c @@ -49,7 +49,7 @@ static void ndpi_search_nats_tcp(struct ndpi_detection_module_struct *ndpi_struc int i; if(packet->payload_packet_len <= 4) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); for(i=0; commands[i] != NULL; i++) { int len = ndpi_min(strlen(commands[i]), packet->payload_packet_len); @@ -67,19 +67,15 @@ static void ndpi_search_nats_tcp(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_nats_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Nats", ndpi_struct, *id, - NDPI_PROTOCOL_NATS, - ndpi_search_nats_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_nats_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Nats", ndpi_struct, + ndpi_search_nats_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NATS); } diff --git a/src/lib/protocols/nest_log_sink.c b/src/lib/protocols/nest_log_sink.c index d2a3f62d0..3b08ecdac 100644 --- a/src/lib/protocols/nest_log_sink.c +++ b/src/lib/protocols/nest_log_sink.c @@ -2,7 +2,7 @@ * nest_log_sink.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2018 - eGloo Incorporated * * This file is part of nDPI, an open source deep packet inspection @@ -42,13 +42,13 @@ static void ndpi_search_nest_log_sink(struct ndpi_detection_module_struct *ndpi_ 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); + NDPI_EXCLUDE_DISSECTOR(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); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -63,17 +63,10 @@ static void ndpi_search_nest_log_sink(struct ndpi_detection_module_struct *ndpi_ } } -void init_nest_log_sink_dissector( - struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_nest_log_sink_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NEST_LOG_SINK", - ndpi_struct, *id, - NDPI_PROTOCOL_NEST_LOG_SINK, - ndpi_search_nest_log_sink, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NEST_LOG_SINK", ndpi_struct, + ndpi_search_nest_log_sink, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NEST_LOG_SINK); } diff --git a/src/lib/protocols/netbios.c b/src/lib/protocols/netbios.c index e01c980b8..bb1e34f6a 100644 --- a/src/lib/protocols/netbios.c +++ b/src/lib/protocols/netbios.c @@ -1,7 +1,7 @@ /* * netbios.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -105,7 +105,7 @@ static void ndpi_int_netbios_add_connection(struct ndpi_detection_module_struct (u_int)(packet->payload_packet_len - off), name, sizeof(name)-1) > 0) { ndpi_hostname_sni_set(flow, (const u_int8_t *)name, strlen((char *)name), NDPI_HOSTNAME_NORM_ALL); - ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 1); + ndpi_check_dga_name(ndpi_struct, flow, flow->host_server_name, 1, 1, 0); } if(sub_protocol == NDPI_PROTOCOL_UNKNOWN) @@ -410,19 +410,15 @@ static void ndpi_search_netbios(struct ndpi_detection_module_struct *ndpi_struct } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ****************************************************************** */ -void init_netbios_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_netbios_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NETBIOS", ndpi_struct, *id, - NDPI_PROTOCOL_NETBIOS, - ndpi_search_netbios, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NETBIOS", ndpi_struct, + ndpi_search_netbios, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NETBIOS); } diff --git a/src/lib/protocols/netease_games.c b/src/lib/protocols/netease_games.c index 47b01b09c..0747ea053 100644 --- a/src/lib/protocols/netease_games.c +++ b/src/lib/protocols/netease_games.c @@ -73,18 +73,13 @@ static void ndpi_search_netease(struct ndpi_detection_module_struct *ndpi_struct /* TODO: add more NetEase Games signatures */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_netease_games_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_netease_games_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NetEaseGames", ndpi_struct, *id, - NDPI_PROTOCOL_NETEASE_GAMES, - ndpi_search_netease, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NetEaseGames", ndpi_struct, + ndpi_search_netease, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NETEASE_GAMES); } diff --git a/src/lib/protocols/netflow.c b/src/lib/protocols/netflow.c index ccb5b2762..7e3d7580f 100644 --- a/src/lib/protocols/netflow.c +++ b/src/lib/protocols/netflow.c @@ -1,7 +1,7 @@ /* * netflow.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -119,7 +119,7 @@ static void ndpi_search_netflow(struct ndpi_detection_module_struct *ndpi_struct case 7: case 9: if((n == 0) || (n > 30)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -142,7 +142,7 @@ static void ndpi_search_netflow(struct ndpi_detection_module_struct *ndpi_struct } if((expected_len > 0) && (expected_len != payload_len)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -154,7 +154,7 @@ static void ndpi_search_netflow(struct ndpi_detection_module_struct *ndpi_struct u_int16_t ipfix_len = n; if(ipfix_len != payload_len) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -162,7 +162,7 @@ static void ndpi_search_netflow(struct ndpi_detection_module_struct *ndpi_struct break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -179,18 +179,14 @@ static void ndpi_search_netflow(struct ndpi_detection_module_struct *ndpi_struct return; } } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_netflow_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_netflow_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NetFlow", ndpi_struct, *id, - NDPI_PROTOCOL_NETFLOW, - ndpi_search_netflow, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NetFlow", ndpi_struct, + ndpi_search_netflow, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NETFLOW); } diff --git a/src/lib/protocols/nexon.c b/src/lib/protocols/nexon.c new file mode 100644 index 000000000..25fca5ac6 --- /dev/null +++ b/src/lib/protocols/nexon.c @@ -0,0 +1,71 @@ +/* + * nexon.c + * + * Copyright (C) 2009-11 - ipoque GmbH + * Copyright (C) 2011-25 - 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" + +#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_NEXON + +#include "ndpi_api.h" +#include "ndpi_private.h" + +static void ndpi_int_nexon_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_NEXON, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); +} + + +static void ndpi_search_nexon(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + + NDPI_LOG_DBG(ndpi_struct, "search nexon\n"); + + if(packet->payload_packet_len == 24 && + ntohl(get_u_int32_t(packet->payload, 0)) == 0x18000000 && + ntohl(get_u_int32_t(packet->payload, 4)) == 0x64000000) { + NDPI_LOG_INFO(ndpi_struct, "found nexon\n"); + ndpi_int_nexon_add_connection(ndpi_struct, flow); + return; + } + if(packet->payload_packet_len == 20 && + ntohl(get_u_int32_t(packet->payload, 4)) == 0x163A992E) { + NDPI_LOG_INFO(ndpi_struct, "found nexon\n"); + ndpi_int_nexon_add_connection(ndpi_struct, flow); + return; + } + + /* TODO: detect UDP traffic */ + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + +} + + +void init_nexon_dissector(struct ndpi_detection_module_struct *ndpi_struct) +{ + register_dissector("Nexon", ndpi_struct, + ndpi_search_nexon, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NEXON); +} diff --git a/src/lib/protocols/nfs.c b/src/lib/protocols/nfs.c index 5fe9f78c3..b978c697b 100644 --- a/src/lib/protocols/nfs.c +++ b/src/lib/protocols/nfs.c @@ -2,7 +2,7 @@ * nfs.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -84,19 +84,15 @@ static void ndpi_search_nfs(struct ndpi_detection_module_struct *ndpi_struct, st return; exclude_nfs: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_nfs_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_nfs_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NFS", ndpi_struct, *id, - NDPI_PROTOCOL_NFS, - ndpi_search_nfs, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NFS", ndpi_struct, + ndpi_search_nfs, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NFS); } diff --git a/src/lib/protocols/nintendo.c b/src/lib/protocols/nintendo.c index 7c46439ff..99e5b5be8 100644 --- a/src/lib/protocols/nintendo.c +++ b/src/lib/protocols/nintendo.c @@ -51,17 +51,13 @@ static void ndpi_search_nintendo(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_nintendo_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Nintendo", ndpi_struct, *id, - NDPI_PROTOCOL_NINTENDO, - ndpi_search_nintendo, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_nintendo_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Nintendo", ndpi_struct, + ndpi_search_nintendo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NINTENDO); } diff --git a/src/lib/protocols/noe.c b/src/lib/protocols/noe.c index 37bfb8c71..d0faf0d00 100644 --- a/src/lib/protocols/noe.c +++ b/src/lib/protocols/noe.c @@ -2,7 +2,7 @@ * noe.c (Alcatel new office environment) * * Copyright (C) 2013 Remy Mudingay <mudingay@ill.fr> - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -67,19 +67,15 @@ static void ndpi_search_noe(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_noe_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_noe_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NOE", ndpi_struct, *id, - NDPI_PROTOCOL_NOE, - ndpi_search_noe, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NOE", ndpi_struct, + ndpi_search_noe, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NOE); } diff --git a/src/lib/protocols/nomachine.c b/src/lib/protocols/nomachine.c index 4cf4e1d8d..b675e2c65 100644 --- a/src/lib/protocols/nomachine.c +++ b/src/lib/protocols/nomachine.c @@ -67,16 +67,12 @@ static void ndpi_search_nomachine(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_nomachine_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_nomachine_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NoMachine", ndpi_struct, *id, - NDPI_PROTOCOL_NOMACHINE, - ndpi_search_nomachine, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NoMachine", ndpi_struct, + ndpi_search_nomachine, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_NOMACHINE); } diff --git a/src/lib/protocols/non_tcp_udp.c b/src/lib/protocols/non_tcp_udp.c index 1aa993eb5..ee4981817 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-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -30,7 +30,7 @@ #define set_protocol_and_bmask(nprot) \ { \ - if (NDPI_COMPARE_PROTOCOL_TO_BITMASK(ndpi_struct->detection_bitmask,nprot) != 0) \ + if (is_proto_enabled(ndpi_struct, nprot)) \ { \ ndpi_set_detected_protocol(ndpi_struct, flow, \ nprot, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); \ @@ -41,10 +41,15 @@ static void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + struct ndpi_packet_struct *packet = &ndpi_struct->packet; + switch (flow->l4_proto) { case NDPI_IPSEC_PROTOCOL_ESP: + set_protocol_and_bmask(NDPI_PROTOCOL_IP_ESP); + break; + case NDPI_IPSEC_PROTOCOL_AH: - set_protocol_and_bmask(NDPI_PROTOCOL_IPSEC); + set_protocol_and_bmask(NDPI_PROTOCOL_IP_AH); break; case NDPI_GRE_PROTOCOL_TYPE: @@ -53,6 +58,43 @@ static void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct case NDPI_ICMP_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_ICMP); + + if(packet->payload_packet_len < sizeof(struct ndpi_icmphdr)) { + char buf[64]; + + snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)", + packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmphdr)); + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, buf); + } else { + u_int8_t icmp_type = (u_int8_t)packet->payload[0]; + u_int8_t icmp_code = (u_int8_t)packet->payload[1]; + + /* https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml */ + if(((icmp_type >= 44) && (icmp_type <= 252)) + || (icmp_code > 15)) { + char buf[64]; + + snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)", + icmp_type, icmp_code); + + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, buf); + } + + if(packet->payload_packet_len > sizeof(struct ndpi_icmphdr)) { + if(ndpi_struct->cfg.compute_entropy && (flow->skip_entropy_check == 0)) { + flow->entropy = ndpi_entropy(packet->payload + sizeof(struct ndpi_icmphdr), + packet->payload_packet_len - sizeof(struct ndpi_icmphdr)); + ndpi_entropy2risk(ndpi_struct, flow); + } + + u_int16_t chksm = icmp4_checksum(packet->payload, packet->payload_packet_len); + + if(chksm) { + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, "Invalid ICMP checksum"); + } + } + } + break; case NDPI_IGMP_PROTOCOL_TYPE: @@ -81,6 +123,30 @@ static void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct case NDPI_ICMPV6_PROTOCOL_TYPE: set_protocol_and_bmask(NDPI_PROTOCOL_IP_ICMPV6); + + if(packet->payload_packet_len < sizeof(struct ndpi_icmp6hdr)) { + char buf[64]; + + snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)", + packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmp6hdr)); + + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, buf); + } else { + u_int8_t icmp6_type = (u_int8_t)packet->payload[0]; + u_int8_t icmp6_code = (u_int8_t)packet->payload[1]; + + /* https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 */ + if(((icmp6_type >= 5) && (icmp6_type <= 127)) + || ((icmp6_code >= 156) && (icmp6_type != 255))) { + char buf[64]; + + snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)", + icmp6_type, icmp6_code); + + ndpi_set_risk(ndpi_struct, flow, NDPI_MALFORMED_PACKET, buf); + } + } + break; case NDPI_PIM_PROTOCOL_TYPE: @@ -91,100 +157,28 @@ static void ndpi_search_in_non_tcp_udp(struct ndpi_detection_module_struct set_protocol_and_bmask(NDPI_PROTOCOL_IP_VRRP); break; } + + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_non_tcp_udp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +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); - - ndpi_set_bitmask_protocol_detection("IPSec", ndpi_struct, *id, - NDPI_PROTOCOL_IPSEC, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_GRE", ndpi_struct, *id, - NDPI_PROTOCOL_IP_GRE, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_ICMP", ndpi_struct, *id, - NDPI_PROTOCOL_IP_ICMP, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_IGMP", ndpi_struct, *id, - NDPI_PROTOCOL_IP_IGMP, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_EGP", ndpi_struct, *id, - NDPI_PROTOCOL_IP_EGP, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_SCTP", ndpi_struct, *id, - NDPI_PROTOCOL_IP_SCTP, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_PGM", ndpi_struct, *id, - NDPI_PROTOCOL_IP_PGM, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_OSPF", ndpi_struct, *id, - NDPI_PROTOCOL_IP_OSPF, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_IP_IN_IP", ndpi_struct, *id, - NDPI_PROTOCOL_IP_IP_IN_IP, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_ICMPV6", ndpi_struct, *id, - NDPI_PROTOCOL_IP_ICMPV6, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; - - ndpi_set_bitmask_protocol_detection("IP_PIM", ndpi_struct, *id, - NDPI_PROTOCOL_IP_PIM, - ndpi_search_in_non_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, - NO_SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Non_TCP_UDP", ndpi_struct, + ndpi_search_in_non_tcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_IPV4_OR_IPV6, + 13, + NDPI_PROTOCOL_IP_ESP, + NDPI_PROTOCOL_IP_AH, + NDPI_PROTOCOL_IP_GRE, + NDPI_PROTOCOL_IP_ICMP, + NDPI_PROTOCOL_IP_IGMP, + NDPI_PROTOCOL_IP_EGP, + NDPI_PROTOCOL_IP_SCTP, + NDPI_PROTOCOL_IP_PGM, + NDPI_PROTOCOL_IP_OSPF, + NDPI_PROTOCOL_IP_IP_IN_IP, + NDPI_PROTOCOL_IP_ICMPV6, + NDPI_PROTOCOL_IP_PIM, + NDPI_PROTOCOL_IP_VRRP); } diff --git a/src/lib/protocols/ntp.c b/src/lib/protocols/ntp.c index 8e08b391a..95ef7dddd 100644 --- a/src/lib/protocols/ntp.c +++ b/src/lib/protocols/ntp.c @@ -2,7 +2,7 @@ * ntp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -44,15 +44,11 @@ static void ndpi_search_ntp_udp(struct ndpi_detection_module_struct *ndpi_struct if (packet->udp->dest == htons(123) || packet->udp->source == htons(123)) { NDPI_LOG_DBG2(ndpi_struct, "NTP port and length detected\n"); - - if ((((packet->payload[0] & 0x38) >> 3) <= 4)) { - - // 38 in binary representation is 00111000 - flow->protos.ntp.version = (packet->payload[0] & 0x38) >> 3; - - if (packet->payload_packet_len > 3 && flow->protos.ntp.version == 2) { - flow->protos.ntp.request_code = packet->payload[3]; - } + uint8_t version = (packet->payload[0] & 56) >> 3; + + if (version <= 4) { + flow->protos.ntp.version = version; + flow->protos.ntp.mode = packet->payload[0] & 7; NDPI_LOG_INFO(ndpi_struct, "found NTP\n"); ndpi_int_ntp_add_connection(ndpi_struct, flow); @@ -60,19 +56,15 @@ static void ndpi_search_ntp_udp(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ntp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ntp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("NTP", ndpi_struct, *id, - NDPI_PROTOCOL_NTP, - ndpi_search_ntp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("NTP", ndpi_struct, + ndpi_search_ntp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_NTP); } diff --git a/src/lib/protocols/oicq.c b/src/lib/protocols/oicq.c index 50585fe9e..d97886144 100644 --- a/src/lib/protocols/oicq.c +++ b/src/lib/protocols/oicq.c @@ -59,19 +59,19 @@ static void ndpi_search_oicq(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < sizeof(*hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (hdr->flag != 0x02) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (ntohs(hdr->version) != 0x3b0b) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -79,7 +79,7 @@ static void ndpi_search_oicq(struct ndpi_detection_module_struct *ndpi_struct, if (command == 0x0000 || (command > 0x00b5 && command < 0x03f7) || command > 0x03f7) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -88,16 +88,10 @@ static void ndpi_search_oicq(struct ndpi_detection_module_struct *ndpi_struct, /* ***************************************************** */ -void init_oicq_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_oicq_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("OICQ", ndpi_struct, *id, - NDPI_PROTOCOL_OICQ, - ndpi_search_oicq, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("OICQ", ndpi_struct, + ndpi_search_oicq, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_OICQ); } diff --git a/src/lib/protocols/ookla.c b/src/lib/protocols/ookla.c index dd15636dd..eec8778b1 100644 --- a/src/lib/protocols/ookla.c +++ b/src/lib/protocols/ookla.c @@ -92,7 +92,7 @@ void ndpi_search_ookla(struct ndpi_detection_module_struct* ndpi_struct, struct NDPI_LOG_DBG(ndpi_struct, "Ookla detection\n"); if(ntohs(flow->s_port) != ookla_port && ntohs(flow->c_port) != ookla_port) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -113,19 +113,14 @@ void ndpi_search_ookla(struct ndpi_detection_module_struct* ndpi_struct, struct return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************* */ -void init_ookla_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Ookla", ndpi_struct, *id, - NDPI_PROTOCOL_OOKLA, - ndpi_search_ookla, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_ookla_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Ookla", ndpi_struct, + ndpi_search_ookla, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_OOKLA); } diff --git a/src/lib/protocols/opc-ua.c b/src/lib/protocols/opc-ua.c index a950664d3..78766c86a 100644 --- a/src/lib/protocols/opc-ua.c +++ b/src/lib/protocols/opc-ua.c @@ -66,16 +66,13 @@ static void ndpi_search_opc_ua(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_opc_ua_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_opc_ua_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("OPC-UA", ndpi_struct, *id, - NDPI_PROTOCOL_OPC_UA, - ndpi_search_opc_ua, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("OPC-UA", ndpi_struct, + ndpi_search_opc_ua, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_OPC_UA); } diff --git a/src/lib/protocols/openflow.c b/src/lib/protocols/openflow.c index 966e56527..e577de210 100644 --- a/src/lib/protocols/openflow.c +++ b/src/lib/protocols/openflow.c @@ -53,18 +53,14 @@ static void ndpi_search_openflow(struct ndpi_detection_module_struct *ndpi_struc return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_openflow_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_openflow_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("OpenFlow", ndpi_struct, *id, - NDPI_PROTOCOL_OPENFLOW, - ndpi_search_openflow, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("OpenFlow", ndpi_struct, + ndpi_search_openflow, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_OPENFLOW); } diff --git a/src/lib/protocols/openvpn.c b/src/lib/protocols/openvpn.c index 43076590a..768e181f8 100644 --- a/src/lib/protocols/openvpn.c +++ b/src/lib/protocols/openvpn.c @@ -1,7 +1,7 @@ /* * openvpn.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * * * nDPI is free software: you can redistribute it and/or modify @@ -461,7 +461,7 @@ static void ndpi_search_openvpn(struct ndpi_detection_module_struct* ndpi_struct if(packet->payload_packet_len > 10 && ntohl(*(u_int32_t *)&packet->payload[4 + 2 * (packet->tcp != NULL)]) == 0x2112A442) { NDPI_LOG_DBG2(ndpi_struct, "Avoid collision with STUN\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -491,19 +491,14 @@ static void ndpi_search_openvpn(struct ndpi_detection_module_struct* ndpi_struct ndpi_set_risk(ndpi_struct, flow, NDPI_OBFUSCATED_TRAFFIC, "Obfuscated OpenVPN"); } else if(flow->ovpn_alg_standard_state == 1 && flow->ovpn_alg_heur_opcode_state == 1) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_openvpn_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("OpenVPN", ndpi_struct, *id, - NDPI_PROTOCOL_OPENVPN, - ndpi_search_openvpn, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_openvpn_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("OpenVPN", ndpi_struct, + ndpi_search_openvpn, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_OPENVPN); } diff --git a/src/lib/protocols/openwire.c b/src/lib/protocols/openwire.c index a5e824be3..050e7a263 100644 --- a/src/lib/protocols/openwire.c +++ b/src/lib/protocols/openwire.c @@ -47,16 +47,13 @@ static void ndpi_search_openwire(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_openwire_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_openwire_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("OpenWire", ndpi_struct, *id, - NDPI_PROTOCOL_OPENWIRE, - ndpi_search_openwire, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("OpenWire", ndpi_struct, + ndpi_search_openwire, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_OPENWIRE); } diff --git a/src/lib/protocols/oracle.c b/src/lib/protocols/oracle.c index 56e9a0fb4..78aac3df0 100644 --- a/src/lib/protocols/oracle.c +++ b/src/lib/protocols/oracle.c @@ -56,18 +56,14 @@ static void ndpi_search_oracle(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_oracle_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_oracle_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Oracle", ndpi_struct, *id, - NDPI_PROTOCOL_ORACLE, - ndpi_search_oracle, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Oracle", ndpi_struct, + ndpi_search_oracle, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ORACLE); } diff --git a/src/lib/protocols/paltalk.c b/src/lib/protocols/paltalk.c index ecf147bf7..763a5c2a7 100644 --- a/src/lib/protocols/paltalk.c +++ b/src/lib/protocols/paltalk.c @@ -57,17 +57,13 @@ static void ndpi_search_paltalk(struct ndpi_detection_module_struct *ndpi_struct return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_paltalk_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_paltalk_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Paltalk", ndpi_struct, *id, - NDPI_PROTOCOL_PALTALK, - ndpi_search_paltalk, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Paltalk", ndpi_struct, + ndpi_search_paltalk, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_PALTALK); } diff --git a/src/lib/protocols/path_of_exile.c b/src/lib/protocols/path_of_exile.c index 7a14b50d6..4f235a94d 100644 --- a/src/lib/protocols/path_of_exile.c +++ b/src/lib/protocols/path_of_exile.c @@ -66,17 +66,13 @@ static void ndpi_search_pathofexile(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_pathofexile_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_pathofexile_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PathofExile", ndpi_struct, *id, - NDPI_PROTOCOL_PATHOFEXILE, - ndpi_search_pathofexile, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("PathofExile", ndpi_struct, + ndpi_search_pathofexile, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_PATHOFEXILE); } diff --git a/src/lib/protocols/pfcp.c b/src/lib/protocols/pfcp.c index ca36ea471..2b3ef3b8e 100644 --- a/src/lib/protocols/pfcp.c +++ b/src/lib/protocols/pfcp.c @@ -56,17 +56,12 @@ static void ndpi_search_pfcp(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_pfcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_pfcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PFCP", ndpi_struct, *id, - NDPI_PROTOCOL_PFCP, - ndpi_search_pfcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("PFCP", ndpi_struct, + ndpi_search_pfcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_PFCP); } diff --git a/src/lib/protocols/postgres.c b/src/lib/protocols/postgres.c index 56e215862..a9712500d 100644 --- a/src/lib/protocols/postgres.c +++ b/src/lib/protocols/postgres.c @@ -2,7 +2,7 @@ * postgres.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -119,19 +119,15 @@ static void ndpi_search_postgres_tcp(struct ndpi_detection_module_struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_postgres_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_postgres_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PostgreSQL", ndpi_struct, *id, - NDPI_PROTOCOL_POSTGRES, - ndpi_search_postgres_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("PostgreSQL", ndpi_struct, + ndpi_search_postgres_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_POSTGRES); } diff --git a/src/lib/protocols/pptp.c b/src/lib/protocols/pptp.c index 8951d091e..8e0fcc458 100644 --- a/src/lib/protocols/pptp.c +++ b/src/lib/protocols/pptp.c @@ -2,7 +2,7 @@ * pptp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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,18 +53,14 @@ static void ndpi_search_pptp(struct ndpi_detection_module_struct return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_pptp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_pptp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PPTP", ndpi_struct, *id, - NDPI_PROTOCOL_PPTP, - ndpi_search_pptp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("PPTP", ndpi_struct, + ndpi_search_pptp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_PPTP); } diff --git a/src/lib/protocols/profinet_io.c b/src/lib/protocols/profinet_io.c index 797bba63d..09b96f53d 100644 --- a/src/lib/protocols/profinet_io.c +++ b/src/lib/protocols/profinet_io.c @@ -72,18 +72,13 @@ static void ndpi_search_profinet_io(struct ndpi_detection_module_struct *ndpi_st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_profinet_io_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_profinet_io_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PROFINET_IO", ndpi_struct, *id, - NDPI_PROTOCOL_PROFINET_IO, - ndpi_search_profinet_io, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("PROFINET_IO", ndpi_struct, + ndpi_search_profinet_io, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_PROFINET_IO); } diff --git a/src/lib/protocols/protobuf.c b/src/lib/protocols/protobuf.c index 4306e81ad..1a70747bd 100644 --- a/src/lib/protocols/protobuf.c +++ b/src/lib/protocols/protobuf.c @@ -125,7 +125,7 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc enum protobuf_type type = protobuf_dissect_tag(tag, &field_number); if (type == PT_INVALID || field_number == 0 || field_number > (UINT_MAX >> 3)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -139,7 +139,7 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc uint64_t value; if (protobuf_dissect_varint(packet, &offset, &value) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } #ifdef DEBUG_PROTOBUF @@ -151,7 +151,7 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc case PT_I64: { if (packet->payload_packet_len < offset + sizeof(uint64_t)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } #ifdef DEBUG_PROTOBUF @@ -176,13 +176,13 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc { break; // We are not excluding the protocol immediately. Let's wait for more packets to arrive.. } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } if (length == 0 || length > INT_MAX) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } offset += length; @@ -195,12 +195,12 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc case PT_SGROUP: case PT_EGROUP: // Start/End groups are deprecated and therefor ignored to reduce false positives. - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; case PT_I32: { if (packet->payload_packet_len < offset + sizeof(uint32_t)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } #ifdef DEBUG_PROTOBUF @@ -245,18 +245,14 @@ static void ndpi_search_protobuf(struct ndpi_detection_module_struct *ndpi_struc return; // We probably need more packets to dissect. } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_protobuf_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_protobuf_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Protobuf", ndpi_struct, *id, - NDPI_PROTOCOL_PROTOBUF, - ndpi_search_protobuf, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Protobuf", ndpi_struct, + ndpi_search_protobuf, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_PROTOBUF); } diff --git a/src/lib/protocols/ptpv2.c b/src/lib/protocols/ptpv2.c index 6e254bff0..6ec0b5410 100644 --- a/src/lib/protocols/ptpv2.c +++ b/src/lib/protocols/ptpv2.c @@ -63,17 +63,13 @@ static void ndpi_search_ptpv2_udp(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ptpv2_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ptpv2_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("PTPv2", ndpi_struct, *id, - NDPI_PROTOCOL_PTPV2, - ndpi_search_ptpv2_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("PTPv2", ndpi_struct, + ndpi_search_ptpv2_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_PTPV2); } diff --git a/src/lib/protocols/qq.c b/src/lib/protocols/qq.c index efe35e8e5..5eeddaf16 100644 --- a/src/lib/protocols/qq.c +++ b/src/lib/protocols/qq.c @@ -53,19 +53,15 @@ static void ndpi_search_qq(struct ndpi_detection_module_struct *ndpi_struct, str ndpi_int_qq_add_connection(ndpi_struct, flow); } else { if(flow->num_processed_pkts > 4) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_qq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_qq_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("QQ", ndpi_struct, *id, - NDPI_PROTOCOL_QQ, - ndpi_search_qq, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("QQ", ndpi_struct, + ndpi_search_qq, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_QQ); } diff --git a/src/lib/protocols/quic.c b/src/lib/protocols/quic.c index e7b217862..95ea29ea9 100644 --- a/src/lib/protocols/quic.c +++ b/src/lib/protocols/quic.c @@ -1460,18 +1460,22 @@ void process_chlo(struct ndpi_detection_module_struct *ndpi_struct, ndpi_match_host_subprotocol(ndpi_struct, flow, flow->host_server_name, strlen(flow->host_server_name), - &ret_match, NDPI_PROTOCOL_QUIC); + &ret_match, NDPI_PROTOCOL_QUIC, 1); flow->protos.tls_quic.client_hello_processed = 1; /* Allow matching of custom categories */ ndpi_check_dga_name(ndpi_struct, flow, - flow->host_server_name, 1, 0); + flow->host_server_name, 1, 0, 0); if(ndpi_is_valid_hostname((char *)&crypto_data[tag_offset_start + prev_offset], len) == 0) { - char str[128]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_INVALID_CHARACTERS)) { + char str[128]; - snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); - ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + snprintf(str, sizeof(str), "Invalid host %s", flow->host_server_name); + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, NULL); + } /* This looks like an attack */ ndpi_set_risk(ndpi_struct, flow, NDPI_POSSIBLE_EXPLOIT, "Suspicious hostname: attack ?"); @@ -1973,7 +1977,7 @@ static void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, if(ret == -1) { NDPI_LOG_DBG2(ndpi_struct, "Keep looking for SH by client\n"); if(flow->packet_counter > 10 /* TODO */) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ret = may_be_gquic_rej(ndpi_struct); @@ -1984,7 +1988,7 @@ static void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -2002,7 +2006,7 @@ static void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, if(!is_version_supported(version)) { NDPI_LOG_DBG(ndpi_struct, "Unsupported version 0x%x\n", version); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -2025,7 +2029,7 @@ static void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, */ clear_payload = get_clear_payload(ndpi_struct, flow, version, &clear_payload_len); if(!clear_payload) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -2057,18 +2061,16 @@ static void ndpi_search_quic(struct ndpi_detection_module_struct *ndpi_struct, flow->max_extra_packets_to_check = 24; /* TODO */ flow->extra_packets_func = ndpi_search_quic_extra; } else if(!crypto_data) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* ***************************************************************** */ -void init_quic_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_quic_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("QUIC", ndpi_struct, *id, - NDPI_PROTOCOL_QUIC, ndpi_search_quic, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("QUIC", ndpi_struct, + ndpi_search_quic, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_QUIC); } diff --git a/src/lib/protocols/radius_proto.c b/src/lib/protocols/radius_proto.c index 00bbcad04..e8063d136 100644 --- a/src/lib/protocols/radius_proto.c +++ b/src/lib/protocols/radius_proto.c @@ -48,7 +48,7 @@ static void ndpi_check_radius(struct ndpi_detection_module_struct *ndpi_struct, struct radius_header *h = (struct radius_header*)packet->payload; /* RFC2865: The minimum length is 20 and maximum length is 4096. */ if((payload_len < 20) || (payload_len > 4096)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -61,7 +61,7 @@ static void ndpi_check_radius(struct ndpi_detection_module_struct *ndpi_struct, } } if(flow->packet_counter > 3) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -73,14 +73,10 @@ static void ndpi_search_radius(struct ndpi_detection_module_struct *ndpi_struct, } -void init_radius_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_radius_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Radius", ndpi_struct, *id, - NDPI_PROTOCOL_RADIUS, - ndpi_search_radius, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Radius", ndpi_struct, + ndpi_search_radius, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RADIUS); } diff --git a/src/lib/protocols/radmin.c b/src/lib/protocols/radmin.c index b9ab63631..c7fcfa85a 100644 --- a/src/lib/protocols/radmin.c +++ b/src/lib/protocols/radmin.c @@ -85,16 +85,13 @@ static void ndpi_search_radmin(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_radmin_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_radmin_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Radmin", ndpi_struct, *id, - NDPI_PROTOCOL_RADMIN, - ndpi_search_radmin, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Radmin", ndpi_struct, + ndpi_search_radmin, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RADMIN); } diff --git a/src/lib/protocols/raft.c b/src/lib/protocols/raft.c index 6f0428561..67ae23e6a 100644 --- a/src/lib/protocols/raft.c +++ b/src/lib/protocols/raft.c @@ -61,7 +61,7 @@ static void ndpi_search_raft(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < sizeof(*raft_header)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -77,7 +77,7 @@ static void ndpi_search_raft(struct ndpi_detection_module_struct *ndpi_struct, break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -96,16 +96,11 @@ static void ndpi_search_raft(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_raft_add_connection(ndpi_struct, flow); } -void init_raft_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_raft_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Raft", ndpi_struct, *id, - NDPI_PROTOCOL_RAFT, - ndpi_search_raft, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Raft", ndpi_struct, + ndpi_search_raft, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RAFT); } diff --git a/src/lib/protocols/raknet.c b/src/lib/protocols/raknet.c index 3e3200e1a..bdbd4706e 100644 --- a/src/lib/protocols/raknet.c +++ b/src/lib/protocols/raknet.c @@ -1,7 +1,7 @@ /* * raknet.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -79,7 +79,7 @@ static void exclude_proto(struct ndpi_detection_module_struct *ndpi_struct, other protocols too. Keep the generic classification, for the time being */ ndpi_int_raknet_add_connection(ndpi_struct, flow); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } @@ -391,15 +391,10 @@ static void ndpi_search_raknet(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_raknet_add_connection(ndpi_struct, flow); } -void init_raknet_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_raknet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RakNet", ndpi_struct, *id, - NDPI_PROTOCOL_RAKNET, - ndpi_search_raknet, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RakNet", ndpi_struct, + ndpi_search_raknet, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RAKNET); } diff --git a/src/lib/protocols/rdp.c b/src/lib/protocols/rdp.c index e7683d16e..42a7ba6fe 100644 --- a/src/lib/protocols/rdp.c +++ b/src/lib/protocols/rdp.c @@ -2,7 +2,7 @@ * rdp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-24 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -91,7 +91,7 @@ static void ndpi_search_rdp(struct ndpi_detection_module_struct *ndpi_struct, if((rdp_requested_proto & 0x1) == 0x1) { /* RDP Response + Client Hello + Server hello */ flow->max_extra_packets_to_check = 5; - + flow->tls_quic.from_rdp = 1; flow->extra_packets_func = ndpi_search_tls_over_rdp; } } @@ -110,7 +110,7 @@ static void ndpi_search_rdp(struct ndpi_detection_module_struct *ndpi_struct, } } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else if(packet->udp != NULL) { u_int16_t s_port = ntohs(packet->udp->source); u_int16_t d_port = ntohs(packet->udp->dest); @@ -137,7 +137,7 @@ static void ndpi_search_rdp(struct ndpi_detection_module_struct *ndpi_struct, } } else { if(memcmp(flow->l4.udp.rdp_from_srv, packet->payload, 3) != 0) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); else { flow->l4.udp.rdp_from_srv_pkts = 2 /* stage 2 */; @@ -163,7 +163,7 @@ static void ndpi_search_rdp(struct ndpi_detection_module_struct *ndpi_struct, } } else { if(memcmp(flow->l4.udp.rdp_to_srv, packet->payload, 3) != 0) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); else { flow->l4.udp.rdp_to_srv_pkts = 2 /* stage 2 */; @@ -175,20 +175,16 @@ static void ndpi_search_rdp(struct ndpi_detection_module_struct *ndpi_struct, } } } else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* **************************************** */ -void init_rdp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rdp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RDP", ndpi_struct, *id, - NDPI_PROTOCOL_RDP, - ndpi_search_rdp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RDP", ndpi_struct, + ndpi_search_rdp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RDP); } diff --git a/src/lib/protocols/resp.c b/src/lib/protocols/resp.c index 6cf49f6e4..04ec98d14 100644 --- a/src/lib/protocols/resp.c +++ b/src/lib/protocols/resp.c @@ -66,16 +66,13 @@ static void ndpi_search_resp(struct ndpi_detection_module_struct *ndpi_struct, } exclude: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_resp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_resp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RESP", ndpi_struct, *id, - NDPI_PROTOCOL_RESP, - ndpi_search_resp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("RESP", ndpi_struct, + ndpi_search_resp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RESP); } diff --git a/src/lib/protocols/riotgames.c b/src/lib/protocols/riotgames.c index df20618d4..9b2626f6b 100644 --- a/src/lib/protocols/riotgames.c +++ b/src/lib/protocols/riotgames.c @@ -63,20 +63,14 @@ static void ndpi_search_riotgames(struct ndpi_detection_module_struct *ndpi_stru * Please add new patterns for games made by RiotGames here */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_riotgames_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_riotgames_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RiotGames", ndpi_struct, *id, - NDPI_PROTOCOL_RIOTGAMES, - ndpi_search_riotgames, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("RiotGames", ndpi_struct, + ndpi_search_riotgames, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RIOTGAMES); } diff --git a/src/lib/protocols/ripe_atlas.c b/src/lib/protocols/ripe_atlas.c index ac95f949c..d9d226da2 100644 --- a/src/lib/protocols/ripe_atlas.c +++ b/src/lib/protocols/ripe_atlas.c @@ -47,7 +47,7 @@ static void ndpi_search_ripe_atlas(struct ndpi_detection_module_struct *ndpi_str NDPI_LOG_DBG(ndpi_struct, "search (Magellan) Ripe Atlas Tool\n"); if (packet->payload_packet_len != 25) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -56,18 +56,13 @@ static void ndpi_search_ripe_atlas(struct ndpi_detection_module_struct *ndpi_str return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ripe_atlas_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ripe_atlas_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RipeAtlas", ndpi_struct, *id, - NDPI_PROTOCOL_RIPE_ATLAS, - ndpi_search_ripe_atlas, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RipeAtlas", ndpi_struct, + ndpi_search_ripe_atlas, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RIPE_ATLAS); } diff --git a/src/lib/protocols/rmcp.c b/src/lib/protocols/rmcp.c index 19402e5ba..4ffb320d7 100644 --- a/src/lib/protocols/rmcp.c +++ b/src/lib/protocols/rmcp.c @@ -58,27 +58,27 @@ static void ndpi_search_rmcp(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search RMCP\n"); if (packet->payload_packet_len < sizeof(struct rmcp_header)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } struct rmcp_header const * const rmcp_header = (struct rmcp_header *)packet->payload; if (rmcp_header->version != 0x06 || rmcp_header->reserved != 0x00) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (rmcp_header->type != 0 && rmcp_header->sequence == 0xFF) { // No ACK allowed if SEQUENCE number is 255. - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (rmcp_header->class != 0x06 /* Alert Standard Forum (ASF)*/ && rmcp_header->class != 0x07 /* Intelligent Platform Management Interface (IPMI) */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -86,15 +86,11 @@ static void ndpi_search_rmcp(struct ndpi_detection_module_struct *ndpi_struct, } -void init_rmcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rmcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RMCP", ndpi_struct, *id, - NDPI_PROTOCOL_RMCP, - ndpi_search_rmcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RMCP", ndpi_struct, + ndpi_search_rmcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RMCP); } diff --git a/src/lib/protocols/roughtime.c b/src/lib/protocols/roughtime.c index 5ebd00b84..2d64fe1c1 100644 --- a/src/lib/protocols/roughtime.c +++ b/src/lib/protocols/roughtime.c @@ -77,7 +77,7 @@ static void ndpi_search_roughtime(struct ndpi_detection_module_struct *ndpi_stru if (packet->payload_packet_len < 4) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -88,7 +88,7 @@ static void ndpi_search_roughtime(struct ndpi_detection_module_struct *ndpi_stru if (number_of_tags < 1 || packet->payload_packet_len < minimum_length || number_of_tags > NDPI_ARRAY_LENGTH(valid_tags)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -96,7 +96,7 @@ static void ndpi_search_roughtime(struct ndpi_detection_module_struct *ndpi_stru u_int32_t tag_offset = le32toh(get_u_int32_t(packet->payload, 4 + (number_of_tags - 2) * 4)); if (packet->payload_packet_len < 4 + (number_of_tags - 1) * 4 + tag_offset) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -116,7 +116,7 @@ static void ndpi_search_roughtime(struct ndpi_detection_module_struct *ndpi_stru } if (j == NDPI_ARRAY_LENGTH(valid_tags)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -124,16 +124,10 @@ static void ndpi_search_roughtime(struct ndpi_detection_module_struct *ndpi_stru ndpi_int_roughtime_add_connection(ndpi_struct, flow); } -void init_roughtime_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_roughtime_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Roughtime", ndpi_struct, *id, - NDPI_PROTOCOL_ROUGHTIME, - ndpi_search_roughtime, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Roughtime", ndpi_struct, + ndpi_search_roughtime, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ROUGHTIME); } diff --git a/src/lib/protocols/rsh.c b/src/lib/protocols/rsh.c index 6addb7404..4bb49f8d5 100644 --- a/src/lib/protocols/rsh.c +++ b/src/lib/protocols/rsh.c @@ -71,12 +71,12 @@ static void ndpi_search_rsh(struct ndpi_detection_module_struct * ndpi_struct, { if (ndpi_isdigit(packet->payload[i]) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; @@ -84,7 +84,7 @@ static void ndpi_search_rsh(struct ndpi_detection_module_struct * ndpi_struct, if (packet->payload_packet_len < 3 || packet->payload[packet->payload_packet_len - 1] != '\0') { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -103,7 +103,7 @@ static void ndpi_search_rsh(struct ndpi_detection_module_struct * ndpi_struct, ndpi_is_printable_buffer((uint8_t const *)dissected_info[i - 1], (dissected_info[i] - dissected_info[i - 1])) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -111,7 +111,7 @@ static void ndpi_search_rsh(struct ndpi_detection_module_struct * ndpi_struct, { if (dissected_info[NDPI_ARRAY_LENGTH(dissected_info) - 1] == NULL) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } break; @@ -144,20 +144,16 @@ static void ndpi_search_rsh(struct ndpi_detection_module_struct * ndpi_struct, return; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } -void init_rsh_dissector(struct ndpi_detection_module_struct * ndpi_struct, - u_int32_t * id) +void init_rsh_dissector(struct ndpi_detection_module_struct * ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RSH", ndpi_struct, *id, - NDPI_PROTOCOL_RSH, ndpi_search_rsh, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RSH", ndpi_struct, + ndpi_search_rsh, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RSH); } diff --git a/src/lib/protocols/rsync.c b/src/lib/protocols/rsync.c index b2ab8e681..d354e0f50 100644 --- a/src/lib/protocols/rsync.c +++ b/src/lib/protocols/rsync.c @@ -54,18 +54,14 @@ static void ndpi_search_rsync(struct ndpi_detection_module_struct *ndpi_struct, } } if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_rsync_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rsync_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RSYNC", ndpi_struct, *id, - NDPI_PROTOCOL_RSYNC, - ndpi_search_rsync, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RSYNC", ndpi_struct, + ndpi_search_rsync, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RSYNC); } diff --git a/src/lib/protocols/rtmp.c b/src/lib/protocols/rtmp.c index a1da9760c..e0f953815 100644 --- a/src/lib/protocols/rtmp.c +++ b/src/lib/protocols/rtmp.c @@ -46,7 +46,7 @@ static void ndpi_check_rtmp(struct ndpi_detection_module_struct *ndpi_struct, st See: https://en.wikipedia.org/w/index.php?title=Real-Time_Messaging_Protocol§ion=12#Handshake */ if(!ndpi_seen_flow_beginning(flow)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -80,7 +80,7 @@ static void ndpi_check_rtmp(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_rtmp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -91,15 +91,11 @@ static void ndpi_search_rtmp(struct ndpi_detection_module_struct *ndpi_struct, s } -void init_rtmp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rtmp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RTMP", ndpi_struct, *id, - NDPI_PROTOCOL_RTMP, - ndpi_search_rtmp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RTMP", ndpi_struct, + ndpi_search_rtmp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RTMP); } diff --git a/src/lib/protocols/rtp.c b/src/lib/protocols/rtp.c index 2dc653dfb..7c1bdceed 100644 --- a/src/lib/protocols/rtp.c +++ b/src/lib/protocols/rtp.c @@ -2,7 +2,7 @@ * rtp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -32,6 +32,11 @@ #define RTP_MIN_HEADER 12 #define RTCP_MIN_HEADER 8 +static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow); + +/* *************************************************************** */ + /* https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml */ int is_valid_rtp_payload_type(uint8_t type) { @@ -40,6 +45,8 @@ int is_valid_rtp_payload_type(uint8_t type) return 1; } +/* *************************************************************** */ + u_int8_t rtp_get_stream_type(u_int8_t payloadType, u_int8_t *s_type, u_int16_t sub_proto) { /* General, from IANA */ @@ -201,10 +208,14 @@ u_int8_t rtp_get_stream_type(u_int8_t payloadType, u_int8_t *s_type, u_int16_t s return(0); } +/* *************************************************************** */ + static int is_valid_rtcp_payload_type(uint8_t type) { return (type >= 192 && type <= 213); } +/* *************************************************************** */ + int is_rtp_or_rtcp(struct ndpi_detection_module_struct *ndpi_struct, const u_int8_t *payload, u_int16_t payload_len, u_int16_t *seq) { @@ -214,7 +225,7 @@ int is_rtp_or_rtcp(struct ndpi_detection_module_struct *ndpi_struct, if(payload_len < 2) return NO_RTP_RTCP; - + if((payload[0] & 0xC0) != 0x80) { /* Version 2 */ NDPI_LOG_DBG(ndpi_struct, "Not version 2\n"); return NO_RTP_RTCP; @@ -239,8 +250,8 @@ int is_rtp_or_rtcp(struct ndpi_detection_module_struct *ndpi_struct, return NO_RTP_RTCP; } /* Check on padding doesn't work because: - * we may have multiple RTP packets in the same TCP/UDP datagram - * with SRTP, padding_length field is encrypted */ + * we may have multiple RTP packets in the same TCP/UDP datagram + * with SRTP, padding_length field is encrypted */ if(seq) *seq = ntohs(*(unsigned short *)&payload[2]); return IS_RTP; @@ -257,6 +268,98 @@ int is_rtp_or_rtcp(struct ndpi_detection_module_struct *ndpi_struct, return NO_RTP_RTCP; } +/* ************************************************************ */ + +static int get_rtp_info(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow, + const u_int8_t *payload, + u_int16_t payload_len) { + u_int8_t packet_direction = current_pkt_from_client_to_server(ndpi_struct, flow) ? 0 : 1; + + if(flow->rtp[packet_direction].payload_detected == false) { + flow->rtp[packet_direction].payload_type = payload[1] & 0x7F; + flow->rtp[packet_direction].payload_detected = true; + + /* printf("********* [direction: %d] payload_type=%u\n", packet_direction, flow->protos.rtp[packet_direction].payload_type); */ + + if(((flow->rtp[packet_direction].payload_type == 126 /* Enhanced Voice Services (EVS) */) + || (flow->rtp[packet_direction].payload_type == 127 /* Enhanced Voice Services (EVS) */)) + && (payload_len > 12 /* RTP header */)) { + const u_int8_t *evs = &payload[12]; + u_int packet_len = payload_len - 12; + u_int num_bits = packet_len * 8; + + flow->flow_multimedia_types = ndpi_multimedia_audio_flow; + /* printf("********* %02X [bits %u]\n", evs[0], num_bits); */ + + if(num_bits == 56) { + /* A.2.1.3 Special case for 56 bit payload size (EVS Primary or EVS AMR-WB IO SID) */ + + if((evs[0] & 0x80) == 0) + flow->rtp[packet_direction].evs_subtype = evs[0] & 0xF; + else + flow->rtp[packet_direction].evs_subtype = evs[1] & 0xF; + } else { + + /* See ndpi_rtp_payload_type2str() */ + switch(num_bits) { + case 48: + case 136: + case 144: + case 160: + case 184: + case 192: + case 256: + case 264: + case 288: + case 320: + case 328: + case 368: + case 400: + case 464: + case 480: + case 488: + case 640: + case 960: + case 1280: + case 1920: + case 2560: + flow->rtp[packet_direction].evs_subtype = num_bits; + break; + + default: + if((evs[0] >> 7) == 1) { + /* EVS Codec Mode Request (EVS-CMR) */ + u_int8_t d_bits = evs[0] & 0X0F; + + flow->rtp[packet_direction].evs_subtype = d_bits + 30 /* dummy offset */; + } + break; + } + } + } + } + return 0; +} + +/* ************************************************************ */ + +static int keep_extra_dissection(struct ndpi_flow_struct *flow) { + return ((flow->rtp[0].payload_detected && flow->rtp[1].payload_detected) ? false :true); +} + +/* ************************************************************ */ + +static int rtp_search_again(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) { + NDPI_LOG_DBG2(ndpi_struct, "Again\n"); + + ndpi_rtp_search(ndpi_struct, flow); + + return keep_extra_dissection(flow); +} + +/* *************************************************************** */ static void ndpi_int_rtp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, @@ -272,6 +375,14 @@ static void ndpi_int_rtp_add_connection(struct ndpi_detection_module_struct *ndp NDPI_LOG_DBG(ndpi_struct, "Enabling (STUN) extra dissection\n"); switch_extra_dissection_to_stun(ndpi_struct, flow, 1); } + } else if(proto == NDPI_PROTOCOL_RTP) { + if(!flow->extra_packets_func && + keep_extra_dissection(flow) && + ndpi_struct->cfg.rtp_max_packets_extra_dissection > 0) { + NDPI_LOG_DBG(ndpi_struct, "Enabling extra dissection\n"); + flow->max_extra_packets_to_check = ndpi_struct->cfg.rtp_max_packets_extra_dissection; + flow->extra_packets_func = rtp_search_again; + } } } @@ -285,22 +396,28 @@ static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, u_int16_t payload_len = packet->payload_packet_len; u_int16_t seq; + if(packet->payload_packet_len == 0 || packet->tcp_retransmission) + return; + if(packet->tcp != NULL) { - payload += 2; /* Skip the length field */ - payload_len -= 2; + if (payload_len < 2) { + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); + return; + } + payload += 2; /* Skip the length field */ + payload_len -= 2; } NDPI_LOG_DBG(ndpi_struct, "search RTP (stage %d/%d)\n", flow->rtp_stage, flow->rtcp_stage); /* * Let some "unknown" packets at the beginning: - * search for 3/4 consecutive RTP/RTCP packets. - * Wait a little longer (4 vs 3 pkts) for RTCP to try to tell if there are only - * RTCP packets in the flow or if RTP/RTCP are multiplexed together */ + * search for 3/4 consecutive RTP/RTCP packets. + * Wait a little longer (4 vs 3 pkts) for RTCP to try to tell if there are only + * RTCP packets in the flow or if RTP/RTCP are multiplexed together */ if(flow->packet_counter > 3 && flow->rtp_stage == 0 && flow->rtcp_stage == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -311,21 +428,21 @@ static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, if(flow->l4_proto == IPPROTO_UDP && flow->l4.udp.line_pkts[0] >= 2 && flow->l4.udp.line_pkts[1] >= 2) { /* It seems that it is a LINE stuff; let its dissector to evaluate */ - } else if(flow->l4_proto == IPPROTO_UDP && - flow->l4.udp.epicgames_stage > 0) { + } else if(flow->l4_proto == IPPROTO_UDP && flow->l4.udp.epicgames_stage > 0) { /* It seems that it is a EpicGames stuff; let its dissector to evaluate */ } else if(flow->rtp_seq_set[packet->packet_direction] && flow->rtp_seq[packet->packet_direction] == seq) { - /* Simple heuristic to avoid false positives. tradeoff between: - * consecutive RTP packets should have different sequence number - * we should handle duplicated traffic */ + /* Simple heuristic to avoid false positives. Tradeoff between: + - consecutive RTP packets should have different sequence number + - we should handle duplicated traffic */ NDPI_LOG_DBG(ndpi_struct, "Same seq on consecutive pkts\n"); flow->rtp_stage = 0; flow->rtcp_stage = 0; - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else { - rtp_get_stream_type(payload[1] & 0x7F, &flow->flow_multimedia_types, NDPI_PROTOCOL_UNKNOWN); + get_rtp_info(ndpi_struct, flow, payload, payload_len); + rtp_get_stream_type(flow->rtp[packet->packet_direction].payload_type, + &flow->flow_multimedia_types, NDPI_PROTOCOL_UNKNOWN); NDPI_LOG_INFO(ndpi_struct, "Found RTP\n"); ndpi_int_rtp_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_RTP); @@ -350,16 +467,16 @@ static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, if(flow->rtp_stage || flow->rtcp_stage) { u_int32_t unused; u_int16_t app_proto = NDPI_PROTOCOL_UNKNOWN; - + ndpi_protocol_category_t category; + /* TODO: we should switch to the demultiplexing-code in stun dissector */ - if(is_stun(ndpi_struct, flow, &app_proto) != 0 && + if(is_stun(ndpi_struct, flow, &app_proto, &category) != 0 && !is_dtls(packet->payload, packet->payload_packet_len, &unused)) { flow->rtp_stage = 0; flow->rtcp_stage = 0; - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } - } + } } } @@ -373,21 +490,19 @@ static void ndpi_rtp_search(struct ndpi_detection_module_struct *ndpi_struct, * --------------------------------------------------------------- */ static void ndpi_search_rtp_tcp(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; const u_int8_t *payload = packet->payload; - + if(packet->payload_packet_len < 4){ /* (2) len field + (2) min rtp/rtcp*/ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } u_int16_t len = ntohs(get_u_int16_t(payload, 0)); if(len + sizeof(len) != packet->payload_packet_len) { /*fragmented packets are not handled*/ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } else { ndpi_rtp_search(ndpi_struct, flow); } @@ -396,12 +511,12 @@ static void ndpi_search_rtp_tcp(struct ndpi_detection_module_struct *ndpi_struct /* *************************************************************** */ static void ndpi_search_rtp_udp(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int16_t source = ntohs(packet->udp->source); u_int16_t dest = ntohs(packet->udp->dest); - /* + /* * XXX: not sure if rtp/rtcp over tcp will also mix with Ethereum * for now, will not add it unitl we have a false positive. */ @@ -410,8 +525,7 @@ static void ndpi_search_rtp_udp(struct ndpi_detection_module_struct *ndpi_struct || (dest == 5353 /* MDNS_PORT */) || (dest == 9600 /* FINS_PORT */) || (dest <= 1023)){ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_RTCP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ndpi_rtp_search(ndpi_struct, flow); @@ -423,21 +537,16 @@ static void ndpi_search_rtp(struct ndpi_detection_module_struct *ndpi_struct, st struct ndpi_packet_struct *packet = &ndpi_struct->packet; if(packet->tcp != NULL) { ndpi_search_rtp_tcp(ndpi_struct, flow); - } else { - ndpi_search_rtp_udp(ndpi_struct, flow); - } + } else { + ndpi_search_rtp_udp(ndpi_struct, flow); + } } /* *************************************************************** */ -void init_rtp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("RTP", ndpi_struct, *id, - NDPI_PROTOCOL_RTP, - ndpi_search_rtp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_rtp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("RT(C)P", ndpi_struct, + ndpi_search_rtp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 2, NDPI_PROTOCOL_RTP, NDPI_PROTOCOL_RTCP); } diff --git a/src/lib/protocols/rtps.c b/src/lib/protocols/rtps.c index 574642df5..930872b9d 100644 --- a/src/lib/protocols/rtps.c +++ b/src/lib/protocols/rtps.c @@ -57,18 +57,13 @@ static void ndpi_search_rtps(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_rtps_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rtps_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RTPS", ndpi_struct, *id, - NDPI_PROTOCOL_RTPS, - ndpi_search_rtps, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("RTPS", ndpi_struct, + ndpi_search_rtps, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RTPS); } diff --git a/src/lib/protocols/rtsp.c b/src/lib/protocols/rtsp.c index 014553b5b..d5b418232 100644 --- a/src/lib/protocols/rtsp.c +++ b/src/lib/protocols/rtsp.c @@ -2,7 +2,7 @@ * rtsp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -33,6 +33,7 @@ static void ndpi_int_rtsp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { + NDPI_LOG_INFO(ndpi_struct, "found RTSP\n"); ndpi_set_detected_protocol_keeping_master(ndpi_struct, flow, NDPI_PROTOCOL_RTSP, NDPI_CONFIDENCE_DPI); } @@ -52,8 +53,10 @@ static void ndpi_search_rtsp_tcp_udp(struct ndpi_detection_module_struct *ndpi_s if (packet->parsed_lines > 0 && (LINE_ENDS(packet->line[0], "RTSP/1.0") != 0 || + LINE_STARTS(packet->line[0], "RTSP/1.0") != 0 || /* Response */ LINE_ENDS(packet->accept_line, "application/x-rtsp-tunnelled") != 0 || - LINE_ENDS(packet->content_line, "application/x-rtsp-tunnelled") != 0)) + LINE_ENDS(packet->content_line, "application/x-rtsp-tunnelled") != 0 + /* Should we also check for "rtsp://" in the packet? */)) { ndpi_int_rtsp_add_connection(ndpi_struct, flow); @@ -64,59 +67,14 @@ static void ndpi_search_rtsp_tcp_udp(struct ndpi_detection_module_struct *ndpi_s return; } - if (flow->rtsprdt_stage == 0 - && !(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_RTCP) - ) { - flow->rtsprdt_stage = 1 + packet->packet_direction; - NDPI_LOG_DBG2(ndpi_struct, "maybe handshake 1; need next packet, return\n"); - return; - } - - if (flow->packet_counter < 3 && flow->rtsprdt_stage == 1 + packet->packet_direction) { - - NDPI_LOG_DBG2(ndpi_struct, "maybe handshake 2; need next packet\n"); - return; - } - - if (packet->payload_packet_len > 20 && flow->rtsprdt_stage == 2 - packet->packet_direction) { - char buf[32] = { 0 }; - u_int len = packet->payload_packet_len; - - if(len >= (sizeof(buf)-1)) len = sizeof(buf)-1; - strncpy(buf, (const char*)packet->payload, len); - - // RTSP Server Message - if((memcmp(packet->payload, "RTSP/1.0 ", 9) == 0) - || (strstr(buf, "rtsp://") != NULL)) { - NDPI_LOG_DBG2(ndpi_struct, "found RTSP/1.0 \n"); - NDPI_LOG_INFO(ndpi_struct, "found RTSP\n"); - ndpi_int_rtsp_add_connection(ndpi_struct, flow); - return; - } - } - - if (packet->udp != NULL && flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN - && ((NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_RTP) == 0) - || (NDPI_COMPARE_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_RTCP) == 0) - )) { - NDPI_LOG_DBG2(ndpi_struct, - "maybe RTSP RTP, RTSP RTCP, RDT; need next packet.\n"); - return; - } - - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_rtsp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_rtsp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RTSP", ndpi_struct, *id, - NDPI_PROTOCOL_RTSP, - ndpi_search_rtsp_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("RTSP", ndpi_struct, + ndpi_search_rtsp_tcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_RTSP); } diff --git a/src/lib/protocols/rx.c b/src/lib/protocols/rx.c index dcb040534..d84872511 100644 --- a/src/lib/protocols/rx.c +++ b/src/lib/protocols/rx.c @@ -88,7 +88,7 @@ static void ndpi_check_rx(struct ndpi_detection_module_struct *ndpi_struct, /* Check that packet is long enough */ if (payload_len < sizeof(struct ndpi_rx_header)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -111,7 +111,7 @@ static void ndpi_check_rx(struct ndpi_detection_module_struct *ndpi_struct, /* TYPE field */ if((header->type < RX_DATA) || (header->type > RX_VERS)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -164,11 +164,11 @@ static void ndpi_check_rx(struct ndpi_detection_module_struct *ndpi_struct, case RX_VERS: goto security; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // switch } else { // FLAG - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -176,7 +176,7 @@ static void ndpi_check_rx(struct ndpi_detection_module_struct *ndpi_struct, /* SECURITY field */ if(header->security > 3) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -194,7 +194,7 @@ static void ndpi_check_rx(struct ndpi_detection_module_struct *ndpi_struct, /* https://www.central.org/frameless/numbers/rxservice.html. */ else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } else { @@ -212,16 +212,11 @@ static void ndpi_search_rx(struct ndpi_detection_module_struct *ndpi_struct, } } -void init_rx_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_rx_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("RX", ndpi_struct, *id, - NDPI_PROTOCOL_RX, - ndpi_search_rx, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("RX", ndpi_struct, + ndpi_search_rx, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_RX); } diff --git a/src/lib/protocols/s7comm.c b/src/lib/protocols/s7comm.c index 9efbb89d5..475be9aef 100644 --- a/src/lib/protocols/s7comm.c +++ b/src/lib/protocols/s7comm.c @@ -65,16 +65,13 @@ static void ndpi_search_s7comm(struct ndpi_detection_module_struct *ndpi_struct, return;
}
- NDPI_EXCLUDE_PROTO(ndpi_struct, flow);
+ NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow);
}
-void init_s7comm_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id)
+void init_s7comm_dissector(struct ndpi_detection_module_struct *ndpi_struct)
{
- ndpi_set_bitmask_protocol_detection("S7Comm", ndpi_struct, *id,
- NDPI_PROTOCOL_S7COMM,
- ndpi_search_s7comm,
- NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION,
- SAVE_DETECTION_BITMASK_AS_UNKNOWN,
- ADD_TO_DETECTION_BITMASK);
- *id += 1;
+ register_dissector("S7Comm", ndpi_struct,
+ ndpi_search_s7comm,
+ NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION,
+ 1, NDPI_PROTOCOL_S7COMM);
}
diff --git a/src/lib/protocols/sd_rtn.c b/src/lib/protocols/sd_rtn.c index a40eb6240..3c4313d3f 100644 --- a/src/lib/protocols/sd_rtn.c +++ b/src/lib/protocols/sd_rtn.c @@ -1,7 +1,7 @@ /* * sd_rtn.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -80,19 +80,14 @@ static void ndpi_search_sd_rtn(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_sd_rtn_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_sd_rtn_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SD-RTN", ndpi_struct, *id, - NDPI_PROTOCOL_SD_RTN, - ndpi_search_sd_rtn, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SD-RTN", ndpi_struct, + ndpi_search_sd_rtn, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SD_RTN); } diff --git a/src/lib/protocols/sflow.c b/src/lib/protocols/sflow.c index d731f2146..e273672a4 100644 --- a/src/lib/protocols/sflow.c +++ b/src/lib/protocols/sflow.c @@ -1,7 +1,7 @@ /* * sflow.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -52,18 +52,14 @@ static void ndpi_search_sflow(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_sflow_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_sflow_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("sFlow", ndpi_struct, *id, - NDPI_PROTOCOL_SFLOW, - ndpi_search_sflow, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("sFlow", ndpi_struct, + ndpi_search_sflow, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SFLOW); } diff --git a/src/lib/protocols/sip.c b/src/lib/protocols/sip.c index 31166a175..42be61b51 100644 --- a/src/lib/protocols/sip.c +++ b/src/lib/protocols/sip.c @@ -2,7 +2,7 @@ * sip.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -236,7 +236,7 @@ static void ndpi_search_sip(struct ndpi_detection_module_struct *ndpi_struct, st NDPI_LOG_DBG(ndpi_struct, "Searching for SIP\n"); if(flow->packet_counter >= 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -251,7 +251,7 @@ static void ndpi_search_sip(struct ndpi_detection_module_struct *ndpi_struct, st } if(!isprint(packet_payload[0])) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -273,14 +273,10 @@ static void ndpi_search_sip(struct ndpi_detection_module_struct *ndpi_struct, st /* ********************************************************** */ -void init_sip_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("SIP", ndpi_struct, *id, - NDPI_PROTOCOL_SIP, - ndpi_search_sip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION,/* Fix courtesy of Miguel Quesada <mquesadab@gmail.com> */ - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_sip_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("SIP", ndpi_struct, + ndpi_search_sip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SIP); } diff --git a/src/lib/protocols/skinny.c b/src/lib/protocols/skinny.c index b011684c7..8462ae0fb 100644 --- a/src/lib/protocols/skinny.c +++ b/src/lib/protocols/skinny.c @@ -87,18 +87,14 @@ static void ndpi_search_skinny(struct ndpi_detection_module_struct *ndpi_struct, } } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_skinny_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_skinny_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("CiscoSkinny", ndpi_struct, *id, - NDPI_PROTOCOL_SKINNY, - ndpi_search_skinny, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("CiscoSkinny", ndpi_struct, + ndpi_search_skinny, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SKINNY); } diff --git a/src/lib/protocols/slp.c b/src/lib/protocols/slp.c index 81c1cabd9..7a0165d81 100644 --- a/src/lib/protocols/slp.c +++ b/src/lib/protocols/slp.c @@ -101,7 +101,7 @@ static int slp_check_packet_length(struct ndpi_detection_module_struct *ndpi_str struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; if (packet->payload_packet_len != packet_length) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } @@ -113,25 +113,25 @@ static int slp_check_fid(struct ndpi_detection_module_struct *ndpi_struct, enum function_id fid, uint8_t slp_version) { if (fid <= FID_UNKNOWN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } switch (slp_version) { case 0x01: if (fid >= FID_MAX_v1) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } break; case 0x02: if (fid >= FID_MAX) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } @@ -199,7 +199,7 @@ static void ndpi_search_slp_v1(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search Service Location Protocol v1\n"); if (packet->payload_packet_len < sizeof(*hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -222,7 +222,7 @@ static int ndpi_search_slp_v2(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search Service Location Protocol v2\n"); if (packet->payload_packet_len < sizeof(*hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return 1; } @@ -316,20 +316,15 @@ static void ndpi_search_slp(struct ndpi_detection_module_struct *ndpi_struct, } break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); break; } } -void init_slp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_slp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Service_Location_Protocol", ndpi_struct, *id, - NDPI_PROTOCOL_SERVICE_LOCATION, - ndpi_search_slp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Service_Location_Protocol", ndpi_struct, + ndpi_search_slp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SERVICE_LOCATION); } diff --git a/src/lib/protocols/smb.c b/src/lib/protocols/smb.c index 3997c7aac..c9bf9472a 100644 --- a/src/lib/protocols/smb.c +++ b/src/lib/protocols/smb.c @@ -76,19 +76,14 @@ static void ndpi_search_smb_tcp(struct ndpi_detection_module_struct *ndpi_struct } } - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_SMBV1); - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_SMBV23); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_smb_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_smb_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SMB", ndpi_struct, *id, - NDPI_PROTOCOL_SMBV23, - ndpi_search_smb_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SMB", ndpi_struct, + ndpi_search_smb_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SMBV23); } diff --git a/src/lib/protocols/smpp.c b/src/lib/protocols/smpp.c index 6ab09e98e..0435d169a 100644 --- a/src/lib/protocols/smpp.c +++ b/src/lib/protocols/smpp.c @@ -48,7 +48,7 @@ static void ndpi_search_smpp_tcp(struct ndpi_detection_module_struct* ndpi_struc if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_SMPP){ // min SMPP packet length = 16 bytes if (packet->payload_packet_len < 16) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // get PDU length @@ -60,7 +60,7 @@ static void ndpi_search_smpp_tcp(struct ndpi_detection_module_struct* ndpi_struc // if PDU size was invalid, try the following TCP segments, 3 attempts max if(flow->packet_counter > 3) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // verify PDU length @@ -100,7 +100,7 @@ static void ndpi_search_smpp_tcp(struct ndpi_detection_module_struct* ndpi_struc u_int32_t pdu_type = ntohl(get_u_int32_t(packet->payload, 4)); // first byte of PDU type is either 0x00 of 0x80 if(!(packet->payload[4] == 0x00 || packet->payload[4] == 0x80)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } // remove 0x80, get request type pdu @@ -305,20 +305,15 @@ static void ndpi_search_smpp_tcp(struct ndpi_detection_module_struct* ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_smpp_dissector(struct ndpi_detection_module_struct* ndpi_struct, - u_int32_t* id) +void init_smpp_dissector(struct ndpi_detection_module_struct* ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SMPP", ndpi_struct, *id, - NDPI_PROTOCOL_SMPP, - ndpi_search_smpp_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SMPP", ndpi_struct, + ndpi_search_smpp_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SMPP); } diff --git a/src/lib/protocols/snmp_proto.c b/src/lib/protocols/snmp_proto.c index 75e829126..dde4d6aa5 100644 --- a/src/lib/protocols/snmp_proto.c +++ b/src/lib/protocols/snmp_proto.c @@ -1,7 +1,7 @@ /* * snmp.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -64,7 +64,7 @@ static void ndpi_search_snmp(struct ndpi_detection_module_struct *ndpi_struct, (packet->udp->dest != snmp_port) && (packet->udp->source != trap_port) && (packet->udp->dest != trap_port)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -141,18 +141,13 @@ static void ndpi_search_snmp(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_snmp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("SNMP", ndpi_struct, *id, - NDPI_PROTOCOL_SNMP, - ndpi_search_snmp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_snmp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("SNMP", ndpi_struct, + ndpi_search_snmp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SNMP); } diff --git a/src/lib/protocols/soap.c b/src/lib/protocols/soap.c index 96b1ead71..849e0dc90 100644 --- a/src/lib/protocols/soap.c +++ b/src/lib/protocols/soap.c @@ -66,7 +66,7 @@ static void ndpi_search_soap(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_soap_add_connection(ndpi_struct, flow); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } @@ -80,12 +80,11 @@ static void ndpi_search_soap(struct ndpi_detection_module_struct *ndpi_struct, } } -void init_soap_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_soap_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection( - "SOAP", ndpi_struct, *id, - NDPI_PROTOCOL_SOAP, ndpi_search_soap, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("SOAP", ndpi_struct, + ndpi_search_soap, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SOAP); } diff --git a/src/lib/protocols/socks45.c b/src/lib/protocols/socks45.c index 78a744087..b17851f97 100644 --- a/src/lib/protocols/socks45.c +++ b/src/lib/protocols/socks45.c @@ -41,7 +41,7 @@ static void ndpi_check_socks4(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t payload_len = packet->payload_packet_len; /* Check if we so far detected the protocol in the request or not. */ - if(flow->socks4_stage == 0) { + if(flow->l4.tcp.socks4_stage == 0) { NDPI_LOG_DBG2(ndpi_struct, "SOCKS4 stage 0: \n"); if(payload_len >= 9 && packet->payload[0] == 0x04 && @@ -50,13 +50,13 @@ static void ndpi_check_socks4(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct, "Possible SOCKS4 request detected, we will look further for the response\n"); /* TODO: check port and ip address is valid */ /* Encode the direction of the packet in the stage, so we will know when we need to look for the response packet. */ - flow->socks4_stage = packet->packet_direction + 1; + flow->l4.tcp.socks4_stage = packet->packet_direction + 1; } } else { - NDPI_LOG_DBG2(ndpi_struct, "SOCKS4 stage %u: \n", flow->socks4_stage); + NDPI_LOG_DBG2(ndpi_struct, "SOCKS4 stage %u: \n", flow->l4.tcp.socks4_stage); /* At first check, if this is for sure a response packet (in another direction. If not, do nothing now and return. */ - if((flow->socks4_stage - packet->packet_direction) == 1) { + if((flow->l4.tcp.socks4_stage - packet->packet_direction) == 1) { return; } /* This is a packet in another direction. Check if we find the proper response. */ @@ -65,7 +65,7 @@ static void ndpi_check_socks4(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_socks_add_connection(ndpi_struct, flow); } else { NDPI_LOG_DBG2(ndpi_struct, "The reply did not seem to belong to SOCKS4, resetting the stage to 0\n"); - flow->socks4_stage = 0; + flow->l4.tcp.socks4_stage = 0; } } } @@ -76,7 +76,7 @@ static void ndpi_check_socks5(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t payload_len = packet->payload_packet_len; /* Check if we so far detected the protocol in the request or not. */ - if(flow->socks5_stage == 0) { + if(flow->l4.tcp.socks5_stage == 0) { NDPI_LOG_DBG2(ndpi_struct, "SOCKS5 stage 0: \n"); if(((payload_len == 3) && (packet->payload[0] == 0x05) && (packet->payload[1] == 0x01) && (packet->payload[2] == 0x00)) || @@ -84,14 +84,14 @@ static void ndpi_check_socks5(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct, "Possible SOCKS5 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. */ - flow->socks5_stage = packet->packet_direction + 1; + flow->l4.tcp.socks5_stage = packet->packet_direction + 1; } } else { - NDPI_LOG_DBG2(ndpi_struct, "SOCKS5 stage %u: \n", flow->socks5_stage); + NDPI_LOG_DBG2(ndpi_struct, "SOCKS5 stage %u: \n", flow->l4.tcp.socks5_stage); /* At first check, if this is for sure a response packet (in another direction. If not, do nothing now and return. */ - if((flow->socks5_stage - packet->packet_direction) == 1) { + if((flow->l4.tcp.socks5_stage - packet->packet_direction) == 1) { return; } @@ -101,7 +101,7 @@ static void ndpi_check_socks5(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_socks_add_connection(ndpi_struct, flow); } else { NDPI_LOG_DBG2(ndpi_struct, "The reply did not seem to belong to SOCKS5, resetting the stage to 0\n"); - flow->socks5_stage = 0; + flow->l4.tcp.socks5_stage = 0; } } @@ -112,7 +112,7 @@ static void ndpi_search_socks(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "search SOCKS\n"); if(flow->packet_counter >= 10) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -122,15 +122,11 @@ static void ndpi_search_socks(struct ndpi_detection_module_struct *ndpi_struct, ndpi_check_socks5(ndpi_struct, flow); } -void init_socks_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_socks_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SOCKS", ndpi_struct, *id, - NDPI_PROTOCOL_SOCKS, - ndpi_search_socks, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SOCKS", ndpi_struct, + ndpi_search_socks, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SOCKS); } diff --git a/src/lib/protocols/softether.c b/src/lib/protocols/softether.c index d0ad8b492..379e743f7 100644 --- a/src/lib/protocols/softether.c +++ b/src/lib/protocols/softether.c @@ -304,7 +304,7 @@ static void ndpi_search_softether(struct ndpi_detection_module_struct *ndpi_stru if(packet->payload_packet_len == 1) { if((packet->payload[0] != 0x41) || (flow->packet_counter > 2)) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -323,7 +323,7 @@ static void ndpi_search_softether(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************** */ @@ -347,15 +347,9 @@ static int ndpi_search_softether_again(struct ndpi_detection_module_struct *ndpi /* ***************************************************** */ -void init_softether_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Softether", ndpi_struct, *id, - NDPI_PROTOCOL_SOFTETHER, - ndpi_search_softether, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; +void init_softether_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Softether", ndpi_struct, + ndpi_search_softether, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SOFTETHER); } diff --git a/src/lib/protocols/someip.c b/src/lib/protocols/someip.c index c2e4ee330..0d17524d1 100644 --- a/src/lib/protocols/someip.c +++ b/src/lib/protocols/someip.c @@ -101,7 +101,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 16) { NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP .. mandatory header not found (not enough data for all fields)\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -122,7 +122,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t someip_len = ntohl(someip_data_cover_32(&packet->payload[4])); if (packet->payload_packet_len != (someip_len + 8)) { NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP .. Length field invalid!\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -130,7 +130,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct,"====>>>> SOME/IP protocol version: [%d]\n",protocol_version); if (protocol_version != LEGAL_PROTOCOL_VERSION){ NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP .. invalid protocol version!\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -144,7 +144,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, (message_type != SOMEIP_REQUEST_NO_RETURN_ACK) && (message_type != SOMEIP_NOTIFICATION_ACK) && (message_type != SOMEIP_RESPONSE) && (message_type != SOMEIP_ERROR) && (message_type != SOMEIP_RESPONSE_ACK) && (message_type != SOMEIP_ERROR_ACK)) { NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP .. invalid message type!\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -152,7 +152,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG2(ndpi_struct,"====>>>> SOME/IP return code: [%d]\n", return_code); if ((return_code >= E_RETURN_CODE_LEGAL_THRESHOLD)) { NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP .. invalid return code!\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -165,7 +165,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, } else{ NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP, invalid header for Magic Cookie\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -179,7 +179,7 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, } else{ NDPI_LOG_DBG(ndpi_struct, "Excluding SOME/IP, invalid header for Magic Cookie ACK\n"); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SOMEIP); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -193,15 +193,12 @@ static void ndpi_search_someip(struct ndpi_detection_module_struct *ndpi_struct, /** * Entry point for the ndpi library */ -void init_someip_dissector (struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_someip_dissector (struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection ("SOME/IP", ndpi_struct, *id, - NDPI_PROTOCOL_SOMEIP, - ndpi_search_someip, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - *id +=1; + register_dissector("SOME/IP", ndpi_struct, + ndpi_search_someip, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SOMEIP); } diff --git a/src/lib/protocols/sonos.c b/src/lib/protocols/sonos.c index c203f2be9..dca0ac874 100644 --- a/src/lib/protocols/sonos.c +++ b/src/lib/protocols/sonos.c @@ -57,17 +57,14 @@ void ndpi_search_sonos(struct ndpi_detection_module_struct *ndpi_struct, struct } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_sonos_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_sonos_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Sonos", ndpi_struct, *id, - NDPI_PROTOCOL_SONOS, - ndpi_search_sonos, - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* Only IPv4 UDP traffic is expected. */ - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Sonos", ndpi_struct, + ndpi_search_sonos, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* Only IPv4 UDP traffic is expected. */ + 1, NDPI_PROTOCOL_SONOS); } diff --git a/src/lib/protocols/source_engine.c b/src/lib/protocols/source_engine.c index 8d92f537e..96d285a07 100644 --- a/src/lib/protocols/source_engine.c +++ b/src/lib/protocols/source_engine.c @@ -1,7 +1,7 @@ /* * source_engine.c * - * Source Engine Protocol + * Source Engine Protocol (Valve’s A2S protocol) * * Copyright (C) 2023 - ntop.org * @@ -45,45 +45,59 @@ static void ndpi_search_source_engine(struct ndpi_detection_module_struct *ndpi_ struct ndpi_flow_struct *flow) { struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; - char const source_engine_query[] = "Source Engine Query"; - size_t const source_engine_query_len = strlen(source_engine_query); NDPI_LOG_DBG(ndpi_struct, "search Source Engine\n"); - if (packet->payload_packet_len < source_engine_query_len + 1 /* '\0' */) - { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; - } + /* https://developer.valvesoftware.com/wiki/Server_queries */ - if (packet->payload[packet->payload_packet_len - 1] != '\0') + /* A2S request */ + if (current_pkt_from_client_to_server(ndpi_struct, flow) && + (packet->payload_packet_len > 8 && packet->payload_packet_len < 30) && + get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; + if (packet->payload[4] == 'T' || /* A2S_INFO */ + packet->payload[4] == 'U' || /* A2S_PLAYER */ + packet->payload[4] == 'V') /* A2S_RULES */ + { + ndpi_int_source_engine_add_connection(ndpi_struct, flow); + return; + } } - if (strncmp((char const *)&packet->payload[packet->payload_packet_len - source_engine_query_len - 1], - source_engine_query, source_engine_query_len) != 0) + /* A2S response */ + if (current_pkt_from_server_to_client(ndpi_struct, flow)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; + /* Challenge response */ + if (packet->payload_packet_len == 9 && + get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF && + packet->payload[4] == 'A') + { + ndpi_int_source_engine_add_connection(ndpi_struct, flow); + return; + } + + if (packet->payload_packet_len > 30 && /* A reasonable length for euristics */ + get_u_int32_t(packet->payload, 0) == 0xFFFFFFFF) + { + if (packet->payload[4] == 'I' || /* A2S_INFO */ + packet->payload[4] == 'D' || /* A2S_PLAYER */ + packet->payload[4] == 'E') /* A2S_RULES */ + { + ndpi_int_source_engine_add_connection(ndpi_struct, flow); + return; + } + } } - ndpi_int_source_engine_add_connection(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************** */ -void init_source_engine_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_source_engine_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Source_Engine", ndpi_struct, *id, - NDPI_PROTOCOL_SOURCE_ENGINE, - ndpi_search_source_engine, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Source_Engine", ndpi_struct, + ndpi_search_source_engine, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SOURCE_ENGINE); } diff --git a/src/lib/protocols/spotify.c b/src/lib/protocols/spotify.c index 7f40ca6dc..4dc6f09b2 100644 --- a/src/lib/protocols/spotify.c +++ b/src/lib/protocols/spotify.c @@ -65,7 +65,7 @@ static void ndpi_check_spotify(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_spotify(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) @@ -76,15 +76,11 @@ static void ndpi_search_spotify(struct ndpi_detection_module_struct *ndpi_struct } -void init_spotify_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_spotify_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SPOTIFY", ndpi_struct, *id, - NDPI_PROTOCOL_SPOTIFY, - ndpi_search_spotify, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SPOTIFY", ndpi_struct, + ndpi_search_spotify, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SPOTIFY); } diff --git a/src/lib/protocols/ssdp.c b/src/lib/protocols/ssdp.c index 90ce4c04c..e45e84911 100644 --- a/src/lib/protocols/ssdp.c +++ b/src/lib/protocols/ssdp.c @@ -2,7 +2,7 @@ * ssdp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -29,9 +29,16 @@ #include "ndpi_api.h" #include "ndpi_private.h" +static struct SSDP { + const char *detection_line; + const char *method; +} SSDP_METHODS[] = { + { "M-SEARCH * HTTP/1.1", "M-SEARCH" }, + { "NOTIFY * HTTP/1.1", "NOTIFY" } +}; static void ssdp_parse_lines(struct ndpi_detection_module_struct - *ndpi_struct, struct ndpi_flow_struct *flow) + *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; @@ -40,21 +47,174 @@ static void ssdp_parse_lines(struct ndpi_detection_module_struct /* Save user-agent for device discovery if available */ if(packet->user_agent_line.ptr != NULL && packet->user_agent_line.len > 0) { if (ndpi_user_agent_set(flow, packet->user_agent_line.ptr, packet->user_agent_line.len) == NULL) - { - NDPI_LOG_DBG2(ndpi_struct, "Could not set SSDP user agent\n"); - } + { + NDPI_LOG_DBG2(ndpi_struct, "Could not set SSDP user agent\n"); + } } /* Save host which provides a service if available */ if (packet->host_line.ptr != NULL && packet->host_line.len > 0) { ndpi_hostname_sni_set(flow, packet->host_line.ptr, packet->host_line.len, NDPI_HOSTNAME_NORM_ALL); } + + if (packet->bootid.ptr != NULL && packet->bootid.len > 0) { + flow->protos.ssdp.bootid = ndpi_malloc(packet->bootid.len + 1); + if (flow->protos.ssdp.bootid) { + memcpy(flow->protos.ssdp.bootid, packet->bootid.ptr, packet->bootid.len); + flow->protos.ssdp.bootid[packet->bootid.len] = '\0'; + } + } + + if (packet->usn.ptr != NULL && packet->usn.len > 0) { + flow->protos.ssdp.usn = ndpi_malloc(packet->usn.len + 1); + if (flow->protos.ssdp.usn) { + memcpy(flow->protos.ssdp.usn, packet->usn.ptr, packet->usn.len); + flow->protos.ssdp.usn[packet->usn.len] = '\0'; + } + } + + if (packet->cache_controle.ptr != NULL && packet->cache_controle.len > 0) { + flow->protos.ssdp.cache_controle = ndpi_malloc(packet->cache_controle.len + 1); + if (flow->protos.ssdp.cache_controle) { + memcpy(flow->protos.ssdp.cache_controle, packet->cache_controle.ptr, packet->cache_controle.len); + flow->protos.ssdp.cache_controle[packet->cache_controle.len] = '\0'; + } + } + + if (packet->location.ptr != NULL && packet->location.len > 0) { + flow->protos.ssdp.location = ndpi_malloc(packet->location.len + 1); + if (flow->protos.ssdp.location) { + memcpy(flow->protos.ssdp.location, packet->location.ptr, packet->location.len); + flow->protos.ssdp.location[packet->location.len] = '\0'; + } + } + + if (packet->household_smart_speaker_audio.ptr != NULL && packet->household_smart_speaker_audio.len > 0) { + flow->protos.ssdp.household_smart_speaker_audio = ndpi_malloc(packet->household_smart_speaker_audio.len + 1); + if (flow->protos.ssdp.household_smart_speaker_audio) { + memcpy(flow->protos.ssdp.household_smart_speaker_audio, packet->household_smart_speaker_audio.ptr, packet->household_smart_speaker_audio.len); + flow->protos.ssdp.household_smart_speaker_audio[packet->household_smart_speaker_audio.len] = '\0'; + } + } + + if (packet->rincon_household.ptr != NULL && packet->rincon_household.len > 0) { + flow->protos.ssdp.rincon_household = ndpi_malloc(packet->rincon_household.len + 1); + if (flow->protos.ssdp.rincon_household) { + memcpy(flow->protos.ssdp.rincon_household, packet->rincon_household.ptr, packet->rincon_household.len); + flow->protos.ssdp.rincon_household[packet->rincon_household.len] = '\0'; + } + } + + if (packet->rincon_bootseq.ptr != NULL && packet->rincon_bootseq.len > 0) { + flow->protos.ssdp.rincon_bootseq = ndpi_malloc(packet->rincon_bootseq.len + 1); + if (flow->protos.ssdp.rincon_bootseq) { + memcpy(flow->protos.ssdp.rincon_bootseq, packet->rincon_bootseq.ptr, packet->rincon_bootseq.len); + flow->protos.ssdp.rincon_bootseq[packet->rincon_bootseq.len] = '\0'; + } + } + + if (packet->rincon_wifimode.ptr != NULL && packet->rincon_wifimode.len > 0) { + flow->protos.ssdp.rincon_wifimode = ndpi_malloc(packet->rincon_wifimode.len + 1); + if (flow->protos.ssdp.rincon_wifimode) { + memcpy(flow->protos.ssdp.rincon_wifimode, packet->rincon_wifimode.ptr, packet->rincon_wifimode.len); + flow->protos.ssdp.rincon_wifimode[packet->rincon_wifimode.len] = '\0'; + } + } + + if (packet->rincon_variant.ptr != NULL && packet->rincon_variant.len > 0) { + flow->protos.ssdp.rincon_variant = ndpi_malloc(packet->rincon_variant.len + 1); + if (flow->protos.ssdp.rincon_variant) { + memcpy(flow->protos.ssdp.rincon_variant, packet->rincon_variant.ptr, packet->rincon_variant.len); + flow->protos.ssdp.rincon_variant[packet->rincon_variant.len] = '\0'; + } + } + + if (packet->sonos_securelocation.ptr != NULL && packet->sonos_securelocation.len > 0) { + flow->protos.ssdp.sonos_securelocation = ndpi_malloc(packet->sonos_securelocation.len + 1); + if (flow->protos.ssdp.sonos_securelocation) { + memcpy(flow->protos.ssdp.sonos_securelocation, packet->sonos_securelocation.ptr, packet->sonos_securelocation.len); + flow->protos.ssdp.sonos_securelocation[packet->sonos_securelocation.len] = '\0'; + } + } + + if (packet->securelocation_upnp.ptr != NULL && packet->securelocation_upnp.len > 0) { + flow->protos.ssdp.securelocation_upnp = ndpi_malloc(packet->securelocation_upnp.len + 1); + if (flow->protos.ssdp.securelocation_upnp) { + memcpy(flow->protos.ssdp.securelocation_upnp, packet->securelocation_upnp.ptr, packet->securelocation_upnp.len); + flow->protos.ssdp.securelocation_upnp[packet->securelocation_upnp.len] = '\0'; + } + } + + if (packet->location_smart_speaker_audio.ptr != NULL && packet->location_smart_speaker_audio.len > 0) { + flow->protos.ssdp.location_smart_speaker_audio = ndpi_malloc(packet->location_smart_speaker_audio.len + 1); + if (flow->protos.ssdp.location_smart_speaker_audio) { + memcpy(flow->protos.ssdp.location_smart_speaker_audio, packet->location_smart_speaker_audio.ptr, packet->location_smart_speaker_audio.len); + flow->protos.ssdp.location_smart_speaker_audio[packet->location_smart_speaker_audio.len] = '\0'; + } + } + + if (packet->nt.ptr != NULL && packet->nt.len > 0) { + flow->protos.ssdp.nt = ndpi_malloc(packet->nt.len + 1); + if (flow->protos.ssdp.nt) { + memcpy(flow->protos.ssdp.nt, packet->nt.ptr, packet->nt.len); + flow->protos.ssdp.nt[packet->nt.len] = '\0'; + } + } + + if (packet->nts.ptr != NULL && packet->nts.len > 0) { + flow->protos.ssdp.nts = ndpi_malloc(packet->nts.len + 1); + if (flow->protos.ssdp.nts) { + memcpy(flow->protos.ssdp.nts, packet->nts.ptr, packet->nts.len); + flow->protos.ssdp.nts[packet->nts.len] = '\0'; + } + } + + if (packet->server_line.ptr != NULL && packet->server_line.len > 0) { + flow->protos.ssdp.server = ndpi_malloc(packet->server_line.len + 1); + if (flow->protos.ssdp.server) { + memcpy(flow->protos.ssdp.server, packet->server_line.ptr, packet->server_line.len); + flow->protos.ssdp.server[packet->server_line.len] = '\0'; + } + } + + if (packet->man.ptr != NULL && packet->man.len > 0) { + flow->protos.ssdp.man = ndpi_malloc(packet->man.len + 1); + if (flow->protos.ssdp.man) { + memcpy(flow->protos.ssdp.man, packet->man.ptr, packet->man.len); + flow->protos.ssdp.man[packet->man.len] = '\0'; + } + } + + if (packet->mx.ptr != NULL && packet->mx.len > 0) { + flow->protos.ssdp.mx = ndpi_malloc(packet->mx.len + 1); + if (flow->protos.ssdp.mx) { + memcpy(flow->protos.ssdp.mx, packet->mx.ptr, packet->mx.len); + flow->protos.ssdp.mx[packet->mx.len] = '\0'; + } + } + + if (packet->st.ptr != NULL && packet->st.len > 0) { + flow->protos.ssdp.st = ndpi_malloc(packet->st.len + 1); + if (flow->protos.ssdp.st) { + memcpy(flow->protos.ssdp.st, packet->st.ptr, packet->st.len); + flow->protos.ssdp.st[packet->st.len] = '\0'; + } + } + + if (packet->user_agent_line.ptr != NULL && packet->user_agent_line.len > 0) { + flow->protos.ssdp.user_agent = ndpi_malloc(packet->user_agent_line.len + 1); + if (flow->protos.ssdp.user_agent) { + memcpy(flow->protos.ssdp.user_agent, packet->user_agent_line.ptr, packet->user_agent_line.len); + flow->protos.ssdp.user_agent[packet->user_agent_line.len] = '\0'; + } + } } static void ndpi_int_ssdp_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - ssdp_parse_lines(ndpi_struct, flow); + if(ndpi_struct->cfg.ssdp_metadata_enabled) + ssdp_parse_lines(ndpi_struct, flow); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_SSDP, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } @@ -62,18 +222,28 @@ static void ndpi_int_ssdp_add_connection(struct ndpi_detection_module_struct static void ndpi_search_ssdp(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; - + NDPI_LOG_DBG(ndpi_struct, "search ssdp\n"); - if (packet->udp != NULL) { + if (packet->udp != NULL) { 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) { + unsigned int i; + for (i=0; i < sizeof(SSDP_METHODS)/sizeof(SSDP_METHODS[0]); i++) { + if(memcmp(packet->payload, SSDP_METHODS[i].detection_line, strlen(SSDP_METHODS[i].detection_line)) == 0) { + if(ndpi_struct->cfg.ssdp_metadata_enabled) { + flow->protos.ssdp.method = ndpi_malloc(strlen(SSDP_METHODS[i].detection_line) + 1); - NDPI_LOG_INFO(ndpi_struct, "found ssdp\n"); - ndpi_int_ssdp_add_connection(ndpi_struct, flow); - return; + if (flow->protos.ssdp.method) { + memcpy(flow->protos.ssdp.method, SSDP_METHODS[i].method, strlen(SSDP_METHODS[i].method)); + flow->protos.ssdp.method[strlen(SSDP_METHODS[i].method)] = '\0'; + } + } + + NDPI_LOG_INFO(ndpi_struct, "found ssdp\n"); + ndpi_int_ssdp_add_connection(ndpi_struct, flow); + return; + } } #define SSDP_HTTP "HTTP/1.1 200 OK\r\n" @@ -85,19 +255,14 @@ static void ndpi_search_ssdp(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ssdp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ssdp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SSDP", ndpi_struct, *id, - NDPI_PROTOCOL_SSDP, - ndpi_search_ssdp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SSDP", ndpi_struct, + ndpi_search_ssdp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SSDP); } - diff --git a/src/lib/protocols/ssh.c b/src/lib/protocols/ssh.c index bdca8c059..b283493a3 100644 --- a/src/lib/protocols/ssh.c +++ b/src/lib/protocols/ssh.c @@ -1,7 +1,7 @@ /* * ssh.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -362,7 +362,6 @@ static u_int16_t concat_hash_string(struct ndpi_detection_module_struct *ndpi_st if(len > len_max) goto invalid_payload; - offset += len; /* ssh.languages_client_to_server [None] */ @@ -405,50 +404,45 @@ static void ndpi_search_ssh_tcp(struct ndpi_detection_module_struct *ndpi_struct printf("[SSH] %s()\n", __FUNCTION__); #endif - if(flow->l4.tcp.ssh_stage == 0) { - if(packet->payload_packet_len > 7 - && memcmp(packet->payload, "SSH-", 4) == 0) { - int len = ndpi_min(sizeof(flow->protos.ssh.client_signature)-1, packet->payload_packet_len); + if(flow->l4.tcp.ssh_stage <= 1) { + if(packet->payload_packet_len > 7 && memcmp(packet->payload, "SSH-", 4) == 0) { + if(current_pkt_from_client_to_server(ndpi_struct, flow)) { + int len = ndpi_min(sizeof(flow->protos.ssh.client_signature)-1, packet->payload_packet_len); - strncpy(flow->protos.ssh.client_signature, (const char *)packet->payload, len); - flow->protos.ssh.client_signature[len] = '\0'; - ndpi_ssh_zap_cr(flow->protos.ssh.client_signature, len); + strncpy(flow->protos.ssh.client_signature, (const char *)packet->payload, len); + flow->protos.ssh.client_signature[len] = '\0'; + ndpi_ssh_zap_cr(flow->protos.ssh.client_signature, len); - ssh_analyze_signature_version(ndpi_struct, flow, flow->protos.ssh.client_signature, 1); + ssh_analyze_signature_version(ndpi_struct, flow, flow->protos.ssh.client_signature, 1); #ifdef SSH_DEBUG - printf("[SSH] [client_signature: %s]\n", flow->protos.ssh.client_signature); + printf("[SSH] [client_signature: %s]\n", flow->protos.ssh.client_signature); #endif - NDPI_LOG_DBG2(ndpi_struct, "ssh stage 0 passed\n"); - flow->l4.tcp.ssh_stage = 1 + packet->packet_direction; - ndpi_int_ssh_add_connection(ndpi_struct, flow); - return; - } - } else if(flow->l4.tcp.ssh_stage == (2 - packet->packet_direction)) { - if(packet->payload_packet_len > 7 && packet->payload_packet_len < 500 - && memcmp(packet->payload, "SSH-", 4) == 0) { - int len = ndpi_min(sizeof(flow->protos.ssh.server_signature)-1, packet->payload_packet_len); + ndpi_int_ssh_add_connection(ndpi_struct, flow); + } else { + int len = ndpi_min(sizeof(flow->protos.ssh.server_signature)-1, packet->payload_packet_len); - strncpy(flow->protos.ssh.server_signature, (const char *)packet->payload, len); - flow->protos.ssh.server_signature[len] = '\0'; - ndpi_ssh_zap_cr(flow->protos.ssh.server_signature, len); + strncpy(flow->protos.ssh.server_signature, (const char *)packet->payload, len); + flow->protos.ssh.server_signature[len] = '\0'; + ndpi_ssh_zap_cr(flow->protos.ssh.server_signature, len); - ssh_analyze_signature_version(ndpi_struct, flow, flow->protos.ssh.server_signature, 0); + ssh_analyze_signature_version(ndpi_struct, flow, flow->protos.ssh.server_signature, 0); #ifdef SSH_DEBUG - printf("[SSH] [server_signature: %s]\n", flow->protos.ssh.server_signature); + printf("[SSH] [server_signature: %s]\n", flow->protos.ssh.server_signature); #endif - NDPI_LOG_DBG2(ndpi_struct, "ssh stage 1 passed\n"); - flow->fast_callback_protocol_id = NDPI_PROTOCOL_SSH; + NDPI_LOG_DBG2(ndpi_struct, "ssh stage 1 passed\n"); + flow->fast_callback_protocol_id = NDPI_PROTOCOL_SSH; #ifdef SSH_DEBUG - printf("[SSH] [completed stage: %u]\n", flow->l4.tcp.ssh_stage); + printf("[SSH] [completed stage: %u]\n", flow->l4.tcp.ssh_stage); #endif + } - flow->l4.tcp.ssh_stage = 3; - return; + flow->l4.tcp.ssh_stage++; + return; } } else if(packet->payload_packet_len > 5) { u_int8_t msgcode = *(packet->payload + 5); @@ -530,19 +524,15 @@ static void ndpi_search_ssh_tcp(struct ndpi_detection_module_struct *ndpi_struct #endif NDPI_LOG_DBG(ndpi_struct, "excluding ssh at stage %d\n", flow->l4.tcp.ssh_stage); - NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_SSH); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ************************************************************************ */ -void init_ssh_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ssh_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SSH", ndpi_struct, *id, - NDPI_PROTOCOL_SSH, - ndpi_search_ssh_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SSH", ndpi_struct, + ndpi_search_ssh_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SSH); } diff --git a/src/lib/protocols/starcraft.c b/src/lib/protocols/starcraft.c deleted file mode 100644 index 9e87ea2c8..000000000 --- a/src/lib/protocols/starcraft.c +++ /dev/null @@ -1,159 +0,0 @@ -/* -* starcraft.c -* -* Copyright (C) 2015 - Matteo Bracci <matteobracci1@gmail.com> -* Copyright (C) 2015-22 - 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_STARCRAFT - -#include "ndpi_api.h" -#include "ndpi_private.h" - - -/* Sender or receiver are one of the known login portals? */ -static u_int8_t sc2_match_logon_ip(struct ndpi_packet_struct* packet) -{ - if (packet->iph == NULL) - return 0; - - u_int32_t source_ip = ntohl(packet->iph->saddr); - u_int32_t dest_ip = ntohl(packet->iph->daddr); - return (ndpi_ips_match(source_ip, dest_ip, 0xD5F87F82, 32) // EU 213.248.127.130 - || ndpi_ips_match(source_ip, dest_ip, 0x0C81CE82, 32) // US 12.129.206.130 - || ndpi_ips_match(source_ip, dest_ip, 0x79FEC882, 32) // KR 121.254.200.130 - || ndpi_ips_match(source_ip, dest_ip, 0xCA09424C, 32) // SG 202.9.66.76 - || ndpi_ips_match(source_ip, dest_ip, 0x0C81ECFE, 32)); // BETA 12.129.236.254 -} - -/* - The main TCP flow starts with the user login and stays alive until the logout. - Although hard to read, judging from what happens elsewhere this flow probably contains all the data - transfer generated by the user interaction with the client, e.g. chatting or looking at someone's - match history. The current way to detect this is plain dumb packet matching. -*/ -static u_int8_t ndpi_check_starcraft_tcp(struct ndpi_detection_module_struct* ndpi_struct) -{ - struct ndpi_packet_struct* packet = &ndpi_struct->packet; - - if (sc2_match_logon_ip(packet) - && packet->tcp->dest == htons(1119) //bnetgame port - && (ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "\x4a\x00\x00\x0a\x66\x02\x0a\xed\x2d\x66") - || ndpi_match_strprefix(packet->payload, packet->payload_packet_len, "\x49\x00\x00\x0a\x66\x02\x0a\xed\x2d\x66"))) - return 1; - else - return -1; -} - -/* - UPD traffic is the actual game data and it uses a port owned by Blizzard itself, 1119. Therefore the - real key point here is to make sure that it's actually Starcraft 2 that is using the port and not - some other Blizzard software. - The flow is taken if a pattern in the size of some subsequent packets is found. -*/ -static u_int8_t ndpi_check_starcraft_udp(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) -{ - struct ndpi_packet_struct* packet = &ndpi_struct->packet; - - /* First off, filter out any traffic not using port 1119, removing the chance of any false positive if we assume that non allowed protocols don't use the port */ - if (packet->udp->source != htons(1119) && packet->udp->dest != htons(1119)) - return -1; - - /* Then try to detect the size pattern */ - switch (flow->starcraft_udp_stage) - { - case 0: - if (packet->payload_packet_len == 20) - flow->starcraft_udp_stage = 1; - break; - case 1: - if (packet->payload_packet_len == 20) - flow->starcraft_udp_stage = 2; - break; - case 2: - if (packet->payload_packet_len == 75 || packet->payload_packet_len == 85) - flow->starcraft_udp_stage = 3; - break; - case 3: - if (packet->payload_packet_len == 20) - flow->starcraft_udp_stage = 4; - break; - case 4: - if (packet->payload_packet_len == 548) - flow->starcraft_udp_stage = 5; - break; - case 5: - if (packet->payload_packet_len == 548) - flow->starcraft_udp_stage = 6; - break; - case 6: - if (packet->payload_packet_len == 548) - flow->starcraft_udp_stage = 7; - break; - case 7: - if (packet->payload_packet_len == 484) - return 1; - break; - } - - return(0); -} - -static void ndpi_search_starcraft(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) -{ - struct ndpi_packet_struct* packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search Starcraft\n"); - if (flow->detected_protocol_stack[0] != NDPI_PROTOCOL_STARCRAFT) { - int8_t result = 0; - - if (packet->udp != NULL) { - result = ndpi_check_starcraft_udp(ndpi_struct, flow); - if (result == 1) { - NDPI_LOG_INFO(ndpi_struct, "Found Starcraft 2 [Game, UDP]\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STARCRAFT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - return; - } - } - else if (packet->tcp != NULL) { - result = ndpi_check_starcraft_tcp(ndpi_struct); - if (result == 1) { - NDPI_LOG_INFO(ndpi_struct, "Found Starcraft 2 [Client, TCP]\n"); - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STARCRAFT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - return; - } - } - - if (result == -1) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - } - } -} - -void init_starcraft_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("Starcraft", ndpi_struct, *id, - NDPI_PROTOCOL_STARCRAFT, ndpi_search_starcraft, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; -} - diff --git a/src/lib/protocols/steam.c b/src/lib/protocols/steam.c index 351279f59..1fd461d2a 100644 --- a/src/lib/protocols/steam.c +++ b/src/lib/protocols/steam.c @@ -1,7 +1,7 @@ /* * steam.c * - * Copyright (C) 2011-24 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2014 Tomasz Bujlow <tomasz@skatnet.dk> * * This file is part of nDPI, an open source deep packet inspection @@ -50,17 +50,13 @@ static void ndpi_search_steam(struct ndpi_detection_module_struct *ndpi_struct, /* TODO: implement Steam Remote Play detection */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_steam_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_steam_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Steam", ndpi_struct, *id, - NDPI_PROTOCOL_STEAM, - ndpi_search_steam, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Steam", ndpi_struct, + ndpi_search_steam, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_STEAM); } diff --git a/src/lib/protocols/steam_datagram_relay.c b/src/lib/protocols/steam_datagram_relay.c index 6dafd6e97..5f1099f38 100644 --- a/src/lib/protocols/steam_datagram_relay.c +++ b/src/lib/protocols/steam_datagram_relay.c @@ -54,18 +54,13 @@ static void ndpi_search_valve_sdr(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_valve_sdr_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_valve_sdr_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("SteamDatagramRelay", ndpi_struct, *id, - NDPI_PROTOCOL_VALVE_SDR, - ndpi_search_valve_sdr, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("SteamDatagramRelay", ndpi_struct, + ndpi_search_valve_sdr, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_VALVE_SDR); } diff --git a/src/lib/protocols/stomp.c b/src/lib/protocols/stomp.c index 839d6f16f..3e8bdf9d8 100644 --- a/src/lib/protocols/stomp.c +++ b/src/lib/protocols/stomp.c @@ -62,16 +62,13 @@ static void ndpi_search_stomp(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_stomp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_stomp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("STOMP", ndpi_struct, *id, - NDPI_PROTOCOL_STOMP, - ndpi_search_stomp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("STOMP", ndpi_struct, + ndpi_search_stomp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_STOMP); } diff --git a/src/lib/protocols/stun.c b/src/lib/protocols/stun.c index d5015cc60..d9045fb20 100644 --- a/src/lib/protocols/stun.c +++ b/src/lib/protocols/stun.c @@ -1,7 +1,7 @@ /* * stun.c * - * Copyright (C) 2011-24 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -55,7 +55,8 @@ static u_int64_t get_stun_lru_key_raw6(u_int8_t *ip, u_int16_t port); static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int16_t app_proto, - u_int16_t master_proto); + u_int16_t master_proto, + ndpi_protocol_category_t category); static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); @@ -354,8 +355,8 @@ static void parse_xor_ip_port_attribute(struct ndpi_detection_module_struct *ndp int is_stun(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, - u_int16_t *app_proto) -{ + u_int16_t *app_proto, + ndpi_protocol_category_t *category) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int16_t msg_type, msg_len, method; int off; @@ -366,6 +367,8 @@ int is_stun(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t magic_cookie; u_int32_t transaction_id[3]; + *category = NDPI_PROTOCOL_CATEGORY_UNSPECIFIED; + if(payload_length < STUN_HDR_LEN) return(-1); @@ -559,8 +562,8 @@ int is_stun(struct ndpi_detection_module_struct *ndpi_struct, bool valid = true; ndpi_hostname_sni_set(flow, payload + off + 4, ndpi_min(len, payload_length - off - 4), NDPI_HOSTNAME_NORM_ALL); - NDPI_LOG_DBG(ndpi_struct, "Realm [%s]\n", flow->host_server_name); - + NDPI_LOG_DBG(ndpi_struct, "Realm [%s]\n", flow->host_server_name); + /* Some Realm contain junk, so let's validate it */ for(i=0; flow->host_server_name[i] != '\0'; i++) { if(flow->host_server_name[i] == '?') { @@ -578,11 +581,16 @@ int is_stun(struct ndpi_detection_module_struct *ndpi_struct, } else if(strstr(flow->host_server_name, "facebook") != NULL) { *app_proto = NDPI_PROTOCOL_FACEBOOK_VOIP; } else if(strstr(flow->host_server_name, "stripcdn.com") != NULL) { - *app_proto = NDPI_PROTOCOL_ADULT_CONTENT; + *category = NDPI_PROTOCOL_CATEGORY_ADULT_CONTENT; } else if(strstr(flow->host_server_name, "telegram") != NULL) { *app_proto = NDPI_PROTOCOL_TELEGRAM_VOIP; } else if(strstr(flow->host_server_name, "viber") != NULL) { *app_proto = NDPI_PROTOCOL_VIBER_VOIP; + } else if(strstr(flow->host_server_name, "turn.cloudflare.com") != NULL) { + /* The latest signal implementations hide behind cloudflare */ + if(signal_search_into_cache(ndpi_struct, flow)) { + *app_proto = NDPI_PROTOCOL_SIGNAL_VOIP; + } } } else flow->host_server_name[0] = '\0'; @@ -828,10 +836,14 @@ static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, (flow->detected_protocol_stack[0] == NDPI_PROTOCOL_WHATSAPP_CALL && (msg_type == 0x0800 || msg_type == 0x0801 || msg_type == 0x0802 || msg_type == 0x0804 || msg_type == 0x0805))) { + ndpi_protocol_category_t category; + NDPI_LOG_DBG(ndpi_struct, "Still STUN\n"); - if(is_stun(ndpi_struct, flow, &app_proto) == 1) { /* To extract other metadata */ + + if(is_stun(ndpi_struct, flow, &app_proto, &category) == 1) { /* To extract other metadata */ if(is_new_subclassification_better(ndpi_struct, flow, app_proto)) { - ndpi_int_stun_add_connection(ndpi_struct, flow, app_proto, __get_master(flow)); + ndpi_int_stun_add_connection(ndpi_struct, flow, + app_proto, __get_master(flow), category); } } } else if(first_byte <= 15) { @@ -881,8 +893,7 @@ static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, /* TODO: right way? It is a bit scary... do we need to reset something else too? */ reset_detected_protocol(flow); /* We keep the category related to STUN traffic */ - /* STUN often triggers this risk; clear it. TODO: clear other risks? */ - ndpi_unset_risk(flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); + /* TODO: clear some risks? */ /* Give room for DTLS handshake, where we might have retransmissions and fragments */ @@ -900,7 +911,7 @@ static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_DBG(ndpi_struct, "Keeping old subclassification %d\n", old_proto_stack[0]); ndpi_int_stun_add_connection(ndpi_struct, flow, old_proto_stack[0] == NDPI_PROTOCOL_RTP ? NDPI_PROTOCOL_SRTP : old_proto_stack[0], - __get_master(flow)); + __get_master(flow), NDPI_PROTOCOL_CATEGORY_UNSPECIFIED); } /* If this is not a real DTLS packet, we need to restore the old state */ @@ -961,14 +972,20 @@ static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, rtp_rtcp = is_rtp_or_rtcp(ndpi_struct, packet->payload, packet->payload_packet_len, NULL); if(rtp_rtcp == IS_RTP) { - NDPI_LOG_DBG(ndpi_struct, "RTP (dir %d) [%d/%d]\n", packet->packet_direction, flow->stun.rtp_counters[0], flow->stun.rtp_counters[1]); flow->stun.rtp_counters[packet->packet_direction]++; - + /* TODO: store RTP information in 'struct rtp_info' */ NDPI_LOG_INFO(ndpi_struct, "Found RTP over STUN\n"); + if(flow->stun.t_start != 0) { + flow->stun.t_end = ndpi_get_current_time(flow); + } else if(flow->stun.rtp_counters[0] != 0 && flow->stun.rtp_counters[1] != 0) { + flow->stun.t_start = ndpi_get_current_time(flow); + flow->stun.t_end = ndpi_get_current_time(flow); + } + rtp_get_stream_type(packet->payload[1] & 0x7F, &flow->flow_multimedia_types, flow->detected_protocol_stack[0]); if(flow->detected_protocol_stack[0] != NDPI_PROTOCOL_RTP && @@ -981,14 +998,15 @@ static int stun_search_again(struct ndpi_detection_module_struct *ndpi_struct, } else { /* STUN/SUBPROTO -> SRTP/SUBPROTO */ ndpi_int_stun_add_connection(ndpi_struct, flow, - flow->detected_protocol_stack[0], NDPI_PROTOCOL_SRTP); + flow->detected_protocol_stack[0], NDPI_PROTOCOL_SRTP, + NDPI_PROTOCOL_CATEGORY_UNSPECIFIED); } } else { /* STUN -> STUN/RTP, or DTLS -> DTLS/SRTP */ ndpi_int_stun_add_connection(ndpi_struct, flow, __get_master(flow) == NDPI_PROTOCOL_STUN ? NDPI_PROTOCOL_RTP: NDPI_PROTOCOL_SRTP, - __get_master(flow)); + __get_master(flow), NDPI_PROTOCOL_CATEGORY_UNSPECIFIED); } } else if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_RTCP && flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN) { @@ -1132,7 +1150,8 @@ static u_int64_t get_stun_lru_key_raw6(u_int8_t *ip, u_int16_t port_host_order) static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow, u_int16_t app_proto, - u_int16_t master_proto) { + u_int16_t master_proto, + ndpi_protocol_category_t category) { ndpi_confidence_t confidence = NDPI_CONFIDENCE_DPI; u_int16_t new_app_proto; @@ -1189,7 +1208,7 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd if(master_proto == NDPI_PROTOCOL_RTP || master_proto == NDPI_PROTOCOL_RTCP) { if(app_proto == NDPI_PROTOCOL_UNKNOWN) { app_proto = NDPI_PROTOCOL_RTP; - master_proto = NDPI_PROTOCOL_STUN; /* RTP|RTCP ->STUN/RTP */ + master_proto = NDPI_PROTOCOL_STUN; /* RTP|RTCP -> STUN/RTP */ } else { master_proto = NDPI_PROTOCOL_SRTP; } @@ -1199,6 +1218,9 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd if(is_subclassification_real_by_proto(app_proto)) add_to_cache(ndpi_struct, flow, app_proto); + if(category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED) + flow->category = category; + if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN || app_proto != NDPI_PROTOCOL_UNKNOWN) { NDPI_LOG_DBG(ndpi_struct, "Setting %d/%d\n", master_proto, app_proto); @@ -1208,10 +1230,11 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd takes care of setting the category */ if(flow->extra_packets_func) { ndpi_protocol ret = { { master_proto, app_proto }, NDPI_PROTOCOL_UNKNOWN /* unused */, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NULL}; + flow->category = ndpi_get_proto_category(ndpi_struct, ret); } } - + switch_extra_dissection_to_stun(ndpi_struct, flow, 1); } @@ -1239,6 +1262,7 @@ static void ndpi_search_stun(struct ndpi_detection_module_struct *ndpi_struct, s { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int16_t app_proto; + ndpi_protocol_category_t category; int rc; NDPI_LOG_DBG(ndpi_struct, "search stun\n"); @@ -1248,31 +1272,83 @@ static void ndpi_search_stun(struct ndpi_detection_module_struct *ndpi_struct, s if(packet->iph && ((packet->iph->daddr == 0xFFFFFFFF /* 255.255.255.255 */) || ((ntohl(packet->iph->daddr) & 0xF0000000) == 0xE0000000 /* A multicast address */))) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } - rc = is_stun(ndpi_struct, flow, &app_proto); + rc = is_stun(ndpi_struct, flow, &app_proto, &category); if(rc == 1) { - ndpi_int_stun_add_connection(ndpi_struct, flow, app_proto, __get_master(flow)); + ndpi_int_stun_add_connection(ndpi_struct, flow, app_proto, + __get_master(flow), category); return; } /* TODO: can we stop earlier? */ if(flow->packet_counter > 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -/* ************************************************************ */ +/* ************************************************************* */ + +static u_int64_t get_signal_key(struct ndpi_flow_struct *flow) +{ + if(flow->is_ipv6) + return ndpi_quick_hash64((const char *)flow->c_address.v6, 16); + else + return flow->c_address.v4; +} + +/* ************************************************************* */ + +int signal_search_into_cache(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + u_int64_t key; + u_int16_t dummy; + + if(ndpi_struct->signal_cache) { + key = get_signal_key(flow); -void init_stun_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("STUN", ndpi_struct, *id, - NDPI_PROTOCOL_STUN, - ndpi_search_stun, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); + if(ndpi_lru_find_cache(ndpi_struct->signal_cache, key, + &dummy, 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow))) { +#ifdef DEBUG_SIGNAL_LRU + printf("[LRU SIGNAL] Found %lu [%u <-> %u]\n", key, ntohs(flow->c_port), ntohs(flow->s_port)); +#endif + return 1; + } else { +#ifdef DEBUG_SIGNAL_LRU + printf("[LRU SIGNAL] Not found %lu [%u <-> %u]\n", key, ntohs(flow->c_port), ntohs(flow->s_port)); +#endif + } + } + + return 0; +} + +/* ************************************************************* */ + +void signal_add_to_cache(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + u_int64_t key; + + if(ndpi_struct->signal_cache) { + key = get_signal_key(flow); +#ifdef DEBUG_SIGNAL_LRU + printf("[LRU SIGNAL] ADDING %lu [%u <-> %u]\n", key, ntohs(flow->c_port), ntohs(flow->s_port)); +#endif + ndpi_lru_add_to_cache(ndpi_struct->signal_cache, key, 1 /* dummy */, + ndpi_get_current_time(flow)); + } +} + +/* ************************************************************ */ - *id += 1; +void init_stun_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("STUN", ndpi_struct, + ndpi_search_stun, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_STUN); } diff --git a/src/lib/protocols/syncthing.c b/src/lib/protocols/syncthing.c index 93039d9be..5701bb38d 100644 --- a/src/lib/protocols/syncthing.c +++ b/src/lib/protocols/syncthing.c @@ -45,7 +45,7 @@ static void ndpi_search_syncthing(struct ndpi_detection_module_struct *ndpi_stru if (packet->payload_packet_len <= 4) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -56,20 +56,14 @@ static void ndpi_search_syncthing(struct ndpi_detection_module_struct *ndpi_stru return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } -void init_syncthing_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_syncthing_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Syncthing", ndpi_struct, *id, - NDPI_PROTOCOL_SYNCTHING, - ndpi_search_syncthing, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("Syncthing", ndpi_struct, + ndpi_search_syncthing, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_SYNCTHING); } diff --git a/src/lib/protocols/syslog.c b/src/lib/protocols/syslog.c index ec349c519..c0cedcd77 100644 --- a/src/lib/protocols/syslog.c +++ b/src/lib/protocols/syslog.c @@ -2,7 +2,7 @@ * syslog.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -56,7 +56,7 @@ static void ndpi_search_syslog(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload[i++] != '>') { NDPI_LOG_DBG(ndpi_struct, "excluded, there is no > following the number\n"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else { NDPI_LOG_DBG2(ndpi_struct, "a > following the number\n"); @@ -79,7 +79,7 @@ static void ndpi_search_syslog(struct ndpi_detection_module_struct *ndpi_struct, { break; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -91,7 +91,7 @@ static void ndpi_search_syslog(struct ndpi_detection_module_struct *ndpi_struct, if (++i >= packet->payload_packet_len || packet->payload[i] != ' ') { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -100,18 +100,14 @@ static void ndpi_search_syslog(struct ndpi_detection_module_struct *ndpi_struct, ndpi_int_syslog_add_connection(ndpi_struct, flow); return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_syslog_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_syslog_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Syslog", ndpi_struct, *id, - NDPI_PROTOCOL_SYSLOG, - ndpi_search_syslog, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Syslog", ndpi_struct, + ndpi_search_syslog, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_SYSLOG); } diff --git a/src/lib/protocols/tailscale.c b/src/lib/protocols/tailscale.c index 811e8b2ea..4ee7bad65 100644 --- a/src/lib/protocols/tailscale.c +++ b/src/lib/protocols/tailscale.c @@ -45,16 +45,12 @@ static void ndpi_search_tailscale(struct ndpi_detection_module_struct *ndpi_stru return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_tailscale_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Tailscale", ndpi_struct, *id, - NDPI_PROTOCOL_TAILSCALE, - ndpi_search_tailscale, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_tailscale_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Tailscale", ndpi_struct, + ndpi_search_tailscale, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_TAILSCALE); } diff --git a/src/lib/protocols/tcp_udp.c b/src/lib/protocols/tcp_udp.c index a9dd09196..d24f83848 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-22 - ntop.org + * Copyright (C) 2011-25 - 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 60fb466e0..fe7f154fc 100644 --- a/src/lib/protocols/teamspeak.c +++ b/src/lib/protocols/teamspeak.c @@ -81,7 +81,7 @@ static void ndpi_search_teamspeak(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; ts3_license_weblist: @@ -93,15 +93,11 @@ ts3_license_weblist: } } -void init_teamspeak_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_teamspeak_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TeamSpeak", ndpi_struct, *id, - NDPI_PROTOCOL_TEAMSPEAK, - ndpi_search_teamspeak, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TeamSpeak", ndpi_struct, + ndpi_search_teamspeak, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TEAMSPEAK); } diff --git a/src/lib/protocols/teamviewer.c b/src/lib/protocols/teamviewer.c index 4ed7f1269..b70f8a58c 100644 --- a/src/lib/protocols/teamviewer.c +++ b/src/lib/protocols/teamviewer.c @@ -79,19 +79,15 @@ static void ndpi_search_teamview(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_teamviewer_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_teamviewer_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TeamViewer", ndpi_struct, *id, - NDPI_PROTOCOL_TEAMVIEWER, - ndpi_search_teamview, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TeamViewer", ndpi_struct, + ndpi_search_teamview, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TEAMVIEWER); } diff --git a/src/lib/protocols/telegram.c b/src/lib/protocols/telegram.c index affeede36..ed3f29cd7 100644 --- a/src/lib/protocols/telegram.c +++ b/src/lib/protocols/telegram.c @@ -107,18 +107,14 @@ static void ndpi_search_telegram(struct ndpi_detection_module_struct *ndpi_struc } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_telegram_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_telegram_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Telegram", ndpi_struct, *id, - NDPI_PROTOCOL_TELEGRAM, - ndpi_search_telegram, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Telegram", ndpi_struct, + ndpi_search_telegram, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TELEGRAM); } diff --git a/src/lib/protocols/telnet.c b/src/lib/protocols/telnet.c index 42b7624b5..dd451b173 100644 --- a/src/lib/protocols/telnet.c +++ b/src/lib/protocols/telnet.c @@ -1,7 +1,7 @@ /* * telnet.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - ntop.org * Copyright (C) 2009-11 - ipoque GmbH * * This file is part of nDPI, an open source deep packet inspection @@ -209,20 +209,17 @@ static void ndpi_search_telnet_tcp(struct ndpi_detection_module_struct *ndpi_str #ifdef TELNET_DEBUG printf("==> [%s:%d] %s()\n", __FILE__, __LINE__, __FUNCTION__); #endif - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; } -void init_telnet_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_telnet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Telnet", ndpi_struct, *id, - NDPI_PROTOCOL_TELNET, - ndpi_search_telnet_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Telnet", ndpi_struct, + ndpi_search_telnet_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TELNET); } diff --git a/src/lib/protocols/tencent_games.c b/src/lib/protocols/tencent_games.c index 8c23d6a65..6300129b5 100644 --- a/src/lib/protocols/tencent_games.c +++ b/src/lib/protocols/tencent_games.c @@ -82,16 +82,13 @@ static void ndpi_search_tencent_games(struct ndpi_detection_module_struct *ndpi_ } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_tencent_games_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_tencent_games_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TencentGames", ndpi_struct, *id, - NDPI_PROTOCOL_TENCENTGAMES, - ndpi_search_tencent_games, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("TencentGames", ndpi_struct, + ndpi_search_tencent_games, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TENCENTGAMES); } diff --git a/src/lib/protocols/teredo.c b/src/lib/protocols/teredo.c index 9ecdff7d2..f0cae2759 100644 --- a/src/lib/protocols/teredo.c +++ b/src/lib/protocols/teredo.c @@ -39,21 +39,16 @@ static void ndpi_search_teredo(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_INFO(ndpi_struct,"found teredo\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_TEREDO, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_teredo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_teredo_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TEREDO", ndpi_struct, *id, - NDPI_PROTOCOL_TEREDO, - ndpi_search_teredo, - /* Teredo is inherently IPV4 only */ - NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TEREDO", ndpi_struct, + ndpi_search_teredo, + NDPI_SELECTION_BITMASK_PROTOCOL_UDP_WITH_PAYLOAD, /* Teredo is inherently IPV4 only */ + 1, NDPI_PROTOCOL_TEREDO); } diff --git a/src/lib/protocols/teso.c b/src/lib/protocols/teso.c index b2888bf4f..708c882e4 100644 --- a/src/lib/protocols/teso.c +++ b/src/lib/protocols/teso.c @@ -49,7 +49,7 @@ static void ndpi_search_teso(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 600 || ntohl(get_u_int32_t(packet->payload, 0)) != (u_int32_t)(packet->payload_packet_len-4)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -75,17 +75,13 @@ static void ndpi_search_teso(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_teso_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_teso_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TES_Online", ndpi_struct, *id, - NDPI_PROTOCOL_TESO, - ndpi_search_teso, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TES_Online", ndpi_struct, + ndpi_search_teso, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TESO); } diff --git a/src/lib/protocols/tftp.c b/src/lib/protocols/tftp.c index f32a7851c..b0686b8d4 100644 --- a/src/lib/protocols/tftp.c +++ b/src/lib/protocols/tftp.c @@ -2,7 +2,7 @@ * tftp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -142,7 +142,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 4 /* min. header size */ || get_u_int8_t(packet->payload, 0) != 0x00) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -156,7 +156,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload[packet->payload_packet_len - 1] != 0x00 /* last pdu element is a nul terminated string */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -170,19 +170,19 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, /* Exclude the flow as TFPT if there was no filename and mode in the first two strings. */ if (filename_len == 0 || ndpi_is_printable_buffer((uint8_t *)filename_start, filename_len) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (tftp_dissect_mode(packet, &offset) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (tftp_dissect_options(packet, &offset) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -201,7 +201,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, /* Data (DATA) */ if (packet->payload_packet_len <= 4 /* min DATA header size */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* First 2 bytes were opcode so next 16 bits are the block number. @@ -220,7 +220,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len != 4 /* ACK has a fixed packet size */) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* First 2 bytes were opcode so next 16 bits are the block number. @@ -241,7 +241,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, packet->payload[packet->payload_packet_len - 1] != 0x00 || packet->payload[2] != 0x00 || packet->payload[3] > 0x07) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } break; @@ -254,7 +254,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, if (tftp_dissect_options(packet, &offset) != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -265,7 +265,7 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, break; default: - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -281,15 +281,11 @@ static void ndpi_search_tftp(struct ndpi_detection_module_struct *ndpi_struct, } -void init_tftp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_tftp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TFTP", ndpi_struct, *id, - NDPI_PROTOCOL_TFTP, - ndpi_search_tftp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TFTP", ndpi_struct, + ndpi_search_tftp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_TFTP); } diff --git a/src/lib/protocols/threema.c b/src/lib/protocols/threema.c index 58449b163..b9e992405 100644 --- a/src/lib/protocols/threema.c +++ b/src/lib/protocols/threema.c @@ -43,7 +43,7 @@ static void ndpi_search_threema(struct ndpi_detection_module_struct *ndpi_struct NDPI_LOG_DBG(ndpi_struct, "search Threema\n"); if (ntohs(packet->tcp->source) != 5222 && ntohs(packet->tcp->dest) != 5222) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -52,19 +52,19 @@ static void ndpi_search_threema(struct ndpi_detection_module_struct *ndpi_struct case 1: if (packet->payload_packet_len != 48) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; case 2: if (packet->payload_packet_len != 80) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; case 3: if (packet->payload_packet_len != 191) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } return; case 4: @@ -75,29 +75,24 @@ static void ndpi_search_threema(struct ndpi_detection_module_struct *ndpi_struct if (packet->payload_packet_len < 2) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } uint16_t len = le16toh(get_u_int16_t(packet->payload, 0)); if (len + 2 != packet->payload_packet_len) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } ndpi_int_threema_add_connection(ndpi_struct, flow); } -void init_threema_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_threema_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Threema", ndpi_struct, *id, - NDPI_PROTOCOL_THREEMA, - ndpi_search_threema, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - *id += 1; + register_dissector("Threema", ndpi_struct, + ndpi_search_threema, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_THREEMA); } diff --git a/src/lib/protocols/thrift.c b/src/lib/protocols/thrift.c index c6afe0570..3c94f073c 100644 --- a/src/lib/protocols/thrift.c +++ b/src/lib/protocols/thrift.c @@ -144,22 +144,22 @@ static void ndpi_dissect_strict_hdr(struct ndpi_detection_module_struct *ndpi_st const size_t method_length = ntohl(strict_hdr->method_length); if (packet->tcp == NULL) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (packet->payload_packet_len < sizeof(*strict_hdr) + method_length) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (thrift_validate_version(strict_hdr->version) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (thrift_validate_type(strict_hdr->message_type) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -176,22 +176,22 @@ static void ndpi_dissect_compact_hdr(struct ndpi_detection_module_struct *ndpi_s struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; if (packet->udp == NULL) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (packet->payload_packet_len < sizeof(*compact_hdr) + compact_hdr->method_length) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (thrift_validate_version(compact_hdr->version) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (thrift_validate_type(compact_hdr->message_type) == 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -235,7 +235,7 @@ static void ndpi_search_thrift_tcp_udp(struct ndpi_detection_module_struct *ndpi /* Strict Binary Protocol */ if (packet->payload_packet_len < sizeof(*thrift_data.strict_hdr)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -247,21 +247,18 @@ static void ndpi_search_thrift_tcp_udp(struct ndpi_detection_module_struct *ndpi return; } else { /* Probably not Apache Thrift. */ - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_apache_thrift_dissector(struct ndpi_detection_module_struct *ndpi_struct, uint32_t *id) +void init_apache_thrift_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Thrift", ndpi_struct, *id, - NDPI_PROTOCOL_APACHE_THRIFT, - ndpi_search_thrift_tcp_udp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("Thrift", ndpi_struct, + ndpi_search_thrift_tcp_udp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_APACHE_THRIFT); } diff --git a/src/lib/protocols/tinc.c b/src/lib/protocols/tinc.c index 0e12d6270..309aa2203 100644 --- a/src/lib/protocols/tinc.c +++ b/src/lib/protocols/tinc.c @@ -65,7 +65,7 @@ static void ndpi_check_tinc(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } else if(packet->tcp != NULL) { @@ -130,7 +130,7 @@ static void ndpi_check_tinc(struct ndpi_detection_module_struct *ndpi_struct, st } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } static void ndpi_search_tinc(struct ndpi_detection_module_struct* ndpi_struct, struct ndpi_flow_struct* flow) { @@ -141,15 +141,11 @@ static void ndpi_search_tinc(struct ndpi_detection_module_struct* ndpi_struct, s } } -void init_tinc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_tinc_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TINC", ndpi_struct, *id, - NDPI_PROTOCOL_TINC, - ndpi_search_tinc, - NDPI_SELECTION_BITMASK_PROTOCOL_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, /* TODO: IPv6? */ - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TINC", ndpi_struct, + ndpi_search_tinc, + NDPI_SELECTION_BITMASK_PROTOCOL_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, /* TODO: IPv6? */ + 1, NDPI_PROTOCOL_TINC); } diff --git a/src/lib/protocols/tivoconnect.c b/src/lib/protocols/tivoconnect.c index 4bfd041e9..e9b26e7cc 100644 --- a/src/lib/protocols/tivoconnect.c +++ b/src/lib/protocols/tivoconnect.c @@ -126,23 +126,17 @@ static void ndpi_search_tivoconnect(struct ndpi_detection_module_struct *ndpi_st { ndpi_int_tivoconnect_add_connection(ndpi_struct, flow); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } dissect_tivoconnect_data(ndpi_struct, flow); } -void init_tivoconnect_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_tivoconnect_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TiVoConnect", ndpi_struct, *id, - NDPI_PROTOCOL_TIVOCONNECT, - ndpi_search_tivoconnect, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("TiVoConnect", ndpi_struct, + ndpi_search_tivoconnect, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TIVOCONNECT); } diff --git a/src/lib/protocols/tls.c b/src/lib/protocols/tls.c index 88c6fddde..e8444a731 100644 --- a/src/lib/protocols/tls.c +++ b/src/lib/protocols/tls.c @@ -29,7 +29,7 @@ #include "ndpi_encryption.h" #include "ndpi_private.h" -//#define JA4R_DECIMAL 1 +//#define JA4R_DECIMAL 1 static void ndpi_search_tls_wrapper(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow); @@ -107,6 +107,19 @@ static void ndpi_int_tls_add_connection(struct ndpi_detection_module_struct *ndp /* **************************************** */ +static bool str_contains_digit(char *str) { + u_int i = 0; + + for(i=0; (str[i] != '.') && (str[i] != '\0'); i++) { + if(isdigit(str[i])) + return(true); + } + + return(false); +} + +/* **************************************** */ + static u_int32_t ndpi_tls_refine_master_protocol(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; @@ -152,6 +165,50 @@ static u_int32_t __get_master(struct ndpi_detection_module_struct *ndpi_struct, /* **************************************** */ +/* TODO: rename */ +static int keep_extra_dissection_tcp(struct ndpi_detection_module_struct *ndpi_struct, + struct ndpi_flow_struct *flow) +{ + /* Common path: found handshake on both directions */ + if(flow->tls_quic.certificate_processed == 1 && flow->protos.tls_quic.client_hello_processed) + return 0; + /* Application Data on both directions: handshake already ended (did we miss it?) */ + if(flow->l4.tcp.tls.app_data_seen[0] == 1 && flow->l4.tcp.tls.app_data_seen[1] == 1) + return 0; + /* Handshake on one direction and Application Data on the other */ + if((flow->protos.tls_quic.client_hello_processed && flow->l4.tcp.tls.app_data_seen[!flow->protos.tls_quic.ch_direction] == 1) || + (flow->protos.tls_quic.server_hello_processed && flow->l4.tcp.tls.app_data_seen[flow->protos.tls_quic.ch_direction] == 1)) + return 0; + + /* Are we interested only in the (sub)-classification? */ + + if(/* Subclassification */ + flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN && + /* No metadata from SH or certificate */ + !ndpi_struct->cfg.tls_alpn_negotiated_enabled && + !ndpi_struct->cfg.tls_cipher_enabled && + !ndpi_struct->cfg.tls_sha1_fingerprint_enabled && + !ndpi_struct->cfg.tls_cert_server_names_enabled && + !ndpi_struct->cfg.tls_cert_validity_enabled && + !ndpi_struct->cfg.tls_cert_issuer_enabled && + !ndpi_struct->cfg.tls_cert_subject_enabled && + !ndpi_struct->cfg.tls_broswer_enabled && + !ndpi_struct->cfg.tls_ja3s_fingerprint_enabled && + /* No flow risks from SH or certificate: we should have disabled all + metadata needed for flow risks, so we should not need to explicitly + check them */ + /* Ookla aggressiveness has no impact here because it is evaluated only + without sub-classification */ + /* TLS heuristics */ + (ndpi_struct->cfg.tls_heuristics == 0 || is_flow_addr_informative(flow))) + return 0; + + return 1; +} + + +/* **************************************** */ + /* Heuristic to detect proxied/obfuscated TLS flows, based on https://www.usenix.org/conference/usenixsecurity24/presentation/xue-fingerprinting. Main differences between the paper and our implementation: @@ -381,19 +438,6 @@ static int tls_obfuscated_heur_search(struct ndpi_detection_module_struct* ndpi_ if(check_set(ndpi_struct, set)) { /* Heuristic match */ - /* Export the matching set as metadata */ - flow->tls_quic.obfuscated_heur_matching_set = ndpi_calloc(1, sizeof(struct ndpi_tls_obfuscated_heuristic_matching_set)); - if(flow->tls_quic.obfuscated_heur_matching_set) { - flow->tls_quic.obfuscated_heur_matching_set->bytes[0] = set->bytes[0]; - flow->tls_quic.obfuscated_heur_matching_set->bytes[1] = set->bytes[1]; - flow->tls_quic.obfuscated_heur_matching_set->bytes[2] = set->bytes[2]; - flow->tls_quic.obfuscated_heur_matching_set->bytes[3] = set->bytes[3]; - flow->tls_quic.obfuscated_heur_matching_set->pkts[0] = set->pkts[0]; - flow->tls_quic.obfuscated_heur_matching_set->pkts[1] = set->pkts[1]; - flow->tls_quic.obfuscated_heur_matching_set->pkts[2] = set->pkts[2]; - flow->tls_quic.obfuscated_heur_matching_set->pkts[3] = set->pkts[3]; - } - return 2; /* Found */ } else { /* Close this set and open a new one... */ @@ -448,8 +492,8 @@ static int tls_obfuscated_heur_search_again(struct ndpi_detection_module_struct* ndpi_protocol ret = { { __get_master(ndpi_struct, flow), NDPI_PROTOCOL_UNKNOWN }, NDPI_PROTOCOL_UNKNOWN /* unused */, NDPI_PROTOCOL_CATEGORY_UNSPECIFIED, NULL}; flow->category = ndpi_get_proto_category(ndpi_struct, ret); } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); /* Not necessary in extra-dissection data path, - but we need it with the plain heuristic */ + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); /* Not necessary in extra-dissection data path, + but we need it with the plain heuristic */ return 0; /* Stop */ } @@ -677,7 +721,7 @@ static void checkTLSSubprotocol(struct ndpi_detection_module_struct *ndpi_struct ndpi_set_detected_protocol(ndpi_struct, flow, cached_proto, __get_master(ndpi_struct, flow), NDPI_CONFIDENCE_DPI_CACHE); flow->category = ndpi_get_proto_category(ndpi_struct, ret); ndpi_check_subprotocol_risk(ndpi_struct, flow, cached_proto); - ndpi_unset_risk(flow, NDPI_NUMERIC_IP_HOST); + ndpi_unset_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST); } } } @@ -767,13 +811,17 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct printf("[TLS] %s() IssuerDN [%s]\n", __FUNCTION__, rdnSeqBuf); #endif - if(rdn_len && (flow->protos.tls_quic.issuerDN == NULL)) { + if(rdn_len && (flow->protos.tls_quic.issuerDN == NULL) && + ndpi_struct->cfg.tls_cert_issuer_enabled) { flow->protos.tls_quic.issuerDN = ndpi_strdup(rdnSeqBuf); if(ndpi_normalize_printable_string(rdnSeqBuf, rdn_len) == 0) { - char str[64]; - - snprintf(str, sizeof(str), "Invalid issuerDN %s", flow->protos.tls_quic.issuerDN); - ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_INVALID_CHARACTERS)) { + char str[64]; + snprintf(str, sizeof(str), "Invalid issuerDN %s", flow->protos.tls_quic.issuerDN); + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, NULL); + } } } @@ -781,7 +829,8 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct } if(i + 3 < certificate_len && - (offset+packet->payload[i+3]) < packet->payload_packet_len) { + (offset+packet->payload[i+3]) < packet->payload_packet_len && + ndpi_struct->cfg.tls_cert_validity_enabled) { char utcDate[32]; u_int8_t len = packet->payload[i+3]; @@ -846,41 +895,53 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct if(flow->protos.tls_quic.notBefore > TLS_LIMIT_DATE) if((flow->protos.tls_quic.notAfter-flow->protos.tls_quic.notBefore) > TLS_THRESHOLD) { - char str[64]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_CERT_VALIDITY_TOO_LONG)) { + char str[64]; - snprintf(str, sizeof(str), "TLS Cert lasts %u days", - (flow->protos.tls_quic.notAfter-flow->protos.tls_quic.notBefore) / 86400); + snprintf(str, sizeof(str), "TLS Cert lasts %u days", + (flow->protos.tls_quic.notAfter-flow->protos.tls_quic.notBefore) / 86400); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERT_VALIDITY_TOO_LONG, str); /* Certificate validity longer than 13 months */ + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERT_VALIDITY_TOO_LONG, str); /* Certificate validity longer than 13 months */ + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERT_VALIDITY_TOO_LONG, NULL); + } } if((time_sec < flow->protos.tls_quic.notBefore) || (time_sec > flow->protos.tls_quic.notAfter)) { - char str[96], b[32], e[32]; - struct tm result; - time_t theTime; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_CERTIFICATE_EXPIRED)) { + char str[96], b[32], e[32]; + struct tm result; + time_t theTime; - theTime = flow->protos.tls_quic.notBefore; - strftime(b, sizeof(b), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); + theTime = flow->protos.tls_quic.notBefore; + strftime(b, sizeof(b), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); - theTime = flow->protos.tls_quic.notAfter; - strftime(e, sizeof(e), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); + theTime = flow->protos.tls_quic.notAfter; + strftime(e, sizeof(e), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); - snprintf(str, sizeof(str), "%s - %s", b, e); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_EXPIRED, str); /* Certificate expired */ + snprintf(str, sizeof(str), "%s - %s", b, e); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_EXPIRED, str); /* Certificate expired */ + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_EXPIRED, NULL); + } } else if((time_sec > flow->protos.tls_quic.notBefore) && (time_sec > (flow->protos.tls_quic.notAfter - (ndpi_struct->cfg.tls_certificate_expire_in_x_days * 86400)))) { - char str[96], b[32], e[32]; - struct tm result; - time_t theTime; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE)) { + char str[96], b[32], e[32]; + struct tm result; + time_t theTime; - theTime = flow->protos.tls_quic.notBefore; - strftime(b, sizeof(b), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); + theTime = flow->protos.tls_quic.notBefore; + strftime(b, sizeof(b), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); - theTime = flow->protos.tls_quic.notAfter; - strftime(e, sizeof(e), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); + theTime = flow->protos.tls_quic.notAfter; + strftime(e, sizeof(e), "%d/%b/%Y %H:%M:%S", ndpi_gmtime_r(&theTime, &result)); - snprintf(str, sizeof(str), "%s - %s", b, e); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE, str); /* Certificate almost expired */ + snprintf(str, sizeof(str), "%s - %s", b, e); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE, str); /* Certificate almost expired */ + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE, NULL); + } } } } @@ -992,29 +1053,32 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct } } - if(flow->protos.tls_quic.server_names == NULL) - flow->protos.tls_quic.server_names = ndpi_strdup(dNSName), - flow->protos.tls_quic.server_names_len = strlen(dNSName); - else if((u_int16_t)(flow->protos.tls_quic.server_names_len + dNSName_len + 1) > flow->protos.tls_quic.server_names_len) { - u_int16_t newstr_len = flow->protos.tls_quic.server_names_len + dNSName_len + 1; - char *newstr = (char*)ndpi_realloc(flow->protos.tls_quic.server_names, - flow->protos.tls_quic.server_names_len+1, newstr_len+1); - - if(newstr) { - flow->protos.tls_quic.server_names = newstr; - flow->protos.tls_quic.server_names[flow->protos.tls_quic.server_names_len] = ','; - strncpy(&flow->protos.tls_quic.server_names[flow->protos.tls_quic.server_names_len+1], - dNSName, dNSName_len+1); - flow->protos.tls_quic.server_names[newstr_len] = '\0'; - flow->protos.tls_quic.server_names_len = newstr_len; - } + if(ndpi_struct->cfg.tls_cert_server_names_enabled) { + if(flow->protos.tls_quic.server_names == NULL) { + flow->protos.tls_quic.server_names = ndpi_strdup(dNSName); + flow->protos.tls_quic.server_names_len = strlen(dNSName); + } else if((u_int16_t)(flow->protos.tls_quic.server_names_len + dNSName_len + 1) > flow->protos.tls_quic.server_names_len) { + u_int16_t newstr_len = flow->protos.tls_quic.server_names_len + dNSName_len + 1; + char *newstr = (char*)ndpi_realloc(flow->protos.tls_quic.server_names, + flow->protos.tls_quic.server_names_len+1, newstr_len+1); + + if(newstr) { + flow->protos.tls_quic.server_names = newstr; + flow->protos.tls_quic.server_names[flow->protos.tls_quic.server_names_len] = ','; + strncpy(&flow->protos.tls_quic.server_names[flow->protos.tls_quic.server_names_len+1], + dNSName, dNSName_len+1); + flow->protos.tls_quic.server_names[newstr_len] = '\0'; + flow->protos.tls_quic.server_names_len = newstr_len; + } + } } if(ndpi_struct->cfg.tls_subclassification_enabled && - !flow->protos.tls_quic.subprotocol_detected) { + !flow->protos.tls_quic.subprotocol_detected && + !flow->tls_quic.from_rdp) { /* No (other) sub-classification; we will have TLS.RDP anyway */ if(ndpi_match_hostname_protocol(ndpi_struct, flow, __get_master(ndpi_struct, flow), dNSName, dNSName_len)) { flow->protos.tls_quic.subprotocol_detected = 1; - ndpi_unset_risk(flow, NDPI_NUMERIC_IP_HOST); + ndpi_unset_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST); } } @@ -1035,10 +1099,14 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct } /* while */ if(!matched_name) { - char str[128]; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_CERTIFICATE_MISMATCH)) { + char str[128]; - snprintf(str, sizeof(str), "%s vs %s", flow->host_server_name, flow->protos.tls_quic.server_names); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_MISMATCH, str); /* Certificate mismatch */ + snprintf(str, sizeof(str), "%s vs %s", flow->host_server_name, flow->protos.tls_quic.server_names); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_MISMATCH, str); /* Certificate mismatch */ + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_CERTIFICATE_MISMATCH, NULL); /* Certificate mismatch */ + } } } } @@ -1047,7 +1115,8 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct } /* for */ if(rdn_len && (flow->protos.tls_quic.subjectDN == NULL)) { - flow->protos.tls_quic.subjectDN = ndpi_strdup(rdnSeqBuf); + if(ndpi_struct->cfg.tls_cert_subject_enabled) + flow->protos.tls_quic.subjectDN = ndpi_strdup(rdnSeqBuf); if(ndpi_struct->cfg.tls_subclassification_enabled && flow->detected_protocol_stack[1] == NDPI_PROTOCOL_UNKNOWN) { @@ -1064,7 +1133,7 @@ void processCertificateElements(struct ndpi_detection_module_struct *ndpi_struct ndpi_set_detected_protocol(ndpi_struct, flow, proto_id, __get_master(ndpi_struct, flow), NDPI_CONFIDENCE_DPI); flow->category = ndpi_get_proto_category(ndpi_struct, ret); ndpi_check_subprotocol_risk(ndpi_struct, flow, proto_id); - ndpi_unset_risk(flow, NDPI_NUMERIC_IP_HOST); + ndpi_unset_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST); if(ndpi_struct->tls_cert_cache) { u_int64_t key = make_tls_cert_key(packet, 0 /* from the server */); @@ -1307,11 +1376,14 @@ static void ndpi_looks_like_tls(struct ndpi_detection_module_struct *ndpi_struct /* **************************************** */ int ndpi_search_tls_tcp(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) { + struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int8_t something_went_wrong = 0; message_t *message; + if(packet->tcp == NULL) + return 0; /* Error -> stop (this doesn't seem to be TCP) */ + #ifdef DEBUG_TLS_MEMORY printf("[TLS Mem] ndpi_search_tls_tcp() Processing new packet [payload_packet_len: %u][Dir: %u]\n", packet->payload_packet_len, packet->packet_direction); @@ -1506,17 +1578,15 @@ int ndpi_search_tls_tcp(struct ndpi_detection_module_struct *ndpi_struct, #endif } +#ifdef DEBUG_TLS_MEMORY + printf("[TLS] Eval if keep going [%p]\n", flow->extra_packets_func); +#endif + if(something_went_wrong || ((ndpi_struct->num_tls_blocks_to_follow > 0) && (flow->l4.tcp.tls.num_tls_blocks == ndpi_struct->num_tls_blocks_to_follow)) || ((ndpi_struct->num_tls_blocks_to_follow == 0) - && (/* Common path: found handshake on both directions */ - (flow->tls_quic.certificate_processed == 1 && flow->protos.tls_quic.client_hello_processed) || - /* No handshake at all but Application Data on both directions */ - (flow->l4.tcp.tls.app_data_seen[0] == 1 && flow->l4.tcp.tls.app_data_seen[1] == 1) || - /* Handshake on one direction and Application Data on the other */ - (flow->protos.tls_quic.client_hello_processed && flow->l4.tcp.tls.app_data_seen[!flow->protos.tls_quic.ch_direction] == 1) || - (flow->protos.tls_quic.server_hello_processed && flow->l4.tcp.tls.app_data_seen[flow->protos.tls_quic.ch_direction] == 1))) + && (!keep_extra_dissection_tcp(ndpi_struct, flow))) ) { #ifdef DEBUG_TLS_BLOCKS printf("*** [TLS Block] No more blocks\n"); @@ -1536,7 +1606,7 @@ int ndpi_search_tls_tcp(struct ndpi_detection_module_struct *ndpi_struct, suited than NDPI_CONFIDENCE_DPI_CACHE */ ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_OOKLA, NDPI_PROTOCOL_TLS, NDPI_CONFIDENCE_DPI_AGGRESSIVE); /* TLS over port 8080 usually triggers that risk; clear it */ - ndpi_unset_risk(flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); + ndpi_unset_risk(ndpi_struct, flow, NDPI_KNOWN_PROTOCOL_ON_NON_STANDARD_PORT); flow->extra_packets_func = NULL; return(0); /* That's all */ /* Loook for TLS-in-TLS */ @@ -1590,7 +1660,8 @@ int is_dtls(const u_int8_t *buf, u_int32_t buf_len, u_int32_t *block_len) { /* **************************************** */ -static int ndpi_search_tls_udp(struct ndpi_detection_module_struct *ndpi_struct, +/* NOTE: this function supports both TCP and UDP */ +static int ndpi_search_dtls(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; u_int32_t handshake_len, handshake_frag_off, handshake_frag_len; @@ -1759,7 +1830,7 @@ static void tlsInitExtraPacketProcessing(struct ndpi_detection_module_struct *nd /* At most 12 packets should almost always be enough to find the server certificate if it's there. Exception: DTLS traffic with fragments, retransmissions and STUN packets */ flow->max_extra_packets_to_check = ((packet->udp != NULL) ? 20 : 12) + (ndpi_struct->num_tls_blocks_to_follow*4); - flow->extra_packets_func = (packet->udp != NULL) ? ndpi_search_tls_udp : ndpi_search_tls_tcp; + flow->extra_packets_func = (packet->udp != NULL) ? ndpi_search_dtls : ndpi_search_tls_tcp; } /* **************************************** */ @@ -1849,21 +1920,25 @@ static void tlsCheckUncommonALPN(struct ndpi_detection_module_struct *ndpi_struc alpn_len = comma_or_nul - alpn_start; if(!is_a_common_alpn(ndpi_struct, alpn_start, alpn_len)) { - char str[64]; - size_t str_len; + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_UNCOMMON_ALPN)) { + char str[64]; + size_t str_len; #ifdef DEBUG_TLS - printf("TLS uncommon ALPN found: %.*s\n", (int)alpn_len, alpn_start); + printf("TLS uncommon ALPN found: %.*s\n", (int)alpn_len, alpn_start); #endif - str[0] = '\0'; - str_len = ndpi_min(alpn_len, sizeof(str)); - if(str_len > 0) { - strncpy(str, alpn_start, str_len); - str[str_len - 1] = '\0'; - } + str[0] = '\0'; + str_len = ndpi_min(alpn_len, sizeof(str)); + if(str_len > 0) { + strncpy(str, alpn_start, str_len); + str[str_len - 1] = '\0'; + } - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_UNCOMMON_ALPN, str); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_UNCOMMON_ALPN, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_UNCOMMON_ALPN, NULL); + } break; } @@ -1887,12 +1962,12 @@ static void ndpi_int_tls_add_connection(struct ndpi_detection_module_struct *ndp NDPI_PROTOCOL_RDP, NDPI_PROTOCOL_TLS, NDPI_CONFIDENCE_DPI); return; } - + if((flow->detected_protocol_stack[0] != NDPI_PROTOCOL_UNKNOWN) || (flow->detected_protocol_stack[1] != NDPI_PROTOCOL_UNKNOWN)) { if(!flow->extra_packets_func) tlsInitExtraPacketProcessing(ndpi_struct, flow); - + return; } @@ -1923,7 +1998,7 @@ static void checkExtensions(struct ndpi_detection_module_struct *ndpi_struct, /* see: https://www.wireshark.org/docs/wsar_html/packet-tls-utils_8h_source.html */ static u_int16_t const allowed_non_iana_extensions[] = { - 65486 /* ESNI */, 13172 /* NPN - Next Proto Neg */, 17513 /* ALPS */, + /* 65486 ESNI is suspicious nowadays */ 13172 /* NPN - Next Proto Neg */, 30032 /* Channel ID */, 65445 /* QUIC transport params */, /* GREASE extensions */ 2570, 6682, 10794, 14906, 19018, 23130, 27242, @@ -1933,14 +2008,15 @@ static void checkExtensions(struct ndpi_detection_module_struct *ndpi_struct, 1035, 10794, 16696, 23130, 31354, 35466, 51914, /* Ciphers */ 102, 129, 52243, 52244, 57363, 65279, 65413, - /* ECH */ - 65037 + /* ALPS */ + 17513, 17613 }; size_t const allowed_non_iana_extensions_size = sizeof(allowed_non_iana_extensions) / sizeof(allowed_non_iana_extensions[0]); /* see: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml */ - if(extension_id > 59 && extension_id != 65281) + /* 65281 renegotiation_info, 65037 ECH */ + if(extension_id > 59 && extension_id != 65281 && extension_id != 65037) { u_int8_t extension_found = 0; size_t i; @@ -1953,15 +2029,20 @@ static void checkExtensions(struct ndpi_detection_module_struct *ndpi_struct, } if(extension_found == 0) { - char str[64]; - - snprintf(str, sizeof(str), "Extn id %u", extension_id); #ifdef DEBUG_TLS - printf("[TLS] suspicious extension id: %u\n", extension_id); + printf("[TLS] suspicious extension id: %u\n", extension_id); #endif + + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_SUSPICIOUS_EXTENSION)) { + char str[64]; + + snprintf(str, sizeof(str), "Extn id %u", extension_id); ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_EXTENSION, str); - return; - } + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_EXTENSION, NULL); + } + return; + } } /* Check for DTLS-only extensions. */ @@ -1969,14 +2050,18 @@ static void checkExtensions(struct ndpi_detection_module_struct *ndpi_struct, { if(extension_id == 53 || extension_id == 54) { - char str[64]; - - snprintf(str, sizeof(str), "Extn id %u", extension_id); - #ifdef DEBUG_TLS - printf("[TLS] suspicious DTLS-only extension id: %u\n", extension_id); + printf("[TLS] suspicious DTLS-only extension id: %u\n", extension_id); #endif - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_EXTENSION, str); + + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_SUSPICIOUS_EXTENSION)) { + char str[64]; + + snprintf(str, sizeof(str), "Extn id %u", extension_id); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_EXTENSION, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_EXTENSION, NULL); + } return; } } @@ -2297,15 +2382,22 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, return(0); /* Not found */ ja.server.num_ciphers = 1, ja.server.cipher[0] = ntohs(*((u_int16_t*)&packet->payload[offset])); - if((flow->protos.tls_quic.server_unsafe_cipher = ndpi_is_safe_ssl_cipher(ja.server.cipher[0])) != NDPI_CIPHER_SAFE) { - char str[64]; - char unknown_cipher[8]; - snprintf(str, sizeof(str), "Cipher %s", ndpi_cipher2str(ja.server.cipher[0], unknown_cipher)); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_WEAK_CIPHER, str); - } + if(ndpi_struct->cfg.tls_cipher_enabled) { + if((flow->protos.tls_quic.server_unsafe_cipher = ndpi_is_safe_ssl_cipher(ja.server.cipher[0])) != NDPI_CIPHER_SAFE) { + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_WEAK_CIPHER)) { + char str[64]; + char unknown_cipher[8]; + + snprintf(str, sizeof(str), "Cipher %s", ndpi_cipher2str(ja.server.cipher[0], unknown_cipher)); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_WEAK_CIPHER, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_WEAK_CIPHER, NULL); + } + } - flow->protos.tls_quic.server_cipher = ja.server.cipher[0]; + flow->protos.tls_quic.server_cipher = ja.server.cipher[0]; + } #ifdef DEBUG_TLS printf("TLS [server][session_id_len: %u][cipher: %04X]\n", session_id_len, ja.server.cipher[0]); @@ -2409,7 +2501,8 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, if(ndpi_normalize_printable_string(alpn_str, alpn_str_len) == 0) ndpi_set_risk(ndpi_struct, flow, NDPI_INVALID_CHARACTERS, alpn_str); - if(flow->protos.tls_quic.negotiated_alpn == NULL) + if(flow->protos.tls_quic.negotiated_alpn == NULL && + ndpi_struct->cfg.tls_alpn_negotiated_enabled) flow->protos.tls_quic.negotiated_alpn = ndpi_strdup(alpn_str); /* Check ALPN only if not already checked (client-side) */ @@ -2524,13 +2617,17 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, flow->protos.tls_quic.ssl_version = ja.client.tls_handshake_version = tls_version; if(flow->protos.tls_quic.ssl_version < 0x0303) /* < TLSv1.2 */ { - char str[32], buf[32]; - u_int8_t unknown_tls_version; - - snprintf(str, sizeof(str), "%s", ndpi_ssl_version2str(buf, sizeof(buf), - flow->protos.tls_quic.ssl_version, - &unknown_tls_version)); - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_OBSOLETE_VERSION, str); + if(is_flowrisk_info_enabled(ndpi_struct, NDPI_TLS_OBSOLETE_VERSION)) { + char str[32], buf[32]; + u_int8_t unknown_tls_version; + + snprintf(str, sizeof(str), "%s", ndpi_ssl_version2str(buf, sizeof(buf), + flow->protos.tls_quic.ssl_version, + &unknown_tls_version)); + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_OBSOLETE_VERSION, str); + } else { + ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_OBSOLETE_VERSION, NULL); + } } if((session_id_len+base_offset+3) > packet->payload_packet_len) @@ -2626,27 +2723,29 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, i += 2; } /* for */ - /* NOTE: - we do not check for duplicates as with signatures because - this is time consuming and we want to avoid overhead whem possible - */ - if(this_is_not_safari) - flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0; - else if((safari_ciphers == 12) || (this_is_not_safari && looks_like_safari_on_big_sur)) - flow->protos.tls_quic.browser_heuristics.is_safari_tls = 1; + if(ndpi_struct->cfg.tls_broswer_enabled) { + /* NOTE: + we do not check for duplicates as with signatures because + this is time consuming and we want to avoid overhead whem possible + */ + if(this_is_not_safari) + flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0; + else if((safari_ciphers == 12) || (this_is_not_safari && looks_like_safari_on_big_sur)) + flow->protos.tls_quic.browser_heuristics.is_safari_tls = 1; - if(chrome_ciphers == 13) - flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 1; + if(chrome_ciphers == 13) + flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 1; - /* Note that both Safari and Chrome can overlap */ + /* Note that both Safari and Chrome can overlap */ #ifdef DEBUG_HEURISTIC - printf("[CIPHERS] [is_chrome_tls: %u (%u)][is_safari_tls: %u (%u)][this_is_not_safari: %u]\n", - flow->protos.tls_quic.browser_heuristics.is_chrome_tls, - chrome_ciphers, - flow->protos.tls_quic.browser_heuristics.is_safari_tls, - safari_ciphers, - this_is_not_safari); + printf("[CIPHERS] [is_chrome_tls: %u (%u)][is_safari_tls: %u (%u)][this_is_not_safari: %u]\n", + flow->protos.tls_quic.browser_heuristics.is_chrome_tls, + chrome_ciphers, + flow->protos.tls_quic.browser_heuristics.is_safari_tls, + safari_ciphers, + this_is_not_safari); #endif + } } else { invalid_ja = 1; #ifdef DEBUG_TLS @@ -2747,10 +2846,14 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, if(!is_quic) { if(ndpi_struct->cfg.tls_subclassification_enabled && + flow->protos.tls_quic.subprotocol_detected == 0 && + !flow->tls_quic.from_rdp && /* No (other) sub-classification; we will have TLS.RDP anyway */ ndpi_match_hostname_protocol(ndpi_struct, flow, __get_master(ndpi_struct, flow), sni, sni_len)) flow->protos.tls_quic.subprotocol_detected = 1; } else { if(ndpi_struct->cfg.quic_subclassification_enabled && + flow->protos.tls_quic.subprotocol_detected == 0 && + !flow->tls_quic.from_rdp && /* No (other) sub-classification; we will have TLS.RDP anyway */ ndpi_match_hostname_protocol(ndpi_struct, flow, NDPI_PROTOCOL_QUIC, sni, sni_len)) flow->protos.tls_quic.subprotocol_detected = 1; } @@ -2760,7 +2863,12 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, ndpi_set_risk(ndpi_struct, flow, NDPI_NUMERIC_IP_HOST, sni); } - if(ndpi_check_dga_name(ndpi_struct, flow, sni, 1, 0)) { + if(ndpi_str_endswith(sni, "signal.org")) { + /* printf("[SIGNAL] SNI: [%s]\n", sni); */ + signal_add_to_cache(ndpi_struct, flow); + } + + if(ndpi_check_dga_name(ndpi_struct, flow, sni, 1, 0, 0)) { #ifdef DEBUG_TLS printf("[TLS] SNI: (DGA) [%s]\n", sni); #endif @@ -2768,7 +2876,7 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, if((sni_len >= 4) /* Check if it ends in .com or .net */ && ((strcmp(&sni[sni_len-4], ".com") == 0) || (strcmp(&sni[sni_len-4], ".net") == 0)) - && (strncmp(sni, "www.", 4) == 0)) /* Not starting with www.... */ + && (strncmp(sni, "www.", 4) == 0)) /* Starting with www.... */ ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_TOR, __get_master(ndpi_struct, flow), NDPI_CONFIDENCE_DPI); } else { #ifdef DEBUG_TLS @@ -2847,8 +2955,7 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, } } else if(extension_id == 13 /* signature algorithms */ && offset+extension_offset+1 < total_len) { - int s_offset = offset+extension_offset, safari_signature_algorithms = 0, - chrome_signature_algorithms = 0, duplicate_found = 0, last_signature = 0, id; + int s_offset = offset+extension_offset, safari_signature_algorithms = 0, id; u_int16_t tot_signature_algorithms_len = ntohs(*((u_int16_t*)&packet->payload[s_offset])); #ifdef DEBUG_TLS @@ -2880,95 +2987,99 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, if(rc < 0) break; } - for(i=0; i<tot_signature_algorithms_len && s_offset + (int)i + 2 < packet->payload_packet_len; i+=2) { - u_int16_t signature_algo = (u_int16_t)ntohs(*((u_int16_t*)&packet->payload[s_offset+i])); + if(ndpi_struct->cfg.tls_broswer_enabled) { + int chrome_signature_algorithms = 0, duplicate_found = 0, last_signature = 0; - if(last_signature == signature_algo) { - /* Consecutive duplication */ - duplicate_found = 1; - continue; - } else { - /* Check for other duplications */ - u_int all_ok = 1; + for(i=0; i<tot_signature_algorithms_len && s_offset + (int)i + 2 < packet->payload_packet_len; i+=2) { + u_int16_t signature_algo = (u_int16_t)ntohs(*((u_int16_t*)&packet->payload[s_offset+i])); - for(j=0; j<tot_signature_algorithms_len; j+=2) { - if(j != i && s_offset + (int)j + 2 < packet->payload_packet_len) { - u_int16_t j_signature_algo = (u_int16_t)ntohs(*((u_int16_t*)&packet->payload[s_offset+j])); + if(last_signature == signature_algo) { + /* Consecutive duplication */ + duplicate_found = 1; + continue; + } else { + /* Check for other duplications */ + u_int all_ok = 1; - if((signature_algo == j_signature_algo) - && (i < j) /* Don't skip both of them */) { + for(j=0; j<tot_signature_algorithms_len; j+=2) { + if(j != i && s_offset + (int)j + 2 < packet->payload_packet_len) { + u_int16_t j_signature_algo = (u_int16_t)ntohs(*((u_int16_t*)&packet->payload[s_offset+j])); + + if((signature_algo == j_signature_algo) + && (i < j) /* Don't skip both of them */) { #ifdef DEBUG_HEURISTIC - printf("[SIGNATURE] [TLS Signature Algorithm] Skipping duplicate 0x%04X\n", signature_algo); + printf("[SIGNATURE] [TLS Signature Algorithm] Skipping duplicate 0x%04X\n", signature_algo); #endif - duplicate_found = 1, all_ok = 0; - break; - } - } - } + duplicate_found = 1, all_ok = 0; + break; + } + } + } - if(!all_ok) - continue; - } + if(!all_ok) + continue; + } - last_signature = signature_algo; + last_signature = signature_algo; #ifdef DEBUG_HEURISTIC - printf("[SIGNATURE] [TLS Signature Algorithm] 0x%04X\n", signature_algo); -#endif - switch(signature_algo) { - case ECDSA_SECP521R1_SHA512: - flow->protos.tls_quic.browser_heuristics.is_firefox_tls = 1; - break; - - case ECDSA_SECP256R1_SHA256: - case ECDSA_SECP384R1_SHA384: - case RSA_PKCS1_SHA256: - case RSA_PKCS1_SHA384: - case RSA_PKCS1_SHA512: - case RSA_PSS_RSAE_SHA256: - case RSA_PSS_RSAE_SHA384: - case RSA_PSS_RSAE_SHA512: - chrome_signature_algorithms++, safari_signature_algorithms++; + printf("[SIGNATURE] [TLS Signature Algorithm] 0x%04X\n", signature_algo); +#endif + switch(signature_algo) { + case ECDSA_SECP521R1_SHA512: + flow->protos.tls_quic.browser_heuristics.is_firefox_tls = 1; + break; + + case ECDSA_SECP256R1_SHA256: + case ECDSA_SECP384R1_SHA384: + case RSA_PKCS1_SHA256: + case RSA_PKCS1_SHA384: + case RSA_PKCS1_SHA512: + case RSA_PSS_RSAE_SHA256: + case RSA_PSS_RSAE_SHA384: + case RSA_PSS_RSAE_SHA512: + chrome_signature_algorithms++, safari_signature_algorithms++; #ifdef DEBUG_HEURISTIC - printf("[SIGNATURE] [Chrome/Safari] Found 0x%04X [chrome: %u][safari: %u]\n", - signature_algo, chrome_signature_algorithms, safari_signature_algorithms); + printf("[SIGNATURE] [Chrome/Safari] Found 0x%04X [chrome: %u][safari: %u]\n", + signature_algo, chrome_signature_algorithms, safari_signature_algorithms); #endif - break; - } - } + break; + } + } #ifdef DEBUG_HEURISTIC - printf("[SIGNATURE] [safari_signature_algorithms: %u][chrome_signature_algorithms: %u]\n", - safari_signature_algorithms, chrome_signature_algorithms); + printf("[SIGNATURE] [safari_signature_algorithms: %u][chrome_signature_algorithms: %u]\n", + safari_signature_algorithms, chrome_signature_algorithms); #endif - if(flow->protos.tls_quic.browser_heuristics.is_firefox_tls) - flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0, - flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; + if(flow->protos.tls_quic.browser_heuristics.is_firefox_tls) + flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0, + flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; - if(safari_signature_algorithms != 8) - flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0; + if(safari_signature_algorithms != 8) + flow->protos.tls_quic.browser_heuristics.is_safari_tls = 0; - if((chrome_signature_algorithms != 8) || duplicate_found) - flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; + if((chrome_signature_algorithms != 8) || duplicate_found) + flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; - /* Avoid Chrome and Safari overlaps, thing that cannot happen with Firefox */ - if(flow->protos.tls_quic.browser_heuristics.is_safari_tls) - flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; + /* Avoid Chrome and Safari overlaps, thing that cannot happen with Firefox */ + if(flow->protos.tls_quic.browser_heuristics.is_safari_tls) + flow->protos.tls_quic.browser_heuristics.is_chrome_tls = 0; - if((flow->protos.tls_quic.browser_heuristics.is_chrome_tls == 0) - && duplicate_found) - flow->protos.tls_quic.browser_heuristics.is_safari_tls = 1; /* Safari */ + if((flow->protos.tls_quic.browser_heuristics.is_chrome_tls == 0) + && duplicate_found) + flow->protos.tls_quic.browser_heuristics.is_safari_tls = 1; /* Safari */ #ifdef DEBUG_HEURISTIC - printf("[SIGNATURE] [is_firefox_tls: %u][is_chrome_tls: %u][is_safari_tls: %u][duplicate_found: %u]\n", - flow->protos.tls_quic.browser_heuristics.is_firefox_tls, - flow->protos.tls_quic.browser_heuristics.is_chrome_tls, - flow->protos.tls_quic.browser_heuristics.is_safari_tls, - duplicate_found); + printf("[SIGNATURE] [is_firefox_tls: %u][is_chrome_tls: %u][is_safari_tls: %u][duplicate_found: %u]\n", + flow->protos.tls_quic.browser_heuristics.is_firefox_tls, + flow->protos.tls_quic.browser_heuristics.is_chrome_tls, + flow->protos.tls_quic.browser_heuristics.is_safari_tls, + duplicate_found); #endif + } if(i > 0 && i >= tot_signature_algorithms_len) { ja.client.signature_algorithms_str[i*2 - 1] = '\0'; @@ -3100,12 +3211,10 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, printf("Client TLS [SUPPORTED_VERSIONS: %s]\n", version_str); #endif - if(flow->protos.tls_quic.tls_supported_versions == NULL) + if(flow->protos.tls_quic.tls_supported_versions == NULL && + ndpi_struct->cfg.tls_versions_supported_enabled) flow->protos.tls_quic.tls_supported_versions = ndpi_strdup(version_str); } - } else if(extension_id == 65486 /* encrypted server name */) { - /* ESNI has been superseded by ECH */ - ndpi_set_risk(ndpi_struct, flow, NDPI_TLS_SUSPICIOUS_ESNI_USAGE, NULL); } else if(extension_id == 65037 /* ECH: latest drafts */) { #ifdef DEBUG_TLS printf("Client TLS: ECH version 0x%x\n", extension_id); @@ -3169,6 +3278,22 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, #endif ndpi_set_risk(ndpi_struct, flow, NDPI_OBFUSCATED_TRAFFIC, "Abnormal Client Hello/Padding length"); } + } else if(extension_id == 22) { /* Encrypt-then-MAC */ + if(extension_len == 0) { + char *sni = flow->host_server_name; + + if(sni != NULL) { + u_int sni_len = strlen(sni); + + if((flow->protos.tls_quic.advertised_alpns == NULL) /* No ALPN */ + && (sni_len > 8) + && ((strcmp(&sni[sni_len-4], ".com") == 0) || (strcmp(&sni[sni_len-4], ".net") == 0)) + && (strncmp(sni, "www.", 4) == 0) /* Starting with www.... */ + && str_contains_digit(&sni[4])) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_TOR, __get_master(ndpi_struct, flow), NDPI_CONFIDENCE_DPI); + } + } + } } extension_offset += extension_len; /* Move to the next extension */ @@ -3277,7 +3402,7 @@ static void ndpi_search_tls_wrapper(struct ndpi_detection_module_struct *ndpi_st if(flow->tls_quic.obfuscated_heur_state == NULL) { if(packet->udp != NULL || flow->stun.maybe_dtls) - rc = ndpi_search_tls_udp(ndpi_struct, flow); + rc = ndpi_search_dtls(ndpi_struct, flow); else rc = ndpi_search_tls_tcp(ndpi_struct, flow); @@ -3301,34 +3426,17 @@ static void ndpi_search_tls_wrapper(struct ndpi_detection_module_struct *ndpi_st if(flow->tls_quic.obfuscated_heur_state) { tls_obfuscated_heur_search_again(ndpi_struct, flow); } else if(rc == 0) { - if(packet->udp != NULL || flow->stun.maybe_dtls) - NDPI_EXCLUDE_PROTO_EXT(ndpi_struct, flow, NDPI_PROTOCOL_DTLS); - else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* **************************************** */ -void init_tls_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("TLS", ndpi_struct, *id, - NDPI_PROTOCOL_TLS, - ndpi_search_tls_wrapper, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; - - /* *************************************************** */ - - ndpi_set_bitmask_protocol_detection("DTLS", ndpi_struct, *id, - NDPI_PROTOCOL_DTLS, - ndpi_search_tls_wrapper, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_tls_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("(D)TLS", ndpi_struct, + ndpi_search_tls_wrapper, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 2, + NDPI_PROTOCOL_TLS, + NDPI_PROTOCOL_DTLS); } diff --git a/src/lib/protocols/tocaboca.c b/src/lib/protocols/tocaboca.c index cf5c39af5..b69117104 100644 --- a/src/lib/protocols/tocaboca.c +++ b/src/lib/protocols/tocaboca.c @@ -1,7 +1,7 @@ /* * tocaboca.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -73,19 +73,14 @@ static void ndpi_search_toca_boca(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_toca_boca_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_toca_boca_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TocaBoca", ndpi_struct, *id, - NDPI_PROTOCOL_TOCA_BOCA, - ndpi_search_toca_boca, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TocaBoca", ndpi_struct, + ndpi_search_toca_boca, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_TOCA_BOCA); } diff --git a/src/lib/protocols/tplink_shp.c b/src/lib/protocols/tplink_shp.c index c4b68f71b..4961f5955 100644 --- a/src/lib/protocols/tplink_shp.c +++ b/src/lib/protocols/tplink_shp.c @@ -57,7 +57,7 @@ static void ndpi_search_tplink_shp(struct ndpi_detection_module_struct *ndpi_str if (packet->payload_packet_len - offset < _TPLSHP_MIN_LEN) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -72,7 +72,7 @@ static void ndpi_search_tplink_shp(struct ndpi_detection_module_struct *ndpi_str if (b[0] != '{' || (b[1] != '}' && b[1] != '"')) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -81,16 +81,10 @@ static void ndpi_search_tplink_shp(struct ndpi_detection_module_struct *ndpi_str /* ***************************************************** */ -void init_tplink_shp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_tplink_shp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TPLINK SHP", ndpi_struct, *id, - NDPI_PROTOCOL_TPLINK_SHP, - ndpi_search_tplink_shp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("TPLINK SHP", ndpi_struct, + ndpi_search_tplink_shp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TPLINK_SHP); } diff --git a/src/lib/protocols/trdp.c b/src/lib/protocols/trdp.c index 6cdbc7710..05185f3d5 100644 --- a/src/lib/protocols/trdp.c +++ b/src/lib/protocols/trdp.c @@ -80,17 +80,13 @@ static void ndpi_search_trdp(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_trdp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_trdp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TRDP", ndpi_struct, *id, - NDPI_PROTOCOL_TRDP, - ndpi_search_trdp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("TRDP", ndpi_struct, + ndpi_search_trdp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_TRDP); } diff --git a/src/lib/protocols/tuya_lp.c b/src/lib/protocols/tuya_lp.c index d8488aa52..78726f276 100644 --- a/src/lib/protocols/tuya_lp.c +++ b/src/lib/protocols/tuya_lp.c @@ -48,21 +48,21 @@ static void ndpi_search_tuya_lp(struct ndpi_detection_module_struct *ndpi_struct if (packet->payload_packet_len < 16) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231n/blob/0eff617610cc97e0d134bb8136cebb518a2a403b/sdk/include/lan_protocol.h#L73 */ if (ntohl(get_u_int32_t(packet->payload, 0)) != 0x000055AA) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if (packet->payload_packet_len < ntohl(get_u_int32_t(packet->payload, 4))) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -71,7 +71,7 @@ static void ndpi_search_tuya_lp(struct ndpi_detection_module_struct *ndpi_struct packet->payload[packet->payload_packet_len - 2] != 0xAA || packet->payload[packet->payload_packet_len - 1] != 0x55) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -80,16 +80,10 @@ static void ndpi_search_tuya_lp(struct ndpi_detection_module_struct *ndpi_struct /* ***************************************************** */ -void init_tuya_lp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_tuya_lp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("TUYA LP", ndpi_struct, *id, - NDPI_PROTOCOL_TUYA_LP, - ndpi_search_tuya_lp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("TUYA LP", ndpi_struct, + ndpi_search_tuya_lp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_TUYA_LP); } diff --git a/src/lib/protocols/ubntac2.c b/src/lib/protocols/ubntac2.c index 2b56c5aee..d3ff71a91 100644 --- a/src/lib/protocols/ubntac2.c +++ b/src/lib/protocols/ubntac2.c @@ -35,60 +35,47 @@ static void ndpi_int_ubntac2_add_connection(struct ndpi_detection_module_struct static void ndpi_search_ubntac2(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { struct ndpi_packet_struct *packet = &ndpi_struct->packet; + u_int8_t tlv_type; + u_int16_t tlv_length, version_len; + int off; NDPI_LOG_DBG(ndpi_struct, "search ubntac2\n"); - NDPI_LOG_DBG2(ndpi_struct, "UBNTAC2 detection... plen:%i %i:%i\n", packet->payload_packet_len, ntohs(packet->udp->source), ntohs(packet->udp->dest)); - - if(packet->udp) { - if(packet->payload_packet_len >= 135 && - (packet->udp->source == htons(10001) || packet->udp->dest == htons(10001))) { - int found = 0; - - if(memcmp(&(packet->payload[36]), "UBNT", 4) == 0) { - found = 36+5; - } else if(memcmp(&(packet->payload[49]), "ubnt", 4) == 0) { - found = 49+5; - } - if(found) { - found += packet->payload[found+1] + 4; /* Skip model name */ - found++; /* Skip len */ - - if(found < packet->payload_packet_len) { - char version[256]; - int len; - u_int i, j; - - for(i=found, j=0; (i < packet->payload_packet_len) - && (i < (sizeof(version)-1)) - && (packet->payload[i] != 0); i++) - version[j++] = packet->payload[i]; - - version[j] = '\0'; - - len = ndpi_min(sizeof(flow->protos.ubntac2.version) - 1, j); - memcpy(flow->protos.ubntac2.version, (const char *)version, len); - flow->protos.ubntac2.version[len] = '\0'; - } - - NDPI_LOG_INFO(ndpi_struct, "UBNT AirControl 2 request\n"); - - ndpi_int_ubntac2_add_connection(ndpi_struct, flow); + if(packet->payload_packet_len >= 4 && + (packet->udp->source == htons(10001) || packet->udp->dest == htons(10001)) && + (ntohs(get_u_int16_t(packet->payload, 0)) == 0x0206 || + ntohs(get_u_int16_t(packet->payload, 0)) == 0x0100 /* discovery request/reply */) && + (4 + ntohs(*(u_int16_t *)&packet->payload[2]) == packet->payload_packet_len)) { + NDPI_LOG_INFO(ndpi_struct, "UBNT AirControl 2 request\n"); + ndpi_int_ubntac2_add_connection(ndpi_struct, flow); + + /* Parse TLV list: 1 byte type + 2 byte length + (optional) data */ + off = 4; + while (off + 3 < packet->payload_packet_len) { + tlv_type = packet->payload[off]; + tlv_length = ntohs(*(u_int16_t *)&packet->payload[off + 1]); + + NDPI_LOG_DBG2(ndpi_struct, "0x%x Len %d\n", tlv_type, tlv_length); + + if(tlv_type == 0x03 && off + 3 + tlv_length < packet->payload_packet_len) { + version_len = ndpi_min(sizeof(flow->protos.ubntac2.version) - 1, tlv_length); + memcpy(flow->protos.ubntac2.version, (const char *)&packet->payload[off + 3], version_len); + flow->protos.ubntac2.version[version_len] = '\0'; } + + off += 3 + tlv_length; } + return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ubntac2_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_ubntac2_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("UBNTAC2", ndpi_struct, *id, - NDPI_PROTOCOL_UBNTAC2, - ndpi_search_ubntac2, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; + register_dissector("UBNTAC2", ndpi_struct, + ndpi_search_ubntac2, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_UBNTAC2); } diff --git a/src/lib/protocols/uftp.c b/src/lib/protocols/uftp.c index efcfa64fd..898fd8be9 100644 --- a/src/lib/protocols/uftp.c +++ b/src/lib/protocols/uftp.c @@ -54,17 +54,13 @@ static void ndpi_search_uftp(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_uftp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_uftp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("UFTP", ndpi_struct, *id, - NDPI_PROTOCOL_UFTP, - ndpi_search_uftp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("UFTP", ndpi_struct, + ndpi_search_uftp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_UFTP); } diff --git a/src/lib/protocols/ultrasurf.c b/src/lib/protocols/ultrasurf.c index 05ba72764..620a17c4a 100644 --- a/src/lib/protocols/ultrasurf.c +++ b/src/lib/protocols/ultrasurf.c @@ -45,7 +45,7 @@ static void ndpi_search_ultrasurf(struct ndpi_detection_module_struct *ndpi_stru if (packet->payload_packet_len < 8) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -55,19 +55,13 @@ static void ndpi_search_ultrasurf(struct ndpi_detection_module_struct *ndpi_stru ndpi_int_ultrasurf_add_connection(ndpi_struct, flow); } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_ultrasurf_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_ultrasurf_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("UltraSurf", ndpi_struct, *id, - NDPI_PROTOCOL_ULTRASURF, - ndpi_search_ultrasurf, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - - *id += 1; + register_dissector("UltraSurf", ndpi_struct, + ndpi_search_ultrasurf, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ULTRASURF); } diff --git a/src/lib/protocols/usenet.c b/src/lib/protocols/usenet.c index 467ed1b4f..34bacb74b 100644 --- a/src/lib/protocols/usenet.c +++ b/src/lib/protocols/usenet.c @@ -2,7 +2,7 @@ * usenet.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -92,18 +92,14 @@ static void ndpi_search_usenet_tcp(struct ndpi_detection_module_struct *ndpi_str } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_usenet_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_usenet_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Usenet", ndpi_struct, *id, - NDPI_PROTOCOL_USENET, - ndpi_search_usenet_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Usenet", ndpi_struct, + ndpi_search_usenet_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_USENET); } diff --git a/src/lib/protocols/vhua.c b/src/lib/protocols/vhua.c deleted file mode 100644 index c6af07406..000000000 --- a/src/lib/protocols/vhua.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * vhua.c - * - * Copyright (C) 2011-22 - 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 - * 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_VHUA - -#include "ndpi_api.h" -#include "ndpi_private.h" - -/* - http://www.vhua.com - - Skype-like Chinese phone protocol - - */ - - -static void ndpi_int_vhua_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_VHUA, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - NDPI_LOG_INFO(ndpi_struct, "found VHUA\n"); -} - - -static void ndpi_check_vhua(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - u_char p0[] = { 0x05, 0x14, 0x3a, 0x05, 0x08, 0xf8, 0xa1, 0xb1, 0x03 }; - - /* Break after 3 packets. */ - if((flow->packet_counter > 3) - || (packet->payload_packet_len < sizeof(p0))) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - } else if(memcmp(packet->payload, p0, sizeof(p0)) == 0) { - ndpi_int_vhua_add_connection(ndpi_struct, flow); - } -} - -static void ndpi_search_vhua(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - NDPI_LOG_DBG(ndpi_struct, "search VHUA\n"); - - ndpi_check_vhua(ndpi_struct, flow); -} - - -void init_vhua_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("VHUA", ndpi_struct, *id, - NDPI_PROTOCOL_VHUA, - ndpi_search_vhua, - 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/viber.c b/src/lib/protocols/viber.c index 69741abff..7f56fcdea 100644 --- a/src/lib/protocols/viber.c +++ b/src/lib/protocols/viber.c @@ -45,7 +45,7 @@ static void ndpi_search_viber(struct ndpi_detection_module_struct *ndpi_struct, if(packet->udp && packet->iph) { /* ignore broadcast as this isn't viber */ if((packet->iph->saddr == 0xFFFFFFFF) || (packet->iph->daddr == 0xFFFFFFFF)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -71,7 +71,7 @@ static void ndpi_search_viber(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -89,24 +89,20 @@ static void ndpi_search_viber(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } if(flow->packet_counter > 3) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_viber_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_viber_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Viber", ndpi_struct, *id, - NDPI_PROTOCOL_VIBER, - ndpi_search_viber, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Viber", ndpi_struct, + ndpi_search_viber, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_VIBER); } diff --git a/src/lib/protocols/vmware.c b/src/lib/protocols/vmware.c index 31433e5e1..47214c197 100644 --- a/src/lib/protocols/vmware.c +++ b/src/lib/protocols/vmware.c @@ -41,17 +41,13 @@ static void ndpi_search_vmware(struct ndpi_detection_module_struct *ndpi_struct, return; } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_vmware_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_vmware_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("VMWARE", ndpi_struct, *id, - NDPI_PROTOCOL_VMWARE, - ndpi_search_vmware, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("VMWARE", ndpi_struct, + ndpi_search_vmware, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_VMWARE); } diff --git a/src/lib/protocols/vnc.c b/src/lib/protocols/vnc.c index 52c644224..d8d3bb143 100644 --- a/src/lib/protocols/vnc.c +++ b/src/lib/protocols/vnc.c @@ -57,18 +57,14 @@ static void ndpi_search_vnc_tcp(struct ndpi_detection_module_struct *ndpi_struct } } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_vnc_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_vnc_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("VNC", ndpi_struct, *id, - NDPI_PROTOCOL_VNC, - ndpi_search_vnc_tcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("VNC", ndpi_struct, + ndpi_search_vnc_tcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_VNC); } diff --git a/src/lib/protocols/vxlan.c b/src/lib/protocols/vxlan.c index 04b3b3fbc..ab8383b03 100644 --- a/src/lib/protocols/vxlan.c +++ b/src/lib/protocols/vxlan.c @@ -1,7 +1,7 @@ /* * vxlan.c * - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -53,7 +53,7 @@ static void ndpi_check_vxlan(struct ndpi_detection_module_struct *ndpi_struct, s } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -64,14 +64,10 @@ static void ndpi_search_vxlan(struct ndpi_detection_module_struct *ndpi_struct, ndpi_check_vxlan(ndpi_struct, flow); } -void init_vxlan_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_vxlan_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("VXLAN", ndpi_struct, *id, - NDPI_PROTOCOL_VXLAN, - ndpi_search_vxlan, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("VXLAN", ndpi_struct, + ndpi_search_vxlan, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_VXLAN); } diff --git a/src/lib/protocols/warcraft3.c b/src/lib/protocols/warcraft3.c deleted file mode 100644 index 768c3da74..000000000 --- a/src/lib/protocols/warcraft3.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * warcraft3.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WARCRAFT3 - -#include "ndpi_api.h" -#include "ndpi_private.h" - -static void ndpi_int_warcraft3_add_connection(struct ndpi_detection_module_struct - *ndpi_struct, struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WARCRAFT3, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - -static void ndpi_search_warcraft3(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - u_int16_t l; /* - Leave it as u_int32_t because otherwise 'u_int16_t temp' - might overflood it and thus generate an infinite loop - */ - - NDPI_LOG_DBG(ndpi_struct, "search WARCRAFT3\n"); - - - if (flow->packet_counter == 1 && packet->payload_packet_len == 1 && packet->payload[0] == 0x01) { - NDPI_LOG_DBG2(ndpi_struct, "maybe warcraft3: packet_len == 1\n"); - return; - } else if (packet->payload_packet_len >= 4 && (packet->payload[0] == 0xf7 || packet->payload[0] == 0xff)) { - - NDPI_LOG_DBG2(ndpi_struct, "packet_payload begins with 0xf7 or 0xff\n"); - - l = packet->payload[2] + (packet->payload[3] << 8); // similar to ntohs - - NDPI_LOG_DBG2(ndpi_struct, "l = %u \n", l); - - while (l <= (packet->payload_packet_len - 4)) { - if (packet->payload[l] == 0xf7) { - u_int16_t temp = (packet->payload[l + 2 + 1] << 8) + packet->payload[l + 2]; - NDPI_LOG_DBG2(ndpi_struct, "another f7 visited\n"); - - if((temp <= 2) || (temp > 1500)) { - NDPI_LOG_DBG2(ndpi_struct, "break\n"); - break; - } else { - l += temp; - NDPI_LOG_DBG2(ndpi_struct, "l = %u \n", l); - } - } else { - NDPI_LOG_DBG2(ndpi_struct, "break\n"); - break; - } - } - - if (l == packet->payload_packet_len) { - NDPI_LOG_DBG2(ndpi_struct, "maybe WARCRAFT3 flow->packet_counter = %u \n", - flow->packet_counter); - if (flow->packet_counter > 2) { - NDPI_LOG_INFO(ndpi_struct, "found WARCRAFT3\n"); - ndpi_int_warcraft3_add_connection(ndpi_struct, flow); - return; - } - return; - } - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - - -void init_warcraft3_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("Warcraft3", ndpi_struct, *id, - NDPI_PROTOCOL_WARCRAFT3, - ndpi_search_warcraft3, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; -} - diff --git a/src/lib/protocols/websocket.c b/src/lib/protocols/websocket.c index 47af111d8..fc8a89231 100644 --- a/src/lib/protocols/websocket.c +++ b/src/lib/protocols/websocket.c @@ -63,7 +63,7 @@ static void ndpi_check_websocket(struct ndpi_detection_module_struct *ndpi_struc if (packet->payload_packet_len < sizeof(u_int16_t)) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -74,8 +74,8 @@ static void ndpi_check_websocket(struct ndpi_detection_module_struct *ndpi_struc if (packet->payload_packet_len != hdr_size + websocket_payload_length) { - NDPI_LOG_DBG(ndpi_struct, "Invalid WEBSOCKET payload"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_LOG_DBG(ndpi_struct, "Invalid WEBSOCKET payload\n"); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -88,18 +88,18 @@ static void ndpi_check_websocket(struct ndpi_detection_module_struct *ndpi_struc set_websocket_detected(ndpi_struct, flow); } else { - NDPI_LOG_DBG(ndpi_struct, "Invalid WEBSOCKET payload"); - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_LOG_DBG(ndpi_struct, "Invalid WEBSOCKET payload\n"); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } static void ndpi_search_websocket(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - // Break after 6 packets. + // Break after 10 packets. if (flow->packet_counter > 10) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -112,28 +112,33 @@ static void ndpi_search_websocket(struct ndpi_detection_module_struct *ndpi_stru { struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; uint16_t i; + int found = 0; NDPI_PARSE_PACKET_LINE_INFO(ndpi_struct, flow, packet); for (i = 0; i < packet->parsed_lines; i++) { if (LINE_STARTS(packet->line[i], "upgrade:") != 0 && LINE_ENDS(packet->line[i], "websocket") != 0) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WEBSOCKET, - NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + if(found == 0) + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WEBSOCKET, + NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + found = 1; } else if (LINE_STARTS(packet->line[i], "sec-websocket") != 0) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WEBSOCKET, - NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); + if(found == 0) + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WEBSOCKET, + NDPI_PROTOCOL_HTTP, NDPI_CONFIDENCE_DPI); if (ndpi_strncasestr((const char *)packet->line[i].ptr, "chisel", packet->line[i].len) != NULL) { ndpi_set_risk(ndpi_struct, flow, NDPI_OBFUSCATED_TRAFFIC, "Obfuscated SSH-in-HTTP-WebSocket traffic"); } + found = 1; } } if (i == packet->parsed_lines) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } } @@ -143,11 +148,10 @@ static void ndpi_search_websocket(struct ndpi_detection_module_struct *ndpi_stru /* ********************************* */ -void init_websocket_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_websocket_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("WEBSOCKET", ndpi_struct, *id, NDPI_PROTOCOL_WEBSOCKET, - ndpi_search_websocket, NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("WEBSOCKET", ndpi_struct, + ndpi_search_websocket, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_WEBSOCKET); } diff --git a/src/lib/protocols/whatsapp.c b/src/lib/protocols/whatsapp.c index 2a9564501..f53dbfce3 100644 --- a/src/lib/protocols/whatsapp.c +++ b/src/lib/protocols/whatsapp.c @@ -93,7 +93,7 @@ static void ndpi_search_whatsapp(struct ndpi_detection_module_struct *ndpi_struc if (flow->packet_counter > 3) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -116,20 +116,14 @@ static void ndpi_search_whatsapp(struct ndpi_detection_module_struct *ndpi_struc return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_whatsapp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection( - "WhatsApp", ndpi_struct, *id, - NDPI_PROTOCOL_WHATSAPP, - ndpi_search_whatsapp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK - ); - *id += 1; + register_dissector("WhatsApp", ndpi_struct, + ndpi_search_whatsapp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_WHATSAPP); } diff --git a/src/lib/protocols/whoisdas.c b/src/lib/protocols/whoisdas.c index c5450d1a1..00e6e7ff7 100644 --- a/src/lib/protocols/whoisdas.c +++ b/src/lib/protocols/whoisdas.c @@ -49,18 +49,14 @@ static void ndpi_search_whois_das(struct ndpi_detection_module_struct *ndpi_stru } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_whois_das_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_whois_das_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Whois-DAS", ndpi_struct, *id, - NDPI_PROTOCOL_WHOIS_DAS, - ndpi_search_whois_das, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Whois-DA", ndpi_struct, + ndpi_search_whois_das, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_WHOIS_DAS); } diff --git a/src/lib/protocols/wireguard.c b/src/lib/protocols/wireguard.c index 90d814464..57ad347c3 100644 --- a/src/lib/protocols/wireguard.c +++ b/src/lib/protocols/wireguard.c @@ -82,14 +82,14 @@ static void ndpi_search_wireguard(struct ndpi_detection_module_struct *ndpi_stru * Note that handshake packets have a slightly different structure, but they are larger. */ if (packet->payload_packet_len < 32) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } /* * The next three bytes after the message type are reserved and set to zero. */ if (payload[1] != 0 || payload[2] != 0 || payload[3] != 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -139,12 +139,13 @@ static void ndpi_search_wireguard(struct ndpi_detection_module_struct *ndpi_stru u_int32_t receiver_index = get_u_int32_t(payload, 8); if (receiver_index == flow->l4.udp.wireguard_peer_index[1 - packet->packet_direction]) { - if(packet->payload_packet_len == 100) + if(packet->payload_packet_len == 100 && + ndpi_struct->cfg.wireguard_subclassification_by_ip /* TODO: the right option? */) ndpi_int_wireguard_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_TUNNELBEAR); else ndpi_int_wireguard_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* need more packets before deciding */ @@ -160,7 +161,7 @@ static void ndpi_search_wireguard(struct ndpi_detection_module_struct *ndpi_stru if (receiver_index == flow->l4.udp.wireguard_peer_index[1 - packet->packet_direction]) { ndpi_int_wireguard_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* need more packets before deciding */ @@ -188,23 +189,19 @@ static void ndpi_search_wireguard(struct ndpi_detection_module_struct *ndpi_stru if (receiver_index == flow->l4.udp.wireguard_peer_index[packet->packet_direction]) { ndpi_int_wireguard_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_UNKNOWN); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } /* need more packets before deciding */ } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_wireguard_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_wireguard_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("WireGuard", ndpi_struct, *id, - NDPI_PROTOCOL_WIREGUARD, - ndpi_search_wireguard, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("WireGuard", ndpi_struct, + ndpi_search_wireguard, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_WIREGUARD); } diff --git a/src/lib/protocols/world_of_kung_fu.c b/src/lib/protocols/world_of_kung_fu.c deleted file mode 100644 index dc867ea5e..000000000 --- a/src/lib/protocols/world_of_kung_fu.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * world_of_kung_fu.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WORLD_OF_KUNG_FU -#include "ndpi_api.h" -#include "ndpi_private.h" - - -static void ndpi_int_world_of_kung_fu_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WORLD_OF_KUNG_FU, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - -static void ndpi_search_world_of_kung_fu(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search world_of_kung_fu\n"); - - if ((packet->payload_packet_len == 16) - && ntohl(get_u_int32_t(packet->payload, 0)) == 0x0c000000 && ntohl(get_u_int32_t(packet->payload, 4)) == 0xd2000c00 - && (packet->payload[9] - == 0x16) && ntohs(get_u_int16_t(packet->payload, 10)) == 0x0000 && ntohs(get_u_int16_t(packet->payload, 14)) == 0x0000) { - NDPI_LOG_INFO(ndpi_struct, "detected world_of_kung_fu\n"); - ndpi_int_world_of_kung_fu_add_connection(ndpi_struct, flow); - return; - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - - -void init_world_of_kung_fu_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("WorldOfKungFu", ndpi_struct, *id, - NDPI_PROTOCOL_WORLD_OF_KUNG_FU, - ndpi_search_world_of_kung_fu, - 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/world_of_warcraft.c b/src/lib/protocols/world_of_warcraft.c deleted file mode 100644 index e0e8dba08..000000000 --- a/src/lib/protocols/world_of_warcraft.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * world_of_warcraft.c - * - * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - 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" - -#define NDPI_CURRENT_PROTO NDPI_PROTOCOL_WORLDOFWARCRAFT - -#include "ndpi_api.h" -#include "ndpi_private.h" - -static void ndpi_int_worldofwarcraft_add_connection(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) -{ - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WORLDOFWARCRAFT, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); -} - - -#if !defined(WIN32) -static inline -#elif defined(MINGW_GCC) -__mingw_forceinline static -#else -__forceinline static -#endif -u_int8_t ndpi_int_is_wow_port(const u_int16_t port) -{ - if (port == htons(3724) || port == htons(6112) || port == htons(6113) || - port == htons(6114) || port == htons(4000) || port == htons(1119)) { - return 1; - } - return 0; -} - -static void ndpi_search_worldofwarcraft(struct ndpi_detection_module_struct *ndpi_struct, - struct ndpi_flow_struct *flow) -{ - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - - NDPI_LOG_DBG(ndpi_struct, "search World of Warcraft\n"); - - if (packet->tcp != NULL) { - /* - if ((packet->payload_packet_len > NDPI_STATICSTRING_LEN("POST /") && - memcmp(packet->payload, "POST /", NDPI_STATICSTRING_LEN("POST /")) == 0) || - (packet->payload_packet_len > NDPI_STATICSTRING_LEN("GET /") && - memcmp(packet->payload, "GET /", NDPI_STATICSTRING_LEN("GET /")) == 0)) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - if (packet->user_agent_line.ptr != NULL && - packet->user_agent_line.len == NDPI_STATICSTRING_LEN("Blizzard Web Client") && - memcmp(packet->user_agent_line.ptr, "Blizzard Web Client", - NDPI_STATICSTRING_LEN("Blizzard Web Client")) == 0) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_DBG(ndpi_struct, "World of Warcraft: Web Client found\n"); - return; - } - } - */ - if (packet->payload_packet_len > NDPI_STATICSTRING_LEN("GET /") - && memcmp(packet->payload, "GET /", NDPI_STATICSTRING_LEN("GET /")) == 0) { - ndpi_parse_packet_line_info(ndpi_struct, flow); - if (packet->user_agent_line.ptr != NULL && packet->host_line.ptr != NULL - && packet->user_agent_line.len > NDPI_STATICSTRING_LEN("Blizzard Downloader") - && packet->host_line.len > NDPI_STATICSTRING_LEN("worldofwarcraft.com") - && memcmp(packet->user_agent_line.ptr, "Blizzard Downloader", - NDPI_STATICSTRING_LEN("Blizzard Downloader")) == 0 - && memcmp(&packet->host_line.ptr[packet->host_line.len - NDPI_STATICSTRING_LEN("worldofwarcraft.com")], - "worldofwarcraft.com", NDPI_STATICSTRING_LEN("worldofwarcraft.com")) == 0) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, - "World of Warcraft: Web Client found\n"); - return; - } - } - if (packet->payload_packet_len == 50 && memcmp(&packet->payload[2], "WORLD OF WARCRAFT CONNECTION", - NDPI_STATICSTRING_LEN("WORLD OF WARCRAFT CONNECTION")) == 0) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: Login found\n"); - return; - } - if (packet->tcp->dest == htons(3724) && packet->payload_packet_len < 70 - && packet->payload_packet_len > 40 && (memcmp(&packet->payload[4], "WoW", 3) == 0 - || memcmp(&packet->payload[5], "WoW", 3) == 0)) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: Login found\n"); - return; - } - - if (packet->tcp->source == htons(3724) - && packet->payload_packet_len == 8 && get_u_int32_t(packet->payload, 0) == htonl(0x0006ec01)) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: connection detected\n"); - return; - } - - /* for some well known WoW ports - check another pattern */ - if (flow->l4.tcp.wow_stage == 0) { - if (ndpi_int_is_wow_port(packet->tcp->source) && - packet->payload_packet_len >= 14 && - ntohs(get_u_int16_t(packet->payload, 0)) == (packet->payload_packet_len - 2)) { - if (get_u_int32_t(packet->payload, 2) == htonl(0xec010100)) { - - NDPI_LOG_DBG2(ndpi_struct, "probably World of Warcraft, waiting for final packet\n"); - flow->l4.tcp.wow_stage = 2; - return; - } else if (packet->payload_packet_len == 41 && - (get_u_int16_t(packet->payload, 2) == htons(0x0085) || - get_u_int16_t(packet->payload, 2) == htons(0x0034) || - get_u_int16_t(packet->payload, 2) == htons(0x1960))) { - NDPI_LOG_DBG2(ndpi_struct, "maybe World of Warcraft, need next\n"); - flow->l4.tcp.wow_stage = 1; - return; - } - } - } - - if (flow->l4.tcp.wow_stage == 1) { - if (packet->payload_packet_len == 325 && - ntohs(get_u_int16_t(packet->payload, 0)) == (packet->payload_packet_len - 2) && - get_u_int16_t(packet->payload, 4) == 0 && - (get_u_int16_t(packet->payload, packet->payload_packet_len - 3) == htons(0x2331) || - get_u_int16_t(packet->payload, 67) == htons(0x2331)) && - (memcmp - (&packet->payload[packet->payload_packet_len - 18], - "\x94\xec\xff\xfd\x67\x62\xd4\x67\xfb\xf9\xdd\xbd\xfd\x01\xc0\x8f\xf9\x81", 18) == 0 - || memcmp(&packet->payload[packet->payload_packet_len - 30], - "\x94\xec\xff\xfd\x67\x62\xd4\x67\xfb\xf9\xdd\xbd\xfd\x01\xc0\x8f\xf9\x81", 18) == 0)) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: connection detected\n"); - return; - } - if (packet->payload_packet_len > 32 && - ntohs(get_u_int16_t(packet->payload, 0)) == (packet->payload_packet_len - 2)) { - if (get_u_int16_t(packet->payload, 4) == 0) { - - NDPI_LOG_DBG2(ndpi_struct, "probably World of Warcraft, waiting for final packet\n"); - flow->l4.tcp.wow_stage = 2; - return; - } else if (get_u_int32_t(packet->payload, 2) == htonl(0x12050000)) { - NDPI_LOG_DBG2(ndpi_struct, "probably World of Warcraft, waiting for final packet\n"); - flow->l4.tcp.wow_stage = 2; - return; - } - } - } - - if (flow->l4.tcp.wow_stage == 2) { - if (packet->payload_packet_len == 4) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: connection detected\n"); - return; - } else if (packet->payload_packet_len > 4 && packet->payload_packet_len <= 16 && packet->payload[4] == 0x0c) { - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: connection detected\n"); - return; - } else if (flow->packet_counter < 3) { - NDPI_LOG_DBG2(ndpi_struct, "waiting for final packet\n"); - return; - } - } - if (flow->l4.tcp.wow_stage == 0 && packet->tcp->dest == htons(1119)) { - /* special log in port for battle.net/world of warcraft */ - - if (packet->payload_packet_len >= 77 && - get_u_int32_t(packet->payload, 0) == htonl(0x40000aed) && get_u_int32_t(packet->payload, 4) == htonl(0xea070aed)) { - - ndpi_int_worldofwarcraft_add_connection(ndpi_struct, flow); - NDPI_LOG_INFO(ndpi_struct, "World of Warcraft: connection detected\n"); - return; - } - } - } - - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); -} - - -void init_world_of_warcraft_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) -{ - ndpi_set_bitmask_protocol_detection("WorldOfWarcraft", ndpi_struct, *id, - NDPI_PROTOCOL_WORLDOFWARCRAFT, - ndpi_search_worldofwarcraft, - 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/wsd.c b/src/lib/protocols/wsd.c index a15ff10d0..16b6fe2a5 100644 --- a/src/lib/protocols/wsd.c +++ b/src/lib/protocols/wsd.c @@ -48,18 +48,15 @@ static void ndpi_search_wsd(struct ndpi_detection_module_struct *ndpi_struct, NDPI_LOG_INFO(ndpi_struct,"found wsd\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_WSD, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); } else { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } } -void init_wsd_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("WSD", ndpi_struct, *id, - NDPI_PROTOCOL_WSD, - ndpi_search_wsd, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_wsd_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("WSD", ndpi_struct, + ndpi_search_wsd, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_WSD); } diff --git a/src/lib/protocols/xbox.c b/src/lib/protocols/xbox.c index f1f334316..29248cf82 100644 --- a/src/lib/protocols/xbox.c +++ b/src/lib/protocols/xbox.c @@ -94,19 +94,15 @@ static void ndpi_search_xbox(struct ndpi_detection_module_struct *ndpi_struct, s } if(flow->packet_counter >= 5) - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_xbox_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_xbox_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Xbox", ndpi_struct, *id, - NDPI_PROTOCOL_XBOX, - ndpi_search_xbox, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Xbox", ndpi_struct, + ndpi_search_xbox, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_XBOX); } diff --git a/src/lib/protocols/xdmcp.c b/src/lib/protocols/xdmcp.c index f90877a38..7aadb0f28 100644 --- a/src/lib/protocols/xdmcp.c +++ b/src/lib/protocols/xdmcp.c @@ -2,7 +2,7 @@ * xdmcp.c * * Copyright (C) 2009-11 - ipoque GmbH - * Copyright (C) 2011-22 - ntop.org + * Copyright (C) 2011-25 - 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 @@ -61,18 +61,14 @@ static void ndpi_search_xdmcp(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_xdmcp_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_xdmcp_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("XDMCP", ndpi_struct, *id, - NDPI_PROTOCOL_XDMCP, - ndpi_search_xdmcp, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("XDMCP", ndpi_struct, + ndpi_search_xdmcp, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_XDMCP); } diff --git a/src/lib/protocols/xiaomi.c b/src/lib/protocols/xiaomi.c index 04b24c986..baf8e31d5 100644 --- a/src/lib/protocols/xiaomi.c +++ b/src/lib/protocols/xiaomi.c @@ -107,16 +107,12 @@ static void ndpi_search_xiaomi(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_xiaomi_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Xiaomi", ndpi_struct, *id, - NDPI_PROTOCOL_XIAOMI, - ndpi_search_xiaomi, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - *id += 1; +void init_xiaomi_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Xiaomi", ndpi_struct, + ndpi_search_xiaomi, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_XIAOMI); } diff --git a/src/lib/protocols/yojimbo.c b/src/lib/protocols/yojimbo.c index 9434bb5ee..5b2440f11 100644 --- a/src/lib/protocols/yojimbo.c +++ b/src/lib/protocols/yojimbo.c @@ -46,7 +46,7 @@ static void ndpi_search_yojimbo(struct ndpi_detection_module_struct *ndpi_struct if (packet->payload_packet_len < 9) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -57,19 +57,14 @@ static void ndpi_search_yojimbo(struct ndpi_detection_module_struct *ndpi_struct return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_yojimbo_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_yojimbo_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Yojimbo", ndpi_struct, *id, - NDPI_PROTOCOL_YOJIMBO, - ndpi_search_yojimbo, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Yojimbo", ndpi_struct, + ndpi_search_yojimbo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_YOJIMBO); } diff --git a/src/lib/protocols/z3950.c b/src/lib/protocols/z3950.c index 92eed01b0..99292e4fa 100644 --- a/src/lib/protocols/z3950.c +++ b/src/lib/protocols/z3950.c @@ -94,7 +94,7 @@ static void ndpi_search_z3950(struct ndpi_detection_module_struct *ndpi_struct, int ret = z3950_parse_sequences(packet, minimum_expected_sequences); if(ret < 0) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -103,30 +103,25 @@ static void ndpi_search_z3950(struct ndpi_detection_module_struct *ndpi_struct, return; } - if(flow->z3950_stage == 3) { + if(flow->l4.tcp.z3950_stage == 3) { if(flow->packet_direction_counter[0] && flow->packet_direction_counter[1]) ndpi_int_z3950_add_connection(ndpi_struct, flow); else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); /* Skip if unidirectional traffic */ + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); /* Skip if unidirectional traffic */ } else - flow->z3950_stage++; + flow->l4.tcp.z3950_stage++; return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* ***************************************************************** */ -void init_z3950_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Z3950", - ndpi_struct, *id, - NDPI_PROTOCOL_Z3950, - ndpi_search_z3950, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_z3950_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Z3950", ndpi_struct, + ndpi_search_z3950, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_Z3950); } diff --git a/src/lib/protocols/zabbix.c b/src/lib/protocols/zabbix.c index 84e466de5..470bafd39 100644 --- a/src/lib/protocols/zabbix.c +++ b/src/lib/protocols/zabbix.c @@ -45,18 +45,14 @@ static void ndpi_search_zabbix(struct ndpi_detection_module_struct *ndpi_struct, && (memcmp(packet->payload, tomatch, 4) == 0)) ndpi_int_zabbix_add_connection(ndpi_struct, flow); else - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* *************************************************** */ -void init_zabbix_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Zabbix", ndpi_struct, *id, - NDPI_PROTOCOL_ZABBIX, - ndpi_search_zabbix, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_zabbix_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Zabbix", ndpi_struct, + ndpi_search_zabbix, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ZABBIX); } diff --git a/src/lib/protocols/zattoo.c b/src/lib/protocols/zattoo.c index aba720243..e285ee47a 100644 --- a/src/lib/protocols/zattoo.c +++ b/src/lib/protocols/zattoo.c @@ -204,18 +204,14 @@ static void ndpi_search_zattoo(struct ndpi_detection_module_struct *ndpi_struct, } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_zattoo_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_zattoo_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("Zattoo", ndpi_struct, *id, - NDPI_PROTOCOL_ZATTOO, - ndpi_search_zattoo, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("Zattoo", ndpi_struct, + ndpi_search_zattoo, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_OR_UDP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ZATTOO); } diff --git a/src/lib/protocols/zeromq.c b/src/lib/protocols/zeromq.c index d90d36a68..b79a004b1 100644 --- a/src/lib/protocols/zeromq.c +++ b/src/lib/protocols/zeromq.c @@ -24,79 +24,31 @@ #include "ndpi_api.h" #include "ndpi_private.h" -static void ndpi_int_zmq_add_connection(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ZMQ, NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); - NDPI_LOG_INFO(ndpi_struct, "found ZMQ\n"); -} - - -static void ndpi_check_zmq(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { +static const u_int8_t zmtp_signature[] = { 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7F }; - struct ndpi_packet_struct *packet = &ndpi_struct->packet; - u_int32_t payload_len = packet->payload_packet_len; - u_char p0[] = { 0x00, 0x00, 0x00, 0x05, 0x01, 0x66, 0x6c, 0x6f, 0x77 }; - u_char p1[] = { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7f }; - u_char p2[] = { 0x28, 0x66, 0x6c, 0x6f, 0x77, 0x00 }; +static void ndpi_search_zmq(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) +{ + struct ndpi_packet_struct const * const packet = &ndpi_struct->packet; - /* Break after 10 packets. */ - if(flow->packet_counter > 10) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); - return; - } + NDPI_LOG_DBG(ndpi_struct, "search ZMQ\n"); - if(flow->l4.tcp.prev_zmq_pkt_len == 0) { - flow->l4.tcp.prev_zmq_pkt_len = ndpi_min(packet->payload_packet_len, 10); - memcpy(flow->l4.tcp.prev_zmq_pkt, packet->payload, flow->l4.tcp.prev_zmq_pkt_len); - return; /* Too early */ - } - if(payload_len == 2) { - if(flow->l4.tcp.prev_zmq_pkt_len == 2) { - if((memcmp(packet->payload, "\01\01", 2) == 0) - && (memcmp(flow->l4.tcp.prev_zmq_pkt, "\01\02", 2) == 0)) { - ndpi_int_zmq_add_connection(ndpi_struct, flow); - return; - } - } else if(flow->l4.tcp.prev_zmq_pkt_len == 9) { - if((memcmp(packet->payload, "\00\00", 2) == 0) - && (memcmp(flow->l4.tcp.prev_zmq_pkt, p0, 9) == 0)) { - ndpi_int_zmq_add_connection(ndpi_struct, flow); - return; - } - } else if(flow->l4.tcp.prev_zmq_pkt_len == 10) { - if((memcmp(packet->payload, "\01\02", 2) == 0) - && (memcmp(flow->l4.tcp.prev_zmq_pkt, p1, 10) == 0)) { - ndpi_int_zmq_add_connection(ndpi_struct, flow); - return; - } - } - } else if(payload_len >= 10) { - if(flow->l4.tcp.prev_zmq_pkt_len == 10) { - if(((memcmp(packet->payload, p1, 10) == 0) - && (memcmp(flow->l4.tcp.prev_zmq_pkt, p1, 10) == 0)) - || ((memcmp(&packet->payload[1], p2, sizeof(p2)) == 0) - && (memcmp(&flow->l4.tcp.prev_zmq_pkt[1], p2, sizeof(p2)) == 0))) { - ndpi_int_zmq_add_connection(ndpi_struct, flow); - return; - } + if (packet->payload_packet_len > 9) { + if (memcmp(packet->payload, zmtp_signature, sizeof(zmtp_signature)) == 0) { + ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_ZMQ, + NDPI_PROTOCOL_UNKNOWN, NDPI_CONFIDENCE_DPI); + NDPI_LOG_INFO(ndpi_struct, "found ZMQ\n"); + return; } } -} -static void ndpi_search_zmq(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - NDPI_LOG_DBG(ndpi_struct, "search ZMQ\n"); - - ndpi_check_zmq(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_zmq_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) +void init_zmq_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("ZeroMQ", ndpi_struct, *id, - NDPI_PROTOCOL_ZMQ, - ndpi_search_zmq, /* TODO: add UDP support */ - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("ZeroMQ", ndpi_struct, + ndpi_search_zmq, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_TCP_WITH_PAYLOAD_WITHOUT_RETRANSMISSION, + 1, NDPI_PROTOCOL_ZMQ); } diff --git a/src/lib/protocols/zoom.c b/src/lib/protocols/zoom.c index a115fe37b..e573fc8f1 100644 --- a/src/lib/protocols/zoom.c +++ b/src/lib/protocols/zoom.c @@ -242,18 +242,14 @@ static void ndpi_search_zoom(struct ndpi_detection_module_struct *ndpi_struct, } } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } /* *************************************************** */ -void init_zoom_dissector(struct ndpi_detection_module_struct *ndpi_struct, u_int32_t *id) { - ndpi_set_bitmask_protocol_detection("Zoom", ndpi_struct, *id, - NDPI_PROTOCOL_ZOOM, - ndpi_search_zoom, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; +void init_zoom_dissector(struct ndpi_detection_module_struct *ndpi_struct) { + register_dissector("Zoom", ndpi_struct, + ndpi_search_zoom, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ZOOM); } diff --git a/src/lib/protocols/zug.c b/src/lib/protocols/zug.c index b4f6b2e16..3a135648b 100644 --- a/src/lib/protocols/zug.c +++ b/src/lib/protocols/zug.c @@ -44,7 +44,7 @@ static void ndpi_search_zug(struct ndpi_detection_module_struct *ndpi_struct, if (packet->payload_packet_len < 5) { - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); return; } @@ -55,19 +55,14 @@ static void ndpi_search_zug(struct ndpi_detection_module_struct *ndpi_struct, return; } - NDPI_EXCLUDE_PROTO(ndpi_struct, flow); + NDPI_EXCLUDE_DISSECTOR(ndpi_struct, flow); } -void init_zug_dissector(struct ndpi_detection_module_struct *ndpi_struct, - u_int32_t *id) +void init_zug_dissector(struct ndpi_detection_module_struct *ndpi_struct) { - ndpi_set_bitmask_protocol_detection("ZUG", ndpi_struct, *id, - NDPI_PROTOCOL_ZUG, - ndpi_search_zug, - NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, - SAVE_DETECTION_BITMASK_AS_UNKNOWN, - ADD_TO_DETECTION_BITMASK); - - *id += 1; + register_dissector("ZUG", ndpi_struct, + ndpi_search_zug, + NDPI_SELECTION_BITMASK_PROTOCOL_V4_V6_UDP_WITH_PAYLOAD, + 1, NDPI_PROTOCOL_ZUG); } diff --git a/src/lib/third_party/include/uthash.h b/src/lib/third_party/include/uthash.h index 7cf305d41..1be580011 100644 --- a/src/lib/third_party/include/uthash.h +++ b/src/lib/third_party/include/uthash.h @@ -73,10 +73,10 @@ do { #endif #ifndef uthash_malloc -#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#define uthash_malloc(sz) ndpi_malloc(sz) /* malloc fcn */ #endif #ifndef uthash_free -#define uthash_free(ptr,sz) free(ptr) /* free fcn */ +#define uthash_free(ptr,sz) ndpi_free(ptr) /* free fcn */ #endif #ifndef uthash_bzero #define uthash_bzero(a,n) memset(a,'\0',n) diff --git a/src/lib/third_party/src/fuzz/pl7m.c b/src/lib/third_party/src/fuzz/pl7m.c index 103c209c7..7959bf955 100644 --- a/src/lib/third_party/src/fuzz/pl7m.c +++ b/src/lib/third_party/src/fuzz/pl7m.c @@ -957,7 +957,7 @@ static size_t internal_FuzzerMutate(uint8_t *Data, size_t Size, size_t MaxSize) } #endif - +#ifndef PL7M_USE_SIMPLEST_MUTATOR static void update_do_l7(struct m_pkt *p) { struct udphdr *udp_h; @@ -1044,6 +1044,7 @@ static void update_do_l7(struct m_pkt *p) p->header.len = p->header.caplen; assert(p->header.caplen <= MAX_PKT_LENGTH); } +#endif #ifdef PL7M_USE_SIMPLEST_MUTATOR static void update_do_simplest(struct m_pkt *p) |