recog 2.3.21 → 2.3.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +8 -0
  3. data/.github/workflows/verify.yml +89 -0
  4. data/CONTRIBUTING.md +6 -0
  5. data/README.md +17 -0
  6. data/bin/recog_standardize +28 -13
  7. data/bin/recog_verify +1 -2
  8. data/cpe-remap.yaml +13 -0
  9. data/features/verify.feature +14 -14
  10. data/identifiers/fields.txt +5 -4
  11. data/identifiers/hw_device.txt +6 -0
  12. data/identifiers/hw_family.txt +8 -0
  13. data/identifiers/hw_product.txt +51 -0
  14. data/identifiers/os_family.txt +1 -0
  15. data/identifiers/os_product.txt +10 -0
  16. data/identifiers/service_product.txt +12 -0
  17. data/identifiers/vendor.txt +49 -0
  18. data/lib/recog/db.rb +2 -1
  19. data/lib/recog/fingerprint.rb +18 -5
  20. data/lib/recog/verifier.rb +5 -5
  21. data/lib/recog/verifier_factory.rb +3 -3
  22. data/lib/recog/verify_reporter.rb +14 -4
  23. data/lib/recog/version.rb +1 -1
  24. data/spec/lib/fingerprint_self_test_spec.rb +1 -0
  25. data/spec/lib/recog/verify_reporter_spec.rb +69 -0
  26. data/tools/dev/hooks/pre-commit +21 -0
  27. data/update_cpes.py +1 -1
  28. data/xml/apache_os.xml +38 -38
  29. data/xml/dhcp_vendor_class.xml +206 -0
  30. data/xml/favicons.xml +148 -42
  31. data/xml/ftp_banners.xml +30 -16
  32. data/xml/h323_callresp.xml +99 -99
  33. data/xml/hp_pjl_id.xml +3 -3
  34. data/xml/html_title.xml +502 -25
  35. data/xml/http_cookies.xml +64 -56
  36. data/xml/http_servers.xml +74 -14
  37. data/xml/http_wwwauth.xml +107 -38
  38. data/xml/imap_banners.xml +3 -3
  39. data/xml/mdns_device-info_txt.xml +389 -26
  40. data/xml/mysql_banners.xml +1 -1
  41. data/xml/nntp_banners.xml +3 -3
  42. data/xml/ntp_banners.xml +64 -64
  43. data/xml/operating_system.xml +3 -3
  44. data/xml/pop_banners.xml +7 -7
  45. data/xml/rsh_resp.xml +3 -3
  46. data/xml/sip_banners.xml +27 -0
  47. data/xml/sip_user_agents.xml +54 -1
  48. data/xml/smtp_banners.xml +15 -15
  49. data/xml/smtp_ehlo.xml +1 -1
  50. data/xml/smtp_help.xml +10 -10
  51. data/xml/smtp_noop.xml +2 -2
  52. data/xml/snmp_sysdescr.xml +325 -200
  53. data/xml/snmp_sysobjid.xml +25 -25
  54. data/xml/ssh_banners.xml +7 -5
  55. data/xml/telnet_banners.xml +155 -20
  56. data/xml/tls_jarm.xml +26 -4
  57. data/xml/x509_issuers.xml +36 -0
  58. data/xml/x509_subjects.xml +136 -35
  59. metadata +7 -3
@@ -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>
@@ -1239,6 +1249,34 @@
1239
1249
 
1240
1250
  <!-- iMAC - Reference for the following: https://support.apple.com/en-us/HT201634 -->
1241
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
+
1242
1280
  <fingerprint pattern="^model=iMac20,1$">
1243
1281
  <description>iMac (Retina 5K, 27-inch, 2020)</description>
1244
1282
  <example>model=iMac20,1</example>
@@ -1557,10 +1595,11 @@
1557
1595
 
1558
1596
  <!-- iPad Pro - Reference for the following: https://www.theiphonewiki.com/ -->
1559
1597
 
