fingerprinter 0.1.9 → 0.1.11
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b615b35520844d41a238e14b38117a52623f8e1445a2bb1bac20f93dfe31eb2
|
4
|
+
data.tar.gz: 8299df5625b0c22e690cdaede06392551473674be475fdb9e9093178af938446
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77df6c3fde451e04a37b751c5da6e49cc7cbd9fac005e8edeaf79322380df74bbf3883422b880013dc1e3aa77a2719c95af2e8382d24d90288ac9f3f2a1ba7e0
|
7
|
+
data.tar.gz: b3637abef00af676d8308d4157411b3238fdd3a2af57e2c46c38029cb83d2d943f361631d399841942eeda1da78246fb4a27a6550610e0bcf4743fca3acfb7b7
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# This class builds and maintains the list of options provided for the scan to make it available
|
4
4
|
# when needed
|
5
5
|
class ScanOptions
|
6
|
-
def self.build(options)
|
6
|
+
def self.build(options)
|
7
7
|
@proxy = options[:proxy]
|
8
8
|
@user_agent = options[:ua]
|
9
9
|
@timeout = options[:timeout]
|
@@ -42,7 +42,7 @@ class ScanOptions
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.http_concurrency
|
45
|
-
@concurrency ||
|
45
|
+
@concurrency || 20
|
46
46
|
end
|
47
47
|
|
48
48
|
def self.silent?
|
@@ -8,7 +8,6 @@ require 'typhoeus'
|
|
8
8
|
class HttpClient
|
9
9
|
def initialize
|
10
10
|
Typhoeus::Config.user_agent = ScanOptions.user_agent
|
11
|
-
@hydra = Typhoeus::Hydra.new(max_concurrency: ScanOptions.http_concurrency)
|
12
11
|
end
|
13
12
|
|
14
13
|
def request_options(method, options, body = nil)
|
@@ -35,36 +34,12 @@ class HttpClient
|
|
35
34
|
req_options
|
36
35
|
end
|
37
36
|
|
38
|
-
def get(
|
37
|
+
def get(url, options = {})
|
39
38
|
responses = {}
|
40
39
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
http_request.on_complete { |response| responses[url] = response }
|
46
|
-
|
47
|
-
@hydra.queue(http_request)
|
48
|
-
end
|
49
|
-
|
50
|
-
@hydra.run
|
51
|
-
|
52
|
-
responses
|
53
|
-
end
|
54
|
-
|
55
|
-
def post(urls, body, options = {})
|
56
|
-
responses = {}
|
57
|
-
|
58
|
-
urls = [urls] if urls.is_a?(String)
|
59
|
-
urls.each do |url|
|
60
|
-
http_request = Typhoeus::Request.new(url, request_options(:post, options, body))
|
61
|
-
|
62
|
-
http_request.on_complete { |response| responses[url] = response }
|
63
|
-
|
64
|
-
@hydra.queue(http_request)
|
65
|
-
end
|
66
|
-
|
67
|
-
@hydra.run
|
40
|
+
http_request = Typhoeus::Request.new(url, request_options(:get, options))
|
41
|
+
http_request.on_complete { |response| responses[url] = response }
|
42
|
+
http_request.run
|
68
43
|
|
69
44
|
responses
|
70
45
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Progress Kemp Load Master Detection
|
4
|
+
class ProgressKempLoadMaster < Fingerprinter::Technologies
|
5
|
+
BODY_CONTENT_REGEX = [
|
6
|
+
/LoadMaster/
|
7
|
+
].freeze
|
8
|
+
|
9
|
+
def self.run(data)
|
10
|
+
return unless title_detection(data[:doc], 'Configuration') &&
|
11
|
+
whole_body_check(data[:response], BODY_CONTENT_REGEX)
|
12
|
+
|
13
|
+
'Progress Kemp Load Master'
|
14
|
+
end
|
15
|
+
end
|
data/lib/fingerprinter.rb
CHANGED
@@ -9,6 +9,7 @@ module Fingerprinter
|
|
9
9
|
Dir[File.join(__dir__, 'fingerprinter', 'utilities/*.rb')].sort.each { |file| require file }
|
10
10
|
|
11
11
|
EXCLUSIONS = %w[paas.diod.orange.com prod.pc0.dbs.com].freeze
|
12
|
+
SC_EXCLUSIONS = %i[0 418].freeze
|
12
13
|
WILDCARDS = [
|
13
14
|
['Application is not available', 'The application is currently not serving requests at this endpoint']
|
14
15
|
].freeze
|
@@ -36,27 +37,33 @@ module Fingerprinter
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def run(urls)
|
40
|
+
pool = Concurrent::FixedThreadPool.new(ScanOptions.http_concurrency)
|
39
41
|
urls.each do |url|
|
40
42
|
next if EXCLUSIONS.any? { |exclusion| url.match?(exclusion) }
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
pool.post do
|
45
|
+
response = get_response(url)
|
46
|
+
next unless response
|
47
|
+
next if wildcard?(response)
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
url = effective_url(response, url)
|
50
|
+
|
51
|
+
responses = response.redirections
|
52
|
+
responses << response
|
50
53
|
|
51
|
-
|
52
|
-
|
54
|
+
responses.each do |response|
|
55
|
+
doc = Utilities::Parser.doc(response.body)
|
53
56
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
+
results[url] = Concurrent::Array.new
|
58
|
+
data = { response:, doc:, url: }
|
59
|
+
Technologies.subclasses.each { |technology| results[url] << technology.run(data) }
|
60
|
+
end
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
64
|
+
pool.shutdown
|
65
|
+
pool.wait_for_termination
|
66
|
+
|
60
67
|
results.transform_values! { |v| v.compact.uniq }
|
61
68
|
results
|
62
69
|
end
|
@@ -85,7 +92,7 @@ module Fingerprinter
|
|
85
92
|
url = normalize_url(url)
|
86
93
|
return get_response(url)
|
87
94
|
end
|
88
|
-
return if response&.code
|
95
|
+
return if SC_EXCLUSIONS.include?(response&.code)
|
89
96
|
return response if response.redirections.empty? || same_scope?(url, response)
|
90
97
|
|
91
98
|
response.redirections.first
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fingerprinter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua MARTINELLE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/fingerprinter/technologies/softwares/apache_ofbiz.rb
|
69
69
|
- lib/fingerprinter/technologies/softwares/f5_next_central_manager.rb
|
70
70
|
- lib/fingerprinter/technologies/softwares/nexus_repository.rb
|
71
|
+
- lib/fingerprinter/technologies/softwares/progress_kemp_load_master.rb
|
71
72
|
- lib/fingerprinter/technologies/softwares/servicenow.rb
|
72
73
|
- lib/fingerprinter/technologies/softwares/tinyproxy.rb
|
73
74
|
- lib/fingerprinter/utilities/kb.rb
|