# ruby-nmap

* [Source](https://github.com/sophsec/ruby-nmap/)
* [Issues](https://github.com/sophsec/ruby-nmap/issues)
* [Documentation](http://rubydoc.info/gems/ruby-nmap/frames)
* [Email](mailto:postmodern.mod3 at gmail.com)
* [![Build Status](https://travis-ci.org/sophsec/ruby-nmap.svg)](https://travis-ci.org/sophsec/ruby-nmap)

## Description

A Ruby interface to [nmap], the exploration tool and security / port scanner.

## Features

* Provides a Ruby interface for running nmap.
* Provides a Parser for enumerating nmap XML scan files.

## Examples

Run Nmap from Ruby:

    require 'nmap/program'
    
    Nmap::Program.scan do |nmap|
      nmap.syn_scan = true
      nmap.service_scan = true
      nmap.os_fingerprint = true
      nmap.xml = 'scan.xml'
      nmap.verbose = true

      nmap.ports = [20,21,22,23,25,80,110,443,512,522,8080,1080]
      nmap.targets = '192.168.1.*'
    end

Parse Nmap XML scan files:

    require 'nmap/xml'

    Nmap::XML.new('scan.xml') do |xml|
      xml.each_host do |host|
        puts "[#{host.ip}]"
    
        host.each_port do |port|
          puts "  #{port.number}/#{port.protocol}\t#{port.state}\t#{port.service}"
        end
      end
    end

Print NSE script output from an XML scan file:

    require 'nmap/xml'

    Nmap::XML.new('nse.xml') do |xml|
      xml.each_host do |host|
        puts "[#{host.ip}]"

        host.scripts.each do |name,output|
          output.each_line { |line| puts "  #{line}" }
        end

        host.each_port do |port|
          puts "  [#{port.number}/#{port.protocol}]"

          port.scripts.each do |name,output|
            puts "    [#{name}]"

            output.each_line { |line| puts "      #{line}" }
          end
        end
      end
    end

## Requirements

* [ruby] >= 2.0.0
* [nmap] >= 5.00
* [nokogiri] ~> 1.3
* [rprogram] ~> 0.3

## Install

    $ gem install ruby-nmap

## License

Copyright (c) 2009-2017 Postmodern

See {file:LICENSE.txt} for license information.

[nmap]: http://www.insecure.org/
[ruby]: https://www.ruby-lang.org/
[nokogiri]: http://nokogiri.rubyforge.org/
[rprogram]: https://github.com/postmodern/rprogram#readme