ruby-nmap 0.5.1 → 0.6.0

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.
@@ -4,6 +4,6 @@ require 'nmap/version'
4
4
 
5
5
  describe Nmap do
6
6
  it "should have a VERSION constant" do
7
- Nmap.const_defined?('VERSION').should == true
7
+ subject.const_defined?('VERSION').should be_true
8
8
  end
9
9
  end
@@ -1,20 +1,15 @@
1
1
  require 'spec_helper'
2
- require 'helpers/xml'
3
2
 
4
3
  require 'nmap/os'
5
- require 'nmap/xml'
6
4
  require 'cgi'
7
5
 
8
6
  describe OS do
9
- include Helpers
7
+ let(:xml) { XML.new(Helpers::SCAN_FILE) }
10
8
 
11
- before(:all) do
12
- @xml = XML.new(Helpers::SCAN_FILE)
13
- @os = @xml.hosts.first.os
14
- end
9
+ subject { xml.hosts.first.os }
15
10
 
16
11
  it "should parse the OS classes" do
17
- classes = @os.classes
12
+ classes = subject.classes
18
13
 
19
14
  classes.length.should == 1
20
15
  classes[0].type.should == :WAP
@@ -24,7 +19,7 @@ describe OS do
24
19
  end
25
20
 
26
21
  it "should parse the OS matches" do
27
- matches = @os.matches
22
+ matches = subject.matches
28
23
 
29
24
  matches.length.should == 2
30
25
 
@@ -36,10 +31,10 @@ describe OS do
36
31
  end
37
32
 
38
33
  it "should parse the ports used" do
39
- @os.ports_used.should == [443, 21]
34
+ subject.ports_used.should == [443, 21]
40
35
  end
41
36
 
42
37
  it "should parse the OS fingerprints" do
43
- @os.fingerprint.should == CGI.unescapeHTML("SCAN(V=4.68%D=8/16%OT=443%CT=21%CU=%PV=Y%DS=1%G=N%M=001D7E%TM=48A77607%P=i686-pc-linux-gnu)
SEQ(SP=19%GCD=FA00%ISR=9E%TI=I%TS=1)
OPS(O1=M5B4NW0NNT11%O2=M5B4NW0NNT11%O3=M5B4NW0NNT11%O4=M5B4NW0NNT11%O5=M5B4NW0NNT11%O6=M5B4NNT11)
WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)
ECN(R=Y%DF=N%TG=40%W=2000%O=M5B4NW0%CC=N%Q=)
T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=N)
T5(R=Y%DF=N%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=N)
T7(R=N)
U1(R=N)
IE(R=N)
")
38
+ subject.fingerprint.should == CGI.unescapeHTML("SCAN(V=4.68%D=8/16%OT=443%CT=21%CU=%PV=Y%DS=1%G=N%M=001D7E%TM=48A77607%P=i686-pc-linux-gnu)
SEQ(SP=19%GCD=FA00%ISR=9E%TI=I%TS=1)
OPS(O1=M5B4NW0NNT11%O2=M5B4NW0NNT11%O3=M5B4NW0NNT11%O4=M5B4NW0NNT11%O5=M5B4NW0NNT11%O6=M5B4NNT11)
WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)
ECN(R=Y%DF=N%TG=40%W=2000%O=M5B4NW0%CC=N%Q=)
T1(R=Y%DF=N%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=N)
T5(R=Y%DF=N%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=N)
T7(R=N)
U1(R=N)
IE(R=N)
")
44
39
  end
45
40
  end
@@ -1,44 +1,39 @@
1
1
  require 'spec_helper'
2
- require 'helpers/xml'
3
-
4
- require 'nmap/xml'
5
2
  require 'nmap/port'
6
3
 
7
4
  describe Port do
8
- include Helpers
9
-
10
- before(:all) do
11
- @xml = XML.new(Helpers::SCAN_FILE)
12
- @nse_xml = XML.new(Helpers::NSE_FILE)
5
+ let(:xml) { XML.new(Helpers::SCAN_FILE) }
13
6
 
14
- @port = @xml.hosts.first.ports.first
15
- @nse_port = @nse_xml.hosts.first.ports.first
16
- end
7
+ subject { xml.hosts.first.ports.first }
17
8
 
