ronin-nmap
Description
ronin-nmap is a Ruby library for working with nmap. ronin-nmap can parse nmap XML, convert nmap XML into JSON or CSV, or import nmap XML into the ronin-db database.
Features
- Supports automating
nmap
using ruby-nmap. - Supports parsing and filtering nmap XML.
- Supports converting nmap XML into JSON or CSV.
- Supports importing nmap XML data into the ronin-db database.
Synopsis
Usage: ronin-nmap [options]
Options:
-V, --version Prints the version and exits
-h, --help Print help information
Arguments:
[COMMAND] The command name to run
[ARGS ...] Additional arguments for the command
Commands:
completion
convert
dump
grep
help
import
new
print
scan
Import an nmap XML scan file into ronin-db:
$ ronin-nmap import scan.xml
Perform an nmap scan and import it's results into the ronin-db:
$ ronin-nmap scan --import -- -sT -sV -p 22,25,80,443
Parse and filter an nmap XML scan file:
$ ronin-nmap parse --hosts-with-port 443 scan.xml
Dump a nmap XML scan file to a list of IP:PORT
pairs:
$ ronin-nmap dump --print-ip-ports scan.xml
Dump a nmap XML scan file to a list of HOST:PORT
pairs:
$ ronin-nmap dump --print-host-ports scan.xml
Dump a nmap XML scan file to a list of http
://or
https://` URIs:
$ ronin-nmap dump --print-uris scan.xml
Convert an nmap XML scan file to CSV:
$ ronin-nmap convert scan.xml scan.csv
Convert an nmap XML scan file to JSON:
$ ronin-nmap convert scan.xml scan.json
Generate a new nmap scanner Ruby script:
$ ronin-nmap new scanner.rb --target example.com --ports 22,80,443,8000-9000
Generate a new nmap XML parser script:
$ ronin-nmap new parser.rb --parser --xml-file path/to/nmap.xml --printing
Examples
Performing an nmap
scan and returning the parsed nmap XML data:
require 'ronin/nmap'
xml = Ronin::Nmap.scan(syn_scan: true, ports: [80, 443], targets: '192.168.1.*')
# => #<Nmap::XML: ...>
xml = Ronin::Nmap.scan do |nmap|
nmap.syn_scan = true
nmap.ports = [80, 443]
nmap.targets = '192.168.1.*'
end
# => #<Nmap::XML: ...>
Accessesing the nmap XML scan data:
xml.hosts
# => [#<Nmap::XML::Host: 192.168.1.1>, ...]
host = xml.host
# => #<Nmap::XML::Host: scanme.nmap.org>
xml.host.open_ports
# => [#<Nmap::XML::Port: 22>,
# #<Nmap::XML::Port: 80>,
# #<Nmap::XML::Port: 9929>,
# #<Nmap::XML::Port: 31337>,
# #<Nmap::XML::Port: 123>]
port = xml.host.open_ports.first
# => #<Nmap::XML::Port: 22>
port.state
# => :open
port.protocol
# => :tcp
port.service
# => #<Nmap::XML::Service:0x00007f5614e68248 @node=#<Nokogiri::XML::Element:0x7ada0 name="service" attribute_nodes=[#<Nokogiri::XML::Attr:0x7aecc name="name" value="ssh">, #<Nokogiri::XML::Attr:0x7b05c name="extrainfo" value="protocol 2.0">, #<Nokogiri::XML::Attr:0x7b1ec name="servicefp" value="SF-Port22-TCP:V=6.45%I=7%D=4/17%Time=55316FE1%P=x86_64-redhat-linux-gnu%r(NULL,29,\"SSH-2\\.0-OpenSSH_6\\.6\\.1p1\\x20Ubuntu-2ubuntu2\\r\\n\");">, #<Nokogiri::XML::Attr:0x7b37c name="method" value="probed">, #<Nokogiri::XML::Attr:0x7b50c name="conf" value="10">]>>
port.scripts
# => {"ssh-hostkey"=>...,
# "ssh2-enum-algos"=>...}
Printing the parsed nmap XML data:
xml.each_host do |host|
puts "[ #{host.ip} ]"
host.each_port do |port|
puts " #{port.number}/#{port.protocol}\t#{port.state}\t#{port.service}"
port.scripts.each do |id,script|
puts " [ #{id} ]"
script.output.each_line { |line| puts " #{line}" }
end
end
end
Requirements
- Ruby >= 3.0.0
- nmap >= 5.00
- ruby-nmap ~> 1.0
- ronin-core ~> 0.2
- ronin-db ~> 0.2
Install
$ gem install ronin-nmap
Gemfile
gem 'ronin-nmap', '~> 0.1'
gemspec
gem.add_dependency 'ronin-nmap', '~> 0.1'
Development
- Fork It!
- Clone It!
cd ronin-nmap/
./scripts/setup
git checkout -b my_feature
- Code It!
bundle exec rake spec
git push origin my_feature
License
Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
ronin-nmap is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ronin-nmap is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with ronin-nmap. If not, see https://www.gnu.org/licenses/.