1560
- <fingerprint pattern="^model=J42[01]AP$">
1598
+ <fingerprint pattern="^model=(?:J42[01]AP|iPad8,11)$">
1561
1599
  <description>iPad Pro (12.9-inch, 4th generation)</description>
1562
1600
  <example>model=J420AP</example>
1563
1601
  <example>model=J421AP</example>
1602
+ <example>model=iPad8,11</example>
1564
1603
  <param pos="0" name="os.vendor" value="Apple"/>
1565
1604
  <param pos="0" name="os.family" value="iOS"/>
1566
1605
  <param pos="0" name="os.product" value="iOS"/>
@@ -1571,9 +1610,10 @@
1571
1610
  <param pos="0" name="hw.device" value="Tablet"/>
1572
1611
  </fingerprint>
1573
1612
 
1574
- <fingerprint pattern="^model=J41[78]AP$">
1613
+ <fingerprint pattern="^model=(?:J41[78]AP|iPad8,10)$">
1575
1614
  <description>iPad Pro (11-inch, 2nd generation)</description>
1576
1615
  <example>model=J417AP</example>
1616
+ <example>model=iPad8,10</example>
1577
1617
  <param pos="0" name="os.vendor" value="Apple"/>
1578
1618
  <param pos="0" name="os.family" value="iOS"/>
1579
1619
  <param pos="0" name="os.product" value="iOS"/>
@@ -1584,10 +1624,31 @@
1584
1624
  <param pos="0" name="hw.device" value="Tablet"/>
1585
1625
  </fingerprint>
1586
1626
 
1587
- <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)$">
1588
1648
  <description>iPad Pro (12.9-inch, 3rd generation)</description>
1589
1649
  <example>model=J320AP</example>
1590
1650
  <example>model=J321xAP</example>
1651
+ <example>model=iPad8,5</example>
1591
1652
  <param pos="0" name="os.vendor" value="Apple"/>
1592
1653
  <param pos="0" name="os.family" value="iOS"/>
1593
1654
  <param pos="0" name="os.product" value="iOS"/>
@@ -1598,10 +1659,11 @@
1598
1659
  <param pos="0" name="hw.device" value="Tablet"/>
1599
1660
  </fingerprint>
1600
1661
 
1601
- <fingerprint pattern="^model=J31[78]x?AP$">
1662
+ <fingerprint pattern="^model=(?:J31[78]x?AP|iPad8,1)$">
1602
1663
  <description>iPad Pro (11-inch)</description>
1603
1664
  <example>model=J317AP</example>
1604
1665
  <example>model=J318xAP</example>
1666
+ <example>model=iPad8,1</example>
1605
1667
  <param pos="0" name="os.vendor" value="Apple"/>
1606
1668
  <param pos="0" name="os.family" value="iOS"/>
1607
1669
  <param pos="0" name="os.product" value="iOS"/>
@@ -1669,10 +1731,59 @@
1669
1731
 
1670
1732
  <!-- iPad -->
1671
1733
 
1672
- <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)$">
1673
1783
  <description>iPad (6th generation)</description>
1674
1784
  <example>model=J72bAP</example>
1675
1785
  <example>model=J71bAP</example>
1786
+ <example>model=iPad7,5</example>
1676
1787
  <param pos="0" name="os.vendor" value="Apple"/>
1677
1788
  <param pos="0" name="os.family" value="iOS"/>
1678
1789
  <param pos="0" name="os.product" value="iOS"/>
@@ -1683,9 +1794,11 @@
1683
1794
  <param pos="0" name="hw.device" value="Tablet"/>
1684
1795
  </fingerprint>
1685
1796
 
1686
- <fingerprint pattern="^model=J71[ts]AP$">
1797
+ <fingerprint pattern="^model=(?:J71[ts]AP|iPad6,11)$">
1687
1798
  <description>iPad (5th generation)</description>
1688
1799
  <example>model=J71tAP</example>
