Skip to content

ronin-rb/ronin-nmap

Folders and files

NameName
Last commit message
Last commit date
Feb 17, 2025
Mar 6, 2023
Jun 14, 2024
Jan 28, 2025
Jun 14, 2024
May 30, 2024
Jun 14, 2024
Jul 7, 2023
Jan 4, 2024
Mar 6, 2023
Mar 6, 2023
Jul 21, 2024
Mar 6, 2023
Mar 6, 2023
Feb 15, 2025
Jun 23, 2024
Jan 28, 2025
May 30, 2024
Feb 3, 2025
Mar 6, 2023

Repository files navigation

ronin-nmap

CI Code Climate

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://orhttps://` 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

Install

$ gem install ronin-nmap

Gemfile

gem 'ronin-nmap', '~> 0.1'

gemspec

gem.add_dependency 'ronin-nmap', '~> 0.1'

Development

  1. Fork It!
  2. Clone It!
  3. cd ronin-nmap/
  4. ./scripts/setup
  5. git checkout -b my_feature
  6. Code It!
  7. bundle exec rake spec
  8. git push origin my_feature

License

Copyright (c) 2023-2025 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/.