ruby-nmap 0.1.1 → 0.2.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.
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +25 -0
- data/LICENSE.txt +22 -0
- data/README.md +63 -0
- data/Rakefile +28 -21
- data/gemspec.yml +23 -0
- data/lib/nmap/host.rb +65 -23
- data/lib/nmap/program.rb +1 -1
- data/lib/nmap/scan_task.rb +65 -0
- data/lib/nmap/scanner.rb +8 -1
- data/lib/nmap/task.rb +125 -113
- data/lib/nmap/version.rb +1 -1
- data/lib/nmap/xml.rb +29 -6
- data/ruby-nmap.gemspec +10 -0
- data/spec/host_spec.rb +12 -3
- data/spec/nmap_spec.rb +2 -2
- data/spec/os_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -4
- data/spec/task_spec.rb +38 -0
- data/spec/xml_spec.rb +22 -2
- metadata +119 -85
- data.tar.gz.sig +0 -0
- data/History.rdoc +0 -11
- data/Manifest.txt +0 -27
- data/README.rdoc +0 -83
- data/tasks/spec.rb +0 -10
- data/tasks/yard.rb +0 -13
- metadata.gz.sig +0 -1
data/lib/nmap/scanner.rb
CHANGED
@@ -10,6 +10,9 @@ module Nmap
|
|
10
10
|
# The arguments used with the scanner
|
11
11
|
attr_reader :arguments
|
12
12
|
|
13
|
+
# The time the scan begun
|
14
|
+
attr_reader :start_time
|
15
|
+
|
13
16
|
#
|
14
17
|
# Creates a new Scanner object.
|
15
18
|
#
|
@@ -22,10 +25,14 @@ module Nmap
|
|
22
25
|
# @param [String] arguments
|
23
26
|
# The arguments used with the scanner.
|
24
27
|
#
|
25
|
-
|
28
|
+
# @param [Time] start_time
|
29
|
+
# The time the scan begun
|
30
|
+
#
|
31
|
+
def initialize(name,version,arguments,start_time)
|
26
32
|
@name = name
|
27
33
|
@version = version
|
28
34
|
@arguments = arguments
|
35
|
+
@start_time = start_time
|
29
36
|
end
|
30
37
|
|
31
38
|
#
|
data/lib/nmap/task.rb
CHANGED
@@ -2,139 +2,139 @@ require 'rprogram/task'
|
|
2
2
|
|
3
3
|
module Nmap
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# ## Nmap options:
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# ### Target Specifications:
|
8
8
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
9
|
+
# * `-iL` - `nmap.target_file`
|
10
|
+
# * `-iR` - `nmap.random_targets`
|
11
|
+
# * `--exclude` - `nmap.exclude`
|
12
|
+
# * `--excludefile` - `nmap.exclude_file`
|
13
13
|
#
|
14
|
-
#
|
14
|
+
# ### Host Discovery:
|
15
15
|
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
16
|
+
# * `-sL` - `nmap.list`
|
17
|
+
# * `-sP` - `nmap.ping`
|
18
|
+
# * `-PN` - `nmap.skip_discovery`
|
19
|
+
# * `-PS` - `nmap.syn_discovery`
|
20
|
+
# * `-PA` - `nmap.ack_discovery`
|
21
|
+
# * `-PU` - `nmap.udp_discovery`
|
22
|
+
# * `-PE` - `nmap.icmp_echo_discovery`
|
23
|
+
# * `-PP` - `nmap.icmp_timestamp_discovery`
|
24
|
+
# * `-PM` - `nmap.icmp_netmask_discovery`
|
25
|
+
# * `-PO` - `nmap.ip_ping`
|
26
|
+
# * `-n` - `nmap.disable_dns`
|
27
|
+
# * `-R` - `nmap.enable_dns`
|
28
|
+
# * `--dns-servers` - `nmap.dns_servers`
|
29
|
+
# * `--systems-dns` - `nmap.systems_dns`
|
30
30
|
#
|
31
|
-
#
|
31
|
+
# ### Scan Techniques:
|
32
32
|
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
33
|
+
# * `-sS` - `nmap.syn_scan`
|
34
|
+
# * `-sT` - `nmap.connect_scan`
|
35
|
+
# * `-sA` - `nmap.ack_scan`
|
36
|
+
# * `-sW` - `nmap.window_scan`
|
37
|
+
# * `-sM` - `nmap.maimon_scan`
|
38
|
+
# * `-sU` - `nmap.udp_scan`
|
39
|
+
# * `-sN` - `nmap.null_scan`
|
40
|
+
# * `-sF` - `nmap.fin_scan`
|
41
|
+
# * `-sX` - `nmap.xmas_scan`
|
42
|
+
# * `--scanflags` - `nmap.tcp_scan_flags`
|
43
|
+
# * `-sI` - `nmap.idle_scan`
|
44
|
+
# * `-s0` - `nmap.ip_scan`
|
45
|
+
# * `-b` - `nmap.ftp_bounce_scan`
|
46
|
+
# * `--traceroute` - `nmap.traceroute`
|
47
|
+
# * `--reason` - `nmap.show_reason`
|
48
48
|
#
|
49
|
-
#
|
49
|
+
# ### Port Specification and Scan Order:
|
50
50
|
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
51
|
+
# * `-p` - `nmap.ports`
|
52
|
+
# * `-F` - `nmap.fast`
|
53
|
+
# * `-r` - `nmap.consecutively`
|
54
|
+
# * `--top-ports` - `nmap.top_ports`
|
55
|
+
# * `--port-ratio` - `nmap.port_ratio`
|
56
56
|
#
|
57
|
-
#
|
57
|
+
# ### Service/Version Detection:
|
58
58
|
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
59
|
+
# * `-sV` - `nmap.service_scan`
|
60
|
+
# * `--version-intensity` - `nmap.version_intensity`
|
61
|
+
# * `--version-light` - `nmap.version_light`
|
62
|
+
# * `--version-all` - `nmap.version_all`
|
63
|
+
# * `--version-trace` - `nmap.version_trace`
|
64
64
|
#
|
65
|
-
#
|
65
|
+
# ### Script Scan:
|
66
66
|
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
67
|
+
# * `-sC` - `nmap.default_script`
|
68
|
+
# * `--script` - `nmap.script`
|
69
|
+
# * `--script-args` - `nmap.script_params`
|
70
|
+
# * `--script-trace` - `nmap.script_trace`
|
71
|
+
# * `--script-updatedb` - `nmap.update_scriptdb`
|
72
72
|
#
|
73
|
-
#
|
73
|
+
# ### OS Detection:
|
74
74
|
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
75
|
+
# * `-O` - `nmap.os_fingerprint`
|
76
|
+
# * `--osscan_limit` - `nmap.limit_os_scan`
|
77
|
+
# * `--osscan_guess` - `nmap.max_os_scan`
|
78
78
|
#
|
79
|
-
#
|
79
|
+
# ### Timing and Performance:
|
80
80
|
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
81
|
+
# * `--min-hostgroup` - `nmap.min_host_group`
|
82
|
+
# * `--max-hostgroup` - `nmap.max_host_group`
|
83
|
+
# * `--min-parallelism` - `nmap.min_parallelism`
|
84
|
+
# * `--max-parallelism` - `nmap.max_parallelism`
|
85
|
+
# * `--min-rtt-timeout` - `nmap.min_rtt_timeout`
|
86
|
+
# * `--max-rtt-timeout` - `nmap.max_rtt_timeout`
|
87
|
+
# * `--max-retries` - `nmap.max_retries`
|
88
|
+
# * `--host-timeout` - `nmap.host_timeout`
|
89
|
+
# * `--scan-delay` - `nmap.scan_delay`
|
90
|
+
# * `--max-scan-delay` - `nmap.max_scan_delay`
|
91
|
+
# * `--min-rate` - `nmap.min_rate`
|
92
|
+
# * `--max-rate` - `nmap.max_rate`
|
93
93
|
#
|
94
|
-
#
|
94
|
+
# ### Firewall/IDS Evasion and Spoofing:
|
95
95
|
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
96
|
+
# * `-f` - `nmap.packet_fragments`
|
97
|
+
# * `--mtu` - `nmap.mtu`
|
98
|
+
# * `-D` - `nmap.decoys`
|
99
|
+
# * `-S` - `nmap.spoof`
|
100
|
+
# * `-e` - `nmap.interface`
|
101
|
+
# * `-g` - `nmap.source_port`
|
102
|
+
# * `--data-length` - `nmap.data_length`
|
103
|
+
# * `--ip-options` - `nmap.ip_options`
|
104
|
+
# * `--ttl` - `nmap.ttl`
|
105
|
+
# * `--spoof-mac` - `nmap.spoof_mac`
|
106
|
+
# * `--badsum` - `nmap.bad_checksum`
|
107
107
|
#
|
108
|
-
#
|
108
|
+
# ### Output:
|
109
109
|
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
110
|
+
# * `-oN` - `nmap.save`
|
111
|
+
# * `-oX` - `nmap.xml`
|
112
|
+
# * `-oS` - `nmap.skiddie`
|
113
|
+
# * `-oG` - `nmap.grepable`
|
114
|
+
# * `-v` - `nmap.verbose`
|
115
|
+
# * `--open` - `nmap.show_open_ports`
|
116
|
+
# * `--packet-trace` - `nmap.show_packets`
|
117
|
+
# * `--iflist` - `nmap.show_interfaces`
|
118
|
+
# * `--log-errors` - `nmap.show_log_errors`
|
119
|
+
# * `--append-output` - `nmap.append`
|
120
|
+
# * `--resume` - `nmap.resume`
|
121
|
+
# * `--stylesheet` - `nmap.stylesheet`
|
122
|
+
# * `--webxml` - `nmap.nmap_stylesheet`
|
123
|
+
# * `--no-stylesheet` - `nmap.disable_stylesheet`
|
124
124
|
#
|
125
|
-
#
|
125
|
+
# ### Misc:
|
126
126
|
#
|
127
|
-
#
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
127
|
+
# * `-6` - `nmap.ipv6`
|
128
|
+
# * `-A` - `nmap.all`
|
129
|
+
# * `--datadir` - `nmap.nmap_datadir`
|
130
|
+
# * `--send-eth` - `nmap.raw_ethernet`
|
131
|
+
# * `--send-ip` - `nmap.raw_ip`
|
132
|
+
# * `--privledged` - `nmap.privledged`
|
133
|
+
# * `--unprivledged` - `nmap.unprivledged`
|
134
|
+
# * `-V` - `nmap.version`
|
135
|
+
# * `-h` - `nmap.help`
|
136
136
|
#
|
137
|
-
#
|
137
|
+
# * `target specification` - `nmap.targets`
|
138
138
|
#
|
139
139
|
# @see http://nmap.org/book/man.html
|
140
140
|
#
|
@@ -180,7 +180,19 @@ module Nmap
|
|
180
180
|
long_option :flag => '--reason', :name => :show_reason
|
181
181
|
|
182
182
|
# PORT SPECIFICATION AND SCAN ORDER:
|
183
|
-
short_option :flag => '-p', :name => :ports
|
183
|
+
short_option :flag => '-p', :name => :ports do |opt,value|
|
184
|
+
unless value.empty?
|
185
|
+
[opt.flag, value.map { |port|
|
186
|
+
case port
|
187
|
+
when Range
|
188
|
+
"#{port.first}-#{port.last}"
|
189
|
+
else
|
190
|
+
port.to_s
|
191
|
+
end
|
192
|
+
}.join(',')]
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
184
196
|
short_option :flag => '-F', :name => :fast
|
185
197
|
short_option :flag => '-r', :name => :consecutively
|
186
198
|
long_option :flag => '--top-ports'
|
@@ -197,8 +209,8 @@ module Nmap
|
|
197
209
|
short_option :flag => '-sC', :name => :default_script
|
198
210
|
long_option :flag => '--script'
|
199
211
|
long_option :flag => '--script-args',
|
200
|
-
|
201
|
-
|
212
|
+
:name => :script_params,
|
213
|
+
:separator => ','
|
202
214
|
long_option :flag => '--script-trace'
|
203
215
|
long_option :flag => '--script-updatedb', :name => :update_scriptdb
|
204
216
|
|
data/lib/nmap/version.rb
CHANGED
data/lib/nmap/xml.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
require 'nmap/host'
|
2
1
|
require 'nmap/scanner'
|
2
|
+
require 'nmap/scan_task'
|
3
3
|
require 'nmap/scan'
|
4
|
+
require 'nmap/host'
|
4
5
|
|
5
6
|
require 'nokogiri'
|
6
7
|
require 'enumerator'
|
@@ -42,7 +43,8 @@ module Nmap
|
|
42
43
|
@scanner ||= Scanner.new(
|
43
44
|
@doc.root['scanner'],
|
44
45
|
@doc.root['version'],
|
45
|
-
@doc.root['args']
|
46
|
+
@doc.root['args'],
|
47
|
+
Time.at(@doc.root['start'].to_i)
|
46
48
|
)
|
47
49
|
end
|
48
50
|
|
@@ -63,7 +65,7 @@ module Nmap
|
|
63
65
|
# The scan information.
|
64
66
|
#
|
65
67
|
def scan_info
|
66
|
-
@doc.xpath(
|
68
|
+
@doc.xpath('/nmaprun/scaninfo').map do |scaninfo|
|
67
69
|
Scan.new(
|
68
70
|
scaninfo['type'].to_sym,
|
69
71
|
scaninfo['protocol'].to_sym,
|
@@ -85,7 +87,7 @@ module Nmap
|
|
85
87
|
# The verbose level.
|
86
88
|
#
|
87
89
|
def verbose
|
88
|
-
@verbose ||= @doc.at(
|
90
|
+
@verbose ||= @doc.at('verbose/@level').inner_text.to_i
|
89
91
|
end
|
90
92
|
|
91
93
|
#
|
@@ -95,7 +97,28 @@ module Nmap
|
|
95
97
|
# The debugging level.
|
96
98
|
#
|
97
99
|
def debugging
|
98
|
-
@debugging ||= @doc.at(
|
100
|
+
@debugging ||= @doc.at('debugging/@level').inner_text.to_i
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# Parses the tasks of the scan.
|
105
|
+
#
|
106
|
+
# @return [Array<ScanTask>]
|
107
|
+
# The tasks of the scan.
|
108
|
+
#
|
109
|
+
# @since 0.1.2
|
110
|
+
#
|
111
|
+
def tasks
|
112
|
+
@doc.xpath('/nmaprun/taskbegin').map do |task_begin|
|
113
|
+
task_end = task_begin.xpath('following-sibling::taskend').first
|
114
|
+
|
115
|
+
ScanTask.new(
|
116
|
+
task_begin['task'],
|
117
|
+
Time.at(task_begin['time'].to_i),
|
118
|
+
Time.at(task_end['time'].to_i),
|
119
|
+
task_end['extrainfo']
|
120
|
+
)
|
121
|
+
end
|
99
122
|
end
|
100
123
|
|
101
124
|
#
|
@@ -111,7 +134,7 @@ module Nmap
|
|
111
134
|
# The XML object.
|
112
135
|
#
|
113
136
|
def each_host(&block)
|
114
|
-
@doc.xpath(
|
137
|
+
@doc.xpath('/nmaprun/host').each do |host|
|
115
138
|
block.call(Host.new(host)) if block
|
116
139
|
end
|
117
140
|
|
data/ruby-nmap.gemspec
ADDED
data/spec/host_spec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'nmap/xml'
|
2
|
-
require 'nmap/host'
|
3
|
-
|
4
1
|
require 'spec_helper'
|
5
2
|
require 'helpers/xml'
|
6
3
|
|
4
|
+
require 'nmap/xml'
|
5
|
+
require 'nmap/host'
|
6
|
+
|
7
7
|
describe Host do
|
8
8
|
include Helpers
|
9
9
|
|
@@ -12,6 +12,15 @@ describe Host do
|
|
12
12
|
@host = @xml.hosts.first
|
13
13
|
end
|
14
14
|
|
15
|
+
it "should parse the start_time" do
|
16
|
+
@host.start_time.should > Time.at(0)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should parse the end_time" do
|
20
|
+
@host.end_time.should > Time.at(0)
|
21
|
+
@host.end_time.should > @host.start_time
|
22
|
+
end
|
23
|
+
|
15
24
|
it "should parse the status" do
|
16
25
|
status = @host.status
|
17
26
|
|
data/spec/nmap_spec.rb
CHANGED