18
9
  it "should parse the protocol" do
19
- @port.protocol.should == :tcp
10
+ subject.protocol.should == :tcp
20
11
  end
21
12
 
22
13
  it "should parse the port number" do
23
- @port.number.should == 21
14
+ subject.number.should == 21
24
15
  end
25
16
 
26
17
  it "should parse the state" do
27
- @port.state.should == :closed
18
+ subject.state.should == :closed
28
19
  end
29
20
 
30
21
  it "should parse the reason" do
31
- @port.reason.should == 'reset'
22
+ subject.reason.should == 'reset'
32
23
  end
33
24
 
34
25
  it "should parse the detected service" do
35
- @port.service.should == 'ftp'
26
+ subject.service.name.should == 'ftp'
36
27
  end
37
28
 
38
- it "should parse the output of NSE scripts ran against the port" do
39
- @nse_port.scripts.should_not be_empty
29
+ context "when NSE scripts are ran" do
30
+ let(:xml) { XML.new(Helpers::NSE_FILE) }
31
+
32
+ it "should parse the output of scripts" do
33
+ subject.scripts.should_not be_empty
40
34
 
41
- @nse_port.scripts.keys.should_not include(nil)
42
- @nse_port.scripts.values.should_not include(nil)
35
+ subject.scripts.keys.should_not include(nil)
36
+ subject.scripts.values.should_not include(nil)
37
+ end
43
38
  end
44
39
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'helpers/xml'
3
+
4
+ require 'nmap/xml'
5
+ require 'nmap/service'
6
+
7
+ describe Service do
8
+ include Helpers
9
+
10
+ before(:all) do
11
+ @xml = XML.new(Helpers::SCAN_FILE)
12
+ @nse_xml = XML.new(Helpers::NSE_FILE)
13
+ end
14
+
15
+ subject { @xml.hosts.first.ports.first.service }
16
+
17
+ it "should have a name" do
18
+ subject.name.should == 'ftp'
19
+ end
20
+
21
+ it "should have a fingerprint method" do
22
+ subject.fingerprint_method.should == :table
23
+ end
24
+
25
+ it "should have a confidence" do
26
+ subject.confidence.should == 3
27
+ end
28
+
29
+ context "with improved detection" do
30
+ subject { @nse_xml.hosts.first.ports.first.service }
31
+
32
+ it "should have a product name" do
33
+ subject.product.should == 'OpenSSH'
34
+ end
35
+
36
+ it "should have a version" do
37
+ subject.version.should == '5.1p1 Debian 6ubuntu2'
38
+ end
39
+ end
40
+ end
@@ -2,4 +2,11 @@ gem 'rspec', '~> 2.4'
2
2
  require 'rspec'
3
3
 
4
4
  require 'nmap/version'
5
+ require 'nmap/xml'
5
6
  include Nmap
7
+
8
+ require 'helpers/xml'
9
+
10
+ RSpec.configure do |spec|
11
+ spec.include Helpers
12
+ end
@@ -2,8 +2,6 @@ require 'spec_helper'
2
2
  require 'nmap/task'
3
3
 
4
4
  describe Task do
5
- subject { Task.new }
6
-
7
5
  describe "ports" do
8
6
  it "should ignore empty port Arrays" do
