recog 2.3.20 → 2.3.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +8 -0
  3. data/.github/workflows/ci.yml +1 -1
  4. data/.github/workflows/verify.yml +89 -0
  5. data/.vscode/bin/monitor-recog-fingerprints.sh +54 -0
  6. data/.vscode/extensions.json +5 -0
  7. data/.vscode/settings.json +8 -0
  8. data/.vscode/tasks.json +77 -0
  9. data/CONTRIBUTING.md +8 -0
  10. data/README.md +17 -0
  11. data/bin/recog_standardize +28 -13
  12. data/bin/recog_verify +42 -8
  13. data/cpe-remap.yaml +62 -3
  14. data/features/data/schema_failure.xml +4 -0
  15. data/features/data/tests_with_failures.xml +6 -0
  16. data/features/support/hooks.rb +9 -0
  17. data/features/verify.feature +85 -21
  18. data/identifiers/fields.txt +6 -5
  19. data/identifiers/hw_device.txt +8 -0
  20. data/identifiers/hw_family.txt +8 -0
  21. data/identifiers/hw_product.txt +54 -0
  22. data/identifiers/os_device.txt +2 -0
  23. data/identifiers/os_family.txt +2 -0
  24. data/identifiers/os_product.txt +18 -2
  25. data/identifiers/service_product.txt +26 -0
  26. data/identifiers/vendor.txt +62 -1
  27. data/lib/recog/db.rb +2 -1
  28. data/lib/recog/fingerprint.rb +33 -6
  29. data/lib/recog/fingerprint_parse_error.rb +10 -0
  30. data/lib/recog/nizer.rb +1 -82
  31. data/lib/recog/verifier.rb +9 -9
  32. data/lib/recog/verify_reporter.rb +17 -6
  33. data/lib/recog/version.rb +1 -1
  34. data/requirements.txt +1 -1
  35. data/spec/data/external_example_fingerprint/hp_printer_ex_01.txt +1 -0
  36. data/spec/data/external_example_fingerprint/hp_printer_ex_02.txt +1 -0
  37. data/spec/data/external_example_fingerprint.xml +8 -0
  38. data/spec/data/external_example_illegal_path_fingerprint.xml +7 -0
  39. data/spec/lib/fingerprint_self_test_spec.rb +1 -0
  40. data/spec/lib/recog/db_spec.rb +84 -61
  41. data/spec/lib/recog/fingerprint_spec.rb +4 -4
  42. data/spec/lib/recog/verify_reporter_spec.rb +73 -4
  43. data/tools/dev/hooks/pre-commit +21 -0
  44. data/update_cpes.py +130 -37
  45. data/xml/apache_os.xml +98 -56
  46. data/xml/architecture.xml +15 -1
  47. data/xml/dhcp_vendor_class.xml +206 -0
  48. data/xml/dns_versionbind.xml +26 -13
  49. data/xml/favicons.xml +236 -47
  50. data/xml/fingerprints.xsd +9 -1
  51. data/xml/ftp_banners.xml +213 -197
  52. data/xml/h323_callresp.xml +101 -101
  53. data/xml/hp_pjl_id.xml +84 -84
  54. data/xml/html_title.xml +715 -45
  55. data/xml/http_cookies.xml +143 -80
  56. data/xml/http_servers.xml +510 -310
  57. data/xml/http_wwwauth.xml +177 -75
  58. data/xml/imap_banners.xml +10 -10
  59. data/xml/mdns_device-info_txt.xml +421 -26
  60. data/xml/mysql_banners.xml +3 -2
  61. data/xml/nntp_banners.xml +12 -9
  62. data/xml/ntp_banners.xml +97 -97
  63. data/xml/operating_system.xml +98 -83
  64. data/xml/pop_banners.xml +27 -27
  65. data/xml/rsh_resp.xml +3 -3
  66. data/xml/sip_banners.xml +46 -8
  67. data/xml/sip_user_agents.xml +180 -27
  68. data/xml/smb_native_lm.xml +5 -5
  69. data/xml/smb_native_os.xml +28 -25
  70. data/xml/smtp_banners.xml +258 -254
  71. data/xml/smtp_ehlo.xml +1 -1
  72. data/xml/smtp_help.xml +11 -11
  73. data/xml/smtp_noop.xml +2 -2
  74. data/xml/snmp_sysdescr.xml +1554 -1429
  75. data/xml/snmp_sysobjid.xml +27 -27
  76. data/xml/ssh_banners.xml +27 -20
  77. data/xml/telnet_banners.xml +256 -57
  78. data/xml/tls_jarm.xml +48 -6
  79. data/xml/x11_banners.xml +3 -3
  80. data/xml/x509_issuers.xml +69 -2
  81. data/xml/x509_subjects.xml +144 -33
  82. metadata +24 -4
  83. data/lib/recog/verifier_factory.rb +0 -13
@@ -14,6 +14,16 @@
14
14
  version of OS X plus 4. E.g. osxvers=13 means OS X 10.9
15
15
  -->
16
16
 
17
+ <fingerprint pattern="^osxvers=21">
18
+ <description>OS X 12.0 (Monterey)</description>
19
+ <example>osxvers=21</example>
20
+ <param pos="0" name="os.vendor" value="Apple"/>
21
+ <param pos="0" name="os.family" value="Mac OS X"/>
22
+ <param pos="0" name="os.product" value="Mac OS X"/>
23
+ <param pos="0" name="os.version" value="12.0"/>
24
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:mac_os_x:12.0"/>
25
+ </fingerprint>
26
+
17
27
  <fingerprint pattern="^osxvers=20">
18
28
  <description>OS X 11.0 (Big Sur)</description>
19
29
  <example>osxvers=20</example>
@@ -229,7 +239,7 @@
229
239
 
230
240
  <!-- TODO: Break this down into specific models and generations -->
231
241
 
232
- <fingerprint pattern="^model=(?:AirPort6|TimeCapsule).*$">
242
+ <fingerprint pattern="^model=(?:AirPort6|TimeCapsule)">
233
243
  <description>Time Capsule</description>
234
244
  <example>model=AirPort6</example>
235
245
  <example>model=AirPort6,106</example>
@@ -259,6 +269,7 @@
259
269
  <param pos="0" name="hw.family" value="MacBook Pro"/>
260
270
  <param pos="0" name="hw.product" value="MacBook Pro (13-inch, M1, 2020)"/>
261
271
  <param pos="0" name="hw.device" value="Laptop"/>
272
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
262
273
  </fingerprint>
263
274
 
264
275
  <fingerprint pattern="^model=MacBookPro16,1$">
@@ -272,6 +283,7 @@
272
283
  <param pos="0" name="hw.family" value="MacBook Pro"/>
273
284
  <param pos="0" name="hw.product" value="MacBook Pro (16-inch, 2019)"/>
274
285
  <param pos="0" name="hw.device" value="Laptop"/>
286
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
275
287
  </fingerprint>
276
288
 
277
289
  <fingerprint pattern="^model=MacBookPro16,[23]$">
@@ -286,6 +298,7 @@
286
298
  <param pos="0" name="hw.family" value="MacBook Pro"/>
