ruby-nmap 0.5.1 → 0.6.0

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