9
7
  subject.ports = []
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'nmap/tcp_sequence'
3
+
4
+ describe TcpSequence do
5
+ let(:xml) { XML.new(Helpers::SCAN_FILE) }
6
+
7
+ subject { xml.hosts.first.tcp_sequence }
8
+
9
+ it "should be accessible from host objects" do
10
+ subject.should be_kind_of(TcpSequence)
11
+ end
12
+
13
+ it "should parse the index" do
14
+ subject.index.should == 25
15
+ end
16
+
17
+ it "should parse the difficulty description" do
18
+ subject.difficulty.should == "Good luck!"
19
+ end
20
+
21
+ it "should parse the values" do
22
+ subject.values.should == [
23
+ 0xAF1B39BD,
24
+ 0xAF1C33BD,
25
+ 0xAF1F21BD,
26
+ 0xAF201BBD,
27
+ 0xAF2115BD,
28
+ 0xAF220FBD
29
+ ]
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'nmap/tcp_ts_sequence'
3
+
4
+ describe TcpTsSequence do
5
+ let(:xml) { XML.new(Helpers::SCAN_FILE) }
6
+
7
+ subject { xml.hosts.first.tcp_ts_sequence }
8
+
9
+ it "should be accessible from host objects" do
10
+ subject.should be_kind_of(TcpTsSequence)
11
+ end
12
+
13
+ it "should parse the description" do
14
+ subject.description.should == "2HZ"
15
+ end
16
+
17
+ it "should parse the values" do
18
+ subject.values.should == [0x1858, 0x1858, 0x1859, 0x1859, 0x1859, 0x1859]
19
+ end
20
+ end
@@ -1,37 +1,31 @@
1
1
  require 'spec_helper'
2
- require 'helpers/xml'
3
-
4
2
  require 'nmap/xml'
5
3
 
6
4
  describe XML do
7
- include Helpers
8
-
9
- before(:all) do
10
- @xml = XML.new(Helpers::SCAN_FILE)
11
- end
5
+ subject { XML.new(Helpers::SCAN_FILE) }
12
6
 
13
7
  it "should have a version" do
14
- @xml.version.should == '1.02'
8
+ subject.version.should == '1.02'
15
9
  end
16
10
 
17
11
  it "should parse the scanner version" do
18
- @xml.scanner.version == '4.68'
12
+ subject.scanner.version == '4.68'
19
13
  end
20
14
 
21
15
  it "should parse the scanner name" do
22
- @xml.scanner.name.should == 'nmap'
16
+ subject.scanner.name.should == 'nmap'
23
17
  end
24
18
 
25
19
  it "should parse the scanner arguments" do
26
- @xml.scanner.arguments.should == 'nmap -v -oX samples/backspace.xml -O -P0 -sS 192.168.5.*'
20
+ subject.scanner.arguments.should == 'nmap -v -oX samples/backspace.xml -O -P0 -sS 192.168.5.*'
27
21
  end
28
22
 
29
23
  it "should parse the scanner start time" do
30
- @xml.scanner.start_time.should == Time.at(1218934249)
24
+ subject.scanner.start_time.should == Time.at(1218934249)
31
25
  end
32
26
 
33
27
  it "should parse the scan information" do
34
- scan_info = @xml.scan_info
28
+ scan_info = subject.scan_info
35
29
 
36
30
  scan_info.length.should == 1
37
31
  scan_info.first.type.should == :syn
@@ -39,15 +33,15 @@ describe XML do
39
33
  end
40
34
 
41
35
  it "should parse the verbose level" do
42
- @xml.verbose.should == 1
36
+ subject.verbose.should == 1
43
37
  end
44
38
 
45
39
  it "should parse the debugging level" do
46
- @xml.debugging.should == 0
40
+ subject.debugging.should == 0
47
41
  end
48
42
 
49
43
  it "should parse the scan tasks" do
50
- tasks = @xml.tasks
44
+ tasks = subject.tasks
51
45
 
52
46
  tasks.should_not be_empty
53
47
 
@@ -63,14 +57,14 @@ describe XML do
63
57
  end
64
58
 
65
59
  it "should parse the hosts" do
66
- @xml.hosts.length.should == 10
60
+ subject.hosts.length.should == 10
67
61
  end
68
62
 
69
63
  it "should iterate over each up host" do
70
- @xml.each.all? { |host| host.status.state == :up }.should == true
64
+ subject.each.all? { |host| host.status.state == :up }.should == true
71
65
  end
72
66
 
73
67
  it "should convert to a String" do
74
- @xml.to_s.should == Helpers::SCAN_FILE
68
+ subject.to_s.should == Helpers::SCAN_FILE
75
69
  end
76
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-nmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-28 00:00:00.000000000 Z
12
+ date: 2012-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -123,6 +123,7 @@ files:
123
123
  - lib/nmap/scan_task.rb
124
124
  - lib/nmap/scanner.rb
125
125
  - lib/nmap/sequence.rb
126
+ - lib/nmap/service.rb
126
127
  - lib/nmap/status.rb