287
299
  <param pos="0" name="hw.product" value="MacBook Pro (13-inch, 2020)"/>
288
300
  <param pos="0" name="hw.device" value="Laptop"/>
301
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
289
302
  </fingerprint>
290
303
 
291
304
  <fingerprint pattern="^model=MacBookPro15,4$">
@@ -299,6 +312,7 @@
299
312
  <param pos="0" name="hw.family" value="MacBook Pro"/>
300
313
  <param pos="0" name="hw.product" value="MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)"/>
301
314
  <param pos="0" name="hw.device" value="Laptop"/>
315
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
302
316
  </fingerprint>
303
317
 
304
318
  <fingerprint pattern="^model=MacBookPro15,3$">
@@ -312,6 +326,7 @@
312
326
  <param pos="0" name="hw.family" value="MacBook Pro"/>
313
327
  <param pos="0" name="hw.product" value="MacBook Pro (15-inch, 2019)"/>
314
328
  <param pos="0" name="hw.device" value="Laptop"/>
329
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
315
330
  </fingerprint>
316
331
 
317
332
  <fingerprint pattern="^model=MacBookPro15,2$">
@@ -325,6 +340,7 @@
325
340
  <param pos="0" name="hw.family" value="MacBook Pro"/>
326
341
  <param pos="0" name="hw.product" value="MacBook Pro (13-inch, 2018, Four Thunderbolt 3 ports)"/>
327
342
  <param pos="0" name="hw.device" value="Laptop"/>
343
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
328
344
  </fingerprint>
329
345
 
330
346
  <fingerprint pattern="^model=MacBookPro15,1$">
@@ -338,6 +354,7 @@
338
354
  <param pos="0" name="hw.family" value="MacBook Pro"/>
339
355
  <param pos="0" name="hw.product" value="MacBook Pro (15-inch, 2018)"/>
340
356
  <param pos="0" name="hw.device" value="Laptop"/>
357
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
341
358
  </fingerprint>
342
359
 
343
360
  <fingerprint pattern="^model=MacBookPro14,3$">
@@ -429,6 +446,7 @@
429
446
  <param pos="0" name="hw.family" value="MacBook Pro"/>
430
447
  <param pos="0" name="hw.product" value="MacBook Pro (Retina, 13-inch, Early 2015)"/>
431
448
  <param pos="0" name="hw.device" value="Laptop"/>
449
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
432
450
  </fingerprint>
433
451
 
434
452
  <fingerprint pattern="^model=MacBookPro11,[45]$">
@@ -443,6 +461,7 @@
443
461
  <param pos="0" name="hw.family" value="MacBook Pro"/>
444
462
  <param pos="0" name="hw.product" value="MacBook Pro (Retina, 15-inch, Mid 2015)"/>
445
463
  <param pos="0" name="hw.device" value="Laptop"/>
464
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_pro:-"/>
446
465
  </fingerprint>
447
466
 
448
467
  <fingerprint pattern="^model=MacBookPro11,3$">
@@ -746,6 +765,7 @@
746
765
  <param pos="0" name="hw.family" value="MacBook"/>
747
766
  <param pos="0" name="hw.product" value="MacBook Air (M1, 2020)"/>
748
767
  <param pos="0" name="hw.device" value="Laptop"/>
768
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_air:-"/>
749
769
  </fingerprint>
750
770
 
751
771
  <fingerprint pattern="^model=MacBookAir9,1$">
@@ -759,6 +779,7 @@
759
779
  <param pos="0" name="hw.family" value="MacBook"/>
760
780
  <param pos="0" name="hw.product" value="MacBook Air (Retina, 13-inch, 2020)"/>
761
781
  <param pos="0" name="hw.device" value="Laptop"/>
782
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_air:-"/>
762
783
  </fingerprint>
763
784
 
764
785
  <fingerprint pattern="^model=MacBookAir8,2$">
@@ -772,6 +793,7 @@
772
793
  <param pos="0" name="hw.family" value="MacBook"/>
773
794
  <param pos="0" name="hw.product" value="MacBook Air (Retina, 13-inch, 2019)"/>
774
795
  <param pos="0" name="hw.device" value="Laptop"/>
796
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_air:-"/>
775
797
  </fingerprint>
776
798
 
777
799
  <fingerprint pattern="^model=MacBookAir8,1$">
@@ -785,6 +807,7 @@
785
807
  <param pos="0" name="hw.family" value="MacBook"/>
786
808
  <param pos="0" name="hw.product" value="MacBook Air (Retina, 13-inch, 2018)"/>
787
809
  <param pos="0" name="hw.device" value="Laptop"/>
810
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_air:-"/>
788
811
  </fingerprint>
789
812
 
790
813
  <fingerprint pattern="^model=MacBookAir7,2$">
@@ -798,6 +821,7 @@
798
821
  <param pos="0" name="hw.family" value="MacBook"/>
799
822
  <param pos="0" name="hw.product" value="MacBook Air (13-inch, 2017)"/>
800
823
  <param pos="0" name="hw.device" value="Laptop"/>
824
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:macbook_air:-"/>
801
825
  </fingerprint>
802
826
 
803
827
  <fingerprint pattern="^model=MacBookAir7,1$">
@@ -1225,6 +1249,34 @@
1225
1249
 
1226
1250
  <!-- iMAC - Reference for the following: https://support.apple.com/en-us/HT201634 -->
1227
1251
 
1252
+ <fingerprint pattern="^model=(?:J457AP|iMac21,2)$">
1253
+ <description>iMac (24-inch, M1, 2021) with Two Thunderbolt / USB 4 port</description>
1254
+ <example>model=iMac21,2</example>
1255
+ <example>model=J457AP</example>
1256
+ <param pos="0" name="os.vendor" value="Apple"/>
1257
+ <param pos="0" name="os.family" value="Mac OS X"/>
1258
+ <param pos="0" name="os.product" value="Mac OS X"/>
1259
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:mac_os_x:-"/>
1260
+ <param pos="0" name="hw.vendor" value="Apple"/>
1261
+ <param pos="0" name="hw.family" value="iMac"/>
1262
+ <param pos="0" name="hw.product" value="iMac (24-inch, M1, 2021)"/>
1263
+ <param pos="0" name="hw.device" value="Desktop"/>
1264
+ </fingerprint>
1265
+
1266
+ <fingerprint pattern="^model=(?:J456AP|iMac21,1)$">
1267
+ <description>iMac (24-inch, M1, 2021) with Two Thunderbolt / USB 4 ports and Two USB 3 ports</description>
1268
+ <example>model=iMac21,1</example>
1269
+ <example>model=J456AP</example>
1270
+ <param pos="0" name="os.vendor" value="Apple"/>
1271
+ <param pos="0" name="os.family" value="Mac OS X"/>
1272
+ <param pos="0" name="os.product" value="Mac OS X"/>
1273
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:mac_os_x:-"/>
1274
+ <param pos="0" name="hw.vendor" value="Apple"/>
1275
+ <param pos="0" name="hw.family" value="iMac"/>
1276
+ <param pos="0" name="hw.product" value="iMac (24-inch, M1, 2021)"/>
1277
+ <param pos="0" name="hw.device" value="Desktop"/>
1278
+ </fingerprint>
1279
+
1228
1280
  <fingerprint pattern="^model=iMac20,1$">
