Basic Examples

So, you want to just get a few basic examples to get started? That makes sense, and hopefully I can provide some basic but meaningful examples to show off how simple it is to work with Nmapr.

Object Block

If you want to create a Scanner object, you scan use the Nmapr.scan method with the :object argument to ultimately return an object which you could run .to_cmd on to get the command-line representation of the nmap command.

Nmapr.scan :object do
  # code
end
Command Block

If you want to skip the whole :object thing entirely, you may just be purely interested in getting the command-line representation of the nmap command to run. This requires you to provide the :cmd symbol to help signify you want .to_cmd to run under the hood for you.

Nmapr.scan :cmd do
  # code
end
Run Block

If you want to go right ahead and run the scan in your block ( between do and end ) then you would want to use the :run argument to run that command. open3 is used under the hood and the stdout, stderr and status of the nmap command is returned within a Hash ( key: value pairing ) that can be captured.

Nmapr.scan :run do
  # code
end

Capturing Results

If you run any of the previous three examples, you may want to capture the result or do something with the result. The Nmapr.scan method actually does return something after all.

Object Block

If you want to create a Scanner object, you scan use the Nmapr.scan method with the :object argument to ultimately return an object which you could run .to_cmd on to get the command-line representation of the nmap command.

scanner = Nmapr.scan :object do
  targets ["192.168.0.2", "192.168.0.3"]
  ports   :common
end

scanner.is_a? Nmapr::Scanner
# => true

scanner.to_cmd
# => "nmap 192.168.0.2,192.168.0.3 -p 1-1024"

# capture the command a string
cmd = scanner.to_cmd
Command Block

If you want to skip the whole :object thing entirely, you may just be purely interested in getting the command-line representation of the nmap command to run. This requires you to provide the :cmd symbol to help signify you want .to_cmd to run under the hood for you.

cmd = Nmapr.scan :cmd do
  targets "192.168.0.2-192.168.0.10"
  ports   :all
end

cmd
# => "nmap 192.168.0.2-192.168.0.10 -p *"

# print it to screen / terminal
puts cmd

# just print without capturing into another object
puts Nmapr.scan :cmd do
  targets "192.168.0.2-192.168.0.10"
  ports   :all
end
# will print to the screen:
# nmap 192.168.0.2-192.168.0.10 -p *
Run Block

If you want to go right ahead and run the scan in your block ( between do and end ) then you would want to use the :run argument to run that command. open3 is used under the hood and the stdout, stderr and status of the nmap command is returned within a Hash ( key: value pairing ) that can be captured.

result = Nmapr.scan :run do
  target "localhost"
  ports 22, 8080
end

puts result[:stdout]
# Starting Nmap 7.40 ( https://nmap.org ) at 2017-07-16 14:37 EDT
# Nmap scan report for localhost (127.0.0.1)
# Host is up (0.00017s latency).
# Other addresses for localhost (not scanned): ::1
# PORT     STATE  SERVICE
# 22/tcp   closed ssh
# 8080/tcp closed http-proxy

# Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

puts result[:stderr]
# if empty, then just a newline will be printed to the screen

puts result[:status]
# pid 30258 exit 0

result
# {:stdout=>
#  "\n" +
#  "Starting Nmap 7.40 ( https://nmap.org ) at 2017-07-16 14:37 EDT\n" +
#  "Nmap scan report for localhost (127.0.0.1)\n" +
#  "Host is up (0.00017s latency).\n" +
#  "Other addresses for localhost (not scanned): ::1\n" +
#  "PORT     STATE  SERVICE\n" +
#  "22/tcp   closed ssh\n" +
#  "8080/tcp closed http-proxy\n" +
#  "\n" +
#  "Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds\n",
# :stderr=>"",
# :status=>#<Process::Status: pid 30258 exit 0>}

results matching ""

    No results matching ""