127
128
  - lib/nmap/task.rb
128
129
  - lib/nmap/tcp_sequence.rb
@@ -134,12 +135,15 @@ files:
134
135
  - spec/helpers/scan.xml
135
136
  - spec/helpers/xml.rb
136
137
  - spec/host_spec.rb
138
+ - spec/ip_id_sequence_spec.rb
137
139
  - spec/nmap_spec.rb
138
140
  - spec/os_spec.rb
139
141
  - spec/port_spec.rb
140
- - spec/sequence_spec.rb
142
+ - spec/service_spec.rb
141
143
  - spec/spec_helper.rb
142
144
  - spec/task_spec.rb
145
+ - spec/tcp_sequence_spec.rb
146
+ - spec/tcp_ts_sequence_spec.rb
143
147
  - spec/xml_spec.rb
144
148
  homepage: https://github.com/sophsec/ruby-nmap#readme
145
149
  licenses:
@@ -169,9 +173,12 @@ specification_version: 3
169
173
  summary: A Ruby interface to Nmap.
170
174
  test_files:
171
175
  - spec/host_spec.rb
176
+ - spec/ip_id_sequence_spec.rb
172
177
  - spec/nmap_spec.rb
173
178
  - spec/os_spec.rb
174
179
  - spec/port_spec.rb
175
- - spec/sequence_spec.rb
180
+ - spec/service_spec.rb
176
181
  - spec/task_spec.rb
182
+ - spec/tcp_sequence_spec.rb
183
+ - spec/tcp_ts_sequence_spec.rb
177
184
  - spec/xml_spec.rb
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
- require 'helpers/xml'
3
-
4
- require 'nmap/tcp_sequence'
5
- require 'nmap/tcp_ts_sequence'
6
- require 'nmap/ip_id_sequence'
7
- require 'nmap/xml'
8
- require 'cgi'
9
-
10
- describe TcpSequence do
11
- include Helpers
12
-
13
- before(:all) do
14
- @xml = XML.new(Helpers::SCAN_FILE)
15
- @tcpsequence = @xml.hosts.first.tcpsequence
16
- end
17
-
18
- it "should be accessible from host objects" do
19
- @tcpsequence.should be_kind_of(TcpSequence)
20
- end
21
-
22
- it "should parse the index" do
23
- @tcpsequence.index.should == 25
24
- end
25
-
26
- it "should parse the difficulty description" do
27
- @tcpsequence.difficulty.should == "Good luck!"
28
- end
29
-
30
- it "should parse the values" do
31
- @tcpsequence.values.should == [0xAF1B39BD,0xAF1C33BD,0xAF1F21BD,0xAF201BBD,0xAF2115BD,0xAF220FBD]
32
- end
33
- end
34
-
35
- describe IpidSequence do
36
- include Helpers
37
-
38
- before(:all) do
39
- @xml = XML.new(Helpers::SCAN_FILE)
40
- @ipidsequence = @xml.hosts.first.ipidsequence
41
- end
42
-
43
- it "should be accessible from host objects" do
44
- @ipidsequence.should be_kind_of(IpidSequence)
45
- end
46
-
47
- it "should parse the description" do
48
- @ipidsequence.description.should == "Incremental"
49
- end
50
-
51
- it "should parse the values" do
52
- @ipidsequence.values.should == [0x1FB0,0x1FB2,0x1FB4,0x1FB6,0x1FB8,0x1FBA]
53
- end
54
- end
55
-
56
- describe TcpTsSequence do
57
- include Helpers
58
-
59
- before(:all) do
60
- @xml = XML.new(Helpers::SCAN_FILE)
61
- @tcptssequence = @xml.hosts.first.tcptssequence
62
- end
63
-
64
- it "should be accessible from host objects" do
65
- @tcptssequence.should be_kind_of(TcpTsSequence)
66
- end
67
-
68
- it "should parse the description" do
69
- @tcptssequence.description.should == "2HZ"
70
- end
71
-
72
- it "should parse the values" do
73
- @tcptssequence.values.should == [0x1858,0x1858,0x1859,0x1859,0x1859,0x1859]
74
- end
75
- end