1229
1281
  <description>iMac (Retina 5K, 27-inch, 2020)</description>
1230
1282
  <example>model=iMac20,1</example>
@@ -1236,6 +1288,7 @@
1236
1288
  <param pos="0" name="hw.family" value="iMac"/>
1237
1289
  <param pos="0" name="hw.product" value="iMac (Retina 5K, 27-inch, 2020)"/>
1238
1290
  <param pos="0" name="hw.device" value="Desktop"/>
1291
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:imac:-"/>
1239
1292
  </fingerprint>
1240
1293
 
1241
1294
  <fingerprint pattern="^model=iMac19,1$">
@@ -1249,6 +1302,7 @@
1249
1302
  <param pos="0" name="hw.family" value="iMac"/>
1250
1303
  <param pos="0" name="hw.product" value="iMac (Retina 5K, 27-inch, 2019)"/>
1251
1304
  <param pos="0" name="hw.device" value="Desktop"/>
1305
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:imac:-"/>
1252
1306
  </fingerprint>
1253
1307
 
1254
1308
  <fingerprint pattern="^model=iMac19,2$">
@@ -1262,6 +1316,7 @@
1262
1316
  <param pos="0" name="hw.family" value="iMac"/>
1263
1317
  <param pos="0" name="hw.product" value="iMac (Retina 4K, 21.5-inch, 2019)"/>
1264
1318
  <param pos="0" name="hw.device" value="Desktop"/>
1319
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:imac:-"/>
1265
1320
  </fingerprint>
1266
1321
 
1267
1322
  <fingerprint pattern="^model=iMacPro1,1$">
@@ -1288,6 +1343,7 @@
1288
1343
  <param pos="0" name="hw.family" value="iMac"/>
1289
1344
  <param pos="0" name="hw.product" value="iMac (Retina 5K, 27-inch, 2017)"/>
1290
1345
  <param pos="0" name="hw.device" value="Desktop"/>
1346
+ <param pos="0" name="hw.cpe23" value="cpe:/h:apple:imac:-"/>
1291
1347
  </fingerprint>
1292
1348
 
1293
1349
  <fingerprint pattern="^model=iMac18,2$">
@@ -1539,10 +1595,11 @@
1539
1595
 
1540
1596
  <!-- iPad Pro - Reference for the following: https://www.theiphonewiki.com/ -->
1541
1597
 
1542
- <fingerprint pattern="^model=J42[01]AP$">
1598
+ <fingerprint pattern="^model=(?:J42[01]AP|iPad8,11)$">
1543
1599
  <description>iPad Pro (12.9-inch, 4th generation)</description>
1544
1600
  <example>model=J420AP</example>
1545
1601
  <example>model=J421AP</example>
1602
+ <example>model=iPad8,11</example>
1546
1603
  <param pos="0" name="os.vendor" value="Apple"/>
1547
1604
  <param pos="0" name="os.family" value="iOS"/>
1548
1605
  <param pos="0" name="os.product" value="iOS"/>
@@ -1553,9 +1610,10 @@
1553
1610
  <param pos="0" name="hw.device" value="Tablet"/>
1554
1611
  </fingerprint>
1555
1612
 
1556
- <fingerprint pattern="^model=J41[78]AP$">
1613
+ <fingerprint pattern="^model=(?:J41[78]AP|iPad8,10)$">
1557
1614
  <description>iPad Pro (11-inch, 2nd generation)</description>
1558
1615
  <example>model=J417AP</example>
1616
+ <example>model=iPad8,10</example>
1559
1617
  <param pos="0" name="os.vendor" value="Apple"/>
1560
1618
  <param pos="0" name="os.family" value="iOS"/>
1561
1619
  <param pos="0" name="os.product" value="iOS"/>
@@ -1566,10 +1624,31 @@
1566
1624
  <param pos="0" name="hw.device" value="Tablet"/>
1567
1625
  </fingerprint>
1568
1626
 
1569
- <fingerprint pattern="^model=J32[01]x?AP$">
1627
+ <fingerprint pattern="^model=(?:J51[78]x?AP|iPad13,[4567])$">
1628
+ <description>iPad Pro (11-inch, 3rd generation)</description>
1629
+ <example>model=J517AP</example>
1630
+ <example>model=J517xAP</example>
1631
+ <example>model=J518AP</example>
1632
+ <example>model=J518xAP</example>
1633
+ <example>model=iPad13,4</example>
1634
+ <example>model=iPad13,5</example>
1635
+ <example>model=iPad13,6</example>
1636
+ <example>model=iPad13,7</example>
1637
+ <param pos="0" name="os.vendor" value="Apple"/>
1638
+ <param pos="0" name="os.family" value="iOS"/>
1639
+ <param pos="0" name="os.product" value="iOS"/>
1640
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1641
+ <param pos="0" name="hw.vendor" value="Apple"/>
1642
+ <param pos="0" name="hw.family" value="iPad Pro"/>
1643
+ <param pos="0" name="hw.product" value="iPad Pro (11-inch, 3rd generation)"/>
1644
+ <param pos="0" name="hw.device" value="Tablet"/>
1645
+ </fingerprint>
1646
+
1647
+ <fingerprint pattern="^model=(?:J32[01]x?AP|iPad8,5)$">
1570
1648
  <description>iPad Pro (12.9-inch, 3rd generation)</description>
1571
1649
  <example>model=J320AP</example>
1572
1650
  <example>model=J321xAP</example>
1651
+ <example>model=iPad8,5</example>
1573
1652
  <param pos="0" name="os.vendor" value="Apple"/>
1574
1653
  <param pos="0" name="os.family" value="iOS"/>
1575
1654
  <param pos="0" name="os.product" value="iOS"/>
@@ -1580,10 +1659,11 @@
1580
1659
  <param pos="0" name="hw.device" value="Tablet"/>
1581
1660
  </fingerprint>
1582
1661
 
1583
- <fingerprint pattern="^model=J31[78]x?AP$">
1662
+ <fingerprint pattern="^model=(?:J31[78]x?AP|iPad8,1)$">
1584
1663
  <description>iPad Pro (11-inch)</description>
1585
1664
  <example>model=J317AP</example>
1586
1665
  <example>model=J318xAP</example>
1666
+ <example>model=iPad8,1</example>
1587
1667
  <param pos="0" name="os.vendor" value="Apple"/>
1588
1668
  <param pos="0" name="os.family" value="iOS"/>
1589
1669
  <param pos="0" name="os.product" value="iOS"/>
@@ -1651,10 +1731,59 @@
1651
1731
 
1652
1732
  <!-- iPad -->
1653
1733
 