1800
+ <example>model=J71sAP</example>
1801
+ <example>model=iPad6,11</example>
1689
1802
  <param pos="0" name="os.vendor" value="Apple"/>
1690
1803
  <param pos="0" name="os.family" value="iOS"/>
1691
1804
  <param pos="0" name="os.product" value="iOS"/>
@@ -1711,6 +1824,22 @@
1711
1824
 
1712
1825
  <!-- iPad Air -->
1713
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
+
1714
1843
  <fingerprint pattern="^model=J21[78]AP$">
1715
1844
  <description>iPad Air (3rd generation)</description>
1716
1845
  <example>model=J218AP</example>
@@ -1724,9 +1853,10 @@
1724
1853
  <param pos="0" name="hw.device" value="Tablet"/>
1725
1854
  </fingerprint>
1726
1855
 
1727
- <fingerprint pattern="^model=J8[12]AP$">
1856
+ <fingerprint pattern="^model=(?:J8[12]AP|iPad5,3)$">
1728
1857
  <description>iPad Air 2</description>
1729
1858
  <example>model=J81AP</example>
1859
+ <example>model=iPad5,3</example>
1730
1860
  <param pos="0" name="os.vendor" value="Apple"/>
1731
1861
  <param pos="0" name="os.family" value="iOS"/>
1732
1862
  <param pos="0" name="os.product" value="iOS"/>
@@ -1752,6 +1882,22 @@
1752
1882
 
1753
1883
  <!-- iPad mini -->
1754
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
+
1755
1901
  <fingerprint pattern="^model=J21[01]AP$">
1756
1902
  <description>iPad mini (5th generation)</description>
1757
1903
  <example>model=J210AP</example>
@@ -1765,9 +1911,10 @@
1765
1911
  <param pos="0" name="hw.device" value="Tablet"/>
1766
1912
  </fingerprint>
1767
1913
 
1768
- <fingerprint pattern="^model=J9[67]AP$">
1914
+ <fingerprint pattern="^model=(?:J9[67]AP|iPad5,2)$">
1769
1915
  <description>iPad mini 4</description>
1770
1916
  <example>model=J97AP</example>
1917
+ <example>model=iPad5,2</example>
1771
1918
  <param pos="0" name="os.vendor" value="Apple"/>
1772
1919
  <param pos="0" name="os.family" value="iOS"/>
1773
1920
  <param pos="0" name="os.product" value="iOS"/>
@@ -1778,9 +1925,10 @@
1778
1925
  <param pos="0" name="hw.device" value="Tablet"/>
1779
1926
  </fingerprint>
1780
1927
 
1781
- <fingerprint pattern="^model=J8[567]mAP$">
1928
+ <fingerprint pattern="^model=(?:J8[567]mAP|iPad4,9)$">
1782
1929
  <description>iPad mini 3</description>
1783
1930
  <example>model=J87mAP</example>
1931
+ <example>model=iPad4,9</example>
1784
1932
  <param pos="0" name="os.vendor" value="Apple"/>
1785
1933
  <param pos="0" name="os.family" value="iOS"/>
1786
1934
  <param pos="0" name="os.product" value="iOS"/>
@@ -1820,10 +1968,25 @@
1820
1968
 
1821
1969
  <!-- HomePod -->
1822
1970
 
1823
- <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])$">
1824
1985
  <description>HomePod</description>
1825
1986
  <example>model=B238aAP</example>
1826
1987
  <example>model=B238AP</example>
1988
+ <example>model=AudioAccessory1,1</example>
1989
+ <example>model=AudioAccessory1,2</example>
1827
1990
  <param pos="0" name="os.vendor" value="Apple"/>
1828
1991
  <param pos="0" name="os.family" value="audioOS"/>
1829
1992
  <param pos="0" name="os.product" value="audioOS"/>
@@ -1842,11 +2005,13 @@
1842
2005
  <param pos="0" name="os.vendor" value="Apple"/>
