recog 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
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