1654
- <fingerprint pattern="^model=J7[12]bAP$">
1734
+ <fingerprint pattern="^model=(?:J18[12]AP|iPad12,[12])$">
1735
+ <description>iPad (9th generation)</description>
1736
+ <example>model=J181AP</example>
1737
+ <example>model=J182AP</example>
1738
+ <example>model=iPad12,1</example>
1739
+ <example>model=iPad12,2</example>
1740
+ <param pos="0" name="os.vendor" value="Apple"/>
1741
+ <param pos="0" name="os.family" value="iOS"/>
1742
+ <param pos="0" name="os.product" value="iOS"/>
1743
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1744
+ <param pos="0" name="hw.vendor" value="Apple"/>
1745
+ <param pos="0" name="hw.family" value="iPad"/>
1746
+ <param pos="0" name="hw.product" value="iPad (9th generation)"/>
1747
+ <param pos="0" name="hw.device" value="Tablet"/>
1748
+ </fingerprint>
1749
+
1750
+ <fingerprint pattern="^model=(?:J17[12]aAP|iPad11,[67])$">
1751
+ <description>iPad (8th generation)</description>
1752
+ <example>model=J172aAP</example>
1753
+ <example>model=J171aAP</example>
1754
+ <example>model=iPad11,6</example>
1755
+ <example>model=iPad11,7</example>
1756
+ <param pos="0" name="os.vendor" value="Apple"/>
1757
+ <param pos="0" name="os.family" value="iOS"/>
1758
+ <param pos="0" name="os.product" value="iOS"/>
1759
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1760
+ <param pos="0" name="hw.vendor" value="Apple"/>
1761
+ <param pos="0" name="hw.family" value="iPad"/>
1762
+ <param pos="0" name="hw.product" value="iPad (8th generation)"/>
1763
+ <param pos="0" name="hw.device" value="Tablet"/>
1764
+ </fingerprint>
1765
+
1766
+ <fingerprint pattern="^model=(?:J17[12]AP|iPad7,1[12])$">
1767
+ <description>iPad (7th generation)</description>
1768
+ <example>model=J171AP</example>
1769
+ <example>model=J172AP</example>
1770
+ <example>model=iPad7,11</example>
1771
+ <example>model=iPad7,12</example>
1772
+ <param pos="0" name="os.vendor" value="Apple"/>
1773
+ <param pos="0" name="os.family" value="iOS"/>
1774
+ <param pos="0" name="os.product" value="iOS"/>
1775
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1776
+ <param pos="0" name="hw.vendor" value="Apple"/>
1777
+ <param pos="0" name="hw.family" value="iPad"/>
1778
+ <param pos="0" name="hw.product" value="iPad (7th generation)"/>
1779
+ <param pos="0" name="hw.device" value="Tablet"/>
1780
+ </fingerprint>
1781
+
1782
+ <fingerprint pattern="^model=(?:J7[12]bAP|iPad7,5)$">
1655
1783
  <description>iPad (6th generation)</description>
1656
1784
  <example>model=J72bAP</example>
1657
1785
  <example>model=J71bAP</example>
1786
+ <example>model=iPad7,5</example>
1658
1787
  <param pos="0" name="os.vendor" value="Apple"/>
1659
1788
  <param pos="0" name="os.family" value="iOS"/>
1660
1789
  <param pos="0" name="os.product" value="iOS"/>
@@ -1665,9 +1794,11 @@
1665
1794
  <param pos="0" name="hw.device" value="Tablet"/>
1666
1795
  </fingerprint>
1667
1796
 
1668
- <fingerprint pattern="^model=J71[ts]AP$">
1797
+ <fingerprint pattern="^model=(?:J71[ts]AP|iPad6,11)$">
1669
1798
  <description>iPad (5th generation)</description>
1670
1799
  <example>model=J71tAP</example>
1800
+ <example>model=J71sAP</example>
1801
+ <example>model=iPad6,11</example>
1671
1802
  <param pos="0" name="os.vendor" value="Apple"/>
1672
1803
  <param pos="0" name="os.family" value="iOS"/>
1673
1804
  <param pos="0" name="os.product" value="iOS"/>
@@ -1693,6 +1824,22 @@
1693
1824
 
1694
1825
  <!-- iPad Air -->
1695
1826
 
1827
+ <fingerprint pattern="^model=(?:J30[78]AP|iPad13,[12])$">
1828
+ <description>iPad Air (4th generation)</description>
1829
+ <example>model=J307AP</example>
1830
+ <example>model=J308AP</example>
1831
+ <example>model=iPad13,1</example>
1832
+ <example>model=iPad13,2</example>
1833
+ <param pos="0" name="os.vendor" value="Apple"/>
1834
+ <param pos="0" name="os.family" value="iOS"/>
1835
+ <param pos="0" name="os.product" value="iOS"/>
1836
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1837
+ <param pos="0" name="hw.vendor" value="Apple"/>
1838
+ <param pos="0" name="hw.family" value="iPad Air"/>
1839
+ <param pos="0" name="hw.product" value="iPad Air (4th generation)"/>
1840
+ <param pos="0" name="hw.device" value="Tablet"/>
1841
+ </fingerprint>
1842
+
1696
1843
  <fingerprint pattern="^model=J21[78]AP$">
1697
1844
  <description>iPad Air (3rd generation)</description>
1698
1845
  <example>model=J218AP</example>
@@ -1706,9 +1853,10 @@
1706
1853
  <param pos="0" name="hw.device" value="Tablet"/>
1707
1854
  </fingerprint>
1708
1855
 
1709
- <fingerprint pattern="^model=J8[12]AP$">
1856
+ <fingerprint pattern="^model=(?:J8[12]AP|iPad5,3)$">
1710
1857
  <description>iPad Air 2</description>
1711
1858
  <example>model=J81AP</example>
1859
+ <example>model=iPad5,3</example>
1712
1860
  <param pos="0" name="os.vendor" value="Apple"/>
1713
1861
  <param pos="0" name="os.family" value="iOS"/>
1714
1862
  <param pos="0" name="os.product" value="iOS"/>
@@ -1734,6 +1882,22 @@
1734
1882
 
1735
1883
  <!-- iPad mini -->
1736
1884
 
1885
+ <fingerprint pattern="^model=(?:J31[01]AP|iPad14,[12])$">
1886
+ <description>iPad mini (6th generation)</description>
1887
+ <example>model=J310AP</example>
1888
+ <example>model=J311AP</example>
1889
+ <example>model=iPad14,1</example>
1890
+ <example>model=iPad14,2</example>
1891
+ <param pos="0" name="os.vendor" value="Apple"/>
1892
+ <param pos="0" name="os.family" value="iOS"/>
1893
+ <param pos="0" name="os.product" value="iOS"/>
1894
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
1895
+ <param pos="0" name="hw.vendor" value="Apple"/>
1896
+ <param pos="0" name="hw.family" value="iPad mini"/>
1897
+ <param pos="0" name="hw.product" value="iPad mini (6th generation)"/>
1898
+ <param pos="0" name="hw.device" value="Tablet"/>
1899
+ </fingerprint>
1900
+
1737
1901
  <fingerprint pattern="^model=J21[01]AP$">
1738
1902
  <description>iPad mini (5th generation)</description>
1739
1903
  <example>model=J210AP</example>
@@ -1747,9 +1911,10 @@
1747
1911
  <param pos="0" name="hw.device" value="Tablet"/>
1748
1912
  </fingerprint>
1749
1913
 
1750
- <fingerprint pattern="^model=J9[67]AP$">
1914
+ <fingerprint pattern="^model=(?:J9[67]AP|iPad5,2)$">
1751
1915
  <description>iPad mini 4</description>