1843
2006
  <param pos="0" name="os.family" value="tvOS"/>
1844
2007
  <param pos="0" name="os.product" value="tvOS"/>
2008
+ <param pos="0" name="os.certainty" value="0.10"/>
1845
2009
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1846
2010
  <param pos="0" name="hw.vendor" value="Apple"/>
1847
2011
  <param pos="0" name="hw.family" value="Apple TV"/>
1848
2012
  <param pos="0" name="hw.product" value="Apple TV 4K (2nd generation)"/>
1849
2013
  <param pos="0" name="hw.device" value="Media Server"/>
2014
+ <param pos="0" name="hw.certainty" value="0.10"/>
1850
2015
  </fingerprint>
1851
2016
 
1852
2017
  <fingerprint pattern="^model=(?:J105aAP|AppleTV6,2)$">
@@ -1856,11 +2021,13 @@
1856
2021
  <param pos="0" name="os.vendor" value="Apple"/>
1857
2022
  <param pos="0" name="os.family" value="tvOS"/>
1858
2023
  <param pos="0" name="os.product" value="tvOS"/>
2024
+ <param pos="0" name="os.certainty" value="0.10"/>
1859
2025
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1860
2026
  <param pos="0" name="hw.vendor" value="Apple"/>
1861
2027
  <param pos="0" name="hw.family" value="Apple TV"/>
1862
2028
  <param pos="0" name="hw.product" value="Apple TV 4K"/>
1863
2029
  <param pos="0" name="hw.device" value="Media Server"/>
2030
+ <param pos="0" name="hw.certainty" value="0.10"/>
1864
2031
  </fingerprint>
1865
2032
 
1866
2033
  <fingerprint pattern="^model=(?:J42dAP|AppleTV5,3)$">
@@ -1870,11 +2037,13 @@
1870
2037
  <param pos="0" name="os.vendor" value="Apple"/>
1871
2038
  <param pos="0" name="os.family" value="tvOS"/>
1872
2039
  <param pos="0" name="os.product" value="tvOS"/>
2040
+ <param pos="0" name="os.certainty" value="0.10"/>
1873
2041
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1874
2042
  <param pos="0" name="hw.vendor" value="Apple"/>
1875
2043
  <param pos="0" name="hw.family" value="Apple TV"/>
1876
2044
  <param pos="0" name="hw.product" value="Apple TV (4th generation)"/>
1877
2045
  <param pos="0" name="hw.device" value="Media Server"/>
2046
+ <param pos="0" name="hw.certainty" value="0.10"/>
1878
2047
  </fingerprint>
1879
2048
 
1880
2049
  <fingerprint pattern="^model=(?:J33[Ii]?AP|AppleTV3,[21])$">
@@ -1887,11 +2056,13 @@
1887
2056
  <param pos="0" name="os.vendor" value="Apple"/>
1888
2057
  <param pos="0" name="os.family" value="tvOS"/>
1889
2058
  <param pos="0" name="os.product" value="tvOS"/>
2059
+ <param pos="0" name="os.certainty" value="0.10"/>
1890
2060
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1891
2061
  <param pos="0" name="hw.vendor" value="Apple"/>
1892
2062
  <param pos="0" name="hw.family" value="Apple TV"/>
1893
2063
  <param pos="0" name="hw.product" value="Apple TV (3rd generation)"/>
1894
2064
  <param pos="0" name="hw.device" value="Media Server"/>
2065
+ <param pos="0" name="hw.certainty" value="0.10"/>
1895
2066
  </fingerprint>
1896
2067
 
1897
2068
  <fingerprint pattern="^model=(?:K66AP|AppleTV2,1)$">
@@ -1901,19 +2072,78 @@
1901
2072
  <param pos="0" name="os.vendor" value="Apple"/>
1902
2073
  <param pos="0" name="os.family" value="tvOS"/>
1903
2074
  <param pos="0" name="os.product" value="tvOS"/>
