mirror of
https://github.com/nmap/nmap.git
synced 2025-12-06 04:31:29 +00:00
New outlib library for output-related functions
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
#Nmap Changelog ($Id$); -*-text-*-
|
||||
|
||||
o [NSE] New outlib library will consolidate functions related to NSE output,
|
||||
both string formatting conventions and structured output. [Daniel Miller]
|
||||
|
||||
o New XML output "hosthint" tag emitted during host discovery when a target is
|
||||
found to be up. This gives earlier notification than waiting for the
|
||||
hostgroup to finish all scan phases. [Paul Miseiko]
|
||||
|
||||
49
nselib/outlib.lua
Normal file
49
nselib/outlib.lua
Normal file
@@ -0,0 +1,49 @@
|
||||
--- Helper functions for NSE script output
|
||||
--
|
||||
-- These functions are useful for ensuring output is consistently ordered
|
||||
-- between scans and following conventions for output formatting.
|
||||
--
|
||||
-- @author Daniel Miller
|
||||
-- @copyright Same as Nmap--See https://nmap.org/book/man-legal.html
|
||||
-- @class module
|
||||
-- @name outlib
|
||||
|
||||
local tableaux = require "tableaux"
|
||||
local keys = tableaux.keys
|
||||
|
||||
local coroutine = require "coroutine"
|
||||
local wrap = coroutine.wrap
|
||||
local yield = coroutine.yield
|
||||
|
||||
local table = require "table"
|
||||
local sort = table.sort
|
||||
|
||||
local setmetatable = setmetatable
|
||||
local ipairs = ipairs
|
||||
|
||||
local _ENV = {}
|
||||
|
||||
--- Create a table that yields elements sorted by key when iterated over with pairs()
|
||||
--
|
||||
-- The returned table is like a sorted view of the original table; it should be
|
||||
-- treated as read-only, and any new data should be added to the original table
|
||||
-- instead.
|
||||
--@param t The table whose data should be used
|
||||
--@return out A table that can be passed to pairs() to get sorted results
|
||||
function sorted_by_key(t)
|
||||
local out = {}
|
||||
setmetatable(out, {
|
||||
__pairs = function(_)
|
||||
local order = keys(t)
|
||||
sort(order)
|
||||
return wrap(function()
|
||||
for i,k in ipairs(order) do
|
||||
yield(k, t[k])
|
||||
end
|
||||
end)
|
||||
end
|
||||
})
|
||||
return out
|
||||
end
|
||||
|
||||
return _ENV
|
||||
@@ -105,6 +105,7 @@ local libs = {
|
||||
"omp2",
|
||||
"openssl",
|
||||
"ospf",
|
||||
"outlib",
|
||||
"packet",
|
||||
"pcre",
|
||||
"pgsql",
|
||||
|
||||
@@ -3,6 +3,7 @@ local datetime = require "datetime"
|
||||
local formulas = require "formulas"
|
||||
local math = require "math"
|
||||
local nmap = require "nmap"
|
||||
local outlib = require "outlib"
|
||||
local stdnse = require "stdnse"
|
||||
local table = require "table"
|
||||
|
||||
@@ -126,26 +127,6 @@ local function sorted_keys(t)
|
||||
return ret
|
||||
end
|
||||
|
||||
--- Return a table that yields elements sorted by key when iterated over with pairs()
|
||||
-- Should probably put this in a formatting library later.
|
||||
-- Depends on keys() function defined above.
|
||||
--@param t The table whose data should be used
|
||||
--@return out A table that can be passed to pairs() to get sorted results
|
||||
function sorted_by_key(t)
|
||||
local out = {}
|
||||
setmetatable(out, {
|
||||
__pairs = function(_)
|
||||
local order = sorted_keys(t)
|
||||
return coroutine.wrap(function()
|
||||
for i,k in ipairs(order) do
|
||||
coroutine.yield(k, t[k])
|
||||
end
|
||||
end)
|
||||
end
|
||||
})
|
||||
return out
|
||||
end
|
||||
|
||||
postaction = function()
|
||||
local skews = nmap.registry.clock_skews
|
||||
|
||||
@@ -184,7 +165,7 @@ postaction = function()
|
||||
end
|
||||
|
||||
if next(out) then
|
||||
return sorted_by_key(out)
|
||||
return outlib.sorted_by_key(out)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
local coroutine = require "coroutine"
|
||||
local math = require "math"
|
||||
local nmap = require "nmap"
|
||||
local outlib = require "outlib"
|
||||
local shortport = require "shortport"
|
||||
local sslcert = require "sslcert"
|
||||
local stdnse = require "stdnse"
|
||||
@@ -1070,26 +1071,6 @@ portrule = function (host, port)
|
||||
return shortport.ssl(host, port) or sslcert.getPrepareTLSWithoutReconnect(port)
|
||||
end
|
||||
|
||||
--- Return a table that yields elements sorted by key when iterated over with pairs()
|
||||
-- Should probably put this in a formatting library later.
|
||||
-- Depends on keys() function defined above.
|
||||
--@param t The table whose data should be used
|
||||
--@return out A table that can be passed to pairs() to get sorted results
|
||||
function sorted_by_key(t)
|
||||
local out = {}
|
||||
setmetatable(out, {
|
||||
__pairs = function(_)
|
||||
local order = sorted_keys(t)
|
||||
return coroutine.wrap(function()
|
||||
for i,k in ipairs(order) do
|
||||
coroutine.yield(k, t[k])
|
||||
end
|
||||
end)
|
||||
end
|
||||
})
|
||||
return out
|
||||
end
|
||||
|
||||
action = function(host, port)
|
||||
|
||||
if not have_ssl then
|
||||
@@ -1129,5 +1110,5 @@ action = function(host, port)
|
||||
end
|
||||
results["least strength"] = least
|
||||
|
||||
return sorted_by_key(results)
|
||||
return outlib.sorted_by_key(results)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user