1752
1916
  <example>model=J97AP</example>
1917
+ <example>model=iPad5,2</example>
1753
1918
  <param pos="0" name="os.vendor" value="Apple"/>
1754
1919
  <param pos="0" name="os.family" value="iOS"/>
1755
1920
  <param pos="0" name="os.product" value="iOS"/>
@@ -1760,9 +1925,10 @@
1760
1925
  <param pos="0" name="hw.device" value="Tablet"/>
1761
1926
  </fingerprint>
1762
1927
 
1763
- <fingerprint pattern="^model=J8[567]mAP$">
1928
+ <fingerprint pattern="^model=(?:J8[567]mAP|iPad4,9)$">
1764
1929
  <description>iPad mini 3</description>
1765
1930
  <example>model=J87mAP</example>
1931
+ <example>model=iPad4,9</example>
1766
1932
  <param pos="0" name="os.vendor" value="Apple"/>
1767
1933
  <param pos="0" name="os.family" value="iOS"/>
1768
1934
  <param pos="0" name="os.product" value="iOS"/>
@@ -1802,10 +1968,25 @@
1802
1968
 
1803
1969
  <!-- HomePod -->
1804
1970
 
1805
- <fingerprint pattern="^model=B238a?AP$">
1971
+ <fingerprint pattern="^model=(?:B520AP|AudioAccessory5,1)$">
1972
+ <description>HomePod mini</description>
1973
+ <example>model=B520AP</example>
1974
+ <example>model=AudioAccessory5,1</example>
1975
+ <param pos="0" name="os.vendor" value="Apple"/>
1976
+ <param pos="0" name="os.family" value="audioOS"/>
1977
+ <param pos="0" name="os.product" value="audioOS"/>
1978
+ <param pos="0" name="hw.vendor" value="Apple"/>
1979
+ <param pos="0" name="hw.family" value="HomePod"/>
1980
+ <param pos="0" name="hw.product" value="HomePod mini"/>
1981
+ <param pos="0" name="hw.device" value="Media Server"/>
1982
+ </fingerprint>
1983
+
1984
+ <fingerprint pattern="^model=(?:B238a?AP|AudioAccessory1,[12])$">
1806
1985
  <description>HomePod</description>
1807
1986
  <example>model=B238aAP</example>
1808
1987
  <example>model=B238AP</example>
1988
+ <example>model=AudioAccessory1,1</example>
1989
+ <example>model=AudioAccessory1,2</example>
1809
1990
  <param pos="0" name="os.vendor" value="Apple"/>
1810
1991
  <param pos="0" name="os.family" value="audioOS"/>
1811
1992
  <param pos="0" name="os.product" value="audioOS"/>
@@ -1817,6 +1998,22 @@
1817
1998
 
1818
1999
  <!-- Apple TV -->
1819
2000
 
2001
+ <fingerprint pattern="^model=(?:J305AP|AppleTV11,1)$">
2002
+ <description>Apple TV 4K (2nd generation)</description>
2003
+ <example>model=J305AP</example>
2004
+ <example>model=AppleTV11,1</example>
2005
+ <param pos="0" name="os.vendor" value="Apple"/>
2006
+ <param pos="0" name="os.family" value="tvOS"/>
2007
+ <param pos="0" name="os.product" value="tvOS"/>
2008
+ <param pos="0" name="os.certainty" value="0.10"/>
2009
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
2010
+ <param pos="0" name="hw.vendor" value="Apple"/>
2011
+ <param pos="0" name="hw.family" value="Apple TV"/>
2012
+ <param pos="0" name="hw.product" value="Apple TV 4K (2nd generation)"/>
2013
+ <param pos="0" name="hw.device" value="Media Server"/>
2014
+ <param pos="0" name="hw.certainty" value="0.10"/>
2015
+ </fingerprint>
2016
+
1820
2017
  <fingerprint pattern="^model=(?:J105aAP|AppleTV6,2)$">
1821
2018
  <description>Apple TV 4K</description>
1822
2019
  <example>model=J105aAP</example>
@@ -1824,11 +2021,13 @@
1824
2021
  <param pos="0" name="os.vendor" value="Apple"/>
1825
2022
  <param pos="0" name="os.family" value="tvOS"/>
1826
2023
  <param pos="0" name="os.product" value="tvOS"/>
2024
+ <param pos="0" name="os.certainty" value="0.10"/>
1827
2025
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1828
2026
  <param pos="0" name="hw.vendor" value="Apple"/>
1829
2027
  <param pos="0" name="hw.family" value="Apple TV"/>
1830
2028
  <param pos="0" name="hw.product" value="Apple TV 4K"/>
1831
2029
  <param pos="0" name="hw.device" value="Media Server"/>
2030
+ <param pos="0" name="hw.certainty" value="0.10"/>
1832
2031
  </fingerprint>
1833
2032
 
1834
2033
  <fingerprint pattern="^model=(?:J42dAP|AppleTV5,3)$">
@@ -1838,11 +2037,13 @@
1838
2037
  <param pos="0" name="os.vendor" value="Apple"/>
1839
2038
  <param pos="0" name="os.family" value="tvOS"/>
1840
2039
  <param pos="0" name="os.product" value="tvOS"/>
2040
+ <param pos="0" name="os.certainty" value="0.10"/>
1841
2041
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1842
2042
  <param pos="0" name="hw.vendor" value="Apple"/>
1843
2043
  <param pos="0" name="hw.family" value="Apple TV"/>
1844
2044
  <param pos="0" name="hw.product" value="Apple TV (4th generation)"/>
1845
2045
  <param pos="0" name="hw.device" value="Media Server"/>
2046
+ <param pos="0" name="hw.certainty" value="0.10"/>
1846
2047
  </fingerprint>
1847
2048
 
1848
2049
  <fingerprint pattern="^model=(?:J33[Ii]?AP|AppleTV3,[21])$">
@@ -1855,11 +2056,13 @@
1855
2056
  <param pos="0" name="os.vendor" value="Apple"/>
1856
2057
  <param pos="0" name="os.family" value="tvOS"/>
1857
2058
  <param pos="0" name="os.product" value="tvOS"/>
2059
+ <param pos="0" name="os.certainty" value="0.10"/>
1858
2060
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1859
2061
  <param pos="0" name="hw.vendor" value="Apple"/>
1860
2062
  <param pos="0" name="hw.family" value="Apple TV"/>
1861
2063
  <param pos="0" name="hw.product" value="Apple TV (3rd generation)"/>
1862
2064
  <param pos="0" name="hw.device" value="Media Server"/>
2065
+ <param pos="0" name="hw.certainty" value="0.10"/>
1863
2066
  </fingerprint>
1864
2067
 
1865
2068
  <fingerprint pattern="^model=(?:K66AP|AppleTV2,1)$">
@@ -1869,19 +2072,78 @@
1869
2072
  <param pos="0" name="os.vendor" value="Apple"/>
1870
2073
  <param pos="0" name="os.family" value="tvOS"/>
1871
2074
  <param pos="0" name="os.product" value="tvOS"/>
