recog 0.01
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +42 -0
- data/LICENSE +23 -0
- data/README.md +63 -0
- data/bin/recog_export.rb +81 -0
- data/bin/recog_match.rb +51 -0
- data/bin/recog_verify.rb +45 -0
- data/features/match.feature +16 -0
- data/features/support/env.rb +5 -0
- data/features/verify.feature +31 -0
- data/features/xml/banners.xml +2 -0
- data/features/xml/failing_banners_fingerprints.xml +20 -0
- data/features/xml/matching_banners_fingerprints.xml +22 -0
- data/features/xml/no_tests.xml +53 -0
- data/features/xml/successful_tests.xml +33 -0
- data/features/xml/tests_with_failures.xml +10 -0
- data/features/xml/tests_with_warnings.xml +10 -0
- data/lib/recog.rb +3 -0
- data/lib/recog/db.rb +38 -0
- data/lib/recog/db_manager.rb +27 -0
- data/lib/recog/fingerprint.rb +60 -0
- data/lib/recog/formatter.rb +51 -0
- data/lib/recog/match_reporter.rb +77 -0
- data/lib/recog/matcher.rb +60 -0
- data/lib/recog/matcher_factory.rb +14 -0
- data/lib/recog/nizer.rb +263 -0
- data/lib/recog/verifier.rb +46 -0
- data/lib/recog/verifier_factory.rb +13 -0
- data/lib/recog/verify_reporter.rb +85 -0
- data/lib/recog/version.rb +3 -0
- data/recog.gemspec +34 -0
- data/spec/data/best_os_match_1.yml +17 -0
- data/spec/data/best_os_match_2.yml +17 -0
- data/spec/data/best_service_match_1.yml +17 -0
- data/spec/data/smb_native_os.txt +31 -0
- data/spec/data/test_fingerprints.xml +24 -0
- data/spec/lib/db_spec.rb +89 -0
- data/spec/lib/formatter_spec.rb +69 -0
- data/spec/lib/match_reporter_spec.rb +90 -0
- data/spec/lib/nizer_spec.rb +124 -0
- data/spec/lib/verify_reporter_spec.rb +112 -0
- data/xml/apache_os.xml +295 -0
- data/xml/architecture.xml +45 -0
- data/xml/ftp_banners.xml +808 -0
- data/xml/h323_callresp.xml +701 -0
- data/xml/hp_pjl_id.xml +435 -0
- data/xml/http_cookies.xml +379 -0
- data/xml/http_servers.xml +3326 -0
- data/xml/http_wwwauth.xml +412 -0
- data/xml/imap_banners.xml +267 -0
- data/xml/nntp_banners.xml +51 -0
- data/xml/ntp_banners.xml +538 -0
- data/xml/pop_banners.xml +452 -0
- data/xml/rsh_resp.xml +90 -0
- data/xml/sip_banners.xml +14 -0
- data/xml/smb_native_os.xml +385 -0
- data/xml/smtp_banners.xml +1738 -0
- data/xml/smtp_debug.xml +45 -0
- data/xml/smtp_ehlo.xml +53 -0
- data/xml/smtp_expn.xml +95 -0
- data/xml/smtp_help.xml +212 -0
- data/xml/smtp_mailfrom.xml +24 -0
- data/xml/smtp_noop.xml +45 -0
- data/xml/smtp_quit.xml +31 -0
- data/xml/smtp_rcptto.xml +33 -0
- data/xml/smtp_rset.xml +23 -0
- data/xml/smtp_turn.xml +23 -0
- data/xml/smtp_vrfy.xml +109 -0
- data/xml/snmp_sysdescr.xml +8008 -0
- data/xml/snmp_sysobjid.xml +284 -0
- data/xml/ssh_banners.xml +790 -0
- data/xml/upnp_banners.xml +590 -0
- metadata +190 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
require_relative '../../lib/recog/match_reporter'
|
2
|
+
|
3
|
+
describe Recog::MatchReporter do
|
4
|
+
let(:options) { double(detail: false) }
|
5
|
+
let(:formatter) { double('formatter').as_null_object }
|
6
|
+
subject { Recog::MatchReporter.new(options, formatter) }
|
7
|
+
|
8
|
+
def run_report
|
9
|
+
subject.report do
|
10
|
+
subject.increment_line_count
|
11
|
+
subject.match 'a match'
|
12
|
+
subject.failure 'a failure'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#report" do
|
17
|
+
it "prints matches" do
|
18
|
+
expect(formatter).to receive(:success_message).with('a match')
|
19
|
+
run_report
|
20
|
+
end
|
21
|
+
|
22
|
+
it "prints failures" do
|
23
|
+
expect(formatter).to receive(:failure_message).with('a failure')
|
24
|
+
run_report
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with detail" do
|
28
|
+
subject { Recog::MatchReporter.new(double(detail: true), formatter) }
|
29
|
+
|
30
|
+
it "prints the lines processed" do
|
31
|
+
expect(formatter).to receive(:status_message).with("\nProcessed 1 lines")
|
32
|
+
run_report
|
33
|
+
end
|
34
|
+
|
35
|
+
it "prints summary" do
|
36
|
+
expect(formatter).to receive(:failure_message).with("SUMMARY: 1 matches and 1 failures")
|
37
|
+
run_report
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#print_summary" do
|
43
|
+
context "with all matches" do
|
44
|
+
before { subject.match 'match' }
|
45
|
+
|
46
|
+
it "prints a successful summary" do
|
47
|
+
msg = "SUMMARY: 1 matches and 0 failures"
|
48
|
+
expect(formatter).to receive(:success_message).with(msg)
|
49
|
+
subject.print_summary
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "with failures" do
|
54
|
+
before { subject.failure 'fail' }
|
55
|
+
|
56
|
+
it "prints a failure summary" do
|
57
|
+
msg = "SUMMARY: 0 matches and 1 failures"
|
58
|
+
expect(formatter).to receive(:failure_message).with(msg)
|
59
|
+
subject.print_summary
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#stop?" do
|
65
|
+
context "with a failure limit" do
|
66
|
+
before do
|
67
|
+
options.stub(fail_fast: true, stop_after: 3)
|
68
|
+
subject.failure 'first'
|
69
|
+
subject.failure 'second'
|
70
|
+
end
|
71
|
+
|
72
|
+
it "returns true when the limit is reached " do
|
73
|
+
subject.failure 'third'
|
74
|
+
expect(subject.stop?).to be_true
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns false when under the limit" do
|
78
|
+
expect(subject.stop?).to be_false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with no failure limit" do
|
83
|
+
before { options.stub(fail_fast: false) }
|
84
|
+
|
85
|
+
it "return false" do
|
86
|
+
expect(subject.stop?).to be_false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require_relative '../../lib/recog'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
describe Recog::Nizer do
|
5
|
+
subject { Recog::Nizer }
|
6
|
+
|
7
|
+
describe "#match" do
|
8
|
+
File.readlines(File.expand_path(File.join('spec', 'data', 'smb_native_os.txt'))).each do |line|
|
9
|
+
data = line.strip
|
10
|
+
context "with smb_native_os:#{data}" do
|
11
|
+
let(:match_result) { subject.match('smb.native_os', data) }
|
12
|
+
|
13
|
+
it "returns a hash" do
|
14
|
+
expect(match_result.class).to eq(::Hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns a successful match" do
|
18
|
+
expect(match_result['matched'].to_s).to match(/^[A-Z]/)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "correctly matches service or os" do
|
22
|
+
if data =~ /^Windows/
|
23
|
+
expect(match_result['os.product']).to match(/^Windows/)
|
24
|
+
end
|
25
|
+
|
26
|
+
if data =~ /^Samba/
|
27
|
+
expect(match_result['service.product']).to match(/^Samba/)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "self.best_os_match" do
|
36
|
+
|
37
|
+
# Demonstrates how this method picks up additional attributes from other members of the winning
|
38
|
+
# os.product match group and applies them to the result.
|
39
|
+
matches1 = YAML.load(File.read(File.expand_path(File.join('spec', 'data', 'best_os_match_1.yml'))))
|
40
|
+
context "with best_os_match_1.yml" do
|
41
|
+
let(:result) { subject.best_os_match(matches1) }
|
42
|
+
|
43
|
+
it "returns a hash" do
|
44
|
+
expect(result.class).to eq(::Hash)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "matches Windows 2008" do
|
48
|
+
expect(result['os.product']).to eq('Windows 2008')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "matches Microsoft" do
|
52
|
+
expect(result['os.vendor']).to eq('Microsoft')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "matches English" do
|
56
|
+
expect(result['os.language']).to eq('English')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "matches service pack 2" do
|
60
|
+
expect(result['os.version']).to eq('Service Pack 2')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Demonstrates how additive os.certainty values allow a 1.0 certainty rule to be overridden
|
65
|
+
# by multiple lower certainty matches
|
66
|
+
matches2 = YAML.load(File.read(File.expand_path(File.join('spec', 'data', 'best_os_match_2.yml'))))
|
67
|
+
context "with best_os_match_2.yml" do
|
68
|
+
let(:result) { subject.best_os_match(matches2) }
|
69
|
+
|
70
|
+
it "returns a hash" do
|
71
|
+
expect(result.class).to eq(::Hash)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "matches Windows 2012" do
|
75
|
+
expect(result['os.product']).to eq('Windows 2012')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "matches Microsoft" do
|
79
|
+
expect(result['os.vendor']).to eq('Microsoft')
|
80
|
+
end
|
81
|
+
|
82
|
+
it "matches Arabic" do
|
83
|
+
expect(result['os.language']).to eq('Arabic')
|
84
|
+
end
|
85
|
+
|
86
|
+
it "matches service pack 1" do
|
87
|
+
expect(result['os.version']).to eq('Service Pack 1')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "self.best_service_match" do
|
94
|
+
|
95
|
+
# Demonstrates how this method picks up additional attributes from other members of the winning
|
96
|
+
# service.product match group and applies them to the result.
|
97
|
+
matches1 = YAML.load(File.read(File.expand_path(File.join('spec', 'data', 'best_service_match_1.yml'))))
|
98
|
+
context "with best_service_match_1.yml" do
|
99
|
+
let(:result) { subject.best_service_match(matches1) }
|
100
|
+
|
101
|
+
it "returns a hash" do
|
102
|
+
expect(result.class).to eq(::Hash)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "matches IIS" do
|
106
|
+
expect(result['service.product']).to eq('IIS')
|
107
|
+
end
|
108
|
+
|
109
|
+
it "matches Microsoft" do
|
110
|
+
expect(result['service.vendor']).to eq('Microsoft')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "matches English" do
|
114
|
+
expect(result['service.language']).to eq('English')
|
115
|
+
end
|
116
|
+
|
117
|
+
it "matches version 6.0" do
|
118
|
+
expect(result['service.version'].to_i).to eq(6.0)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require_relative '../../lib/recog/verify_reporter'
|
2
|
+
|
3
|
+
describe Recog::VerifyReporter do
|
4
|
+
let(:formatter) { double('formatter').as_null_object }
|
5
|
+
let(:fingerprint) { double(name: 'a name', tests: [double, double, double]) }
|
6
|
+
let(:summary_line) do
|
7
|
+
"SUMMARY: Test completed with 1 successful, 1 warnings, and 1 failures"
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { Recog::VerifyReporter.new(double(detail: false), formatter) }
|
11
|
+
|
12
|
+
def run_report
|
13
|
+
subject.report(1) do
|
14
|
+
subject.print_name fingerprint
|
15
|
+
subject.success 'passed'
|
16
|
+
subject.warning 'a warning'
|
17
|
+
subject.failure 'a failure'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#report" do
|
22
|
+
it "prints warnings" do
|
23
|
+
expect(formatter).to receive(:warning_message).with('a warning')
|
24
|
+
run_report
|
25
|
+
end
|
26
|
+
|
27
|
+
it "prints failures" do
|
28
|
+
expect(formatter).to receive(:failure_message).with('a failure')
|
29
|
+
run_report
|
30
|
+
end
|
31
|
+
|
32
|
+
it "prints summary" do
|
33
|
+
expect(formatter).to receive(:failure_message).with(summary_line)
|
34
|
+
run_report
|
35
|
+
end
|
36
|
+
|
37
|
+
context "with detail" do
|
38
|
+
subject { Recog::VerifyReporter.new(double(detail: true), formatter) }
|
39
|
+
|
40
|
+
it "prints the fingerprint name" do
|
41
|
+
expect(formatter).to receive(:status_message).with("\na name")
|
42
|
+
run_report
|
43
|
+
end
|
44
|
+
|
45
|
+
it "prints successes" do
|
46
|
+
expect(formatter).to receive(:success_message).with(' passed')
|
47
|
+
run_report
|
48
|
+
end
|
49
|
+
|
50
|
+
it "prints warnings" do
|
51
|
+
expect(formatter).to receive(:warning_message).with(' a warning')
|
52
|
+
run_report
|
53
|
+
end
|
54
|
+
|
55
|
+
it "prints failures" do
|
56
|
+
expect(formatter).to receive(:failure_message).with(' a failure')
|
57
|
+
run_report
|
58
|
+
end
|
59
|
+
|
60
|
+
it "prints the fingerprint count" do
|
61
|
+
expect(formatter).to receive(:status_message).with("\nVerified 1 fingerprints:")
|
62
|
+
run_report
|
63
|
+
end
|
64
|
+
|
65
|
+
it "prints summary" do
|
66
|
+
expect(formatter).to receive(:failure_message).with(summary_line)
|
67
|
+
run_report
|
68
|
+
end
|
69
|
+
|
70
|
+
context "with no fingerprint tests" do
|
71
|
+
before { fingerprint.stub(tests: []) }
|
72
|
+
|
73
|
+
it "does not print the name" do
|
74
|
+
expect(formatter).not_to receive(:status_message).with("\na name")
|
75
|
+
run_report
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#print_summary" do
|
82
|
+
context "with success" do
|
83
|
+
before { subject.success 'pass' }
|
84
|
+
|
85
|
+
it "prints a successful summary" do
|
86
|
+
msg = "SUMMARY: Test completed with 1 successful, 0 warnings, and 0 failures"
|
87
|
+
expect(formatter).to receive(:success_message).with(msg)
|
88
|
+
subject.print_summary
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "with warnings" do
|
93
|
+
before { subject.warning 'warn' }
|
94
|
+
|
95
|
+
it "prints a warning summary" do
|
96
|
+
msg = "SUMMARY: Test completed with 0 successful, 1 warnings, and 0 failures"
|
97
|
+
expect(formatter).to receive(:warning_message).with(msg)
|
98
|
+
subject.print_summary
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "with failures" do
|
103
|
+
before { subject.failure 'fail' }
|
104
|
+
|
105
|
+
it "prints a failure summary" do
|
106
|
+
msg = "SUMMARY: Test completed with 0 successful, 0 warnings, and 1 failures"
|
107
|
+
expect(formatter).to receive(:failure_message).with(msg)
|
108
|
+
subject.print_summary
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/xml/apache_os.xml
ADDED
@@ -0,0 +1,295 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!--
|
3
|
+
When an HTTP server is fingerprinted as Apache, a second analysis pass can be done
|
4
|
+
on the server headers to extract OS information.
|
5
|
+
-->
|
6
|
+
|
7
|
+
<fingerprints matches="apache_os">
|
8
|
+
<fingerprint pattern=".*\(iSeries\).*">
|
9
|
+
<description>IBM i5/OS iSeries (OS/400)</description>
|
10
|
+
<param pos="0" name="os.vendor" value="IBM"/>
|
11
|
+
<param pos="0" name="os.device" value="General"/>
|
12
|
+
<param pos="0" name="os.family" value="OS/400"/>
|
13
|
+
<param pos="0" name="os.product" value="OS/400"/>
|
14
|
+
</fingerprint>
|
15
|
+
|
16
|
+
<fingerprint pattern=".*\(Mandrake Linux/\d+\.\d+\.92mdk\).*">
|
17
|
+
<!-- (Mandrake Linux/6.12.92mdk) -->
|
18
|
+
<description>Mandriva (formerly Mandrake) Linux 9.2</description>
|
19
|
+
<param pos="0" name="os.certainty" value="0.9"/>
|
20
|
+
<param pos="0" name="os.vendor" value="Mandriva"/>
|
21
|
+
<param pos="0" name="os.device" value="General"/>
|
22
|
+
<param pos="0" name="os.family" value="Linux"/>
|
23
|
+
<param pos="0" name="os.product" value="Linux"/>
|
24
|
+
<param pos="0" name="os.version" value="9.2"/>
|
25
|
+
</fingerprint>
|
26
|
+
|
27
|
+
<fingerprint pattern=".*\(Mandrake Linux/\d+\.\d+\.100mdk\).*">
|
28
|
+
<!-- (Mandrake Linux/6.8.100mdk) -->
|
29
|
+
<description>Mandriva (formerly Mandrake) Linux 10.0</description>
|
30
|
+
<param pos="0" name="os.certainty" value="0.9"/>
|
31
|
+
<param pos="0" name="os.vendor" value="Mandriva"/>
|
32
|
+
<param pos="0" name="os.device" value="General"/>
|
33
|
+
<param pos="0" name="os.family" value="Linux"/>
|
34
|
+
<param pos="0" name="os.product" value="Linux"/>
|
35
|
+
<param pos="0" name="os.version" value="10.0"/>
|
36
|
+
</fingerprint>
|
37
|
+
|
38
|
+
<fingerprint pattern=".*\((?:Mandrake|Mandriva) Linux/.*">
|
39
|
+
<!-- (Mandrake Linux/11mdk)
|
40
|
+
(Mandriva Linux/PREFORK-13.3.20060mdk)
|
41
|
+
(Mandriva Linux/PREFORK-13mdk)
|
42
|
+
(Mandriva Linux/PREFORK-1.1mdv2007.0)
|
43
|
+
-->
|
44
|
+
<description>Mandriva (formerly Mandrake) Linux unknown version</description>
|
45
|
+
<param pos="0" name="os.vendor" value="Mandriva"/>
|
46
|
+
<param pos="0" name="os.device" value="General"/>
|
47
|
+
<param pos="0" name="os.family" value="Linux"/>
|
48
|
+
<param pos="0" name="os.product" value="Linux"/>
|
49
|
+
</fingerprint>
|
50
|
+
|
51
|
+
<fingerprint pattern=".*\(Mandrakelinux/.*">
|
52
|
+
<!-- (Mandrakelinux/PREFORK-9mdk) -->
|
53
|
+
<description>Mandriva (formerly Mandrake) Linux unknown version</description>
|
54
|
+
<param pos="0" name="os.vendor" value="Mandriva"/>
|
55
|
+
<param pos="0" name="os.device" value="General"/>
|
56
|
+
<param pos="0" name="os.family" value="Linux"/>
|
57
|
+
<param pos="0" name="os.product" value="Linux"/>
|
58
|
+
</fingerprint>
|
59
|
+
|
60
|
+
<fingerprint pattern=".*\(PalmOS\).*">
|
61
|
+
<description>PalmOS</description>
|
62
|
+
<param pos="0" name="os.vendor" value="Palm"/>
|
63
|
+
<param pos="0" name="os.device" value="General"/>
|
64
|
+
<param pos="0" name="os.family" value="PalmOS"/>
|
65
|
+
<param pos="0" name="os.product" value="PalmOS"/>
|
66
|
+
</fingerprint>
|
67
|
+
|
68
|
+
<fingerprint pattern=".*\(Win32\).*">
|
69
|
+
<description>Microsoft Windows</description>
|
70
|
+
<param pos="0" name="os.certainty" value="0.75"/>
|
71
|
+
<param pos="0" name="os.vendor" value="Microsoft"/>
|
72
|
+
<param pos="0" name="os.device" value="General"/>
|
73
|
+
<param pos="0" name="os.family" value="Windows"/>
|
74
|
+
<param pos="0" name="os.product" value="Windows"/>
|
75
|
+
</fingerprint>
|
76
|
+
|
77
|
+
<fingerprint pattern=".*\(Darwin\).*">
|
78
|
+
<description>Apple Mac OS X</description>
|
79
|
+
<param pos="0" name="os.vendor" value="Apple"/>
|
80
|
+
<param pos="0" name="os.device" value="General"/>
|
81
|
+
<param pos="0" name="os.family" value="Mac OS X"/>
|
82
|
+
<param pos="0" name="os.product" value="Mac OS X"/>
|
83
|
+
</fingerprint>
|
84
|
+
|
85
|
+
<fingerprint pattern=".*\(Ubuntu\).*">
|
86
|
+
<description>Ubuntu</description>
|
87
|
+
<param pos="0" name="os.vendor" value="Ubuntu"/>
|
88
|
+
<param pos="0" name="os.device" value="General"/>
|
89
|
+
<param pos="0" name="os.family" value="Linux"/>
|
90
|
+
<param pos="0" name="os.product" value="Linux"/>
|
91
|
+
</fingerprint>
|
92
|
+
|
93
|
+
<fingerprint pattern=".*(?:Sun )?Cobalt \(Unix\)?.*">
|
94
|
+
<!-- Sun Cobalt (Unix)
|
95
|
+
Cobalt (Unix)
|
96
|
+
Cobalt (Unix) (Red Hat/Linux)
|
97
|
+
-->
|
98
|
+
<description>Sun Cobalt RaQ (Red Hat based Linux)</description>
|
99
|
+
<param pos="0" name="os.vendor" value="Sun"/>
|
100
|
+
<param pos="0" name="os.device" value="General"/>
|
101
|
+
<param pos="0" name="os.family" value="Linux"/>
|
102
|
+
<param pos="0" name="os.product" value="Cobalt RaQ"/>
|
103
|
+
</fingerprint>
|
104
|
+
|
105
|
+
<fingerprint pattern=".*\(BlueQuartz\).*">
|
106
|
+
<description>Blue Quartz is created by a Cobalt RaQ UG</description>
|
107
|
+
<param pos="0" name="os.vendor" value="Sun"/>
|
108
|
+
<param pos="0" name="os.device" value="General"/>
|
109
|
+
<param pos="0" name="os.family" value="Linux"/>
|
110
|
+
<param pos="0" name="os.product" value="Cobalt RaQ"/>
|
111
|
+
</fingerprint>
|
112
|
+
|
113
|
+
<fingerprint pattern=".*\(Fedora\).*">
|
114
|
+
<description>Red Hat Fedora</description>
|
115
|
+
<param pos="0" name="os.vendor" value="Red Hat"/>
|
116
|
+
<param pos="0" name="os.device" value="General"/>
|
117
|
+
<param pos="0" name="os.family" value="Linux"/>
|
118
|
+
<param pos="0" name="os.product" value="Fedora Core Linux"/>
|
119
|
+
</fingerprint>
|
120
|
+
|
121
|
+
<fingerprint pattern=".*\(RHEL\).*">
|
122
|
+
<description>Red Hat Fedora</description>
|
123
|
+
<param pos="0" name="os.vendor" value="Red Hat"/>
|
124
|
+
<param pos="0" name="os.device" value="General"/>
|
125
|
+
<param pos="0" name="os.family" value="Linux"/>
|
126
|
+
<param pos="0" name="os.product" value="Enterprise Linux"/>
|
127
|
+
</fingerprint>
|
128
|
+
|
129
|
+
<fingerprint pattern=".*\(Red[ -]Hat(?:[/ ]Linux)?\).*">
|
130
|
+
<!-- (Red Hat/Linux)
|
131
|
+
(Red-Hat/Linux)
|
132
|
+
(Red Hat Linux)
|
133
|
+
(Red Hat)
|
134
|
+
-->
|
135
|
+
<description>Red Hat Linux</description>
|
136
|
+
<param pos="0" name="os.vendor" value="Red Hat"/>
|
137
|
+
<param pos="0" name="os.device" value="General"/>
|
138
|
+
<param pos="0" name="os.family" value="Linux"/>
|
139
|
+
<param pos="0" name="os.product" value="Linux"/>
|
140
|
+
</fingerprint>
|
141
|
+
|
142
|
+
<fingerprint pattern=".*Debian(?:[/ ]GNU)?(?:/Linux)?.*">
|
143
|
+
<!-- (Debian)
|
144
|
+
(Debian GNU/Linux)
|
145
|
+
(Unix) Debian GNU/Linux
|
146
|
+
(Unix) Debian/GNU
|
147
|
+
-->
|
148
|
+
<description>Debian Linux</description>
|
149
|
+
<param pos="0" name="os.vendor" value="Debian"/>
|
150
|
+
<param pos="0" name="os.device" value="General"/>
|
151
|
+
<param pos="0" name="os.family" value="Linux"/>
|
152
|
+
<param pos="0" name="os.product" value="Linux"/>
|
153
|
+
</fingerprint>
|
154
|
+
|
155
|
+
<fingerprint pattern=".*\((?:Linux/)?S[uU]SE(?:/Linux)?\).*">
|
156
|
+
<!-- (SuSE)
|
157
|
+
(SuSE/Linux)
|
158
|
+
(Linux/SuSE)
|
159
|
+
(Linux/SUSE)
|
160
|
+
-->
|
161
|
+
<description>Novell SuSE Linux</description>
|
162
|
+
<param pos="0" name="os.vendor" value="SuSE"/>
|
163
|
+
<param pos="0" name="os.device" value="General"/>
|
164
|
+
<param pos="0" name="os.family" value="Linux"/>
|
165
|
+
<param pos="0" name="os.product" value="Linux"/>
|
166
|
+
</fingerprint>
|
167
|
+
|
168
|
+
<fingerprint pattern=".*\(NETWARE\).*">
|
169
|
+
<description>Novell NetWare</description>
|
170
|
+
<param pos="0" name="os.vendor" value="Novell"/>
|
171
|
+
<param pos="0" name="os.device" value="General"/>
|
172
|
+
<param pos="0" name="os.family" value="NetWare"/>
|
173
|
+
<param pos="0" name="os.product" value="NetWare"/>
|
174
|
+
</fingerprint>
|
175
|
+
|
176
|
+
<fingerprint pattern=".*HP-UX_Apache-based_Web_Server.*">
|
177
|
+
<description>HP HP-UX</description>
|
178
|
+
<param pos="0" name="os.vendor" value="HP"/>
|
179
|
+
<param pos="0" name="os.device" value="General"/>
|
180
|
+
<param pos="0" name="os.family" value="HP-UX"/>
|
181
|
+
<param pos="0" name="os.product" value="HP-UX"/>
|
182
|
+
</fingerprint>
|
183
|
+
|
184
|
+
<fingerprint pattern=".*\(CentOS\).*">
|
185
|
+
<description>CentOS Linux</description>
|
186
|
+
<param pos="0" name="os.vendor" value="CentOS"/>
|
187
|
+
<param pos="0" name="os.device" value="General"/>
|
188
|
+
<param pos="0" name="os.family" value="Linux"/>
|
189
|
+
<param pos="0" name="os.product" value="Linux"/>
|
190
|
+
</fingerprint>
|
191
|
+
|
192
|
+
<fingerprint pattern=".*\(Turbolinux\).*">
|
193
|
+
<description>Turbolinux</description>
|
194
|
+
<param pos="0" name="os.vendor" value="Turbolinux"/>
|
195
|
+
<param pos="0" name="os.device" value="General"/>
|
196
|
+
<param pos="0" name="os.family" value="Linux"/>
|
197
|
+
<param pos="0" name="os.product" value="Linux"/>
|
198
|
+
</fingerprint>
|
199
|
+
|
200
|
+
<fingerprint pattern=".*\(FreeBSD\).*">
|
201
|
+
<description>FreeBSD</description>
|
202
|
+
<param pos="0" name="os.vendor" value="FreeBSD"/>
|
203
|
+
<param pos="0" name="os.device" value="General"/>
|
204
|
+
<param pos="0" name="os.family" value="FreeBSD"/>
|
205
|
+
<param pos="0" name="os.product" value="FreeBSD"/>
|
206
|
+
</fingerprint>
|
207
|
+
|
208
|
+
<fingerprint pattern=".*\(Asianux\).*">
|
209
|
+
<description>Asianux Linux</description>
|
210
|
+
<param pos="0" name="os.vendor" value="Asianux"/>
|
211
|
+
<param pos="0" name="os.device" value="General"/>
|
212
|
+
<param pos="0" name="os.family" value="Linux"/>
|
213
|
+
<param pos="0" name="os.product" value="Linux"/>
|
214
|
+
</fingerprint>
|
215
|
+
|
216
|
+
<fingerprint pattern=".*\(Gentoo(?:/Linux)?\).*">
|
217
|
+
<description>Gentoo Linux</description>
|
218
|
+
<param pos="0" name="os.vendor" value="Gentoo"/>
|
219
|
+
<param pos="0" name="os.device" value="General"/>
|
220
|
+
<param pos="0" name="os.family" value="Linux"/>
|
221
|
+
<param pos="0" name="os.product" value="Linux"/>
|
222
|
+
</fingerprint>
|
223
|
+
|
224
|
+
<fingerprint pattern=".*\(Conectiva(?:/Linux)?\).*">
|
225
|
+
<description>CentOS Linux</description>
|
226
|
+
<param pos="0" name="os.vendor" value="Conectiva"/>
|
227
|
+
<param pos="0" name="os.device" value="General"/>
|
228
|
+
<param pos="0" name="os.family" value="Linux"/>
|
229
|
+
<param pos="0" name="os.product" value="Linux"/>
|
230
|
+
</fingerprint>
|
231
|
+
|
232
|
+
<fingerprint pattern=".*\(Trustix Secure Linux(?:/Linux)?\).*">
|
233
|
+
<description>CentOS Linux</description>
|
234
|
+
<param pos="0" name="os.vendor" value="Trustix"/>
|
235
|
+
<param pos="0" name="os.device" value="General"/>
|
236
|
+
<param pos="0" name="os.family" value="Linux"/>
|
237
|
+
<param pos="0" name="os.product" value="Secure Linux"/>
|
238
|
+
</fingerprint>
|
239
|
+
|
240
|
+
<fingerprint pattern=".*\(White Box\).*">
|
241
|
+
<description>White Box Enterprise Linux</description>
|
242
|
+
<param pos="0" name="os.vendor" value="White Box"/>
|
243
|
+
<param pos="0" name="os.device" value="General"/>
|
244
|
+
<param pos="0" name="os.family" value="Linux"/>
|
245
|
+
<param pos="0" name="os.product" value="Enterprise Linux"/>
|
246
|
+
</fingerprint>
|
247
|
+
|
248
|
+
<fingerprint pattern=".*\(UnitedLinux\).*">
|
249
|
+
<description>UnitedLinux</description>
|
250
|
+
<param pos="0" name="os.vendor" value="UnitedLinux"/>
|
251
|
+
<param pos="0" name="os.device" value="General"/>
|
252
|
+
<param pos="0" name="os.family" value="Linux"/>
|
253
|
+
<param pos="0" name="os.product" value="Linux"/>
|
254
|
+
</fingerprint>
|
255
|
+
|
256
|
+
<fingerprint pattern=".*\(PLD/Linux\).*">
|
257
|
+
<description>PLD Linux</description>
|
258
|
+
<param pos="0" name="os.vendor" value="PLD"/>
|
259
|
+
<param pos="0" name="os.device" value="General"/>
|
260
|
+
<param pos="0" name="os.family" value="Linux"/>
|
261
|
+
<param pos="0" name="os.product" value="Linux"/>
|
262
|
+
</fingerprint>
|
263
|
+
|
264
|
+
<fingerprint pattern=".*\(Vine/Linux\).*">
|
265
|
+
<description>Vine Linux</description>
|
266
|
+
<param pos="0" name="os.vendor" value="Vine"/>
|
267
|
+
<param pos="0" name="os.device" value="General"/>
|
268
|
+
<param pos="0" name="os.family" value="Linux"/>
|
269
|
+
<param pos="0" name="os.product" value="Linux"/>
|
270
|
+
</fingerprint>
|
271
|
+
|
272
|
+
<fingerprint pattern=".*\(rPath\).*">
|
273
|
+
<description>rPath Linux</description>
|
274
|
+
<param pos="0" name="os.vendor" value="rPath"/>
|
275
|
+
<param pos="0" name="os.device" value="General"/>
|
276
|
+
<param pos="0" name="os.family" value="Linux"/>
|
277
|
+
<param pos="0" name="os.product" value="Linux"/>
|
278
|
+
</fingerprint>
|
279
|
+
|
280
|
+
<fingerprint pattern=".*\(StartCom Linux\).*">
|
281
|
+
<description>StartCom Linux</description>
|
282
|
+
<param pos="0" name="os.vendor" value="StartCom"/>
|
283
|
+
<param pos="0" name="os.device" value="General"/>
|
284
|
+
<param pos="0" name="os.family" value="Linux"/>
|
285
|
+
<param pos="0" name="os.product" value="Linux"/>
|
286
|
+
</fingerprint>
|
287
|
+
|
288
|
+
<fingerprint pattern=".*Linux.*">
|
289
|
+
<description>Generic Linux fallback</description>
|
290
|
+
<param pos="0" name="os.certainty" value="0.75"/>
|
291
|
+
<param pos="0" name="os.device" value="General"/>
|
292
|
+
<param pos="0" name="os.family" value="Linux"/>
|
293
|
+
<param pos="0" name="os.product" value="Linux"/>
|
294
|
+
</fingerprint>
|
295
|
+
</fingerprints>
|