2075
+ <param pos="0" name="os.certainty" value="0.10"/>
1904
2076
  <param pos="0" name="os.cpe23" value="cpe:/o:apple:tvos:-"/>
1905
2077
  <param pos="0" name="hw.vendor" value="Apple"/>
1906
2078
  <param pos="0" name="hw.family" value="Apple TV"/>
1907
2079
  <param pos="0" name="hw.product" value="Apple TV (2nd generation)"/>
1908
2080
  <param pos="0" name="hw.device" value="Media Server"/>
2081
+ <param pos="0" name="hw.certainty" value="0.10"/>
1909
2082
  </fingerprint>
1910
2083
 
1911
2084
  <!-- iPhones - Reference for the following: https://www.theiphonewiki.com/wiki/Category:Devices
1912
2085
  and http://phonedb.net/ -->
1913
2086
 
1914
- <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)$">
1915
2144
  <description>iPhone SE (2020)</description>
1916
2145
  <example>model=D79AP</example>
2146
+ <example>model=iPhone12,8</example>
1917
2147
  <param pos="0" name="os.vendor" value="Apple"/>
1918
2148
  <param pos="0" name="os.family" value="iOS"/>
1919
2149
  <param pos="0" name="os.product" value="iOS"/>
@@ -1924,9 +2154,10 @@
1924
2154
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1925
2155
  </fingerprint>
1926
2156
 
1927
- <fingerprint pattern="^model=D54pAP$">
2157
+ <fingerprint pattern="^model=(?:D54pAP|iPhone13,4)$">
1928
2158
  <description>iPhone 12 Pro Max 5G</description>
1929
2159
  <example>model=D54pAP</example>
2160
+ <example>model=iPhone13,4</example>
1930
2161
  <param pos="0" name="os.vendor" value="Apple"/>
1931
2162
  <param pos="0" name="os.family" value="iOS"/>
1932
2163
  <param pos="0" name="os.product" value="iOS"/>
@@ -1937,9 +2168,10 @@
1937
2168
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1938
2169
  </fingerprint>
1939
2170
 
1940
- <fingerprint pattern="^model=D53pAP$">
2171
+ <fingerprint pattern="^model=(?:D53pAP|iPhone13,3)$">
1941
2172
  <description>iPhone 12 Pro 5G</description>
1942
2173
  <example>model=D53pAP</example>
2174
+ <example>model=iPhone13,3</example>
1943
2175
  <param pos="0" name="os.vendor" value="Apple"/>
1944
2176
  <param pos="0" name="os.family" value="iOS"/>
1945
2177
  <param pos="0" name="os.product" value="iOS"/>
@@ -1950,9 +2182,10 @@
1950
2182
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1951
2183
  </fingerprint>
1952
2184
 
1953
- <fingerprint pattern="^model=D53gAP$">
2185
+ <fingerprint pattern="^model=(?:D53gAP|iPhone13,2)$">
1954
2186
  <description>iPhone 12 5G</description>
1955
2187
  <example>model=D53gAP</example>
2188
+ <example>model=iPhone13,2</example>
1956
2189
  <param pos="0" name="os.vendor" value="Apple"/>
1957
2190
  <param pos="0" name="os.family" value="iOS"/>
1958
2191
  <param pos="0" name="os.product" value="iOS"/>
@@ -1963,10 +2196,11 @@
1963
2196
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1964
2197
  </fingerprint>
1965
2198
 
1966
- <fingerprint pattern="^model=D52g?AP$">
2199
+ <fingerprint pattern="^model=(?:D52g?AP|Phone13,1)$">
1967
2200
  <description>iPhone 12 Mini 5G</description>
1968
2201
  <example>model=D52gAP</example>
1969
2202
  <example>model=D52AP</example>
2203
+ <example>model=Phone13,1</example>
1970
2204
  <param pos="0" name="os.vendor" value="Apple"/>
1971
2205
  <param pos="0" name="os.family" value="iOS"/>