2075
+ <param pos="0" name="os.certainty" value="0.10"/>
1872
2076
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1873
2077
  <param pos="0" name="hw.vendor" value="Apple"/>
1874
2078
  <param pos="0" name="hw.family" value="Apple TV"/>
1875
2079
  <param pos="0" name="hw.product" value="Apple TV (2nd generation)"/>
1876
2080
  <param pos="0" name="hw.device" value="Media Server"/>
2081
+ <param pos="0" name="hw.certainty" value="0.10"/>
1877
2082
  </fingerprint>
1878
2083
 
1879
2084
  <!-- iPhones - Reference for the following: https://www.theiphonewiki.com/wiki/Category:Devices
1880
2085
  and http://phonedb.net/ -->
1881
2086
 
1882
- <fingerprint pattern="^model=D79AP$">
2087
+ <fingerprint pattern="^model=(?:D64AP|iPhone14,3)$">
2088
+ <description>iPhone 13 Pro Max</description>
2089
+ <example>model=D64AP</example>
2090
+ <example>model=iPhone14,3</example>
2091
+ <param pos="0" name="os.vendor" value="Apple"/>
2092
+ <param pos="0" name="os.family" value="iOS"/>
2093
+ <param pos="0" name="os.product" value="iOS"/>
2094
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2095
+ <param pos="0" name="hw.vendor" value="Apple"/>
2096
+ <param pos="0" name="hw.family" value="iPhone"/>
2097
+ <param pos="0" name="hw.product" value="iPhone 13 Pro Max"/>
2098
+ <param pos="0" name="hw.device" value="Mobile Phone"/>
2099
+ </fingerprint>
2100
+
2101
+ <fingerprint pattern="^model=(?:D63AP|iPhone14,2)$">
2102
+ <description>iPhone 13 Pro</description>
2103
+ <example>model=D63AP</example>
2104
+ <example>model=iPhone14,2</example>
2105
+ <param pos="0" name="os.vendor" value="Apple"/>
2106
+ <param pos="0" name="os.family" value="iOS"/>
2107
+ <param pos="0" name="os.product" value="iOS"/>
2108
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2109
+ <param pos="0" name="hw.vendor" value="Apple"/>
2110
+ <param pos="0" name="hw.family" value="iPhone"/>
2111
+ <param pos="0" name="hw.product" value="iPhone 13 Pro"/>
2112
+ <param pos="0" name="hw.device" value="Mobile Phone"/>
2113
+ </fingerprint>
2114
+
2115
+ <fingerprint pattern="^model=(?:D16AP|iPhone14,4)$">
2116
+ <description>iPhone 13 mini</description>
2117
+ <example>model=D16AP</example>
2118
+ <example>model=iPhone14,4</example>
2119
+ <param pos="0" name="os.vendor" value="Apple"/>
2120
+ <param pos="0" name="os.family" value="iOS"/>
2121
+ <param pos="0" name="os.product" value="iOS"/>
2122
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2123
+ <param pos="0" name="hw.vendor" value="Apple"/>
2124
+ <param pos="0" name="hw.family" value="iPhone"/>
2125
+ <param pos="0" name="hw.product" value="iPhone 13 mini"/>
2126
+ <param pos="0" name="hw.device" value="Mobile Phone"/>
2127
+ </fingerprint>
2128
+
2129
+ <fingerprint pattern="^model=(?:D17AP|iPhone14,5)$">
2130
+ <description>iPhone 13)</description>
2131
+ <example>model=D17AP</example>
2132
+ <example>model=iPhone14,5</example>
2133
+ <param pos="0" name="os.vendor" value="Apple"/>
2134
+ <param pos="0" name="os.family" value="iOS"/>
2135
+ <param pos="0" name="os.product" value="iOS"/>
2136
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2137
+ <param pos="0" name="hw.vendor" value="Apple"/>
2138
+ <param pos="0" name="hw.family" value="iPhone"/>
2139
+ <param pos="0" name="hw.product" value="iPhone 13"/>
2140
+ <param pos="0" name="hw.device" value="Mobile Phone"/>
2141
+ </fingerprint>
2142
+
2143
+ <fingerprint pattern="^model=(?:D79AP|iPhone12,8)$">
1883
2144
  <description>iPhone SE (2020)</description>
1884
2145
  <example>model=D79AP</example>
2146
+ <example>model=iPhone12,8</example>
1885
2147
  <param pos="0" name="os.vendor" value="Apple"/>
1886
2148
  <param pos="0" name="os.family" value="iOS"/>
1887
2149
  <param pos="0" name="os.product" value="iOS"/>
@@ -1892,9 +2154,10 @@
1892
2154
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1893
2155
  </fingerprint>
1894
2156
 
1895
- <fingerprint pattern="^model=D54pAP$">
2157
+ <fingerprint pattern="^model=(?:D54pAP|iPhone13,4)$">
1896
2158
  <description>iPhone 12 Pro Max 5G</description>
1897
2159
  <example>model=D54pAP</example>
2160
+ <example>model=iPhone13,4</example>
1898
2161
  <param pos="0" name="os.vendor" value="Apple"/>
1899
2162
  <param pos="0" name="os.family" value="iOS"/>
1900
2163
  <param pos="0" name="os.product" value="iOS"/>
@@ -1905,9 +2168,10 @@
1905
2168
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1906
2169
  </fingerprint>
1907
2170
 
1908
- <fingerprint pattern="^model=D53pAP$">
2171
+ <fingerprint pattern="^model=(?:D53pAP|iPhone13,3)$">
1909
2172
  <description>iPhone 12 Pro 5G</description>
1910
2173
  <example>model=D53pAP</example>
2174
+ <example>model=iPhone13,3</example>
1911
2175
  <param pos="0" name="os.vendor" value="Apple"/>
1912
2176
  <param pos="0" name="os.family" value="iOS"/>
1913
2177
  <param pos="0" name="os.product" value="iOS"/>
@@ -1918,9 +2182,10 @@
1918
2182
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1919
2183
  </fingerprint>
1920
2184
 
1921
- <fingerprint pattern="^model=D53gAP$">
2185
+ <fingerprint pattern="^model=(?:D53gAP|iPhone13,2)$">
1922
2186
  <description>iPhone 12 5G</description>
1923
2187
  <example>model=D53gAP</example>
2188
+ <example>model=iPhone13,2</example>
1924
2189
  <param pos="0" name="os.vendor" value="Apple"/>
1925
2190
  <param pos="0" name="os.family" value="iOS"/>
1926
2191
  <param pos="0" name="os.product" value="iOS"/>
@@ -1931,10 +2196,11 @@
1931
2196
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1932
2197
  </fingerprint>
1933
2198
 
1934
- <fingerprint pattern="^model=D52g?AP$">
2199
+ <fingerprint pattern="^model=(?:D52g?AP|Phone13,1)$">
1935
2200
  <description>iPhone 12 Mini 5G</description>
1936
2201
  <example>model=D52gAP</example>
1937
2202
  <example>model=D52AP</example>
2203
+ <example>model=Phone13,1</example>
1938
2204
  <param pos="0" name="os.vendor" value="Apple"/>
1939
2205
  <param pos="0" name="os.family" value="iOS"/>
