recog 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca2e3909b1b60418e80721625975ab8025e8dcaaaee59754dccb128b25661f00
4
- data.tar.gz: 68be49a8c47fc1bb2b6a0f64d02c18a8fc29b67ee60b62060542be2216979e5c
3
+ metadata.gz: fb6f2415bc93d48b60c359793b6aee1e30e513b16a35de7c7bda4373a99cb996
4
+ data.tar.gz: 106fdf45bfe575ad27e6d9bc71ef2192967d573d00e7eda9a51c1ac50a40b964
5
5
  SHA512:
6
- metadata.gz: 2e0f749e0a8b313a8ba9845c39aa72ce08108e4c5b4e3785d689ae9e726aeb72b31b23da6e1e4610fff4dcd1caad966ee9578ab887a425cf2f414ee377b7b001
7
- data.tar.gz: 7714d9bca0d70f27efd756460f0f167a46c69ee45c38da8a70bdfb5271256decb92375c8281efe67529e5b7e3a897b3e3e2fc20b7a62075b12db9abf940635a6
6
+ metadata.gz: fd7943c87258799dde4b700bc0a121f5f6973e371f9904d5442e2fd3b4615bc4012b97f66426a7f7a628409c94515f2490273eb83a6cce4d57ad2071b8df58ff
7
+ data.tar.gz: d8ccfa23a65f4aa5c2d1638647042c6e47e8e9c2ce409a3fb01bf825fd28341c133948b6fff2a3e0dddb7d978460e45a113b883b774ae62cd84b0ce378fb8fe7
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ ?K��RF|m��/�E�b��ζ�A�}"�RDRz��b�C:��yi�S]l�=�}!��a�B�e�dN���i�s��}��z�gbD;�m8@��+�D�A;�,�+t�z���ĀR��cS��K�[��I�!��}qϞ[�AqeXR� E��C���ނKg�{2>VL'�|{��!k_i�Bb>̚O�Y�W\�J�O���^�m�vh���I��U��mA r3� E?p����
2
+ �ܦ`T���2tI6SX
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module Recog
2
4
  class MatchReporter
3
5
  attr_reader :formatter
@@ -24,14 +26,46 @@ class MatchReporter
24
26
  @line_count += 1
25
27
  end
26
28
 
27
- def match(text)
29
+ def match(match_data)
28
30
  @match_count += 1
29
- formatter.success_message(text)
31
+ if @options.json_format
32
+ # remove data field from all matches and promote to a top-level field
33
+ data_field = match_data[0]["data"]
34
+ match_data.each { |h| h.delete("data") }
35
+ new_object = {
36
+ 'data' => data_field,
37
+ }
38
+
39
+ if @options.multi_match
40
+ new_object['matches'] = match_data
41
+ else
42
+ new_object['match'] = match_data[0]
43
+ end
44
+ msg = new_object.to_json
45
+ else
46
+ match_prefix = match_data.size > 1 ? 'MATCHES' : 'MATCH'
47
+ msg = "#{match_prefix}: #{match_data.map(&:inspect).join(',')}"
48
+ end
49
+ formatter.success_message("#{msg}")
30
50
  end
31
51
 
32
52
  def failure(text)
33
53
  @fail_count += 1
34
- formatter.failure_message(text)
54
+ if @options.json_format
55
+ new_object = {
56
+ 'data' => text,
57
+ 'match_failure' => true
58
+ }
59
+ if @options.multi_match
60
+ new_object['matches'] = nil
61
+ else
62
+ new_object['match'] = nil
63
+ end
64
+ msg = new_object.to_json
65
+ else
66
+ msg = "FAIL: #{text}"
67
+ end
68
+ formatter.failure_message("#{msg}")
35
69
  end
36
70
 
37
71
  def print_summary
data/lib/recog/matcher.rb CHANGED
@@ -29,26 +29,21 @@ class Matcher
29
29
  line = line.to_s.unpack("C*").pack("C*").strip.gsub(/\\[rn]/, '')
30
30
  found_extractions = false
31
31
 
32
- all_extractions = []
32
+ extraction_data = []
33
33
  fingerprints.each do |fp|
34
34
  extractions = fp.match(line)
35
35
  if extractions
36
36
  found_extractions = true
37
37
  extractions['data'] = line
38
- if multi_match
39
- all_extractions << extractions
40
- else
41
- reporter.match "MATCH: #{extractions.inspect}"
42
- break
43
- end
38
+ extraction_data << extractions
39
+ break unless multi_match
44
40
  end
45
41
  end
46
42
 
47
43
  if found_extractions
48
- match_prefix = all_extractions.size > 1 ? 'MATCHES' : 'MATCH'
49
- reporter.match "#{match_prefix}: #{all_extractions.map(&:inspect).join(',')}" if multi_match
44
+ reporter.match extraction_data
50
45
  else
51
- reporter.failure "FAIL: #{line}"
46
+ reporter.failure line
52
47
  end
53
48
 
54
49
  if reporter.stop?
data/lib/recog/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Recog
2
- VERSION = '3.0.1'
2
+ VERSION = '3.0.2'
3
3
  end
@@ -5,7 +5,7 @@ require 'ostruct'
5
5
  require 'recog'
6
6
  require 'recog/matcher_factory'
7
7
 
8
- options = OpenStruct.new(color: false, detail: false, fail_fast: false, multi_match: false)
8
+ options = OpenStruct.new(color: false, detail: false, json_format: false, fail_fast: false, multi_match: false)
9
9
 
10
10
  option_parser = OptionParser.new do |opts|
11
11
  opts.banner = "Usage: #{$0} [options] XML_FINGERPRINT_FILE [BANNERS_FILE]"
@@ -13,12 +13,18 @@ option_parser = OptionParser.new do |opts|
13
13
  opts.separator ""
14
14
  opts.separator "Options"
15
15
 
16
- opts.on("-f", "--format FORMATTER",
16
+ opts.on("-f", "--format FORMATTER", [:summary, :detail, :json],
17
17
  "Choose a formatter.",
18
18
  " [s]ummary (default - failure/match msgs)",
19
- " [d]etail (msgs with total counts)") do |format|
20
- if format.start_with? 'd'
19
+ " [d]etail (msgs with total counts)",
20
+ " [j]son (JSON failure/match msgs)") do |format|
21
+ if format == :summary
22
+ options.detail = false
23
+ options.json_format = false
24
+ elsif format == :detail
21
25
  options.detail = true
26
+ elsif format == :json
27
+ options.json_format = true
22
28
  end
23
29
  end
24
30
 
@@ -41,9 +47,17 @@ option_parser = OptionParser.new do |opts|
41
47
  exit
42
48
  end
43
49
  end
44
- option_parser.parse!(ARGV)
45
50
 
46
- if ARGV.count != 1 && ARGV.count != 2
51
+
52
+ begin
53
+ option_parser.parse!(ARGV)
54
+ rescue OptionParser::ParseError => e
55
+ puts e.message
56
+ puts option_parser
57
+ exit(1)
58
+ end
59
+
60
+ if ARGV.count < 1 || ARGV.count > 2
47
61
  puts option_parser
48
62
  exit(1)
49
63
  end
@@ -779,13 +779,19 @@
779
779
  </fingerprint>
780
780
 
781
781
  <fingerprint pattern="^97c6417ed01bdc0ae3ef32ae4894fd03|e2f298e9811cd34a08bf5bb69e2d1d6a$">
782
- <description>Jupyter Notebook</description>
782
+ <description>Jupyter Products</description>
783
783
  <example>97c6417ed01bdc0ae3ef32ae4894fd03</example>
784
784
  <example>e2f298e9811cd34a08bf5bb69e2d1d6a</example>
785
785
  <param pos="0" name="service.vendor" value="Jupyter"/>
786
- <param pos="0" name="service.product" value="Notebook"/>
787
786
  <param pos="0" name="service.certainty" value="0.5"/>
788
- <param pos="0" name="service.cpe23" value="cpe:/a:jupyter:notebook:-"/>
787
+ </fingerprint>
788
+
789
+ <fingerprint pattern="^7102bb857703a0fece6d039a6777fc3f$">
790
+ <description>Jupyter BinderHub</description>
791
+ <example>7102bb857703a0fece6d039a6777fc3f</example>
792
+ <param pos="0" name="service.vendor" value="Jupyter"/>
793
+ <param pos="0" name="service.product" value="BinderHub"/>
794
+ <param pos="0" name="service.cpe23" value="cpe:/a:jupyter:binderhub:-"/>
789
795
  </fingerprint>
790
796
 
791
797
  <fingerprint pattern="^36b3ef286fa4befbb797a0966b456479$">
@@ -2092,4 +2098,12 @@
2092
2098
  <param pos="0" name="service.cpe23" value="cpe:/a:dotcms:dotcms:-"/>
2093
2099
  </fingerprint>
2094
2100
 
2101
+ <fingerprint pattern="^8c7d1c14e4b9c42f07bd6b800d93b806$">
2102
+ <description>Zimbra Collaboration</description>
2103
+ <example>8c7d1c14e4b9c42f07bd6b800d93b806</example>
2104
+ <param pos="0" name="service.vendor" value="Zimbra"/>
2105
+ <param pos="0" name="service.product" value="Collaboration"/>
2106
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:-"/>
2107
+ </fingerprint>
2108
+
2095
2109
  </fingerprints>
@@ -2449,6 +2449,22 @@
2449
2449
  <param pos="0" name="service.cpe23" value="cpe:/a:jupyter:notebook:-"/>
2450
2450
  </fingerprint>
2451
2451
 
2452
+ <fingerprint pattern="^Jupyter Server$">
2453
+ <description>Jupyter Server - backend to Jupyter web applications</description>
2454
+ <example>Jupyter Server</example>
2455
+ <param pos="0" name="service.vendor" value="Jupyter"/>
2456
+ <param pos="0" name="service.product" value="Jupyter Server"/>
2457
+ <param pos="0" name="service.cpe23" value="cpe:/a:jupyter:jupyter_server:-"/>
2458
+ </fingerprint>
2459
+
2460
+ <fingerprint pattern="^JupyterHub$">
2461
+ <description>JupyterHub - Multi-user server for Jupyter notebooks</description>
2462
+ <example>JupyterHub</example>
2463
+ <param pos="0" name="service.vendor" value="Jupyter"/>
2464
+ <param pos="0" name="service.product" value="JupyterHub"/>
2465
+ <param pos="0" name="service.cpe23" value="cpe:/a:jupyter:jupyterhub:-"/>
2466
+ </fingerprint>
2467
+
2452
2468
  <fingerprint pattern="^Redirect to userimage: /control/userimage\.html$">
2453
2469
  <description>Mobotix Network Camera</description>
2454
2470
  <example>Redirect to userimage: /control/userimage.html</example>
@@ -3885,6 +3901,15 @@
3885
3901
  <param pos="0" name="service.cpe23" value="cpe:/a:dotcms:dotcms:-"/>
3886
3902
  </fingerprint>
3887
3903
 
3904
+ <fingerprint pattern="^Zimbra (?:Web Client Sign In|Administration)$">
3905
+ <description>Zimbra Collaboration</description>
3906
+ <example>Zimbra Web Client Sign In</example>
3907
+ <example>Zimbra Administration</example>
3908
+ <param pos="0" name="service.vendor" value="Zimbra"/>
3909
+ <param pos="0" name="service.product" value="Collaboration"/>
3910
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:-"/>
3911
+ </fingerprint>
3912
+
3888
3913
  <!-- Specific Eltex fingerprints to enable CPE generation -->
3889
3914
 
3890
3915
  <fingerprint pattern="^Eltex - NTP-RG-1402G$">
@@ -609,14 +609,16 @@
609
609
  <param pos="0" name="service.product" value="WebTrends"/>
610
610
  </fingerprint>
611
611
 
612
- <fingerprint pattern="^(ZM_TEST|ZM_LOGIN_CSRF)=">
613
- <description>Zimbra</description>
614
- <example cookie="ZM_TEST">ZM_TEST=true;Secure</example>
615
- <example cookie="ZM_LOGIN_CSRF">ZM_LOGIN_CSRF=38ef0bea-a4c3-4f41-9ac3-73d7622f3131;Secure;HttpOnly</example>
612
+ <fingerprint pattern="^(ZM_(?:TEST|LOGIN_CSRF)|ZA_(?:SKIN|TEST))=">
613
+ <description>Zimbra Collaboration</description>
614
+ <example cookie="ZM_TEST">ZM_TEST=true; Secure</example>
615
+ <example cookie="ZM_LOGIN_CSRF">ZM_LOGIN_CSRF=38ef0bea-a4c3-4f41-9ac3-73d7622f3131; Secure; HttpOnly</example>
616
+ <example cookie="ZA_SKIN">ZA_SKIN=serenity</example>
617
+ <example cookie="ZA_TEST">ZA_TEST=true; Secure</example>
616
618
  <param pos="1" name="cookie"/>
617
- <param pos="0" name="service.vendor" value="Synacor"/>
618
- <param pos="0" name="service.product" value="Zimbra Collaboration Suite"/>
619
- <param pos="0" name="service.cpe23" value="cpe:/a:synacor:zimbra_collaboration_suite:-"/>
619
+ <param pos="0" name="service.vendor" value="Zimbra"/>
620
+ <param pos="0" name="service.product" value="Collaboration"/>
621
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:-"/>
620
622
  </fingerprint>
621
623
 
622
624
  <fingerprint pattern="^_ZopeId=">
@@ -178,21 +178,21 @@
178
178
  </fingerprint>
179
179
 
180
180
  <fingerprint pattern="^(\S{1,512}) Zimbra IMAP4rev1 server ready\.?$">
181
- <description>VMware Zimbra IMAP</description>
181
+ <description>Zimbra Collaboration IMAP</description>
182
182
  <example host.name="foo.bar">foo.bar Zimbra IMAP4rev1 server ready</example>
183
- <param pos="0" name="service.vendor" value="VMware"/>
184
- <param pos="0" name="service.product" value="Zimbra"/>
185
- <param pos="0" name="service.cpe23" value="cpe:/a:vmware:zimbra_desktop:-"/>
183
+ <param pos="0" name="service.vendor" value="Zimbra"/>
184
+ <param pos="0" name="service.product" value="Collaboration"/>
185
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:-"/>
186
186
  <param pos="1" name="host.name"/>
187
187
  </fingerprint>
188
188
 
189
189
  <fingerprint pattern="^(\S{1,512}) Zimbra (\S+) IMAP4rev1 server ready\.?$">
190
- <description>VMware Zimbra IMAP with service version</description>
190
+ <description>Zimbra Collaboration IMAP with service version</description>
191
191
  <example host.name="foo.bar" service.version="7.0.0_GA_3079">foo.bar Zimbra 7.0.0_GA_3079 IMAP4rev1 server ready</example>
192
- <param pos="0" name="service.vendor" value="VMware"/>
193
- <param pos="0" name="service.product" value="Zimbra"/>
192
+ <param pos="0" name="service.vendor" value="Zimbra"/>
193
+ <param pos="0" name="service.product" value="Collaboration"/>
194
194
  <param pos="2" name="service.version"/>
195
- <param pos="0" name="service.cpe23" value="cpe:/a:vmware:zimbra_desktop:{service.version}"/>
195
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:{service.version}"/>
196
196
  <param pos="1" name="host.name"/>
197
197
  </fingerprint>
198
198
 
@@ -230,21 +230,21 @@
230
230
  </fingerprint>
231
231
 
232
232
  <fingerprint pattern="^(\S{1,512}) Zimbra POP3 server ready\.?$">
233
- <description>VMware Zimbra POP</description>
233
+ <description>Zimbra Collaboration POP</description>
234
234
  <example host.name="foo.bar">foo.bar Zimbra POP3 server ready</example>
235
- <param pos="0" name="service.vendor" value="VMware"/>
236
- <param pos="0" name="service.product" value="Zimbra"/>
237
- <param pos="0" name="service.cpe23" value="cpe:/a:vmware:zimbra_desktop:-"/>
235
+ <param pos="0" name="service.vendor" value="Zimbra"/>
236
+ <param pos="0" name="service.product" value="Collaboration"/>
237
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:-"/>
238
238
  <param pos="1" name="host.name"/>
239
239
  </fingerprint>
240
240
 
241
241
  <fingerprint pattern="^(\S{1,512}) Zimbra (\S+) POP3 server ready\.?$">
242
- <description>VMware Zimbra POP with version</description>
242
+ <description>Zimbra Collaboration POP with version</description>
243
243
  <example host.name="foo.bar" service.version="7.0.0_GA_3079">foo.bar Zimbra 7.0.0_GA_3079 POP3 server ready</example>
244
- <param pos="0" name="service.vendor" value="VMware"/>
245
- <param pos="0" name="service.product" value="Zimbra"/>
244
+ <param pos="0" name="service.vendor" value="Zimbra"/>
245
+ <param pos="0" name="service.product" value="Collaboration"/>
246
246
  <param pos="2" name="service.version"/>
247
- <param pos="0" name="service.cpe23" value="cpe:/a:vmware:zimbra_desktop:{service.version}"/>
247
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration:{service.version}"/>
248
248
  <param pos="1" name="host.name"/>
249
249
  </fingerprint>
250
250
 
@@ -405,4 +405,12 @@
405
405
  <param pos="0" name="os.product" value="Proxmox"/>
406
406
  </fingerprint>
407
407
 
408
+ <fingerprint pattern="^CN=minikubeCA$">
409
+ <description>Kubernetes minikube</description>
410
+ <example>CN=minikubeCA</example>
411
+ <param pos="0" name="service.vendor" value="Kubernetes"/>
412
+ <param pos="0" name="service.product" value="minikube"/>
413
+ <param pos="0" name="service.cpe23" value="cpe:/a:kubernetes:minikube:-"/>
414
+ </fingerprint>
415
+
408
416
  </fingerprints>
@@ -1755,4 +1755,33 @@
1755
1755
  <param pos="0" name="os.product" value="Proxmox"/>
1756
1756
  </fingerprint>
1757
1757
 
1758
+ <fingerprint pattern="^CN=(\S{1,512}),OU=Endpoint Health,O=Duo Security\\, Inc.,L=Ann Arbor,ST=Michigan,C=US(?:,\S+)?$">
1759
+ <description>Duo Device Health</description>
1760
+ <example host.name="127.0.0.1">CN=127.0.0.1,OU=Endpoint Health,O=Duo Security\, Inc.,L=Ann Arbor,ST=Michigan,C=US,1.2.840.113549.1.9.1=#0c1e656e64706f696e746865616c74684064756f73656375726974792e636f6d</example>
1761
+ <param pos="0" name="service.vendor" value="Duo"/>
1762
+ <param pos="0" name="service.product" value="Duo Device Health"/>
1763
+ <param pos="1" name="host.name"/>
1764
+ </fingerprint>
1765
+
1766
+ <fingerprint pattern="^CN=(\S{1,512}),OU=Mac Certifier,O=Duo Security\\, Inc.,L=Ann Arbor,ST=Michigan,C=US(?:,\S+)?$">
1767
+ <description>Duo Certifier</description>
1768
+ <example host.name="localhost">CN=localhost,OU=Mac Certifier,O=Duo Security\, Inc.,L=Ann Arbor,ST=Michigan,C=US,1.2.840.113549.1.9.1=#0c18656e64706f696e744064756f73656375726974792e636f6d</example>
1769
+ <param pos="0" name="service.vendor" value="Duo"/>
1770
+ <param pos="0" name="service.product" value="Duo Certifier"/>
1771
+ <param pos="0" name="os.vendor" value="Apple"/>
1772
+ <param pos="0" name="os.family" value="Mac OS"/>
1773
+ <param pos="0" name="os.product" value="Mac OS"/>
1774
+ <param pos="0" name="os.cpe23" value="cpe:/o:apple:macos:-"/>
1775
+ <param pos="1" name="host.name"/>
1776
+ </fingerprint>
1777
+
1778
+ <fingerprint pattern="^CN=(\S{1,512}),OU=Zimbra Collaboration Server$">
1779
+ <description>Zimbra Collaboration Server</description>
1780
+ <example host.name="foo.bar">CN=foo.bar,OU=Zimbra Collaboration Server</example>
1781
+ <param pos="0" name="service.vendor" value="Zimbra"/>
1782
+ <param pos="0" name="service.product" value="Collaboration Server"/>
1783
+ <param pos="0" name="service.cpe23" value="cpe:/a:zimbra:collaboration_server:-"/>
1784
+ <param pos="1" name="host.name"/>
1785
+ </fingerprint>
1786
+
1758
1787
  </fingerprints>
@@ -1,31 +1,31 @@
1
1
  require 'recog/match_reporter'
2
2
 
3
3
  describe Recog::MatchReporter do
4
- let(:options) { double(detail: false, quiet: false) }
4
+ let(:options) { double(detail: false, json_format: false, quiet: false, multi_match: false) }
5
5
  let(:formatter) { double('formatter').as_null_object }
6
6
  subject { Recog::MatchReporter.new(options, formatter) }
7
7
 
8
8
  def run_report
9
9
  subject.report do
10
10
  subject.increment_line_count
11
- subject.match 'a match'
11
+ subject.match [{'data' => 'a match'}]
12
12
  subject.failure 'a failure'
13
13
  end
14
14
  end
15
15
 
16
16
  describe "#report" do
17
17
  it "prints matches" do
18
- expect(formatter).to receive(:success_message).with('a match')
18
+ expect(formatter).to receive(:success_message).with('MATCH: {"data"=>"a match"}')
19
19
  run_report
20
20
  end
21
21
 
22
22
  it "prints failures" do
23
- expect(formatter).to receive(:failure_message).with('a failure')
23
+ expect(formatter).to receive(:failure_message).with('FAIL: a failure')
24
24
  run_report
25
25
  end
26
26
 
27
27
  context "with detail" do
28
- subject { Recog::MatchReporter.new(double(detail: true, quiet: false), formatter) }
28
+ subject { Recog::MatchReporter.new(double(detail: true, json_format: false, quiet: false, multi_match: false), formatter) }
29
29
 
30
30
  it "prints the lines processed" do
31
31
  expect(formatter).to receive(:status_message).with("\nProcessed 1 lines")
@@ -37,11 +37,25 @@ describe Recog::MatchReporter do
37
37
  run_report
38
38
  end
39
39
  end
40
+
41
+ context "with JSON" do
42
+ subject { Recog::MatchReporter.new(double(detail: false, json_format: true, quiet: false, multi_match: false), formatter) }
43
+
44
+ it "prints matches" do
45
+ expect(formatter).to receive(:success_message).with('{"data":"a match","match":{}}')
46
+ run_report
47
+ end
48
+
49
+ it "prints failures" do
50
+ expect(formatter).to receive(:failure_message).with('{"data":"a failure","match_failure":true,"match":null}')
51
+ run_report
52
+ end
53
+ end
40
54
  end
41
55
 
42
56
  describe "#print_summary" do
43
57
  context "with all matches" do
44
- before { subject.match 'match' }
58
+ before { subject.match ['match'] }
45
59
 
46
60
  it "prints a successful summary" do
47
61
  msg = "SUMMARY: 1 matches and 0 failures"
@@ -64,7 +78,7 @@ describe Recog::MatchReporter do
64
78
  describe "#stop?" do
65
79
  context "with a failure limit" do
66
80
 
67
- let(:options) { double(fail_fast: true, stop_after: 3, detail: false) }
81
+ let(:options) { double(fail_fast: true, stop_after: 3, detail: false, json_format: false, multi_match: false) }
68
82
  before do
69
83
  subject.failure 'first'
70
84
  subject.failure 'second'
@@ -81,7 +95,7 @@ describe Recog::MatchReporter do
81
95
  end
82
96
 
83
97
  context "with no failure limit" do
84
- let(:options) { double(fail_fast: false, detail: false) }
98
+ let(:options) { double(fail_fast: false, detail: false, json_format: false, multi_match: false) }
85
99
 
86
100
  it "return false" do
87
101
  expect(subject.stop?).to be false
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recog
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rapid7 Research
8
- autorequire:
8
+ autorequire:
9
9
  bindir: recog/bin
10
- cert_chain: []
11
- date: 2022-06-29 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
14
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
15
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
16
+ b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
17
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
18
+ cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
19
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
20
+ JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
21
+ mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
22
+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
23
+ VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
24
+ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
25
+ AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
26
+ BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
27
+ pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
28
+ dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
29
+ fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
30
+ NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
31
+ H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
32
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
33
+ -----END CERTIFICATE-----
34
+ - |
35
+ -----BEGIN CERTIFICATE-----
36
+ MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl
37
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
38
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
39
+ b3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQG
40
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
41
+ cnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBT
42
+ aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8O
43
+ Ea9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq
44
+ 8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRp
45
+ wsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/p
46
+ fMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3
47
+ jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczye
48
+ n6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
49
+ HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBr
50
+ MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
51
+ MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
52
+ RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
53
+ ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
54
+ Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
55
+ TwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
56
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsq
57
+ CqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP
58
+ MA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHX
59
+ fgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddf
60
+ RHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8Al
61
+ EeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+
62
+ L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8
63
+ B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHv
64
+ -----END CERTIFICATE-----
65
+ - |
66
+ -----BEGIN CERTIFICATE-----
67
+ MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
68
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
69
+ d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
70
+ SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
71
+ MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
72
+ BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
73
+ IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNTz4zvAy7h/vQp
74
+ 4dr1txXHlABAagkwYYwTMCtHs5PXsJITx/5SAjx5swuaLfze5kPBNF2YImvFlOXY
75
+ WaB+0PsOnXnaARsDZU683xFlj8izU6IN6VrAHzDLKFBzruJENrOJD/ikbEtbjO/q
76
+ gFbmS9J9v5ohG/pcRSS0t4ZPAwymf8eCp6QsvOKK/Aymp1RhlRaP8N6N5CIpkhz1
77
+ 9p968iCE+DjOXVYxcWE+jE/7uB1dbgrXykNBujMSS3GULOvVEY28n6NCmrPlo23g
78
+ yRjYVJ2Vy14nBqnxDZ/yRIfWRVjWoT9TsAEbe9gY29oDpSCSs4wSmLQd5zGCpZ9h
79
+ r0HDFB8CAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
80
+ dQ5YMB0GA1UdDgQWBBTLBL7DTwumVEKtdCdpHVYMXOFeDzAOBgNVHQ8BAf8EBAMC
81
+ B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
82
+ L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
83
+ L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
84
+ MEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
85
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYw
86
+ JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
87
+ AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
88
+ ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
89
+ BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
90
+ 37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
91
+ YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
92
+ dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
93
+ EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
94
+ 9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
95
+ -----END CERTIFICATE-----
96
+ date: 2022-08-24 00:00:00.000000000 Z
12
97
  dependencies:
13
98
  - !ruby/object:Gem::Dependency
14
99
  name: rspec
@@ -200,7 +285,7 @@ files:
200
285
  homepage: https://www.github.com/rapid7/recog-ruby
201
286
  licenses: []
202
287
  metadata: {}
203
- post_install_message:
288
+ post_install_message:
204
289
  rdoc_options: []
205
290
  require_paths:
206
291
  - lib
@@ -216,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
301
  version: '0'
217
302
  requirements: []
218
303
  rubygems_version: 3.1.6
219
- signing_key:
304
+ signing_key:
220
305
  specification_version: 4
221
306
  summary: Network service fingerprint database, classes, and utilities
222
307
  test_files:
metadata.gz.sig ADDED
Binary file