stun-version NSE Script

2012-03-16T11:36:51
ID NMAP:STUN-VERSION.NSE
Type nmap
Reporter Patrik Karlsson
Modified 2015-11-05T20:41:05

Description

Sends a binding request to the server and attempts to extract version information from the response, if the server attribute is present.

Script Arguments

stun.mode

See the documentation for the stun library.

Example Usage

nmap -sU -sV -p 3478 <target>

Script Output

PORT     STATE SERVICE VERSION
3478/udp open  stun    Vovida.org 0.96

Requires

  • nmap
  • shortport
  • stun
  • stdnse

                                        
                                            local nmap = require "nmap"
local shortport = require "shortport"
local stun = require "stun"
local stdnse = require "stdnse"

description = [[
Sends a binding request to the server and attempts to extract version
information from the response, if the server attribute is present.
]]

---
-- @usage
-- nmap -sU -sV -p 3478 <target>
-- @output
-- PORT     STATE SERVICE VERSION
-- 3478/udp open  stun    Vovida.org 0.96
--

author = "Patrik Karlsson"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"version"}


portrule = shortport.version_port_or_service(3478, "stun", "udp")

local function fail(err) return stdnse.format_output(false, err) end

action = function(host, port)
  local helper = stun.Helper:new(host, port)
  local status = helper:connect()
  if ( not(status) ) then
    return fail("Failed to connect to server")
  end

  local status, result = helper:getVersion()
  if ( not(status) ) then
    return fail("Failed to retrieve external IP")
  end

  port.version.name = "stun"
  port.version.product = result
  nmap.set_port_state(host, port, "open")
  nmap.set_port_version(host, port)
end