1940
2206
  <param pos="0" name="os.product" value="iOS"/>
@@ -1945,10 +2211,11 @@
1945
2211
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1946
2212
  </fingerprint>
1947
2213
 
1948
- <fingerprint pattern="^model=D431p?AP$">
2214
+ <fingerprint pattern="^model=(?:D431p?AP|iPhone12,5)$">
1949
2215
  <description>iPhone 11 Pro Max</description>
1950
2216
  <example>model=D431pAP</example>
1951
2217
  <example>model=D431AP</example>
2218
+ <example>model=iPhone12,5</example>
1952
2219
  <param pos="0" name="os.vendor" value="Apple"/>
1953
2220
  <param pos="0" name="os.family" value="iOS"/>
1954
2221
  <param pos="0" name="os.product" value="iOS"/>
@@ -1959,10 +2226,11 @@
1959
2226
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1960
2227
  </fingerprint>
1961
2228
 
1962
- <fingerprint pattern="^model=D421p?AP$">
2229
+ <fingerprint pattern="^model=(?:D421p?AP|iPhone12,3)$">
1963
2230
  <description>iPhone 11 Pro</description>
1964
2231
  <example>model=D421pAP</example>
1965
2232
  <example>model=D421AP</example>
2233
+ <example>model=iPhone12,3</example>
1966
2234
  <param pos="0" name="os.vendor" value="Apple"/>
1967
2235
  <param pos="0" name="os.family" value="iOS"/>
1968
2236
  <param pos="0" name="os.product" value="iOS"/>
@@ -1973,10 +2241,26 @@
1973
2241
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1974
2242
  </fingerprint>
1975
2243
 
1976
- <fingerprint pattern="^model=D331p?AP$">
2244
+ <fingerprint pattern="^model=(?:N104AP|iPhone12,1)$">
2245
+ <description>iPhone 11</description>
2246
+ <example>model=N104AP</example>
2247
+ <example>model=iPhone12,1</example>
2248
+ <param pos="0" name="os.vendor" value="Apple"/>
2249
+ <param pos="0" name="os.family" value="iOS"/>
2250
+ <param pos="0" name="os.product" value="iOS"/>
2251
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2252
+ <param pos="0" name="hw.vendor" value="Apple"/>
2253
+ <param pos="0" name="hw.family" value="iPhone"/>
2254
+ <param pos="0" name="hw.product" value="iPhone 11"/>
2255
+ <param pos="0" name="hw.device" value="Mobile Phone"/>
2256
+ </fingerprint>
2257
+
2258
+ <fingerprint pattern="^model=(?:D331p?AP|iPhone11,[46])$">
1977
2259
  <description>iPhone XS Max</description>
1978
2260
  <example>model=D331pAP</example>
1979
2261
  <example>model=D331AP</example>
2262
+ <example>model=iPhone11,6</example>
2263
+ <example>model=iPhone11,4</example>
1980
2264
  <param pos="0" name="os.vendor" value="Apple"/>
1981
2265
  <param pos="0" name="os.family" value="iOS"/>
1982
2266
  <param pos="0" name="os.product" value="iOS"/>
@@ -1987,9 +2271,10 @@
1987
2271
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1988
2272
  </fingerprint>
1989
2273
 
1990
- <fingerprint pattern="^model=D321AP$">
2274
+ <fingerprint pattern="^model=(?:D321AP|iPhone11,2)$">
1991
2275
  <description>iPhone XS</description>
1992
2276
  <example>model=D321AP</example>
2277
+ <example>model=iPhone11,2</example>
1993
2278
  <param pos="0" name="os.vendor" value="Apple"/>
1994
2279
  <param pos="0" name="os.family" value="iOS"/>
1995
2280
  <param pos="0" name="os.product" value="iOS"/>
@@ -2000,9 +2285,10 @@
2000
2285
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2001
2286
  </fingerprint>
2002
2287
 
2003
- <fingerprint pattern="^model=N841AP$">
2288
+ <fingerprint pattern="^model=(?:N841AP|iPhone11,8)$">
2004
2289
  <description>iPhone XR</description>
2005
2290
  <example>model=N841AP</example>
2291
+ <example>model=iPhone11,8</example>
2006
2292
  <param pos="0" name="os.vendor" value="Apple"/>
2007
2293
  <param pos="0" name="os.family" value="iOS"/>
2008
2294
  <param pos="0" name="os.product" value="iOS"/>
@@ -2013,10 +2299,12 @@
2013
2299
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2014
2300
  </fingerprint>
2015
2301
 
2016
- <fingerprint pattern="^model=D221?AP$">
2302
+ <fingerprint pattern="^model=(?:D221?AP|iPhone10,[36])$">
2017
2303
  <description>iPhone X</description>
2018
2304
  <example>model=D221AP</example>
2019
2305
  <example>model=D22AP</example>
2306
+ <example>model=iPhone10,6</example>
2307
+ <example>model=iPhone10,3</example>
2020
2308
  <param pos="0" name="os.vendor" value="Apple"/>
2021
2309
  <param pos="0" name="os.family" value="iOS"/>
2022
2310
  <param pos="0" name="os.product" value="iOS"/>
@@ -2027,12 +2315,14 @@
2027
2315
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2028
2316
  </fingerprint>
2029
2317
 
2030
- <fingerprint pattern="^model=D211?A?AP$">
2318
+ <fingerprint pattern="^model=(?:D211?A?AP|iPhone10,[25])$">
2031
2319
  <description>iPhone 8 Plus</description>
2032
2320
  <example>model=D21AP</example>
2033
2321
  <example>model=D21AAP</example>
2034
2322
  <example>model=D211AP</example>
2035
2323
  <example>model=D211AAP</example>
2324
+ <example>model=iPhone10,2</example>
2325
+ <example>model=iPhone10,5</example>
2036
2326
  <param pos="0" name="os.vendor" value="Apple"/>
2037
2327
  <param pos="0" name="os.family" value="iOS"/>
2038
2328
  <param pos="0" name="os.product" value="iOS"/>
@@ -2043,12 +2333,14 @@
2043
2333
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2044
2334
  </fingerprint>
2045
2335
 
2046
- <fingerprint pattern="^model=D201?A?AP$">
2336
+ <fingerprint pattern="^model=(?:D201?A?AP|iPhone10,[14])$">
2047
2337
  <description>iPhone 8</description>
2048
2338
  <example>model=D20AP</example>
2049
2339
  <example>model=D20AAP</example>
2050
2340
  <example>model=D201AP</example>
2051
2341
  <example>model=D201AAP</example>
2342
+ <example>model=iPhone10,1</example>
2343
+ <example>model=iPhone10,4</example>
2052
2344
  <param pos="0" name="os.vendor" value="Apple"/>
2053
2345
  <param pos="0" name="os.family" value="iOS"/>
2054
2346
  <param pos="0" name="os.product" value="iOS"/>
@@ -2059,10 +2351,12 @@
2059
2351
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2060
2352
  </fingerprint>
2061
2353
 
2062
- <fingerprint pattern="^model=D111?AP$">
2354
+ <fingerprint pattern="^model=(?:D111?AP|iPhone9,[24])$">
2063
2355
  <description>iPhone 7 Plus</description>
