ruby-nmap 0.10.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.document +1 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +31 -0
- data/ChangeLog.md +118 -71
- data/Gemfile +11 -5
- data/LICENSE.txt +1 -1
- data/README.md +88 -50
- data/Rakefile +5 -0
- data/UPGRADING.md +47 -0
- data/gemspec.yml +5 -5
- data/lib/nmap/command.rb +765 -0
- data/lib/nmap/version.rb +1 -1
- data/lib/nmap/xml/address.rb +38 -0
- data/lib/nmap/xml/cpe/url.rb +80 -0
- data/lib/nmap/xml/cpe.rb +47 -0
- data/lib/nmap/xml/hop.rb +22 -0
- data/lib/nmap/xml/host.rb +546 -0
- data/lib/nmap/xml/host_script.rb +26 -0
- data/lib/nmap/xml/hostname.rb +44 -0
- data/lib/nmap/xml/ip_id_sequence.rb +26 -0
- data/lib/nmap/xml/os.rb +131 -0
- data/lib/nmap/xml/os_class.rb +86 -0
- data/lib/nmap/xml/os_match.rb +22 -0
- data/lib/nmap/xml/port.rb +114 -0
- data/lib/nmap/xml/postscript.rb +26 -0
- data/lib/nmap/xml/prescript.rb +26 -0
- data/lib/nmap/xml/run_stat.rb +22 -0
- data/lib/nmap/xml/scan.rb +38 -0
- data/lib/nmap/xml/scan_task.rb +55 -0
- data/lib/nmap/xml/scanner.rb +22 -0
- data/lib/nmap/xml/script.rb +110 -0
- data/lib/nmap/xml/scripts.rb +33 -0
- data/lib/nmap/xml/sequence.rb +52 -0
- data/lib/nmap/xml/service.rb +172 -0
- data/lib/nmap/xml/status.rb +22 -0
- data/lib/nmap/xml/tcp_sequence.rb +48 -0
- data/lib/nmap/xml/tcp_ts_sequence.rb +26 -0
- data/lib/nmap/xml/traceroute.rb +73 -0
- data/lib/nmap/xml/uptime.rb +22 -0
- data/lib/nmap/xml.rb +31 -44
- data/spec/command_spec.rb +726 -0
- data/spec/fixtures/down_host_scan.xml +16 -0
- data/spec/{address_spec.rb → xml/address_spec.rb} +2 -2
- data/spec/{cpe → xml/cpe}/url_spec.rb +1 -1
- data/spec/{cpe_examples.rb → xml/cpe_examples.rb} +1 -1
- data/spec/{hop_spec.rb → xml/hop_spec.rb} +2 -2
- data/spec/{host_script_spec.rb → xml/host_script_spec.rb} +2 -2
- data/spec/{host_spec.rb → xml/host_spec.rb} +8 -8
- data/spec/{hostname_spec.rb → xml/hostname_spec.rb} +2 -2
- data/spec/{ip_id_sequence_spec.rb → xml/ip_id_sequence_spec.rb} +3 -3
- data/spec/{os_class_spec.rb → xml/os_class_spec.rb} +3 -3
- data/spec/{os_match_spec.rb → xml/os_match_spec.rb} +2 -2
- data/spec/{os_spec.rb → xml/os_spec.rb} +3 -3
- data/spec/{port_spec.rb → xml/port_spec.rb} +4 -5
- data/spec/{postscript_spec.rb → xml/postscript_spec.rb} +2 -2
- data/spec/{prescript_spec.rb → xml/prescript_spec.rb} +2 -2
- data/spec/{run_stat_spec.rb → xml/run_stat_spec.rb} +2 -2
- data/spec/{scan_spec.rb → xml/scan_spec.rb} +2 -2
- data/spec/{scan_task_spec.rb → xml/scan_task_spec.rb} +6 -6
- data/spec/{scanner_spec.rb → xml/scanner_spec.rb} +3 -3
- data/spec/xml/script_spec.rb +137 -0
- data/spec/xml/scripts_examples.rb +19 -0
- data/spec/{sequence_examples.rb → xml/sequence_examples.rb} +1 -0
- data/spec/{service_spec.rb → xml/service_spec.rb} +31 -5
- data/spec/{status_spec.rb → xml/status_spec.rb} +2 -2
- data/spec/{tcp_sequence_spec.rb → xml/tcp_sequence_spec.rb} +3 -3
- data/spec/{tcp_ts_sequence_spec.rb → xml/tcp_ts_sequence_spec.rb} +3 -3
- data/spec/{traceroute_spec.rb → xml/traceroute_spec.rb} +3 -3
- data/spec/{uptime_spec.rb → xml/uptime_spec.rb} +2 -2
- data/spec/xml_spec.rb +73 -44
- metadata +72 -66
- data/.travis.yml +0 -16
- data/lib/nmap/address.rb +0 -34
- data/lib/nmap/cpe/url.rb +0 -78
- data/lib/nmap/cpe.rb +0 -45
- data/lib/nmap/hop.rb +0 -20
- data/lib/nmap/host.rb +0 -587
- data/lib/nmap/host_script.rb +0 -18
- data/lib/nmap/hostname.rb +0 -42
- data/lib/nmap/ip_id_sequence.rb +0 -24
- data/lib/nmap/os.rb +0 -127
- data/lib/nmap/os_class.rb +0 -82
- data/lib/nmap/os_match.rb +0 -18
- data/lib/nmap/port.rb +0 -110
- data/lib/nmap/postscript.rb +0 -16
- data/lib/nmap/prescript.rb +0 -16
- data/lib/nmap/program.rb +0 -102
- data/lib/nmap/run_stat.rb +0 -20
- data/lib/nmap/scan.rb +0 -34
- data/lib/nmap/scan_task.rb +0 -53
- data/lib/nmap/scanner.rb +0 -18
- data/lib/nmap/scripts.rb +0 -71
- data/lib/nmap/sequence.rb +0 -50
- data/lib/nmap/service.rb +0 -170
- data/lib/nmap/status.rb +0 -18
- data/lib/nmap/task.rb +0 -387
- data/lib/nmap/tcp_sequence.rb +0 -46
- data/lib/nmap/tcp_ts_sequence.rb +0 -22
- data/lib/nmap/traceroute.rb +0 -71
- data/lib/nmap/uptime.rb +0 -20
- data/spec/scripts_examples.rb +0 -35
- data/spec/task_spec.rb +0 -150
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c140058ce1941bb9671a06f6c35b32c702479601d00a9c21906fae39eb18cbf3
|
4
|
+
data.tar.gz: d94fbbffd46099d543aa8f27c0577fa8c387ff45d267911d8b47e5b5348f8500
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98bcdb056f50dc8640ef5b4c3e3eaf1daacc2055328f0fd1c995faec543abf81d2fac5da1290e91ec88a91ea8f9bdbbc9fa03b16c9f02709ed65078c9ceeea82
|
7
|
+
data.tar.gz: 444e4918a0debc3686c346456b38e7e9a2a12573144a83c01519c28253ecdee8ab331c9e5cc7d74dee61a224eb59aea0729140d42ae1c59f8a391449ed395ae3
|
data/.document
CHANGED
data/.editorconfig
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on: [ push, pull_request ]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
tests:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
fail-fast: false
|
10
|
+
matrix:
|
11
|
+
ruby:
|
12
|
+
- '2.7'
|
13
|
+
- '3.0'
|
14
|
+
- '3.1'
|
15
|
+
- jruby
|
16
|
+
- truffleruby
|
17
|
+
name: Ruby ${{ matrix.ruby }}
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v2
|
20
|
+
- name: Set up Ruby
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby }}
|
24
|
+
- name: Install libxml2-dev and libxslt1-dev
|
25
|
+
run: |
|
26
|
+
sudo apt update -y && \
|
27
|
+
sudo apt install -y --no-install-recommends --no-install-suggests libxml2-dev libxslt1-dev
|
28
|
+
- name: Install dependencies
|
29
|
+
run: bundle install --jobs 4 --retry 3
|
30
|
+
- name: Run tests
|
31
|
+
run: bundle exec rake test
|
data/ChangeLog.md
CHANGED
@@ -1,18 +1,61 @@
|
|
1
|
+
### 1.0.0 / 2022-11-11
|
2
|
+
|
3
|
+
* Switched from [rprogram] to [command_mapper].
|
4
|
+
* Replaced `Nmap::Program` and `Nmap::Task` with {Nmap::Command}.
|
5
|
+
* Moved all XML classes under {Nmap::XML}.
|
6
|
+
* See [UPGRADING] for more details on how to upgrade from 0.10.0 to 1.0.0.
|
7
|
+
|
8
|
+
#### Nmap::Command
|
9
|
+
|
10
|
+
* Added support for the `--unique` option as `nmap.unique`.
|
11
|
+
* Added support for the `--resolve-all` option as `nmap.resolve_all`.
|
12
|
+
* Added support for the `--noninteractive` option as `nmap.non_interactive`.
|
13
|
+
* Added support for the `--proxies` option as `nmap.proxies`.
|
14
|
+
* Added support for the `--data` option as `nmap.data`.
|
15
|
+
* Added support for the `--data-string` option as `nmap.data_string`.
|
16
|
+
* Added support for the `--script-help` option as `nmap.script_help`.
|
17
|
+
* Added support for the `--script-args-file` option as `nmap.script_args_file`.
|
18
|
+
* Added support for the `--script-timeout` option as `nmap.script_timeout`.
|
19
|
+
* Added support for the `--initial-rtt-timeout` option as
|
20
|
+
`nmap.initial_rtt_timeout`.
|
21
|
+
* Added support for the `-vv` option as `nmap.extra_verbose`.
|
22
|
+
* Allow passing Integer values to `verbose:` or `nmap.verbose=` for
|
23
|
+
`-v`**level**.
|
24
|
+
* Greatly improved the validation of input values.
|
25
|
+
* Removed `#script_params` and `#script_params=` aliases for `#script_args` and
|
26
|
+
`#script_args=`.
|
27
|
+
|
28
|
+
#### Nmap::XML
|
29
|
+
|
30
|
+
* Removed the deprecated `Nmap::XML.load` method in favor of {Nmap::XML.parse}.
|
31
|
+
* Removed the `Nmap::XML#prescripts` alias to `Nmap::XML#prescript`.
|
32
|
+
* Removed the `Nmap::XML#postscripts` alias to `Nmap::XML#postscript`.
|
33
|
+
* Removed `Nmap::XML::Host#tcpsequence` in favor of
|
34
|
+
{Nmap::XML::Host#tcp_sequence}.
|
35
|
+
* Removed `Nmap::XML::Host#ipidsequence` in favor of
|
36
|
+
{Nmap::XML::Host#ip_id_sequence}.
|
37
|
+
* Removed `Nmap::XML::Host#tcptssequence` in favor of
|
38
|
+
{Nmap::XML::Host#tcp_ts_sequence}.
|
39
|
+
* Removed `Nmap::XML#inspect` method.
|
40
|
+
* Added {Nmap::XML::Script}.
|
41
|
+
* Removed `Nmap::XML::Scripts#script_data`.
|
42
|
+
* Changed {Nmap::XML::Scripts#scripts} to return {Nmap::XML::Script} objects.
|
43
|
+
|
1
44
|
### 0.10.0 / 2020-03-17
|
2
45
|
|
3
46
|
* Added `Nmap::Task#exclude_ports` for the `--exclude-ports` option.
|
4
|
-
* Added
|
5
|
-
* Added
|
6
|
-
* Added
|
7
|
-
* Alias
|
47
|
+
* Added `Nmap::Status#reason_ttl`.
|
48
|
+
* Added `Nmap::Port#reason_ttl`.
|
49
|
+
* Added `Nmap::XML#task`.
|
50
|
+
* Alias `Nmap::ScanTask#extra_info` to `Nmap::ScanTask#extrainfo`.
|
8
51
|
|
9
52
|
### 0.9.3 / 2018-05-01
|
10
53
|
|
11
54
|
* Added missing `Nmap::Task#defeat_icmp_ratelimit` for the
|
12
55
|
`--defeat-icmp-ratelimit` option.
|
13
56
|
* Added missing `Nmap::Task#nsock_engine` for the `--nsock-engine` option.
|
14
|
-
* Added the
|
15
|
-
* Added the
|
57
|
+
* Added the `Nmap::XML#prescripts` alias.
|
58
|
+
* Added the `Nmap::XML#postscripts` alias.
|
16
59
|
* Allow `Task#sctp_init_ping` to accept a port Range object.
|
17
60
|
* Fixed a typo in the `Task#defeat_rst_ratelimit` name.
|
18
61
|
* Fixed the option formatting of `Nmap::Task#syn_discovery`.
|
@@ -23,81 +66,81 @@
|
|
23
66
|
|
24
67
|
### 0.9.2 / 2017-01-13
|
25
68
|
|
26
|
-
* Fix file descriptor leak in
|
69
|
+
* Fix file descriptor leak in `Nmap::XML#initialize` by using
|
27
70
|
`File.open(path) { |file| ... }` instead of `File.new(path)`, which keeps the
|
28
71
|
file descriptor open until GC collects the `File` instance.
|
29
72
|
|
30
73
|
### 0.9.1 / 2016-07-18
|
31
74
|
|
32
|
-
* Fixed
|
33
|
-
* Fixed
|
75
|
+
* Fixed `Nmap::Host#ipv6` when there are no `ipv6` type addresses.
|
76
|
+
* Fixed `Nmap::OS#fingerprint` when there is no `osfingerprint` element.
|
34
77
|
|
35
78
|
### 0.9.0 / 2016-07-14
|
36
79
|
|
37
|
-
* Added
|
38
|
-
* Added
|
39
|
-
* Added
|
40
|
-
* Added
|
41
|
-
* Added
|
42
|
-
* Added
|
43
|
-
* Added
|
80
|
+
* Added `Nmap::Address#vendor`.
|
81
|
+
* Added `Nmap::Service#to_s`.
|
82
|
+
* Added `Nmap::HostScript`.
|
83
|
+
* Added `Nmap::Prescript`.
|
84
|
+
* Added `Nmap::Postscript`.
|
85
|
+
* Added `Nmap::XML#prescript`.
|
86
|
+
* Added `Nmap::XML#postscript`.
|
44
87
|
* Added `Nmap::Task#quiet` (aka `-v0`).
|
45
88
|
* `#script_data` methods can now parse arbitrarily nested Arrays/Hashes.
|
46
|
-
* Fixed
|
89
|
+
* Fixed `Nmap::CPE#each_cpe` to only match child `cpe` elements, not all
|
47
90
|
`cpe` elements within the document.
|
48
|
-
* Changed
|
91
|
+
* Changed `Nmap::Service#to_s` to output product/version only if both are
|
49
92
|
present.
|
50
93
|
* Changed `Nmap::Task#skip_discovery` to use `-Pn` instead of `-PN`, which was
|
51
94
|
deprecated in nmap >= 7.00.
|
52
95
|
|
53
96
|
### 0.8.0 / 2014-04-16
|
54
97
|
|
55
|
-
* Added
|
56
|
-
* Added
|
57
|
-
* Added
|
58
|
-
* Added
|
59
|
-
* Added
|
60
|
-
* Added
|
61
|
-
* Added
|
62
|
-
* Added
|
63
|
-
* Added
|
64
|
-
* Added
|
65
|
-
* Renamed
|
98
|
+
* Added `Nmap::XML#each_down_host`.
|
99
|
+
* Added `Nmap::XML#down_hosts`.
|
100
|
+
* Added `Nmap::XML#host`.
|
101
|
+
* Added `Nmap::XML#up_host`.
|
102
|
+
* Added `Nmap::XML#down_host`.
|
103
|
+
* Added `Nmap::Host#hostname`.
|
104
|
+
* Added `Nmap::Hostname#user?`.
|
105
|
+
* Added `Nmap::Hostname#ptr?`.
|
106
|
+
* Added `Nmap::Program.sudo_scan`.
|
107
|
+
* Added `Nmap::Program#sudo_scan`.
|
108
|
+
* Renamed `Nmap::XML.load` to `Nmap::XML.parse`.
|
66
109
|
* Fixed a typo in the `--privileged` flag (@BrentonEarl)
|
67
110
|
* Allow multiple values in the `--script` flag.
|
68
|
-
* Alias
|
111
|
+
* Alias `Nmap::Task#script_params` to `script_args`.
|
69
112
|
|
70
113
|
### 0.7.0 / 2014-05-09
|
71
114
|
|
72
|
-
* Added
|
73
|
-
* Added
|
74
|
-
* Added
|
75
|
-
* Added
|
76
|
-
* Added
|
77
|
-
* Added
|
78
|
-
* Added
|
79
|
-
* Added
|
80
|
-
* Added
|
81
|
-
* Added
|
82
|
-
* Added
|
83
|
-
* Added
|
84
|
-
* Added
|
85
|
-
* Added
|
86
|
-
* Added
|
87
|
-
* Added
|
88
|
-
* Added
|
89
|
-
* Added
|
90
|
-
* Added
|
91
|
-
* Added
|
92
|
-
* Fixed xpath bug in
|
115
|
+
* Added `Nmap::CPE`.
|
116
|
+
* Added `Nmap::CPE::URL`.
|
117
|
+
* Added `Nmap::Hop`.
|
118
|
+
* Added `Nmap::Hostname`.
|
119
|
+
* Added `Nmap::Traceroute`.
|
120
|
+
* Added `Nmap::Host#traceroute`.
|
121
|
+
* Added `Nmap::Host#uptime`. (@roodee)
|
122
|
+
* Added `Nmap::Service#ssl?`.
|
123
|
+
* Added `Nmap::Service#protocol`.
|
124
|
+
* Added `Nmap::Service#extra_info`.
|
125
|
+
* Added `Nmap::Service#os_type`.
|
126
|
+
* Added `Nmap::Service#device_type`.
|
127
|
+
* Added `Nmap::Service#fingerprint`. (@roodee)
|
128
|
+
* Added `Nmap::Uptime`. (@roodee)
|
129
|
+
* Added `Nmap::RunStat`. (@roodee)
|
130
|
+
* Added `Nmap::XML.load`. (@vzctl)
|
131
|
+
* Added `Nmap::XML.open`.
|
132
|
+
* Added `Nmap::XML#each_run_stat`.
|
133
|
+
* Added `Nmap::XML#run_stats`.
|
134
|
+
* Added `Nmap::XML#each_task`.
|
135
|
+
* Fixed xpath bug in `Nmap::OS#each_class` (@roodee).
|
93
136
|
|
94
137
|
### 0.6.0 / 2012-11-07
|
95
138
|
|
96
|
-
* Added
|
97
|
-
* Renamed `Nmap::IpidSequence` to
|
98
|
-
* Renamed
|
99
|
-
* Renamed
|
100
|
-
* Renamed
|
139
|
+
* Added `Nmap::Service`.
|
140
|
+
* Renamed `Nmap::IpidSequence` to `Nmap::IpIdSequence`.
|
141
|
+
* Renamed `Nmap::Host#ipidsequence` to `Nmap::Host#ip_id_sequence`.
|
142
|
+
* Renamed `Nmap::Host#tcpsequence` to `Nmap::Host#tcp_sequence`.
|
143
|
+
* Renamed `Nmap::Host#tcptssequence` to `Nmap::Host#tcp_ts_sequence`.
|
101
144
|
|
102
145
|
### 0.5.1 / 2012-05-27
|
103
146
|
|
@@ -108,20 +151,20 @@
|
|
108
151
|
|
109
152
|
* Require nokogiri ~> 1.3.
|
110
153
|
* Require rprogram ~> 0.3.
|
111
|
-
* `ip_scan` in
|
154
|
+
* `ip_scan` in `Nmap::Task` should map to `-sO` (thanks corvus).
|
112
155
|
|
113
156
|
### 0.4.1 / 2010-11-23
|
114
157
|
|
115
|
-
* Fixed a bug in
|
116
|
-
and not
|
117
|
-
*
|
118
|
-
|
158
|
+
* Fixed a bug in `Nmap::XML#each` where it was calling `each_up_hosts`,
|
159
|
+
and not `Nmap::XML#each_up_host`.
|
160
|
+
* `Nmap::OS#each_class`, `Nmap::OS#each_match`, `Nmap::XML#each_host` and
|
161
|
+
`Nmap::XML#each_up_host` now return an Enumerator object if no block
|
119
162
|
is given.
|
120
163
|
* Use `yield` instead of `block.call` for a slight performance improvement.
|
121
164
|
|
122
165
|
### 0.4.0 / 2010-11-17
|
123
166
|
|
124
|
-
* Added new options to
|
167
|
+
* Added new options to `Nmap::Task` based on nmap 5.21:
|
125
168
|
* `-PY` - `nmap.sctp_init_ping`
|
126
169
|
* `-PR` - `nmap.arp_ping`
|
127
170
|
* `-sY` - `nmap.sctp_init_scan`
|
@@ -145,27 +188,27 @@
|
|
145
188
|
|
146
189
|
### 0.3.0 / 2010-11-08
|
147
190
|
|
148
|
-
* Added
|
149
|
-
* Added
|
191
|
+
* Added `Nmap::Host#scripts`.
|
192
|
+
* Added `Nmap::Port#scripts`.
|
150
193
|
|
151
194
|
### 0.2.0 / 2010-10-29
|
152
195
|
|
153
196
|
* Require nokogiri >= 1.3.0.
|
154
197
|
* Require rprogram ~> 0.2.0.
|
155
|
-
* Added
|
156
|
-
* Added
|
157
|
-
* Added
|
158
|
-
* Added
|
159
|
-
* Added
|
198
|
+
* Added `Nmap::XML#tasks`.
|
199
|
+
* Added `Nmap::Scanner#start_time`.
|
200
|
+
* Added `Nmap::ScanTask#duration`.
|
201
|
+
* Added `Nmap::Host#start_time`.
|
202
|
+
* Added `Nmap::Host#end_time`.
|
160
203
|
* Allow `Nmap::Tasks#ports=` to accept port ranges.
|
161
|
-
* Omit the `-p` option if no ports are given to
|
204
|
+
* Omit the `-p` option if no ports are given to `Nmap::Task`.
|
162
205
|
* Have the `Nmap::Host#each_*` methods return an `Enumerator` object if no
|
163
206
|
block is given.
|
164
207
|
|
165
208
|
### 0.1.1 / 2010-01-02
|
166
209
|
|
167
210
|
* Require RProgram >= 0.1.8.
|
168
|
-
* Adds `sudo` and `sudo=` instance methods to
|
211
|
+
* Adds `sudo` and `sudo=` instance methods to `Nmap::Task`.
|
169
212
|
|
170
213
|
### 0.1.0 / 2009-11-13
|
171
214
|
|
@@ -173,3 +216,7 @@
|
|
173
216
|
* Provides a Ruby interface for running Nmap.
|
174
217
|
* Provides a Parser for enumerating Nmap XML scan files.
|
175
218
|
|
219
|
+
[rprogram]: https://github.com/postmodern/rprogram#readme
|
220
|
+
[command_mapper]: https://github.com/postmodern/command_mapper.rb#readme
|
221
|
+
|
222
|
+
[UPGRADING]: https://github.com/postmodern/ruby-nmap/blob/main/UPGRADING.md
|
data/Gemfile
CHANGED
@@ -2,13 +2,19 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
+
# gem 'command_mapper', '~> 0.3', github: 'postmodern/command_mapper.rb',
|
6
|
+
# branch: '0.3.0'
|
7
|
+
|
5
8
|
group :development do
|
6
9
|
gem 'rake'
|
7
|
-
gem 'rubygems-tasks',
|
8
|
-
gem 'rspec',
|
10
|
+
gem 'rubygems-tasks', '~> 0.2'
|
11
|
+
gem 'rspec', '~> 3.0'
|
12
|
+
gem 'simplecov', '~> 0.20'
|
9
13
|
|
10
|
-
gem 'json'
|
11
|
-
gem 'simplecov', '~> 0.7'
|
12
14
|
gem 'kramdown'
|
13
|
-
gem '
|
15
|
+
gem 'redcarpet', platform: :mri
|
16
|
+
gem 'yard', '~> 0.9'
|
17
|
+
gem 'yard-spellcheck', require: false
|
18
|
+
|
19
|
+
gem 'dead_end', require: false
|
14
20
|
end
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,102 +1,140 @@
|
|
1
1
|
# ruby-nmap
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
[![CI](https://github.com/postmodern/ruby-nmap/actions/workflows/ruby.yml/badge.svg)](https://github.com/postmodern/ruby-nmap/actions/workflows/ruby.yml)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/postmodern/ruby-nmap.svg)](https://codeclimate.com/github/postmodern/ruby-nmap)
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/ruby-nmap.svg)](https://badge.fury.io/rb/ruby-nmap)
|
6
|
+
|
7
|
+
* [Source](https://github.com/postmodern/ruby-nmap/)
|
8
|
+
* [Issues](https://github.com/postmodern/ruby-nmap/issues)
|
5
9
|
* [Documentation](http://rubydoc.info/gems/ruby-nmap/frames)
|
6
|
-
* [Email](mailto:postmodern.mod3 at gmail.com)
|
7
|
-
* [![Build Status](https://travis-ci.org/sophsec/ruby-nmap.svg)](https://travis-ci.org/sophsec/ruby-nmap)
|
8
10
|
|
9
11
|
## Description
|
10
12
|
|
11
|
-
A Ruby
|
13
|
+
A Ruby API to [nmap], the exploration tool and security / port scanner.
|
14
|
+
Allows automating nmap and parsing nmap XML files.
|
12
15
|
|
13
16
|
## Features
|
14
17
|
|
15
|
-
* Provides a Ruby
|
18
|
+
* Provides a Ruby API for automating nmap.
|
16
19
|
* Provides a Parser for enumerating nmap XML scan files.
|
20
|
+
* Supports the full [Nmap XML DTD][nmap-dtd].
|
17
21
|
|
18
22
|
## Examples
|
19
23
|
|
20
24
|
Run Nmap from Ruby:
|
21
25
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
```ruby
|
27
|
+
require 'nmap/command'
|
28
|
+
|
29
|
+
Nmap::Command.run do |nmap|
|
30
|
+
nmap.connect_scan = true
|
31
|
+
nmap.service_scan = true
|
32
|
+
nmap.output_xml = 'scan.xml'
|
33
|
+
nmap.verbose = true
|
34
|
+
|
35
|
+
nmap.ports = [20, 21, 22, 23, 25, 80, 110, 443, 512, 522, 8080, 1080]
|
36
|
+
nmap.targets = '192.168.1.*'
|
37
|
+
end
|
38
|
+
```
|
34
39
|
|
35
40
|
Run `sudo nmap` from Ruby:
|
36
41
|
|
37
|
-
|
42
|
+
```ruby
|
43
|
+
require 'nmap/command'
|
38
44
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
Nmap::Command.sudo do |nmap|
|
46
|
+
nmap.syn_scan = true
|
47
|
+
nmap.os_fingerprint = true
|
48
|
+
nmap.service_scan = true
|
49
|
+
nmap.output_xml = 'scan.xml'
|
50
|
+
nmap.verbose = true
|
51
|
+
|
52
|
+
nmap.ports = [20, 21, 22, 23, 25, 80, 110, 443, 512, 522, 8080, 1080]
|
53
|
+
nmap.targets = '192.168.1.*'
|
54
|
+
end
|
55
|
+
```
|
43
56
|
|
44
57
|
Parse Nmap XML scan files:
|
45
58
|
|
46
|
-
|
59
|
+
```ruby
|
60
|
+
require 'nmap/xml'
|
47
61
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
62
|
+
Nmap::XML.open('scan.xml') do |xml|
|
63
|
+
xml.each_host do |host|
|
64
|
+
puts "[#{host.ip}]"
|
65
|
+
|
66
|
+
host.each_port do |port|
|
67
|
+
puts " #{port.number}/#{port.protocol}\t#{port.state}\t#{port.service}"
|
56
68
|
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
57
72
|
|
58
73
|
Print NSE script output from an XML scan file:
|
59
74
|
|
60
|
-
|
75
|
+
```ruby
|
76
|
+
require 'nmap/xml'
|
61
77
|
|
62
|
-
|
63
|
-
|
64
|
-
|
78
|
+
Nmap::XML.open('nse.xml') do |xml|
|
79
|
+
xml.each_host do |host|
|
80
|
+
puts "[#{host.ip}]"
|
65
81
|
|
66
|
-
|
67
|
-
|
68
|
-
|
82
|
+
host.scripts.each do |name,output|
|
83
|
+
output.each_line { |line| puts " #{line}" }
|
84
|
+
end
|
69
85
|
|
70
|
-
|
71
|
-
|
86
|
+
host.each_port do |port|
|
87
|
+
puts " [#{port.number}/#{port.protocol}]"
|
72
88
|
|
73
|
-
|
74
|
-
|
89
|
+
port.scripts.each do |id,script|
|
90
|
+
puts " [#{id}]"
|
75
91
|
|
76
|
-
|
77
|
-
end
|
78
|
-
end
|
92
|
+
script.output.each_line { |line| puts " #{line}" }
|
79
93
|
end
|
80
94
|
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
```
|
81
98
|
|
82
99
|
## Requirements
|
83
100
|
|
84
101
|
* [ruby] >= 2.0.0
|
85
102
|
* [nmap] >= 5.00
|
86
103
|
* [nokogiri] ~> 1.3
|
87
|
-
* [
|
104
|
+
* [command_mapper] ~> 0.3
|
88
105
|
|
89
106
|
## Install
|
90
107
|
|
91
|
-
|
108
|
+
* Debian / Ubuntu:
|
109
|
+
|
110
|
+
```shell
|
111
|
+
$ sudo apt install nmap
|
112
|
+
```
|
113
|
+
|
114
|
+
* Fedora / RedHat:
|
115
|
+
|
116
|
+
```shell
|
117
|
+
$ sudo dnf install nmap
|
118
|
+
```
|
119
|
+
|
120
|
+
* Homebrew:
|
121
|
+
|
122
|
+
```shell
|
123
|
+
$ brew install nmap
|
124
|
+
```
|
125
|
+
|
126
|
+
```shell
|
127
|
+
$ gem install ruby-nmap
|
128
|
+
```
|
92
129
|
|
93
130
|
## License
|
94
131
|
|
95
|
-
Copyright (c) 2009-
|
132
|
+
Copyright (c) 2009-2022 Postmodern
|
96
133
|
|
97
134
|
See {file:LICENSE.txt} for license information.
|
98
135
|
|
99
136
|
[nmap]: http://www.insecure.org/
|
100
137
|
[ruby]: https://www.ruby-lang.org/
|
101
138
|
[nokogiri]: http://nokogiri.rubyforge.org/
|
102
|
-
[
|
139
|
+
[command_mapper]: https://github.com/postmodern/command_mapper.rb#readme
|
140
|
+
[nmap-dtd]: https://nmap.org/book/nmap-dtd.html
|
data/Rakefile
CHANGED
@@ -32,3 +32,8 @@ file 'spec/fixtures/scan.xml' do |t|
|
|
32
32
|
puts ">>> Scanning scanme.nmap.org ..."
|
33
33
|
sh "sudo nmap -v -sS -sU -A -O --script ssh2-enum-algos,ssh-hostkey -oX #{t.name} scanme.nmap.org"
|
34
34
|
end
|
35
|
+
|
36
|
+
file 'spec/fixtures/down_host_scan.xml' do |t|
|
37
|
+
puts ">>> Scanning 225.0.0.1 ..."
|
38
|
+
sh "sudo nmap -v -sS -oX #{t.name} 225.0.0.1"
|
39
|
+
end
|
data/UPGRADING.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Migration Guide
|
2
|
+
|
3
|
+
## 0.10.0 -> 1.0.0
|
4
|
+
|
5
|
+
### `Nmap::Program`/`Namp::Task` -> `Nmap::Command`
|
6
|
+
|
7
|
+
* Replace all method calls to `Nmap::Program.scan` with `Nmap::Command.run`.
|
8
|
+
* Replace all method calls to `Nmap::Program.sudo_scan` with `Nmap::Command.sudo`.
|
9
|
+
* Rename all instances of `raw_ip` with `send_ip`.
|
10
|
+
* Rename all instances of `raw_ethernet` to `send_eth`.
|
11
|
+
* Rename all instances of `disable_stylesheet` to `no_stylesheet`.
|
12
|
+
* Rename all instances of `nmap_stylesheet` to `webxml`.
|
13
|
+
* Rename all instances of `append` to `append_output`.
|
14
|
+
* Rename all instances of `save` to `output_normal`.
|
15
|
+
* Rename all instances of `grepable` to `output_grepable`.
|
16
|
+
* Rename all instances of `skiddie` to `output_skiddie`.
|
17
|
+
* Rename all instances of `xml` to `output_xml`.
|
18
|
+
* Rename all instances of `script_params` to `script_args`.
|
19
|
+
* Remove any instances of the `:interactive` option or `nmap.interactive`, as
|
20
|
+
the `--interactive` option is no longer supported by nmap.
|
21
|
+
|
22
|
+
### `Nmap::XML`
|
23
|
+
|
24
|
+
* `Nmap::XML.new` now only accepts a parsed `Nokogiri::XML::Document` object.
|
25
|
+
Use `Nmap::XML.open` or `Nmap::XML.parse` if you wish to parse XML files or
|
26
|
+
strings.
|
27
|
+
* Replace any method calls to `Nmap::XML.load` with {Nmap::XML.parse}.
|
28
|
+
* Rename any method calls to `` to `tcp_sequence`.
|
29
|
+
* Rename any method calls to `tcpsequence` to `tcp_sequence`.
|
30
|
+
* Rename any method calls to `ipidsequence` to `ip_id_sequence`.
|
31
|
+
* Rename any method calls to `tcptssequence` to `tcp_ts_sequence`.
|
32
|
+
* Rename any method calls to `prescripts` to `prescript`.
|
33
|
+
* Rename any method calls to `postscripts` to `postscript`.
|
34
|
+
* The [scripts][Nmap::XML::Scripts#scripts] method now returns an Array of
|
35
|
+
[Nmap::XML::Script] objects, instead of raw script output Strings.
|
36
|
+
In order to access the raw script output Strings, call the
|
37
|
+
[output][Nmap::XML::Script#output] method on each returned [Nmap::XML::Script]
|
38
|
+
objects instead.
|
39
|
+
* The `script_data` method has been removed.
|
40
|
+
In order to get the script's structured data, call
|
41
|
+
the [data][Nmap::XML::Script#data] method on each returned [Nmap::XML::Script]
|
42
|
+
objects instead.
|
43
|
+
* Rename any method calls to `extrainfo` to `extra_info`.
|
44
|
+
|
45
|
+
[Nmap::XML::Scripts#scripts]: https://rubydoc.info/gems/ruby-nmap/Nmap/XML/Scripts.html#scripts-instance_method
|
46
|
+
[Nmap::XML::Script]: https://rubydoc.info/gems/ruby-nmap/Nmap/XML/Script.html
|
47
|
+
[Nmap::XML::Script#output]: https://rubydoc.info/gems/ruby-nmap/Nmap/XML/Script.html#output-instance_method
|
data/gemspec.yml
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
name: ruby-nmap
|
2
|
-
summary: A Ruby
|
2
|
+
summary: A Ruby API to nmap.
|
3
3
|
description:
|
4
|
-
A Ruby
|
5
|
-
scanner.
|
4
|
+
A Ruby API to nmap, the exploration tool and security / port
|
5
|
+
scanner. Allows automating nmap and parsing nmap XML files.
|
6
6
|
|
7
7
|
license: MIT
|
8
8
|
authors: Postmodern
|
9
9
|
email: postmodern.mod3@gmail.com
|
10
|
-
homepage: https://github.com/
|
10
|
+
homepage: https://github.com/postmodern/ruby-nmap#readme
|
11
11
|
has_yard: true
|
12
12
|
|
13
13
|
required_ruby_version: ">= 2.0.0"
|
@@ -16,7 +16,7 @@ requirements: nmap >= 5.00
|
|
16
16
|
|
17
17
|
dependencies:
|
18
18
|
nokogiri: ~> 1.3
|
19
|
-
|
19
|
+
command_mapper: ~> 0.3
|
20
20
|
|
21
21
|
development_dependencies:
|
22
22
|
bundler: ~> 2.0
|