1972
2206
  <param pos="0" name="os.product" value="iOS"/>
@@ -1977,10 +2211,11 @@
1977
2211
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1978
2212
  </fingerprint>
1979
2213
 
1980
- <fingerprint pattern="^model=D431p?AP$">
2214
+ <fingerprint pattern="^model=(?:D431p?AP|iPhone12,5)$">
1981
2215
  <description>iPhone 11 Pro Max</description>
1982
2216
  <example>model=D431pAP</example>
1983
2217
  <example>model=D431AP</example>
2218
+ <example>model=iPhone12,5</example>
1984
2219
  <param pos="0" name="os.vendor" value="Apple"/>
1985
2220
  <param pos="0" name="os.family" value="iOS"/>
1986
2221
  <param pos="0" name="os.product" value="iOS"/>
@@ -1991,10 +2226,11 @@
1991
2226
  <param pos="0" name="hw.device" value="Mobile Phone"/>
1992
2227
  </fingerprint>
1993
2228
 
1994
- <fingerprint pattern="^model=D421p?AP$">
2229
+ <fingerprint pattern="^model=(?:D421p?AP|iPhone12,3)$">
1995
2230
  <description>iPhone 11 Pro</description>
1996
2231
  <example>model=D421pAP</example>
1997
2232
  <example>model=D421AP</example>
2233
+ <example>model=iPhone12,3</example>
1998
2234
  <param pos="0" name="os.vendor" value="Apple"/>
1999
2235
  <param pos="0" name="os.family" value="iOS"/>
2000
2236
  <param pos="0" name="os.product" value="iOS"/>
@@ -2005,10 +2241,26 @@
2005
2241
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2006
2242
  </fingerprint>
2007
2243
 
2008
- <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])$">
2009
2259
  <description>iPhone XS Max</description>
2010
2260
  <example>model=D331pAP</example>
2011
2261
  <example>model=D331AP</example>
2262
+ <example>model=iPhone11,6</example>
2263
+ <example>model=iPhone11,4</example>
2012
2264
  <param pos="0" name="os.vendor" value="Apple"/>
2013
2265
  <param pos="0" name="os.family" value="iOS"/>
2014
2266
  <param pos="0" name="os.product" value="iOS"/>
@@ -2019,9 +2271,10 @@
2019
2271
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2020
2272
  </fingerprint>
2021
2273
 
2022
- <fingerprint pattern="^model=D321AP$">
2274
+ <fingerprint pattern="^model=(?:D321AP|iPhone11,2)$">
2023
2275
  <description>iPhone XS</description>
2024
2276
  <example>model=D321AP</example>
2277
+ <example>model=iPhone11,2</example>
2025
2278
  <param pos="0" name="os.vendor" value="Apple"/>
2026
2279
  <param pos="0" name="os.family" value="iOS"/>
2027
2280
  <param pos="0" name="os.product" value="iOS"/>
@@ -2032,9 +2285,10 @@
2032
2285
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2033
2286
  </fingerprint>
2034
2287
 
2035
- <fingerprint pattern="^model=N841AP$">
2288
+ <fingerprint pattern="^model=(?:N841AP|iPhone11,8)$">
2036
2289
  <description>iPhone XR</description>
2037
2290
  <example>model=N841AP</example>
2291
+ <example>model=iPhone11,8</example>
2038
2292
  <param pos="0" name="os.vendor" value="Apple"/>
2039
2293
  <param pos="0" name="os.family" value="iOS"/>
2040
2294
  <param pos="0" name="os.product" value="iOS"/>
@@ -2045,10 +2299,12 @@
2045
2299
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2046
2300
  </fingerprint>
2047
2301
 
2048
- <fingerprint pattern="^model=D221?AP$">
2302
+ <fingerprint pattern="^model=(?:D221?AP|iPhone10,[36])$">
2049
2303
  <description>iPhone X</description>
2050
2304
  <example>model=D221AP</example>