2064
2356
  <example>model=D11AP</example>
2065
2357
  <example>model=D111AP</example>
2358
+ <example>model=iPhone9,2</example>
2359
+ <example>model=iPhone9,4</example>
2066
2360
  <param pos="0" name="os.vendor" value="Apple"/>
2067
2361
  <param pos="0" name="os.family" value="iOS"/>
2068
2362
  <param pos="0" name="os.product" value="iOS"/>
@@ -2073,10 +2367,11 @@
2073
2367
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2074
2368
  </fingerprint>
2075
2369
 
2076
- <fingerprint pattern="^model=D101?AP$">
2370
+ <fingerprint pattern="^model=(?:D101?AP$|iPhone9,3)">
2077
2371
  <description>iPhone 7</description>
2078
2372
  <example>model=D10AP</example>
2079
2373
  <example>model=D101AP</example>
2374
+ <example>model=iPhone9,3</example>
2080
2375
  <param pos="0" name="os.vendor" value="Apple"/>
2081
2376
  <param pos="0" name="os.family" value="iOS"/>
2082
2377
  <param pos="0" name="os.product" value="iOS"/>
@@ -2268,4 +2563,104 @@
2268
2563
  <param pos="0" name="hw.cpe23" value="cpe:/h:apple:iphone:-"/>
2269
2564
  </fingerprint>
2270
2565
 
2566
+ <!-- iPod -->
2567
+
2568
+ <fingerprint pattern="^model=(?:N112AP|iPod9,1)$">
2569
+ <description>iPod Touch (7th generation)</description>
2570
+ <example>model=N112AP</example>
2571
+ <example>model=iPod9,1</example>
2572
+ <param pos="0" name="os.vendor" value="Apple"/>
2573
+ <param pos="0" name="os.family" value="iOS"/>
2574
+ <param pos="0" name="os.product" value="iOS"/>
2575
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2576
+ <param pos="0" name="hw.vendor" value="Apple"/>
2577
+ <param pos="0" name="hw.family" value="iPod"/>
2578
+ <param pos="0" name="hw.product" value="iPod Touch (7th generation)"/>
2579
+ <param pos="0" name="hw.device" value="Media Player"/>
2580
+ </fingerprint>
2581
+
2582
+ <fingerprint pattern="^model=N102AP$">
2583
+ <description>iPod Touch (6th generation)</description>
2584
+ <example>model=N102AP</example>
2585
+ <param pos="0" name="os.vendor" value="Apple"/>
2586
+ <param pos="0" name="os.family" value="iOS"/>
2587
+ <param pos="0" name="os.product" value="iOS"/>
2588
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2589
+ <param pos="0" name="hw.vendor" value="Apple"/>
2590
+ <param pos="0" name="hw.family" value="iPod"/>
2591
+ <param pos="0" name="hw.product" value="iPod Touch (6th generation)"/>
2592
+ <param pos="0" name="hw.device" value="Media Player"/>
2593
+ </fingerprint>
2594
+
2595
+ <fingerprint pattern="^model=(?:N78a?AP|iPod5,1)$">
2596
+ <description>iPod Touch (5th generation)</description>
2597
+ <example>model=N78AP</example>
2598
+ <example>model=N78aAP</example>
2599
+ <example>model=iPod5,1</example>
2600
+ <param pos="0" name="os.vendor" value="Apple"/>
2601
+ <param pos="0" name="os.family" value="iOS"/>
2602
+ <param pos="0" name="os.product" value="iOS"/>
2603
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2604
+ <param pos="0" name="hw.vendor" value="Apple"/>
2605
+ <param pos="0" name="hw.family" value="iPod"/>
2606
+ <param pos="0" name="hw.product" value="iPod Touch (5th generation)"/>
2607
+ <param pos="0" name="hw.device" value="Media Player"/>
2608
+ </fingerprint>
2609
+
2610
+ <fingerprint pattern="^model=(?:N81AP|iPod4,1)$">
2611
+ <description>iPod Touch (4th generation)</description>
2612
+ <example>model=N81AP</example>
2613
+ <example>model=iPod4,1</example>
2614
+ <param pos="0" name="os.vendor" value="Apple"/>
2615
+ <param pos="0" name="os.family" value="iOS"/>
2616
+ <param pos="0" name="os.product" value="iOS"/>
2617
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2618
+ <param pos="0" name="hw.vendor" value="Apple"/>
2619
+ <param pos="0" name="hw.family" value="iPod"/>
2620
+ <param pos="0" name="hw.product" value="iPod Touch (4th generation)"/>
2621
+ <param pos="0" name="hw.device" value="Media Player"/>
2622
+ </fingerprint>
2623
+
2624
+ <fingerprint pattern="^model=(?:N18AP|iPod3,1)$">
2625
+ <description>iPod Touch (3rd generation)</description>
2626
+ <example>model=N18AP</example>
2627
+ <example>model=iPod3,1</example>
2628
+ <param pos="0" name="os.vendor" value="Apple"/>
2629
+ <param pos="0" name="os.family" value="iOS"/>
2630
+ <param pos="0" name="os.product" value="iOS"/>
2631
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2632
+ <param pos="0" name="hw.vendor" value="Apple"/>
2633
+ <param pos="0" name="hw.family" value="iPod"/>
2634
+ <param pos="0" name="hw.product" value="iPod Touch (3rd generation)"/>
2635
+ <param pos="0" name="hw.device" value="Media Player"/>
2636
+ </fingerprint>
2637
+
2638
+ <fingerprint pattern="^model=(?:N72AP|iPod2,1)$">
2639
+ <description>iPod Touch (2nd generation)</description>
2640
+ <example>model=N72AP</example>
2641
+ <example>model=iPod2,1</example>
2642
+ <param pos="0" name="os.vendor" value="Apple"/>
2643
+ <param pos="0" name="os.family" value="iOS"/>
2644
+ <param pos="0" name="os.product" value="iOS"/>
2645
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2646
+ <param pos="0" name="hw.vendor" value="Apple"/>
2647
+ <param pos="0" name="hw.family" value="iPod"/>
2648
+ <param pos="0" name="hw.product" value="iPod Touch (2nd generation)"/>
2649
+ <param pos="0" name="hw.device" value="Media Player"/>
2650
+ </fingerprint>
2651
+
2652
+ <fingerprint pattern="^model=(?:N45AP|iPod1,1)$">
2653
+ <description>iPod Touch (1st generation)</description>
2654
+ <example>model=N45AP</example>
2655
+ <example>model=iPod1,1</example>
2656
+ <param pos="0" name="os.vendor" value="Apple"/>
2657
+ <param pos="0" name="os.family" value="iOS"/>
2658
+ <param pos="0" name="os.product" value="iOS"/>
2659
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:iphone_os:-"/>
2660
+ <param pos="0" name="hw.vendor" value="Apple"/>
2661
+ <param pos="0" name="hw.family" value="iPod"/>
2662
+ <param pos="0" name="hw.product" value="iPod Touch (1st generation)"/>
2663
+ <param pos="0" name="hw.device" value="Media Player"/>
2664
+ </fingerprint>
2665
+
2271
2666
  </fingerprints>