2051
2305
  <example>model=D22AP</example>
2306
+ <example>model=iPhone10,6</example>
2307
+ <example>model=iPhone10,3</example>
2052
2308
  <param pos="0" name="os.vendor" value="Apple"/>
2053
2309
  <param pos="0" name="os.family" value="iOS"/>
2054
2310
  <param pos="0" name="os.product" value="iOS"/>
@@ -2059,12 +2315,14 @@
2059
2315
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2060
2316
  </fingerprint>
2061
2317
 
2062
- <fingerprint pattern="^model=D211?A?AP$">
2318
+ <fingerprint pattern="^model=(?:D211?A?AP|iPhone10,[25])$">
2063
2319
  <description>iPhone 8 Plus</description>
2064
2320
  <example>model=D21AP</example>
2065
2321
  <example>model=D21AAP</example>
2066
2322
  <example>model=D211AP</example>
2067
2323
  <example>model=D211AAP</example>
2324
+ <example>model=iPhone10,2</example>
2325
+ <example>model=iPhone10,5</example>
2068
2326
  <param pos="0" name="os.vendor" value="Apple"/>
2069
2327
  <param pos="0" name="os.family" value="iOS"/>
2070
2328
  <param pos="0" name="os.product" value="iOS"/>
@@ -2075,12 +2333,14 @@
2075
2333
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2076
2334
  </fingerprint>
2077
2335
 
2078
- <fingerprint pattern="^model=D201?A?AP$">
2336
+ <fingerprint pattern="^model=(?:D201?A?AP|iPhone10,[14])$">
2079
2337
  <description>iPhone 8</description>
2080
2338
  <example>model=D20AP</example>
2081
2339
  <example>model=D20AAP</example>
2082
2340
  <example>model=D201AP</example>
2083
2341
  <example>model=D201AAP</example>
2342
+ <example>model=iPhone10,1</example>
2343
+ <example>model=iPhone10,4</example>
2084
2344
  <param pos="0" name="os.vendor" value="Apple"/>
2085
2345
  <param pos="0" name="os.family" value="iOS"/>
2086
2346
  <param pos="0" name="os.product" value="iOS"/>
@@ -2091,10 +2351,12 @@
2091
2351
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2092
2352
  </fingerprint>
2093
2353
 
2094
- <fingerprint pattern="^model=D111?AP$">
2354
+ <fingerprint pattern="^model=(?:D111?AP|iPhone9,[24])$">
2095
2355
  <description>iPhone 7 Plus</description>
2096
2356
  <example>model=D11AP</example>
2097
2357
  <example>model=D111AP</example>
2358
+ <example>model=iPhone9,2</example>
2359
+ <example>model=iPhone9,4</example>
2098
2360
  <param pos="0" name="os.vendor" value="Apple"/>
2099
2361
  <param pos="0" name="os.family" value="iOS"/>
2100
2362
  <param pos="0" name="os.product" value="iOS"/>
@@ -2105,10 +2367,11 @@
2105
2367
  <param pos="0" name="hw.device" value="Mobile Phone"/>
2106
2368
  </fingerprint>
2107
2369
 
2108
- <fingerprint pattern="^model=D101?AP$">
2370
+ <fingerprint pattern="^model=(?:D101?AP$|iPhone9,3)">
2109
2371
  <description>iPhone 7</description>
2110
2372
  <example>model=D10AP</example>
2111
2373
  <example>model=D101AP</example>
2374
+ <example>model=iPhone9,3</example>
2112
2375
  <param pos="0" name="os.vendor" value="Apple"/>
2113
2376
  <param pos="0" name="os.family" value="iOS"/>
2114
2377
  <param pos="0" name="os.product" value="iOS"/>
@@ -2300,4 +2563,104 @@
2300
2563
  <param pos="0" name="hw.cpe23" value="cpe:/h:apple:iphone:-"/>
2301
2564
  </fingerprint>
2302
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
+
2303
2666
  </fingerprints>